SPIR-V

StandaloneSpirv

Standalone SPIR-V Validation

The following rules can be validated with only the SPIR-V module itself. They do not depend on knowledge of the implementation and its capabilities or knowledge of runtime information, such as enabled features.

Valid Usage

VUID-StandaloneSpirv-None-04633

Every entry point must have no return value and accept no arguments

VUID-StandaloneSpirv-None-04634

The static function-call graph for an entry point must not contain cycles; that is, static recursion is not allowed

VUID-StandaloneSpirv-None-04635

The Logical or PhysicalStorageBuffer64 addressing model must be selected

VUID-StandaloneSpirv-None-04636

Scope for execution must be limited to Workgroup or Subgroup

VUID-StandaloneSpirv-None-04637

If the Scope for execution is Workgroup, then it must only be used in the task, mesh, tessellation control, or compute Execution Model

VUID-StandaloneSpirv-None-04638

Scope for memory must be limited to Device, QueueFamily, Workgroup, ShaderCallKHR, Subgroup, or Invocation

VUID-StandaloneSpirv-ExecutionModel-07320

If the Execution Model is TessellationControl, and the MemoryModel is GLSL450, the Scope for memory must not be Workgroup

VUID-StandaloneSpirv-None-07321

If the Scope for memory is Workgroup, then it must only be used in the task, mesh, tessellation control, or compute Execution Model

VUID-StandaloneSpirv-None-04640

If the Scope for memory is ShaderCallKHR, then it must only be used in ray generation, intersection, closest hit, any-hit, miss, and callable Execution Model

VUID-StandaloneSpirv-None-04641

If the Scope for memory is Invocation, then memory semantics must be None

VUID-StandaloneSpirv-None-04642

Scope for group operations must be limited to Subgroup

VUID-StandaloneSpirv-SubgroupVoteKHR-07951

If none of the SubgroupVoteKHR, GroupNonUniform, or SubgroupBallotKHR capabilities are declared, Scope for memory must not be Subgroup

VUID-StandaloneSpirv-None-04643

Storage Class must be limited to UniformConstant, Input, Uniform, Output, Workgroup, Private, Function, PushConstant, Image, StorageBuffer, RayPayloadKHR, IncomingRayPayloadKHR, HitAttributeKHR, CallableDataKHR, IncomingCallableDataKHR, ShaderRecordBufferKHR, PhysicalStorageBuffer, or TileImageEXT

VUID-StandaloneSpirv-None-04644

If the Storage Class is Output, then it must not be used in the GlCompute, RayGenerationKHR, IntersectionKHR, AnyHitKHR, ClosestHitKHR, MissKHR, or CallableKHR

Execution Model

VUID-StandaloneSpirv-None-04645

If the Storage Class is Workgroup, then it must only be used in the task, mesh, or compute Execution Model

VUID-StandaloneSpirv-None-08720

If the Storage Class is TileImageEXT, then it must only be used in the fragment execution model

VUID-StandaloneSpirv-OpAtomicStore-04730

OpAtomicStore must not use Acquire, AcquireRelease, or SequentiallyConsistent memory semantics

VUID-StandaloneSpirv-OpAtomicLoad-04731

OpAtomicLoad must not use Release, AcquireRelease, or SequentiallyConsistent memory semantics

VUID-StandaloneSpirv-OpMemoryBarrier-04732

OpMemoryBarrier must use one of Acquire, Release, AcquireRelease, or SequentiallyConsistent memory semantics

VUID-StandaloneSpirv-OpMemoryBarrier-04733

OpMemoryBarrier must include at least one Storage Class

VUID-StandaloneSpirv-OpControlBarrier-04650

If the semantics for OpControlBarrier includes one of Acquire, Release, AcquireRelease, or SequentiallyConsistent memory semantics, then it must include at least one Storage Class

VUID-StandaloneSpirv-OpVariable-04651

Any OpVariable with an Initializer operand must have Output, Private, Function, or Workgroup as its Storage Class operand

VUID-StandaloneSpirv-OpVariable-04734

