Description
The following rules must be validated at runtime. These rules depend on knowledge of the implementation and its capabilities and knowledge of runtime information, such as enabled features.
-
VUID-RuntimeSpirv-vulkanMemoryModel-06265
If thevulkanMemoryModelfeature is enabled and thevulkanMemoryModelDeviceScopefeature is not enabled,Devicememory scope must not be used -
VUID-RuntimeSpirv-vulkanMemoryModel-06266
If thevulkanMemoryModelfeature is not enabled,QueueFamilymemory scope must not be used -
VUID-RuntimeSpirv-shaderSubgroupClock-06267
If theshaderSubgroupClockfeature is not enabled, theSubgroupscope must not be used forOpReadClockKHR -
VUID-RuntimeSpirv-shaderDeviceClock-06268
If theshaderDeviceClockfeature is not enabled, theDevicescope must not be used forOpReadClockKHR -
VUID-RuntimeSpirv-OpTypeImage-06269
If theshaderStorageImageWriteWithoutFormatfeature is not enabled, any variable created with a “Type” ofOpTypeImagethat has a “Sampled” operand of 2 and an “Image Format” operand ofUnknownmust be decorated withNonWritable -
VUID-RuntimeSpirv-OpTypeImage-06270
If theshaderStorageImageReadWithoutFormatfeature is not enabled, any variable created with a “Type” ofOpTypeImagethat has a “Sampled” operand of 2 and an “Image Format” operand ofUnknownmust be decorated withNonReadable -
VUID-RuntimeSpirv-None-09558
Any variable created with a “Type” ofOpTypeImagethat has a “Dim” operand ofSubpassDatamust be decorated withInputAttachmentIndex -
VUID-RuntimeSpirv-OpImageWrite-07112
OpImageWriteto anyImagewhoseImageFormatis notUnknownmust have theTexeloperand contain at least as many components as the corresponding VkFormat as given in the SPIR-V Image Format compatibility table -
VUID-RuntimeSpirv-Location-06272
The sum ofLocationand the number of locations the variable it decorates consumes must be less than or equal to the value for the matchingExecutionModeldefined in https://registry.khronos.org/vulkansc/specs/1.0-extensions/html/vkspec.html#interfaces-iointerfaces-limits -
VUID-RuntimeSpirv-Location-06428
The maximum number of storage buffers, storage images, and outputLocationdecorated color attachments written to in theFragmentExecutionModelmust be less than or equal tomaxFragmentCombinedOutputResources -
VUID-RuntimeSpirv-UniformBufferArrayNonUniformIndexing-10134
If theUniformBufferArrayNonUniformIndexingcapability is not declared, and an instruction accesses memory through a uniform buffer, the uniform buffer through which that memory is accessed must be dynamically uniform within the invocation group or subgroup -
VUID-RuntimeSpirv-SampledImageArrayNonUniformIndexing-10135
If theSampledImageArrayNonUniformIndexingcapability is not declared, and an instruction accesses memory through a sampled image or sampler, the sampled image or sampler through which that memory is accessed must be dynamically uniform within the invocation group or subgroup -
VUID-RuntimeSpirv-StorageBufferArrayNonUniformIndexing-10136
If theStorageBufferArrayNonUniformIndexingcapability is not declared, and an instruction accesses memory through a storage buffer, the storage buffer through which that memory is accessed must be dynamically uniform within the invocation group or subgroup -
VUID-RuntimeSpirv-StorageImageArrayNonUniformIndexing-10137
If theStorageImageArrayNonUniformIndexingcapability is not declared, and an instruction accesses memory through a storage image, the storage image through which that memory is accessed must be dynamically uniform within the invocation group or subgroup -
VUID-RuntimeSpirv-InputAttachmentArrayNonUniformIndexing-10138
If theInputAttachmentArrayNonUniformIndexingcapability is not declared, and an instruction accesses memory through an input attachment, the input attachment through which that memory is accessed must be dynamically uniform within the invocation group or subgroup -
VUID-RuntimeSpirv-UniformTexelBufferArrayNonUniformIndexing-10139
If theUniformTexelBufferArrayNonUniformIndexingcapability is not declared, and an instruction accesses memory through a uniform texel buffer, the uniform texel buffer through which that memory is accessed must be dynamically uniform within the invocation group or subgroup -
VUID-RuntimeSpirv-StorageTexelBufferArrayNonUniformIndexing-10140
If theStorageTexelBufferArrayNonUniformIndexingcapability is not declared, and an instruction accesses memory through a storage texel buffer, the storage texel buffer through which that memory is accessed must be dynamically uniform within the invocation group or subgroup -
VUID-RuntimeSpirv-subgroupSize-10141
If the effective subgroup size is 1, theUniformBufferArrayNonUniformIndexingcapability is not declared, and an instruction accesses memory through a uniform buffer, the uniform buffer through which that memory is accessed must be dynamically uniform within the invocation group -
VUID-RuntimeSpirv-subgroupSize-10142
If the effective subgroup size is 1, theSampledImageArrayNonUniformIndexingcapability is not declared, and an instruction accesses memory through a sampled image or sampler, the sampled image or sampler through which that memory is accessed must be dynamically uniform within the invocation group -
VUID-RuntimeSpirv-subgroupSize-10143
If the effective subgroup size is 1, theStorageBufferArrayNonUniformIndexingcapability is not declared, and an instruction accesses memory through a storage buffer, the storage buffer through which that memory is accessed must be dynamically uniform within the invocation group -
VUID-RuntimeSpirv-subgroupSize-10144
If the effective subgroup size is 1, theStorageImageArrayNonUniformIndexingcapability is not declared, and an instruction accesses memory through a storage image, the storage image through which that memory is accessed must be dynamically uniform within the invocation group -
VUID-RuntimeSpirv-subgroupSize-10145
If the effective subgroup size is 1, theInputAttachmentArrayNonUniformIndexingcapability is not declared, and an instruction accesses memory through an input attachment, the input attachment through which that memory is accessed must be dynamically uniform within the invocation group -
VUID-RuntimeSpirv-subgroupSize-10146
If the effective subgroup size is 1, theUniformTexelBufferArrayNonUniformIndexingcapability is not declared, and an instruction accesses memory through a uniform texel buffer, the uniform texel buffer through which that memory is accessed must be dynamically uniform within the invocation group -
VUID-RuntimeSpirv-subgroupSize-10147
If the effective subgroup size is 1, theStorageTexelBufferArrayNonUniformIndexingcapability is not is not declared, and an instruction accesses memory through a storage texel buffer, the storage texel buffer through which that memory is accessed must be dynamically uniform within the invocation group -
VUID-RuntimeSpirv-None-10148
If an instruction accesses memory through any resource, the effective subgroup size is 1, and the resource through which that memory is accessed is not uniform within the invocation group, then the operand corresponding to that resource (e.g. the pointer or sampled image operand) must be decorated withNonUniform -
VUID-RuntimeSpirv-subgroupSize-10149
If an instruction accesses memory through any resource, the effective subgroup size is greater than 1, and the resource through which that memory is accessed is not uniform within the invocation group, and not uniform within the subgroup, then the operand corresponding to that resource (e.g. the pointer or sampled image operand) must be decorated withNonUniform -
VUID-RuntimeSpirv-None-06275
shaderSubgroupExtendedTypesmust be enabled for group operations to use 8-bit integer, 16-bit integer, 64-bit integer, 16-bit floating-point, and vectors of these types -
VUID-RuntimeSpirv-subgroupBroadcastDynamicId-06276
IfsubgroupBroadcastDynamicIdisVK_TRUE, and the shader module version is 1.5 or higher, the “Index” forOpGroupNonUniformQuadBroadcastmust be dynamically uniform within the derivative group. Otherwise, “Index” must be a constant -
VUID-RuntimeSpirv-subgroupBroadcastDynamicId-06277
IfsubgroupBroadcastDynamicIdisVK_TRUE, and the shader module version is 1.5 or higher, the “Id” forOpGroupNonUniformBroadcastmust be dynamically uniform within the subgroup. Otherwise, “Id” must be a constant -
VUID-RuntimeSpirv-None-06284
shaderBufferFloat32Atomics, orshaderBufferFloat32AtomicAdd, orshaderBufferFloat64Atomics, orshaderBufferFloat64AtomicAdd, must be enabled for floating-point atomic operations to be supported on a Pointer with aStorageClassofStorageBuffer -
VUID-RuntimeSpirv-None-06285
shaderSharedFloat32Atomics, orshaderSharedFloat32AtomicAdd, orshaderSharedFloat64Atomics, orshaderSharedFloat64AtomicAdd, must be enabled for floating-point atomic operations to be supported on a Pointer with aStorageClassofWorkgroup -
VUID-RuntimeSpirv-None-06286
shaderImageFloat32Atomics, orshaderImageFloat32AtomicAdd, must be enabled for 32-bit floating-point atomic operations to be supported on a Pointer with aStorageClassofImage -
VUID-RuntimeSpirv-None-06287
sparseImageFloat32Atomics, orsparseImageFloat32AtomicAdd, must be enabled for 32-bit floating-point atomics to be supported on sparse images -
VUID-RuntimeSpirv-None-06288
shaderImageInt64Atomicsmust be enabled for 64-bit integer atomic operations to be supported on a Pointer with aStorageClassofImage -
VUID-RuntimeSpirv-denormBehaviorIndependence-06289
IfdenormBehaviorIndependenceisVK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY, then the entry point must use the same denormalsExecutionModefor both 16-bit and 64-bit floating-point types -
VUID-RuntimeSpirv-denormBehaviorIndependence-06290
IfdenormBehaviorIndependenceisVK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE, then the entry point must use the same denormalsExecutionModefor all floating-point types -
VUID-RuntimeSpirv-roundingModeIndependence-06291
IfroundingModeIndependenceisVK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY, then the entry point must use the same roundingExecutionModefor both 16-bit and 64-bit floating-point types -
VUID-RuntimeSpirv-roundingModeIndependence-06292
IfroundingModeIndependenceisVK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE, then the entry point must use the same roundingExecutionModefor all floating-point types -
VUID-RuntimeSpirv-shaderSignedZeroInfNanPreserveFloat16-06293
IfshaderSignedZeroInfNanPreserveFloat16isVK_FALSE, thenSignedZeroInfNanPreservefor 16-bit floating-point type must not be used -
VUID-RuntimeSpirv-shaderSignedZeroInfNanPreserveFloat32-06294
IfshaderSignedZeroInfNanPreserveFloat32isVK_FALSE, thenSignedZeroInfNanPreservefor 32-bit floating-point type must not be used -
VUID-RuntimeSpirv-shaderSignedZeroInfNanPreserveFloat64-06295
IfshaderSignedZeroInfNanPreserveFloat64isVK_FALSE, thenSignedZeroInfNanPreservefor 64-bit floating-point type must not be used -
VUID-RuntimeSpirv-shaderDenormPreserveFloat16-06296
IfshaderDenormPreserveFloat16isVK_FALSE, thenDenormPreservefor 16-bit floating-point type must not be used -
VUID-RuntimeSpirv-shaderDenormPreserveFloat32-06297
IfshaderDenormPreserveFloat32isVK_FALSE, thenDenormPreservefor 32-bit floating-point type must not be used -
VUID-RuntimeSpirv-shaderDenormPreserveFloat64-06298
IfshaderDenormPreserveFloat64isVK_FALSE, thenDenormPreservefor 64-bit floating-point type must not be used -
VUID-RuntimeSpirv-shaderDenormFlushToZeroFloat16-06299
IfshaderDenormFlushToZeroFloat16isVK_FALSE, thenDenormFlushToZerofor 16-bit floating-point type must not be used -
VUID-RuntimeSpirv-shaderDenormFlushToZeroFloat32-06300
IfshaderDenormFlushToZeroFloat32isVK_FALSE, thenDenormFlushToZerofor 32-bit floating-point type must not be used -
VUID-RuntimeSpirv-shaderDenormFlushToZeroFloat64-06301
IfshaderDenormFlushToZeroFloat64isVK_FALSE, thenDenormFlushToZerofor 64-bit floating-point type must not be used -
VUID-RuntimeSpirv-shaderRoundingModeRTEFloat16-06302
IfshaderRoundingModeRTEFloat16isVK_FALSE, thenRoundingModeRTEfor 16-bit floating-point type must not be used -
VUID-RuntimeSpirv-shaderRoundingModeRTEFloat32-06303
IfshaderRoundingModeRTEFloat32isVK_FALSE, thenRoundingModeRTEfor 32-bit floating-point type must not be used -
VUID-RuntimeSpirv-shaderRoundingModeRTEFloat64-06304
IfshaderRoundingModeRTEFloat64isVK_FALSE, thenRoundingModeRTEfor 64-bit floating-point type must not be used -
VUID-RuntimeSpirv-shaderRoundingModeRTZFloat16-06305
IfshaderRoundingModeRTZFloat16isVK_FALSE, thenRoundingModeRTZfor 16-bit floating-point type must not be used -
VUID-RuntimeSpirv-shaderRoundingModeRTZFloat32-06306
IfshaderRoundingModeRTZFloat32isVK_FALSE, thenRoundingModeRTZfor 32-bit floating-point type must not be used -
VUID-RuntimeSpirv-shaderRoundingModeRTZFloat64-06307
IfshaderRoundingModeRTZFloat64isVK_FALSE, thenRoundingModeRTZfor 64-bit floating-point type must not be used -
VUID-RuntimeSpirv-PhysicalStorageBuffer64-06314
If thePhysicalStorageBuffer64addressing model is enabled any load or store through a physical pointer type must be aligned to a multiple of the size of the largest scalar type in the pointed-to type -
VUID-RuntimeSpirv-PhysicalStorageBuffer64-06315
If thePhysicalStorageBuffer64addressing model is enabled the pointer value of a memory access instruction must be at least as aligned as specified by theAlignedmemory access operand -
VUID-RuntimeSpirv-None-06335
shaderBufferFloat32Atomics, orshaderBufferFloat32AtomicAdd, orshaderSharedFloat32Atomics, orshaderSharedFloat32AtomicAdd, orshaderImageFloat32Atomics, orshaderImageFloat32AtomicAddmust be enabled for 32-bit floating-point atomic operations -
VUID-RuntimeSpirv-None-06336
shaderBufferFloat64Atomics, orshaderBufferFloat64AtomicAdd, orshaderSharedFloat64Atomics, orshaderSharedFloat64AtomicAddmust be enabled for 64-bit floating-point atomic operations -
VUID-RuntimeSpirv-NonWritable-06340
If thefragmentStoresAndAtomicsfeature is not enabled, then all storage image, storage texel buffer, and storage buffer variables in the fragment stage must be decorated with theNonWritabledecoration -
VUID-RuntimeSpirv-NonWritable-06341
If thevertexPipelineStoresAndAtomicsfeature is not enabled, then all storage image, storage texel buffer, and storage buffer variables in the vertex, tessellation, and geometry stages must be decorated with theNonWritabledecoration -
VUID-RuntimeSpirv-OpAtomic-05091
If the shaderAtomicInstructions feature is not enabled, the SPIR-V Atomic Instructions listed in 3.37.18 (OpAtomic*) must not be used https://registry.khronos.org/vulkansc/specs/1.0-extensions/html/vkspec.html#SCID-1 -
VUID-RuntimeSpirv-None-06342
IfsubgroupQuadOperationsInAllStagesisVK_FALSE, then quad subgroup operations must not be used except for in fragment and compute stages -
VUID-RuntimeSpirv-None-06343
Group operations with subgroup scope must not be used if the shader stage is not insubgroupSupportedStages -
VUID-RuntimeSpirv-Offset-06344
The first element of theOffsetoperand ofInterpolateAtOffsetmust be greater than or equal to:
fragwidth ×minInterpolationOffset
where fragwidth is the width of the current fragment in pixels -
VUID-RuntimeSpirv-Offset-06345
The first element of theOffsetoperand ofInterpolateAtOffsetmust be less than or equal to
fragwidth × (maxInterpolationOffset+ ULP ) - ULP
where fragwidth is the width of the current fragment in pixels and ULP = 1 / 2subPixelInterpolationOffsetBits^ -
VUID-RuntimeSpirv-Offset-06346
The second element of theOffsetoperand ofInterpolateAtOffsetmust be greater than or equal to
fragheight ×minInterpolationOffset
where fragheight is the height of the current fragment in pixels -
VUID-RuntimeSpirv-Offset-06347
The second element of theOffsetoperand ofInterpolateAtOffsetmust be less than or equal to
fragheight × (maxInterpolationOffset+ ULP ) - ULP
where fragheight is the height of the current fragment in pixels and ULP = 1 / 2subPixelInterpolationOffsetBits^ -
VUID-RuntimeSpirv-x-06429
In compute shaders using theGLComputeExecutionModelthexsize inLocalSizeorLocalSizeIdmust be less than or equal to VkPhysicalDeviceLimits::maxComputeWorkGroupSize[0] -
VUID-RuntimeSpirv-y-06430
In compute shaders using theGLComputeExecutionModeltheysize inLocalSizeorLocalSizeIdmust be less than or equal to VkPhysicalDeviceLimits::maxComputeWorkGroupSize[1] -
VUID-RuntimeSpirv-z-06431
In compute shaders using theGLComputeExecutionModelthezsize inLocalSizeorLocalSizeIdmust be less than or equal to VkPhysicalDeviceLimits::maxComputeWorkGroupSize[2] -
VUID-RuntimeSpirv-x-06432
In compute shaders using theGLComputeExecutionModelthe product ofxsize,ysize, andzsize inLocalSizeorLocalSizeIdmust be less than or equal to VkPhysicalDeviceLimits::maxComputeWorkGroupInvocations -
VUID-RuntimeSpirv-LocalSizeId-06433
TheExecutionModeLocalSizeIdmust not be used -
VUID-RuntimeSpirv-OpTypeVector-06816
AnyOpTypeVectoroutput interface variables must not have a higherComponentCountthan a matchingOpTypeVectorinput interface variable -
VUID-RuntimeSpirv-OpEntryPoint-08743
Any user-defined variables shared between theOpEntryPointof two shader stages, and declared withInputas itsStorageClassfor the subsequent shader stage, must have allLocationslots andComponentwords declared in the preceding shader stage’sOpEntryPointwithOutputas theStorageClass -
VUID-RuntimeSpirv-OpEntryPoint-07754
Any user-defined variables between theOpEntryPointof two shader stages must have the same type and width for eachComponent -
VUID-RuntimeSpirv-OpVariable-08746
AnyOpVariable,Block-decoratedOpTypeStruct, orBlock-decoratedOpTypeStructmembers shared between theOpEntryPointof two shader stages must have matching decorations as defined in interface matching -
VUID-RuntimeSpirv-Workgroup-06530
The sum of size in bytes for variables and padding in theWorkgroupStorageClassin theGLComputeExecutionModelmust be less than or equal tomaxComputeSharedMemorySize -
VUID-RuntimeSpirv-OpVariable-06373
AnyOpVariablewithWorkgroupas itsStorageClassmust not have anInitializeroperand -
VUID-RuntimeSpirv-Offset-10213
Image operandOffsetmust only be used withOpImage*Gatherinstructions -
VUID-RuntimeSpirv-OpImage-06376
If anOpImage*Gatheroperation has an image operand ofOffset,ConstOffset, orConstOffsetsthe offset value must be greater than or equal tominTexelGatherOffset -
VUID-RuntimeSpirv-OpImage-06377
If anOpImage*Gatheroperation has an image operand ofOffset,ConstOffset, orConstOffsetsthe offset value must be less than or equal tomaxTexelGatherOffset -
VUID-RuntimeSpirv-OpImageSample-06435
If anOpImageSample*orOpImageFetch*operation has an image operand ofConstOffsetthen the offset value must be greater than or equal tominTexelOffset -
VUID-RuntimeSpirv-OpImageSample-06436
If anOpImageSample*orOpImageFetch*operation has an image operand ofConstOffsetthen the offset value must be less than or equal tomaxTexelOffset -
VUID-RuntimeSpirv-samples-08725
If anOpTypeImagehas anMSoperand 0, its bound image must have been created with VkImageCreateInfo::samplesasVK_SAMPLE_COUNT_1_BIT -
VUID-RuntimeSpirv-samples-08726
If anOpTypeImagehas anMSoperand 1, its bound image must not have been created with VkImageCreateInfo::samplesasVK_SAMPLE_COUNT_1_BIT -
VUID-RuntimeSpirv-OpEntryPoint-08727
EachOpEntryPointmust not have more than one variable decorated withInputAttachmentIndexper image aspect of the attachment image bound to it, either explicitly or implicitly as described by input attachment interface -
VUID-RuntimeSpirv-MeshEXT-09218
In mesh shaders using theMeshEXTorMeshNVExecutionModeland theOutputPointsExecutionMode, if the number of output points is greater than 0, aPointSizedecorated variable must be written to for each output point -
VUID-RuntimeSpirv-protectedNoFault-09645
IfprotectedNoFaultis not supported, theStorageClassof thePhysicalStorageBuffermust not be used if the buffer being accessed is protected -
VUID-RuntimeSpirv-None-10715
If a VkSampler object that enables sampler Y′CBCR conversion is accessed in a shader, both the sampler and image accessed must be determined by constant integral expressions -
VUID-RuntimeSpirv-None-10716
If a VkSampler object that enables sampler Y′CBCR conversion is statically used, it must only be used withOpImageSample*orOpImageSparseSample*instructions -
VUID-RuntimeSpirv-OpImage-10717
AnOpImageinstruction must not be used on a VkSampler object that enables sampler Y′CBCR conversion -
VUID-RuntimeSpirv-ConstOffset-10718
If a VkSampler object that enables sampler Y′CBCR conversion is statically used, it must not use theConstOffsetorOffsetoperands -
VUID-RuntimeSpirv-None-10824
TheBaseoperand of anyOpBitCount,OpBitReverse,OpBitFieldInsert,OpBitFieldSExtract, orOpBitFieldUExtractinstruction must be a 32-bit integer scalar or a vector of 32-bit integers
Document Notes
For more information, see the Vulkan Specification
This page is extracted from the Vulkan Specification. Fixes and changes should be made to the Specification, not directly.