StandaloneSpirv
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
Class
must 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 Block
must 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
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 shaderVUID-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
-decoratedOpTypeStruct
in theUniform
storageStorage
Class
- the outermost dimension of an arrayed variable in the
StorageBuffer
,Uniform
, orUniformConstant
storageStorage
Class
- variables in the
NodePayloadAMDX
storageStorage
Class
when theCoalescingAMDX
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 Offset
must 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 OpCooperativeMatrixStoreKHR
must 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
::