Any OpVariable with an Initializer operand and Workgroup as its Storage Class operand must use OpConstantNull as the initializer

VUID-StandaloneSpirv-OpReadClockKHR-04652

Scope for OpReadClockKHR must be limited to Subgroup or Device

VUID-StandaloneSpirv-OriginLowerLeft-04653

The OriginLowerLeft Execution Mode must not be used; fragment entry points must declare OriginUpperLeft

VUID-StandaloneSpirv-PixelCenterInteger-04654

The PixelCenterInteger Execution Mode must not be used (pixels are always centered at half-integer coordinates)

VUID-StandaloneSpirv-UniformConstant-04655

Any variable in the UniformConstant Storage Class must be typed as either OpTypeImage, OpTypeSampler, OpTypeSampledImage, OpTypeAccelerationStructureKHR, or an array of one of these types

VUID-StandaloneSpirv-Uniform-06807

Any variable in the Uniform or StorageBuffer Storage Classmust be typed as OpTypeStruct or an array of this type

VUID-StandaloneSpirv-PushConstant-06808

Any variable in the PushConstant Storage Class must be typed as OpTypeStruct

VUID-StandaloneSpirv-OpTypeImage-04656

OpTypeImage must declare a scalar 32-bit float, 64-bit integer, or 32-bit integer type for the Sampled Type (RelaxedPrecision can be applied to a sampling instruction and to the variable holding the result of a sampling instruction)

VUID-StandaloneSpirv-OpTypeImage-04657

OpTypeImage must have a Sampled operand of 1 (sampled image) or 2 (storage image)

VUID-StandaloneSpirv-OpTypeSampledImage-06671

OpTypeSampledImage must have a OpTypeImage with a Sampled operand of 1 (sampled image)

VUID-StandaloneSpirv-Image-04965

The SPIR-V Type of the Image Format operand of an OpTypeImage must match the Sampled Type, as defined in Image Format and Type Matching

VUID-StandaloneSpirv-OpImageTexelPointer-04658

If an OpImageTexelPointer is used in an atomic operation, the image type of the image parameter to OpImageTexelPointer must have an image format of R64i, R64ui, R32f, R32i, or R32ui

VUID-StandaloneSpirv-OpImageQuerySizeLod-04659

OpImageQuerySizeLod, OpImageQueryLod, and OpImageQueryLevels must only consume an Image operand whose type has its Sampled operand set to 1

VUID-StandaloneSpirv-OpTypeImage-09638

An OpTypeImage must not have a Dim operand of Rect

VUID-StandaloneSpirv-OpTypeImage-06214

An OpTypeImage with a Dim operand of SubpassData must have an Arrayed operand of 0 (non-arrayed) and a Sampled operand of 2 (storage image)

VUID-StandaloneSpirv-SubpassData-04660

The (u,v) coordinates used for a SubpassData must be the <id> of a constant vector (0,0)

VUID-StandaloneSpirv-OpTypeImage-06924

Objects of types OpTypeImage, OpTypeSampler, OpTypeSampledImage, OpTypeAccelerationStructureKHR, and arrays of these types must not be stored to or modified

VUID-StandaloneSpirv-Uniform-06925

Any variable in the Uniform Storage Class decorated as Blockmust not be stored to or modified

VUID-StandaloneSpirv-Offset-04663

Image operand Offset must only be used with OpImage*Gather instructions

VUID-StandaloneSpirv-Offset-04865

Any image instruction which uses an Offset, ConstOffset, or ConstOffsets image operand, must only consume a Sampled Image operand whose type has its Sampled operand set to 1

VUID-StandaloneSpirv-OpImageGather-04664

The Component operand of OpImageGather, and OpImageSparseGather must be the of a constant instruction

VUID-StandaloneSpirv-OpImage-04777

OpImage*Dref* instructions must not consume an image whose Dim is 3D

VUID-StandaloneSpirv-None-04667

Structure types must not contain opaque types

VUID-StandaloneSpirv-BuiltIn-04668

