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
IfvulkanMemoryModel
is enabled andvulkanMemoryModelDeviceScope
is not enabled,Device
memory scope must not be used -
VUID-RuntimeSpirv-vulkanMemoryModel-06266
IfvulkanMemoryModel
is not enabled,QueueFamily
memory scope must not be used -
VUID-RuntimeSpirv-shaderSubgroupClock-06267
IfshaderSubgroupClock
is not enabled, theSubgroup
scope must not be used forOpReadClockKHR
-
VUID-RuntimeSpirv-shaderDeviceClock-06268
IfshaderDeviceClock
is not enabled, theDevice
scope must not be used forOpReadClockKHR
-
VUID-RuntimeSpirv-OpTypeImage-06269
IfshaderStorageImageWriteWithoutFormat
is not enabled, any variable created with a “Type” ofOpTypeImage
that has a “Sampled” operand of 2 and an “Image Format” operand ofUnknown
must be decorated withNonWritable
-
VUID-RuntimeSpirv-OpTypeImage-06270
IfshaderStorageImageReadWithoutFormat
is not enabled, any variable created with a “Type” ofOpTypeImage
that has a “Sampled” operand of 2 and an “Image Format” operand ofUnknown
must be decorated withNonReadable
-
VUID-RuntimeSpirv-OpImageWrite-07112
OpImageWrite
to anyImage
whoseImage
Format
is notUnknown
must have theTexel
operand 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 ofLocation
and the number of locations the variable it decorates consumes must be less than or equal to the value for the matchingExecution
Model
defined 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 outputLocation
decorated color attachments written to in theFragment
Execution
Model
must be less than or equal tomaxFragmentCombinedOutputResources
-
VUID-RuntimeSpirv-NonUniform-06274
If an instruction loads from or stores to a resource (including atomics and image instructions) and the resource descriptor being accessed is not dynamically uniform, then the operand corresponding to that resource (e.g. the pointer or sampled image operand) must be decorated withNonUniform
-
VUID-RuntimeSpirv-None-06275
shaderSubgroupExtendedTypes
must 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
IfsubgroupBroadcastDynamicId
isVK_TRUE
, and the shader module version is 1.5 or higher, the “Index” forOpGroupNonUniformQuadBroadcast
must be dynamically uniform within the derivative group. Otherwise, “Index” must be a constant -
VUID-RuntimeSpirv-subgroupBroadcastDynamicId-06277
IfsubgroupBroadcastDynamicId
isVK_TRUE
, and the shader module version is 1.5 or higher, the “Id” forOpGroupNonUniformBroadcast
must be dynamically uniform within the subgroup. Otherwise, “Id” must be a constant -
VUID-RuntimeSpirv-None-06280
shaderBufferFloat32Atomics
, orshaderBufferFloat32AtomicAdd
, orshaderBufferFloat64Atomics
, orshaderBufferFloat64AtomicAdd
must be enabled for floating-point atomic operations to be supported on a Pointer with aStorage
Class
ofStorageBuffer
-
VUID-RuntimeSpirv-None-06281
shaderSharedFloat32Atomics
, orshaderSharedFloat32AtomicAdd
, orshaderSharedFloat64Atomics
, orshaderSharedFloat64AtomicAdd
must be enabled for floating-point atomic operations to be supported on a Pointer with aStorage
Class
ofWorkgroup
-
VUID-RuntimeSpirv-None-06282
shaderImageFloat32Atomics
orshaderImageFloat32AtomicAdd
must be enabled for 32-bit floating-point atomic operations to be supported on a Pointer with aStorage
Class
ofImage
-
VUID-RuntimeSpirv-None-06283
sparseImageFloat32Atomics
orsparseImageFloat32AtomicAdd
must be enabled for 32-bit floating-point atomics to be supported on sparse images -
VUID-RuntimeSpirv-None-06288
shaderImageInt64Atomics
must be enabled for 64-bit integer atomic operations to be supported on a Pointer with aStorage
Class
ofImage
-
VUID-RuntimeSpirv-denormBehaviorIndependence-06289
IfdenormBehaviorIndependence
isVK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY
, then the entry point must use the same denormalsExecution
Mode
for both 16-bit and 64-bit floating-point types -
VUID-RuntimeSpirv-denormBehaviorIndependence-06290
IfdenormBehaviorIndependence
isVK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE
, then the entry point must use the same denormalsExecution
Mode
for all floating-point types -
VUID-RuntimeSpirv-roundingModeIndependence-06291
IfroundingModeIndependence
isVK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY
, then the entry point must use the same roundingExecution
Mode
for both 16-bit and 64-bit floating-point types -
VUID-RuntimeSpirv-roundingModeIndependence-06292
IfroundingModeIndependence
isVK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE
, then the entry point must use the same roundingExecution
Mode
for all floating-point types -
VUID-RuntimeSpirv-shaderSignedZeroInfNanPreserveFloat16-06293
IfshaderSignedZeroInfNanPreserveFloat16
isVK_FALSE
, thenSignedZeroInfNanPreserve
for 16-bit floating-point type must not be used -
VUID-RuntimeSpirv-shaderSignedZeroInfNanPreserveFloat32-06294
IfshaderSignedZeroInfNanPreserveFloat32
isVK_FALSE
, thenSignedZeroInfNanPreserve
for 32-bit floating-point type must not be used -
VUID-RuntimeSpirv-shaderSignedZeroInfNanPreserveFloat64-06295
IfshaderSignedZeroInfNanPreserveFloat64
isVK_FALSE
, thenSignedZeroInfNanPreserve
for 64-bit floating-point type must not be used -
VUID-RuntimeSpirv-shaderDenormPreserveFloat16-06296
IfshaderDenormPreserveFloat16
isVK_FALSE
, thenDenormPreserve
for 16-bit floating-point type must not be used -
VUID-RuntimeSpirv-shaderDenormPreserveFloat32-06297
IfshaderDenormPreserveFloat32
isVK_FALSE
, thenDenormPreserve
for 32-bit floating-point type must not be used -
VUID-RuntimeSpirv-shaderDenormPreserveFloat64-06298
IfshaderDenormPreserveFloat64
isVK_FALSE
, thenDenormPreserve
for 64-bit floating-point type must not be used -
VUID-RuntimeSpirv-shaderDenormFlushToZeroFloat16-06299
IfshaderDenormFlushToZeroFloat16
isVK_FALSE
, thenDenormFlushToZero
for 16-bit floating-point type must not be used -
VUID-RuntimeSpirv-shaderDenormFlushToZeroFloat32-06300
IfshaderDenormFlushToZeroFloat32
isVK_FALSE
, thenDenormFlushToZero
for 32-bit floating-point type must not be used -
VUID-RuntimeSpirv-shaderDenormFlushToZeroFloat64-06301
IfshaderDenormFlushToZeroFloat64
isVK_FALSE
, thenDenormFlushToZero
for 64-bit floating-point type must not be used -
VUID-RuntimeSpirv-shaderRoundingModeRTEFloat16-06302
IfshaderRoundingModeRTEFloat16
isVK_FALSE
, thenRoundingModeRTE
for 16-bit floating-point type must not be used -
VUID-RuntimeSpirv-shaderRoundingModeRTEFloat32-06303
IfshaderRoundingModeRTEFloat32
isVK_FALSE
, thenRoundingModeRTE
for 32-bit floating-point type must not be used -
VUID-RuntimeSpirv-shaderRoundingModeRTEFloat64-06304
IfshaderRoundingModeRTEFloat64
isVK_FALSE
, thenRoundingModeRTE
for 64-bit floating-point type must not be used -
VUID-RuntimeSpirv-shaderRoundingModeRTZFloat16-06305
IfshaderRoundingModeRTZFloat16
isVK_FALSE
, thenRoundingModeRTZ
for 16-bit floating-point type must not be used -
VUID-RuntimeSpirv-shaderRoundingModeRTZFloat32-06306
IfshaderRoundingModeRTZFloat32
isVK_FALSE
, thenRoundingModeRTZ
for 32-bit floating-point type must not be used -
VUID-RuntimeSpirv-shaderRoundingModeRTZFloat64-06307
IfshaderRoundingModeRTZFloat64
isVK_FALSE
, thenRoundingModeRTZ
for 64-bit floating-point type must not be used -
VUID-RuntimeSpirv-PhysicalStorageBuffer64-06314
If thePhysicalStorageBuffer64
addressing 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 thePhysicalStorageBuffer64
addressing model is enabled the pointer value of a memory access instruction must be at least as aligned as specified by theAligned
memory access operand -
VUID-RuntimeSpirv-DescriptorSet-06323
DescriptorSet
andBinding
decorations must obey the constraints onStorage
Class
, type, and descriptor type described in DescriptorSet and Binding Assignment -
VUID-RuntimeSpirv-None-06335
shaderBufferFloat32Atomics
, orshaderBufferFloat32AtomicAdd
, orshaderSharedFloat32Atomics
, orshaderSharedFloat32AtomicAdd
, orshaderImageFloat32Atomics
, orshaderImageFloat32AtomicAdd
must be enabled for 32-bit floating point atomic operations -
VUID-RuntimeSpirv-None-06336
shaderBufferFloat64Atomics
, orshaderBufferFloat64AtomicAdd
, orshaderSharedFloat64Atomics
, orshaderSharedFloat64AtomicAdd
must be enabled for 64-bit floating point atomic operations -
VUID-RuntimeSpirv-NonWritable-06340
IffragmentStoresAndAtomics
is not enabled, then all storage image, storage texel buffer, and storage buffer variables in the fragment stage must be decorated with theNonWritable
decoration -
VUID-RuntimeSpirv-NonWritable-06341
IfvertexPipelineStoresAndAtomics
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 theNonWritable
decoration -
VUID-RuntimeSpirv-OpAtomic-05091
If shaderAtomicInstructions 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
IfsubgroupQuadOperationsInAllStages
isVK_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 theOffset
operand ofInterpolateAtOffset
must 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 theOffset
operand ofInterpolateAtOffset
must 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 theOffset
operand ofInterpolateAtOffset
must 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 theOffset
operand ofInterpolateAtOffset
must 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 theGLCompute
Execution
Model
thex
size inLocalSize
orLocalSizeId
must be less than or equal to VkPhysicalDeviceLimits::maxComputeWorkGroupSize
[0] -
VUID-RuntimeSpirv-y-06430
In compute shaders using theGLCompute
Execution
Model
they
size inLocalSize
orLocalSizeId
must be less than or equal to VkPhysicalDeviceLimits::maxComputeWorkGroupSize
[1] -
VUID-RuntimeSpirv-z-06431
In compute shaders using theGLCompute
Execution
Model
thez
size inLocalSize
orLocalSizeId
must be less than or equal to VkPhysicalDeviceLimits::maxComputeWorkGroupSize
[2] -
VUID-RuntimeSpirv-x-06432
In compute shaders using theGLCompute
Execution
Model
the product ofx
size,y
size, andz
size inLocalSize
orLocalSizeId
must be less than or equal to VkPhysicalDeviceLimits::maxComputeWorkGroupInvocations
-
VUID-RuntimeSpirv-LocalSizeId-06433
TheExecution
Mode
LocalSizeId
must not be used -
VUID-RuntimeSpirv-OpTypeVector-06816
AnyOpTypeVector
output interface variables must not have a higherComponent
Count
than a matchingOpTypeVector
input interface variable -
VUID-RuntimeSpirv-OpEntryPoint-08743
Any user-defined variables shared between theOpEntryPoint
of two shader stages, and declared withInput
as itsStorage
Class
for the subsequent shader stage, must have allLocation
slots andComponent
words declared in the preceding shader stage’sOpEntryPoint
withOutput
as theStorage
Class
-
VUID-RuntimeSpirv-OpEntryPoint-07754
Any user-defined variables between theOpEntryPoint
of two shader stages must have the same type and width for eachComponent
-
VUID-RuntimeSpirv-OpVariable-08746
AnyOpVariable
,Block
-decoratedOpTypeStruct
, orBlock
-decoratedOpTypeStruct
members shared between theOpEntryPoint
of 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 theWorkgroup
Storage
Class
in theGLCompute
Execution
Model
must be less than or equal tomaxComputeSharedMemorySize
-
VUID-RuntimeSpirv-OpVariable-06373
AnyOpVariable
withWorkgroup
as itsStorage
Class
must not have anInitializer
operand -
VUID-RuntimeSpirv-OpImage-06376
If anOpImage*Gather
operation has an image operand ofOffset
,ConstOffset
, orConstOffsets
the offset value must be greater than or equal tominTexelGatherOffset
-
VUID-RuntimeSpirv-OpImage-06377
If anOpImage*Gather
operation has an image operand ofOffset
,ConstOffset
, orConstOffsets
the offset value must be less than or equal tomaxTexelGatherOffset
-
VUID-RuntimeSpirv-OpImageSample-06435
If anOpImageSample*
orOpImageFetch*
operation has an image operand ofConstOffset
then the offset value must be greater than or equal tominTexelOffset
-
VUID-RuntimeSpirv-OpImageSample-06436
If anOpImageSample*
orOpImageFetch*
operation has an image operand ofConstOffset
then the offset value must be less than or equal tomaxTexelOffset
-
VUID-RuntimeSpirv-samples-08725
If anOpTypeImage
has anMS
operand 0, its bound image must have been created with VkImageCreateInfo::samples
asVK_SAMPLE_COUNT_1_BIT
-
VUID-RuntimeSpirv-samples-08726
If anOpTypeImage
has anMS
operand 1, its bound image must not have been created with VkImageCreateInfo::samples
asVK_SAMPLE_COUNT_1_BIT
-
VUID-RuntimeSpirv-OpEntryPoint-08727
EachOpEntryPoint
must not have more than one variable decorated withInputAttachmentIndex
per 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 theMeshEXT
orMeshNV
Execution
Model
and theOutputPoints
Execution
Mode
, if the number of output points is greater than 0, aPointSize
decorated variable must be written to for each output point
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.