Any BuiltIn decoration not listed in Built-In Variables must not be used

VUID-StandaloneSpirv-OpEntryPoint-09658

For a given OpEntryPoint, any BuiltIn decoration must not be used more than once by the Input interface

VUID-StandaloneSpirv-OpEntryPoint-09659

For a given OpEntryPoint, any BuiltIn decoration must not be used more than once by the Output interface

VUID-StandaloneSpirv-Location-06672

The Location or Component decorations must only be used with the Input, Output, RayPayloadKHR, IncomingRayPayloadKHR, HitAttributeKHR, HitObjectAttributeNV, CallableDataKHR, IncomingCallableDataKHR, or ShaderRecordBufferKHR storage classes

VUID-StandaloneSpirv-Location-04915

The Location or Component decorations must not be used with BuiltIn

VUID-StandaloneSpirv-Location-04916

The Location decorations must be used on user-defined variables

VUID-StandaloneSpirv-Location-04917

If a user-defined variable is not a pointer to a Block decorated OpTypeStruct, then the OpVariable must have a Location decoration

VUID-StandaloneSpirv-Location-04918

If a user-defined variable has a Location decoration, and the variable is a pointer to a OpTypeStruct, then the members of that structure must not have Location decorations

VUID-StandaloneSpirv-Location-04919

If a user-defined variable does not have a Location decoration, and the variable is a pointer to a Block decorated OpTypeStruct, then each member of the struct must have a Location decoration

VUID-StandaloneSpirv-Component-04920

The Component decoration value must not be greater than 3

VUID-StandaloneSpirv-Component-04921

If the Component decoration is used on an OpVariable that has a OpTypeVector type with a Component Type with a Width that is less than or equal to 32, the sum of its Component Count and the Component decoration value must be less than or equal to 4

VUID-StandaloneSpirv-Component-04922

If the Component decoration is used on an OpVariable that has a OpTypeVector type with a Component Type with a Width that is equal to 64, the sum of two times its Component

Count and the Component decoration value must be less than or equal to 4

VUID-StandaloneSpirv-Component-04923

The Component decorations value must not be 1 or 3 for scalar or two-component 64-bit data types

VUID-StandaloneSpirv-Component-04924

The Component decorations must not be used with any type that is not a scalar or vector, or an array of such a type

VUID-StandaloneSpirv-Component-07703

The Component decorations must not be used for a 64-bit vector type with more than two components

VUID-StandaloneSpirv-Input-09557

The pointers of any Input or Output

Interface user-defined variables must not contain any PhysicalStorageBuffer Storage Class pointers

VUID-StandaloneSpirv-GLSLShared-04669

The GLSLShared and GLSLPacked decorations must not be used

VUID-StandaloneSpirv-Flat-04670

The Flat, NoPerspective, Sample, and Centroid decorations must only be used on variables with the Output or Input Storage Class

VUID-StandaloneSpirv-Flat-06201

The Flat, NoPerspective, Sample, and Centroid decorations must not be used on variables with the Output storage class in a fragment shader

VUID-StandaloneSpirv-Flat-06202

The Flat, NoPerspective, Sample, and Centroid decorations must not be used on variables with the Input storage class in a vertex shader

VUID-StandaloneSpirv-PerVertexKHR-06777

The PerVertexKHR decoration must only be used on variables with the Input Storage Class in a fragment shader

VUID-StandaloneSpirv-Flat-04744

Any variable with integer or double-precision floating-point type and with Input Storage Class in a fragment shader, must be decorated Flat

VUID-StandaloneSpirv-ViewportRelativeNV-04672

The ViewportRelativeNV decoration must only be used on a variable decorated with Layer in the vertex, tessellation evaluation, or geometry shader stages

VUID-StandaloneSpirv-ViewportRelativeNV-04673

The ViewportRelativeNV decoration must not be used unless a variable decorated with one of ViewportIndex or ViewportMaskNV is also statically used by the same OpEntryPoint

VUID-StandaloneSpirv-ViewportMaskNV-04674

The ViewportMaskNV and ViewportIndex decorations must not both be statically used by one or more OpEntryPoint’s that form the pre-rasterization shader stages of a graphics pipeline

VUID-StandaloneSpirv-FPRoundingMode-04675

Rounding modes other than round-to-nearest-even and round-towards-zero must not be used for the FPRoundingMode decoration

VUID-StandaloneSpirv-Invariant-04677

Variables decorated with Invariant and variables with structure types that have any members decorated with Invariant must be in the Output or Input Storage Class, Invariant used on an Input Storage Class variable or structure member has no effect

VUID-StandaloneSpirv-VulkanMemoryModel-04678

If the VulkanMemoryModel capability is not declared, the Volatile decoration must be used on any variable declaration that includes one of the SMIDNV, WarpIDNV, SubgroupSize, SubgroupLocalInvocationId, SubgroupEqMask, SubgroupGeMask, SubgroupGtMask, SubgroupLeMask, or SubgroupLtMask BuiltIn decorations when used in the ray generation, closest hit, miss, intersection, or callable shaders, or with the RayTmaxKHR Builtin decoration when used in an intersection shader

VUID-StandaloneSpirv-VulkanMemoryModel-04679

If the VulkanMemoryModel capability is declared, the OpLoad instruction must use the Volatile memory semantics when it accesses into any variable that includes one of the SMIDNV, WarpIDNV, SubgroupSize, SubgroupLocalInvocationId, SubgroupEqMask, SubgroupGeMask, SubgroupGtMask, SubgroupLeMask, or SubgroupLtMask BuiltIn decorations when used in the ray generation, closest hit, miss, intersection, or callable shaders, or with the RayTmaxKHR Builtin decoration when used in an intersection shader

VUID-StandaloneSpirv-OpTypeRuntimeArray-04680

OpTypeRuntimeArray must only be used for:- the last member of a Block-decorated OpTypeStruct in StorageBuffer or PhysicalStorageBuffer storage Storage Class

  • BufferBlock-decorated OpTypeStruct in the Uniform storage Storage Class
  • the outermost dimension of an arrayed variable in the StorageBuffer, Uniform, or UniformConstant storage Storage Class
  • variables in the NodePayloadAMDX storage Storage Class when the CoalescingAMDX Execution Mode is specified ::

VUID-StandaloneSpirv-Function-04681

A type T that is an array sized with a specialization constant must neither be, nor be contained in, the type T2 of a variable V, unless either: a) T is equal to T2, b) V is declared in the Function, or Private Storage Class, c) V is a non-Block variable in the Workgroup Storage Class, or d) V is an interface variable with an additional level of arrayness, as described in interface matching, and T is the member type of the array type T2

VUID-StandaloneSpirv-OpControlBarrier-04682

If OpControlBarrier is used in ray generation, intersection, any-hit, closest hit, miss, fragment, vertex, tessellation evaluation, or geometry shaders, the execution Scope must be Subgroup

VUID-StandaloneSpirv-LocalSize-06426

For each compute shader entry point, either a LocalSize or LocalSizeId Execution Mode, or an object decorated with the WorkgroupSize decoration must be specified

VUID-StandaloneSpirv-DerivativeGroupQuadsNV-04684

For compute shaders using the DerivativeGroupQuadsNV execution mode, the first two dimensions of the local workgroup size must be a multiple of two

VUID-StandaloneSpirv-DerivativeGroupLinearNV-04778

For compute shaders using the DerivativeGroupLinearNV execution mode, the product of the dimensions of the local workgroup size must be a multiple of four

VUID-StandaloneSpirv-DerivativeGroupQuadsKHR-10151

For compute, mesh, or task shaders using the DerivativeGroupQuadsKHR execution mode, the first two dimensions of the local workgroup size must be a multiple of two

VUID-StandaloneSpirv-DerivativeGroupLinearKHR-10152

For compute, mesh, or task shaders using the DerivativeGroupLinearKHR execution mode, the product of the dimensions of the local workgroup size must be a multiple of four

VUID-StandaloneSpirv-OpGroupNonUniformBallotBitCount-04685

If OpGroupNonUniformBallotBitCount is used, the group operation must be limited to Reduce, InclusiveScan, or ExclusiveScan

VUID-StandaloneSpirv-None-04686

The Pointer operand of all atomic instructions must have a Storage Class limited to Uniform, Workgroup, Image, StorageBuffer, PhysicalStorageBuffer, or TaskPayloadWorkgroupEXT

VUID-StandaloneSpirv-Offset-04687

Output variables or block members decorated with Offset that have a 64-bit type, or a composite type containing a 64-bit type, must specify an Offset value aligned to a 8 byte boundary

VUID-StandaloneSpirv-Offset-04689

The size of any output block containing any member decorated with Offset that is a 64-bit type must be a multiple of 8

VUID-StandaloneSpirv-Offset-04690

The first member of an output block specifying a Offset decoration must specify a Offset value that is aligned to an 8 byte boundary if that block contains any member decorated with Offset and is a 64-bit type

VUID-StandaloneSpirv-Offset-04691

Output variables or block members decorated with Offset that have a 32-bit type, or a composite type contains a 32-bit type, must specify an Offset value aligned to a 4 byte boundary

VUID-StandaloneSpirv-Offset-04692

Output variables, blocks or block members decorated with Offsetmust only contain base types that have components that are either 32-bit or 64-bit in size

VUID-StandaloneSpirv-Offset-04716

Only variables or block members in the output interface decorated with Offset can be captured for transform feedback, and those variables or block members must also be decorated with XfbBuffer and XfbStride, or inherit XfbBuffer and XfbStride decorations from a block containing them

VUID-StandaloneSpirv-XfbBuffer-04693

All variables or block members in the output interface of the entry point being compiled decorated with a specific XfbBuffer value must all be decorated with identical XfbStride values

VUID-StandaloneSpirv-Stream-04694

If any variables or block members in the output interface of the entry point being compiled are decorated with Stream, then all variables belonging to the same XfbBuffer must specify the same Stream value

VUID-StandaloneSpirv-XfbBuffer-04696

For any two variables or block members in the output interface of the entry point being compiled with the same XfbBuffer value, the ranges determined by the Offset decoration and the size of the type must not overlap

VUID-StandaloneSpirv-XfbBuffer-04697

All block members in the output interface of the entry point being compiled that are in the same block and have a declared or inherited XfbBuffer decoration must specify the same XfbBuffer value

VUID-StandaloneSpirv-RayPayloadKHR-04698

RayPayloadKHR Storage Class must only be used in ray generation, closest hit or miss shaders

VUID-StandaloneSpirv-IncomingRayPayloadKHR-04699

IncomingRayPayloadKHR Storage Class must only be used in closest hit, any-hit, or miss shaders

VUID-StandaloneSpirv-IncomingRayPayloadKHR-04700

There must be at most one variable with the IncomingRayPayloadKHR

Storage Class in the input interface of an entry point

VUID-StandaloneSpirv-HitAttributeKHR-04701

HitAttributeKHR Storage Class must only be used in intersection, any-hit, or closest hit shaders

VUID-StandaloneSpirv-HitAttributeKHR-04702

There must be at most one variable with the HitAttributeKHR

Storage Class in the input interface of an entry point

VUID-StandaloneSpirv-HitAttributeKHR-04703

A variable with HitAttributeKHR Storage Class must only be written to in an intersection shader

VUID-StandaloneSpirv-CallableDataKHR-04704

CallableDataKHR Storage Class must only be used in ray generation, closest hit, miss, and callable shaders

VUID-StandaloneSpirv-IncomingCallableDataKHR-04705

IncomingCallableDataKHR Storage Class must only be used in callable shaders

VUID-StandaloneSpirv-IncomingCallableDataKHR-04706

There must be at most one variable with the IncomingCallableDataKHR Storage Class in the input interface of an entry point

VUID-StandaloneSpirv-ShaderRecordBufferKHR-07119

ShaderRecordBufferKHR Storage Class must only be used in ray generation, intersection, any-hit, closest hit, callable, or miss shaders

VUID-StandaloneSpirv-Base-07650

The Base operand of OpPtrAccessChain must have a storage class of Workgroup, StorageBuffer, or PhysicalStorageBuffer

VUID-StandaloneSpirv-Base-07651

If the Base operand of OpPtrAccessChain has a Workgroup

Storage Class, then the VariablePointers capability must be declared

VUID-StandaloneSpirv-Base-07652

If the Base operand of OpPtrAccessChain has a StorageBuffer Storage Class, then the VariablePointers or VariablePointersStorageBuffer capability must be declared

VUID-StandaloneSpirv-PhysicalStorageBuffer64-04708

If the PhysicalStorageBuffer64 addressing model is enabled, all instructions that support memory access operands and that use a physical pointer must include the Aligned operand

VUID-StandaloneSpirv-PhysicalStorageBuffer64-04709

If the PhysicalStorageBuffer64 addressing model is enabled, any access chain instruction that accesses into a RowMajor matrix must only be used as the Pointer operand to OpLoad or OpStore

VUID-StandaloneSpirv-PhysicalStorageBuffer64-04710

If the PhysicalStorageBuffer64 addressing model is enabled, OpConvertUToPtr and OpConvertPtrToU must use an integer type whose Width is 64

VUID-StandaloneSpirv-OpTypeForwardPointer-04711

OpTypeForwardPointer must have a Storage Class of PhysicalStorageBuffer

VUID-StandaloneSpirv-None-04745

All block members in a variable with a Storage Class of PushConstant declared as an array must only be accessed by dynamically uniform indices

VUID-StandaloneSpirv-OpVariable-06673

There must not be more than one OpVariable in the PushConstant Storage Class listed in the Interface for each OpEntryPoint

VUID-StandaloneSpirv-OpEntryPoint-06674

Each OpEntryPoint must not statically use more than one OpVariable in the PushConstant Storage Class

VUID-StandaloneSpirv-OpEntryPoint-08721

Each OpEntryPoint must not have more than one Input variable assigned the same Component word inside a Location slot, either explicitly or implicitly

VUID-StandaloneSpirv-OpEntryPoint-08722

Each OpEntryPoint must not have more than one Output variable assigned the same Component word inside a Location slot, either explicitly or implicitly

VUID-StandaloneSpirv-Result-04780

The Result Type operand of any OpImageRead or OpImageSparseRead instruction must be a vector of four components

VUID-StandaloneSpirv-Base-04781

The Base operand of any OpBitCount, OpBitReverse, OpBitFieldInsert, OpBitFieldSExtract, or OpBitFieldUExtract instruction must be a 32-bit integer scalar or a vector of 32-bit integers

VUID-StandaloneSpirv-PushConstant-06675

Any variable in the PushConstant or StorageBuffer storage class must be decorated as Block

VUID-StandaloneSpirv-Uniform-06676

Any variable in the Uniform Storage Class must be decorated as Block or BufferBlock

VUID-StandaloneSpirv-UniformConstant-06677

Any variable in the UniformConstant, StorageBuffer, or Uniform Storage Class must be decorated with DescriptorSet and Binding

VUID-StandaloneSpirv-InputAttachmentIndex-06678

Variables decorated with InputAttachmentIndex must be in the UniformConstant Storage Class

VUID-StandaloneSpirv-DescriptorSet-06491

If a variable is decorated by DescriptorSet or Binding, the Storage Class must correspond to an entry in Shader Resource and Storage Class Correspondence

VUID-StandaloneSpirv-Input-06778

Variables with a Storage Class of Input in a fragment shader stage that are decorated with PerVertexKHR must be declared as arrays

VUID-StandaloneSpirv-MeshEXT-07102

The module must not contain both an entry point that uses the TaskEXT or MeshEXT Execution Model and an entry point that uses the TaskNV or MeshNV Execution Model

VUID-StandaloneSpirv-MeshEXT-07106

In mesh shaders using the MeshEXT Execution Model

OpSetMeshOutputsEXT must be called before any outputs are written

VUID-StandaloneSpirv-MeshEXT-07107

In mesh shaders using the MeshEXT Execution Model all variables declared as output must not be read from

VUID-StandaloneSpirv-MeshEXT-07108

In mesh shaders using the MeshEXT Execution Model for OpSetMeshOutputsEXT instructions, the Vertex Count and Primitive Count operands must not depend on ViewIndex

VUID-StandaloneSpirv-MeshEXT-07109

In mesh shaders using the MeshEXT Execution Model variables decorated with PrimitivePointIndicesEXT, PrimitiveLineIndicesEXT, or PrimitiveTriangleIndicesEXT declared as an array must not be accessed by indices that depend on ViewIndex

VUID-StandaloneSpirv-MeshEXT-07110

In mesh shaders using the MeshEXT Execution Model any values stored in variables decorated with PrimitivePointIndicesEXT, PrimitiveLineIndicesEXT, or PrimitiveTriangleIndicesEXT must not depend on ViewIndex

VUID-StandaloneSpirv-MeshEXT-07111

In mesh shaders using the MeshEXT Execution Model variables in workgroup or private Storage Class declared as or containing a composite type must not be accessed by indices that depend on ViewIndex

VUID-StandaloneSpirv-MeshEXT-07330

In mesh shaders using the MeshEXT Execution Model the OutputVertices Execution Mode must be greater than 0

VUID-StandaloneSpirv-MeshEXT-07331

In mesh shaders using the MeshEXT Execution Model the OutputPrimitivesEXT Execution Mode must be greater than 0

VUID-StandaloneSpirv-Input-07290

Variables with a Storage Class of Input or Output and a type of OpTypeBool must be decorated with the BuiltIn decoration

VUID-StandaloneSpirv-TileImageEXT-08723

The tile image variable declarations must obey the constraints on the TileImageEXT Storage Class and the Location decoration described in Fragment Tile Image Interface

VUID-StandaloneSpirv-None-08724

The TileImageEXT Storage Class must only be used for declaring tile image variables

VUID-StandaloneSpirv-Pointer-08973

The Storage Class of the Pointer operand to OpCooperativeMatrixLoadKHR or OpCooperativeMatrixStoreKHRmust be limited to Workgroup, StorageBuffer, or PhysicalStorageBuffer

VUID-StandaloneSpirv-UniformBufferArrayDynamicIndexing-10127

If the UniformBufferArrayDynamicIndexing capability is not declared, and an instruction accesses memory through a uniform buffer, the uniform buffer through which that memory is accessed must be determined by constant integral expressions

VUID-StandaloneSpirv-SampledImageArrayDynamicIndexing-10128

If the SampledImageArrayDynamicIndexing capability 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 determined by constant integral expressions

VUID-StandaloneSpirv-StorageBufferArrayDynamicIndexing-10129

If the StorageBufferArrayDynamicIndexing capability is not declared, and an instruction accesses memory through a storage buffer, the storage buffer through which that memory is accessed must be determined by constant integral expressions

VUID-StandaloneSpirv-StorageImageArrayDynamicIndexing-10130

If the StorageImageArrayDynamicIndexing capability is not declared, and an instruction accesses memory through a storage image, the storage image through which that memory is accessed must be determined by constant integral expressions

VUID-StandaloneSpirv-InputAttachmentArrayDynamicIndexing-10131

If the InputAttachmentArrayDynamicIndexing capability is not declared, and an instruction accesses memory through an input attachment, the input attachmnet through which that memory is accessed must be determined by constant integral expressions

VUID-StandaloneSpirv-UniformTexelBufferArrayDynamicIndexing-10132

If the UniformTexelBufferArrayDynamicIndexing capability 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 determined by constant integral expressions

VUID-StandaloneSpirv-StorageTexelBufferArrayDynamicIndexing-10133

If the StorageTexelBufferArrayDynamicIndexing capability 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 determined by constant integral expressions

::