1e5c31af7Sopenharmony_ci// Copyright 2015-2021 The Khronos Group, Inc.
2e5c31af7Sopenharmony_ci//
3e5c31af7Sopenharmony_ci// SPDX-License-Identifier: CC-BY-4.0
4e5c31af7Sopenharmony_ci
5e5c31af7Sopenharmony_ci[appendix]
6e5c31af7Sopenharmony_ci[[spirvenv]]
7e5c31af7Sopenharmony_ci= Vulkan Environment for SPIR-V
8e5c31af7Sopenharmony_ci
9e5c31af7Sopenharmony_ciShaders for Vulkan are defined by the <<spirv-spec,Khronos SPIR-V
10e5c31af7Sopenharmony_ciSpecification>> as well as the <<spirv-extended,Khronos SPIR-V Extended
11e5c31af7Sopenharmony_ciInstructions for GLSL>> Specification.
12e5c31af7Sopenharmony_ciThis appendix defines additional SPIR-V requirements applying to Vulkan
13e5c31af7Sopenharmony_cishaders.
14e5c31af7Sopenharmony_ci
15e5c31af7Sopenharmony_ci== Versions and Formats
16e5c31af7Sopenharmony_ci
17e5c31af7Sopenharmony_ciA Vulkan
18e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_2[]
19e5c31af7Sopenharmony_ci1.2 implementation must: support the 1.0, 1.1, 1.2, 1.3, 1.4, and 1.5
20e5c31af7Sopenharmony_civersions
21e5c31af7Sopenharmony_ciendif::VK_VERSION_1_2[]
22e5c31af7Sopenharmony_ciifndef::VK_VERSION_1_2[]
23e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_1[]
24e5c31af7Sopenharmony_ci1.1 implementation must: support the 1.0, 1.1, 1.2, and 1.3 versions
25e5c31af7Sopenharmony_ciendif::VK_VERSION_1_1[]
26e5c31af7Sopenharmony_ciifndef::VK_VERSION_1_1[]
27e5c31af7Sopenharmony_ci1.0 implementation must: support the 1.0 version
28e5c31af7Sopenharmony_ciendif::VK_VERSION_1_1[]
29e5c31af7Sopenharmony_ciendif::VK_VERSION_1_2[]
30e5c31af7Sopenharmony_ciof SPIR-V and the 1.0 version of the SPIR-V Extended Instructions for GLSL.
31e5c31af7Sopenharmony_ciifndef::VK_VERSION_1_2[]
32e5c31af7Sopenharmony_ciifdef::VK_KHR_spirv_1_4[]
33e5c31af7Sopenharmony_ciIf the `apiext:VK_KHR_spirv_1_4` extension is enabled, the implementation
34e5c31af7Sopenharmony_cimust: additionally support the 1.4 version of SPIR-V.
35e5c31af7Sopenharmony_ciendif::VK_KHR_spirv_1_4[]
36e5c31af7Sopenharmony_ciendif::VK_VERSION_1_2[]
37e5c31af7Sopenharmony_ci
38e5c31af7Sopenharmony_ciA SPIR-V module passed into flink:vkCreateShaderModule is interpreted as a
39e5c31af7Sopenharmony_ciseries of 32-bit words in host endianness, with literal strings packed as
40e5c31af7Sopenharmony_cidescribed in section 2.2 of the SPIR-V Specification.
41e5c31af7Sopenharmony_ciThe first few words of the SPIR-V module must: be a magic number and a
42e5c31af7Sopenharmony_ciSPIR-V version number, as described in section 2.3 of the SPIR-V
43e5c31af7Sopenharmony_ciSpecification.
44e5c31af7Sopenharmony_ci
45e5c31af7Sopenharmony_ci
46e5c31af7Sopenharmony_ci[[spirvenv-capabilities]]
47e5c31af7Sopenharmony_ci== Capabilities
48e5c31af7Sopenharmony_ci
49e5c31af7Sopenharmony_ciThe <<spirvenv-capabilities-table,table below>> lists the set of SPIR-V
50e5c31af7Sopenharmony_cicapabilities that may: be supported in Vulkan implementations.
51e5c31af7Sopenharmony_ciThe application must: not use any of these capabilities in SPIR-V passed to
52e5c31af7Sopenharmony_ciflink:vkCreateShaderModule unless one of the following conditions is met for
53e5c31af7Sopenharmony_cithe slink:VkDevice specified in the pname:device parameter of
54e5c31af7Sopenharmony_ciflink:vkCreateShaderModule:
55e5c31af7Sopenharmony_ci
56e5c31af7Sopenharmony_ci* The corresponding field in the table is blank.
57e5c31af7Sopenharmony_ci* Any corresponding Vulkan feature is enabled.
58e5c31af7Sopenharmony_ci* Any corresponding Vulkan extension is enabled.
59e5c31af7Sopenharmony_ci* Any corresponding Vulkan property is supported.
60e5c31af7Sopenharmony_ci* The corresponding core version is supported (as returned by
61e5c31af7Sopenharmony_ci  slink:VkPhysicalDeviceProperties::pname:apiVersion).
62e5c31af7Sopenharmony_ci
63e5c31af7Sopenharmony_ci:captableindent: {nbsp} {nbsp} {nbsp} {nbsp} {nbsp} {nbsp} {nbsp} {nbsp}
64e5c31af7Sopenharmony_ci[[spirvenv-capabilities-table]]
65e5c31af7Sopenharmony_ci.List of SPIR-V Capabilities and corresponding Vulkan features, extensions, or core version
66e5c31af7Sopenharmony_ci[options="header"]
67e5c31af7Sopenharmony_ci|====
68e5c31af7Sopenharmony_ci| SPIR-V code:OpCapability +
69e5c31af7Sopenharmony_ci  {captableindent} Vulkan feature, extension, or core version
70e5c31af7Sopenharmony_ciinclude::{generated}/spirvcap/captable.txt[]
71e5c31af7Sopenharmony_ci|====
72e5c31af7Sopenharmony_ci
73e5c31af7Sopenharmony_ciThe application must: not pass a SPIR-V module containing any of the
74e5c31af7Sopenharmony_cifollowing to flink:vkCreateShaderModule:
75e5c31af7Sopenharmony_ci
76e5c31af7Sopenharmony_ci  * any code:OpCapability not listed above,
77e5c31af7Sopenharmony_ci  * an unsupported capability, or
78e5c31af7Sopenharmony_ci  * a capability which corresponds to a Vulkan feature or extension which
79e5c31af7Sopenharmony_ci    has not been enabled.
80e5c31af7Sopenharmony_ci
81e5c31af7Sopenharmony_ci
82e5c31af7Sopenharmony_ci[[spirvenv-extensions]]
83e5c31af7Sopenharmony_ci=== SPIR-V Extensions
84e5c31af7Sopenharmony_ci
85e5c31af7Sopenharmony_ciThe <<spirvenv-extensions-table,following table>> lists SPIR-V extensions
86e5c31af7Sopenharmony_cithat implementations may: support.
87e5c31af7Sopenharmony_ciThe application must: not pass a SPIR-V module to flink:vkCreateShaderModule
88e5c31af7Sopenharmony_cithat uses the following SPIR-V extensions unless one of the following
89e5c31af7Sopenharmony_ciconditions is met for the slink:VkDevice specified in the pname:device
90e5c31af7Sopenharmony_ciparameter of flink:vkCreateShaderModule:
91e5c31af7Sopenharmony_ci
92e5c31af7Sopenharmony_ci* Any corresponding Vulkan extension is enabled.
93e5c31af7Sopenharmony_ci* The corresponding core version is supported (as returned by
94e5c31af7Sopenharmony_ci  slink:VkPhysicalDeviceProperties::pname:apiVersion).
95e5c31af7Sopenharmony_ci
96e5c31af7Sopenharmony_ci[[spirvenv-extensions-table]]
97e5c31af7Sopenharmony_ci.List of SPIR-V Extensions and corresponding Vulkan extensions or core version
98e5c31af7Sopenharmony_ci[options="header"]
99e5c31af7Sopenharmony_ci|====
100e5c31af7Sopenharmony_ci| SPIR-V code:OpExtension +
101e5c31af7Sopenharmony_ci  {captableindent} Vulkan extension or core version
102e5c31af7Sopenharmony_ciinclude::{generated}/spirvcap/exttable.txt[]
103e5c31af7Sopenharmony_ci|====
104e5c31af7Sopenharmony_ci
105e5c31af7Sopenharmony_ci
106e5c31af7Sopenharmony_ci[[spirvenv-module-validation]]
107e5c31af7Sopenharmony_ci== Validation Rules within a Module
108e5c31af7Sopenharmony_ci
109e5c31af7Sopenharmony_ciA SPIR-V module passed to flink:vkCreateShaderModule must: conform to the
110e5c31af7Sopenharmony_cifollowing rules:
111e5c31af7Sopenharmony_ci
112e5c31af7Sopenharmony_ci
113e5c31af7Sopenharmony_ci[[spirvenv-module-validation-standalone]]
114e5c31af7Sopenharmony_ci=== Standalone SPIR-V Validation
115e5c31af7Sopenharmony_ci
116e5c31af7Sopenharmony_ci[open,refpage='StandaloneSpirv',desc='Standalone SPIR-V Validation',type='spirv']
117e5c31af7Sopenharmony_ci--
118e5c31af7Sopenharmony_ci:refpage: StandaloneSpirv
119e5c31af7Sopenharmony_ci
120e5c31af7Sopenharmony_ciThe following rules can: be validated with only the SPIR-V module itself.
121e5c31af7Sopenharmony_ciThey do not depend on knowledge of the implementation and its capabilities
122e5c31af7Sopenharmony_cior knowledge of runtime information, such as enabled features.
123e5c31af7Sopenharmony_ci
124e5c31af7Sopenharmony_ci.Valid Usage
125e5c31af7Sopenharmony_ci****
126e5c31af7Sopenharmony_ci// NOTE: Do not conditionalize the "standalone" VUs.
127e5c31af7Sopenharmony_ci// Write as though all extensions were enabled.
128e5c31af7Sopenharmony_ci// Add any needed conditional logic to the runtime section if needed.
129e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-None-04633]]
130e5c31af7Sopenharmony_ci    Every entry point must: have no return value and accept no arguments
131e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-None-04634]]
132e5c31af7Sopenharmony_ci    The static function-call graph for an entry point must: not contain
133e5c31af7Sopenharmony_ci    cycles; that is, static recursion is not allowed
134e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-None-04635]]
135e5c31af7Sopenharmony_ci    The *Logical* or *PhysicalStorageBuffer64* addressing model must: be
136e5c31af7Sopenharmony_ci    selected
137e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-None-04636]]
138e5c31af7Sopenharmony_ci    *Scope* for execution must: be limited to *Workgroup* or *Subgroup*
139e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-None-04637]]
140e5c31af7Sopenharmony_ci    If the *Scope* for execution is *Workgroup*, then it must: only be used
141e5c31af7Sopenharmony_ci    in the task, mesh, tessellation control, or compute execution models
142e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-None-04638]]
143e5c31af7Sopenharmony_ci    *Scope* for memory must: be limited to *Device*, *QueueFamily*,
144e5c31af7Sopenharmony_ci    *Workgroup*, *ShaderCallKHR*, *Subgroup*, or *Invocation*
145e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-None-04639]]
146e5c31af7Sopenharmony_ci    If the *Scope* for memory is *Workgroup*, then it must: only be used in
147e5c31af7Sopenharmony_ci    the task, mesh, or compute execution models
148e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-None-04640]]
149e5c31af7Sopenharmony_ci    If the *Scope* for memory is *ShaderCallKHR*, then it must: only be used
150e5c31af7Sopenharmony_ci    in ray generation, intersection, closest hit, any-hit, miss, and
151e5c31af7Sopenharmony_ci    callable execution models
152e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-None-04641]]
153e5c31af7Sopenharmony_ci    If the *Scope* for memory is *Invocation*, then memory semantics must:
154e5c31af7Sopenharmony_ci    be *None*
155e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_1[]
156e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-None-04642]]
157e5c31af7Sopenharmony_ci    *Scope* for <<shaders-group-operations,group operations>> must: be
158e5c31af7Sopenharmony_ci    limited to *Subgroup*
159e5c31af7Sopenharmony_ciendif::VK_VERSION_1_1[]
160e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-None-04643]]
161e5c31af7Sopenharmony_ci    *Storage Class* must: be limited to *UniformConstant*, *Input*,
162e5c31af7Sopenharmony_ci    *Uniform*, *Output*, *Workgroup*, *Private*, *Function*, *PushConstant*,
163e5c31af7Sopenharmony_ci    *Image*, *StorageBuffer*, *RayPayloadKHR*, *IncomingRayPayloadKHR*,
164e5c31af7Sopenharmony_ci    *HitAttributeKHR*, *CallableDataKHR*, *IncomingCallableDataKHR*,
165e5c31af7Sopenharmony_ci    *ShaderRecordBufferKHR*, or *PhysicalStorageBuffer*
166e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-None-04644]]
167e5c31af7Sopenharmony_ci    If the *Storage Class* is *Output*, then it must: not be used in the
168e5c31af7Sopenharmony_ci    *GlCompute*, *RayGenerationKHR*, *IntersectionKHR*, *AnyHitKHR*,
169e5c31af7Sopenharmony_ci    *ClosestHitKHR*, *MissKHR*, or *CallableKHR* execution models
170e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-None-04645]]
171e5c31af7Sopenharmony_ci    If the *Storage Class* is *Workgroup*, then it must: only be used in the
172e5c31af7Sopenharmony_ci    task, mesh, or compute execution models
173e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpAtomicStore-04730]]
174e5c31af7Sopenharmony_ci    code:OpAtomicStore must: not use *Acquire*, *AcquireRelease*, or
175e5c31af7Sopenharmony_ci    *SequentiallyConsistent* memory semantics
176e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpAtomicLoad-04731]]
177e5c31af7Sopenharmony_ci    code:OpAtomicLoad must: not use *Release*, *AcquireRelease*, or
178e5c31af7Sopenharmony_ci    *SequentiallyConsistent* memory semantics
179e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpMemoryBarrier-04732]]
180e5c31af7Sopenharmony_ci    code:OpMemoryBarrier must: use one of *Acquire*, *Release*,
181e5c31af7Sopenharmony_ci    *AcquireRelease*, or *SequentiallyConsistent* memory semantics
182e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpMemoryBarrier-04733]]
183e5c31af7Sopenharmony_ci    code:OpMemoryBarrier must: include at least one storage class
184e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpControlBarrier-04650]]
185e5c31af7Sopenharmony_ci    If the semantics for code:OpControlBarrier includes one of *Acquire*,
186e5c31af7Sopenharmony_ci    *Release*, *AcquireRelease*, or *SequentiallyConsistent* memory
187e5c31af7Sopenharmony_ci    semantics, then it must: include at least one storage class
188e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpVariable-04651]]
189e5c31af7Sopenharmony_ci    Any code:OpVariable with an code:Initializer operand must: have
190e5c31af7Sopenharmony_ci    *Output*, *Private*, *Function*, or *Workgroup* as its *Storage Class*
191e5c31af7Sopenharmony_ci    operand
192e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpVariable-04734]]
193e5c31af7Sopenharmony_ci    Any code:OpVariable with an code:Initializer operand and *Workgroup* as
194e5c31af7Sopenharmony_ci    its *Storage Class* operand must: use code:OpConstantNull as the
195e5c31af7Sopenharmony_ci    initializer
196e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpReadClockKHR-04652]]
197e5c31af7Sopenharmony_ci    *Scope* for code:OpReadClockKHR must: be limited to *Subgroup* or
198e5c31af7Sopenharmony_ci    *Device*
199e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OriginLowerLeft-04653]]
200e5c31af7Sopenharmony_ci    The code:OriginLowerLeft execution mode must: not be used; fragment
201e5c31af7Sopenharmony_ci    entry points must: declare code:OriginUpperLeft
202e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-PixelCenterInteger-04654]]
203e5c31af7Sopenharmony_ci    The code:PixelCenterInteger execution mode must: not be used (pixels are
204e5c31af7Sopenharmony_ci    always centered at half-integer coordinates)
205e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-UniformConstant-04655]]
206e5c31af7Sopenharmony_ci    Any variable in the code:UniformConstant storage class must: be typed as
207e5c31af7Sopenharmony_ci    either code:OpTypeImage, code:OpTypeSampler, code:OpTypeSampledImage,
208e5c31af7Sopenharmony_ci    code:OpTypeAccelerationStructureKHR, or an array of one of these types
209e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpTypeImage-04656]]
210e5c31af7Sopenharmony_ci    code:OpTypeImage must: declare a scalar 32-bit float, 64-bit integer, or
211e5c31af7Sopenharmony_ci    32-bit integer type for the "`Sampled Type`" (code:RelaxedPrecision can:
212e5c31af7Sopenharmony_ci    be applied to a sampling instruction and to the variable holding the
213e5c31af7Sopenharmony_ci    result of a sampling instruction)
214e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpTypeImage-04657]]
215e5c31af7Sopenharmony_ci    code:OpTypeImage must: have a "`Sampled`" operand of 1 (sampled image)
216e5c31af7Sopenharmony_ci    or 2 (storage image)
217e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-Image-04965]]
218e5c31af7Sopenharmony_ci    The converted bit width, signedness, and numeric type of the code:Image
219e5c31af7Sopenharmony_ci    code:Format operand of an code:OpTypeImage must: match the code:Sampled
220e5c31af7Sopenharmony_ci    code:Type, as defined in <<spirvenv-format-type-matching>>
221e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpImageTexelPointer-04658]]
222e5c31af7Sopenharmony_ci    If an code:OpImageTexelPointer is used in an atomic operation, the image
223e5c31af7Sopenharmony_ci    type of the code:image parameter to code:OpImageTexelPointer must: have
224e5c31af7Sopenharmony_ci    an image format of code:R64i, code:R64ui, code:R32f, code:R32i, or
225e5c31af7Sopenharmony_ci    code:R32ui
226e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpImageQuerySizeLod-04659]]
227e5c31af7Sopenharmony_ci    code:OpImageQuerySizeLod, code:OpImageQueryLod, and
228e5c31af7Sopenharmony_ci    code:OpImageQueryLevels must: only consume an "`Image`" operand whose
229e5c31af7Sopenharmony_ci    type has its "`Sampled`" operand set to 1
230e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpTypeImage-06214]]
231e5c31af7Sopenharmony_ci    An code:OpTypeImage with a "`Dim`" operand of code:SubpassData must:
232e5c31af7Sopenharmony_ci    have an "`Arrayed`" operand of 0 (non-arrayed) and a "`Sampled`" operand
233e5c31af7Sopenharmony_ci    of 2 (storage image)
234e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-SubpassData-04660]]
235e5c31af7Sopenharmony_ci    The [eq]#(u,v)# coordinates used for a code:SubpassData must: be the
236e5c31af7Sopenharmony_ci    <id> of a constant vector [eq]#(0,0)#, or if a layer coordinate is used,
237e5c31af7Sopenharmony_ci    must: be a vector that was formed with constant 0 for the [eq]#u# and
238e5c31af7Sopenharmony_ci    [eq]#v# components
239e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpTypeImage-04661]]
240e5c31af7Sopenharmony_ci    Objects of types code:OpTypeImage, code:OpTypeSampler,
241e5c31af7Sopenharmony_ci    code:OpTypeSampledImage, and arrays of these types must: not be stored
242e5c31af7Sopenharmony_ci    to or modified
243e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-Offset-04662]]
244e5c31af7Sopenharmony_ci    Any image operation must: use at most one of the code:Offset,
245e5c31af7Sopenharmony_ci    code:ConstOffset, and code:ConstOffsets image operands
246e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-Offset-04663]]
247e5c31af7Sopenharmony_ci    Image operand code:Offset must: only be used with code:OpImage*Gather
248e5c31af7Sopenharmony_ci    instructions
249e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-Offset-04865]]
250e5c31af7Sopenharmony_ci    Any image instruction which uses an code:Offset, code:ConstOffset, or
251e5c31af7Sopenharmony_ci    code:ConstOffsets image operand, must only consume a "`Sampled Image`"
252e5c31af7Sopenharmony_ci    operand whose type has its "`Sampled`" operand set to 1
253e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpImageGather-04664]]
254e5c31af7Sopenharmony_ci    The "`Component`" operand of code:OpImageGather, and
255e5c31af7Sopenharmony_ci    code:OpImageSparseGather must: be the <id> of a constant instruction
256e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpImage-04777]]
257e5c31af7Sopenharmony_ci    code:OpImage*Dref must: not consume an image whose `Dim` is 3D
258e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpTypeAccelerationStructureKHR-04665]]
259e5c31af7Sopenharmony_ci     Objects of types code:OpTypeAccelerationStructureKHR and arrays of this
260e5c31af7Sopenharmony_ci     type must: not be stored to or modified
261e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpReportIntersectionKHR-04666]]
262e5c31af7Sopenharmony_ci    The value of the "`Hit Kind`" operand of code:OpReportIntersectionKHR
263e5c31af7Sopenharmony_ci    must: be in the range [eq]#[0,127]#
264e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-None-04667]]
265e5c31af7Sopenharmony_ci    Structure types must: not contain opaque types
266e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-BuiltIn-04668]]
267e5c31af7Sopenharmony_ci    Any code:BuiltIn decoration not listed in
268e5c31af7Sopenharmony_ci    <<interfaces-builtin-variables>> must: not be used
269e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-Location-04915]]
270e5c31af7Sopenharmony_ci    The code:Location or code:Component decorations must: not be used with
271e5c31af7Sopenharmony_ci    code:BuiltIn
272e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-Location-04916]]
273e5c31af7Sopenharmony_ci    The code:Location decorations must: be used on
274e5c31af7Sopenharmony_ci    <<interfaces-iointerfaces-user,user-defined variables>>
275e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-Location-04917]]
276e5c31af7Sopenharmony_ci    The code:Location decorations must: be used on an code:OpVariable with a
277e5c31af7Sopenharmony_ci    structure type that is not a block
278e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-Location-04918]]
279e5c31af7Sopenharmony_ci    The code:Location decorations must: not be used on the members of
280e5c31af7Sopenharmony_ci    code:OpVariable with a structure type that is decorated with
281e5c31af7Sopenharmony_ci    code:Location
282e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-Location-04919]]
283e5c31af7Sopenharmony_ci    The code:Location decorations must: be used on each member of
284e5c31af7Sopenharmony_ci    code:OpVariable with a structure type that is a block not decorated with
285e5c31af7Sopenharmony_ci    code:Location
286e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-Component-04920]]
287e5c31af7Sopenharmony_ci    The code:Component decoration value must: not be greater than 3
288e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-Component-04921]]
289e5c31af7Sopenharmony_ci    If the code:Component decoration is used on an code:OpVariable that has
290e5c31af7Sopenharmony_ci    a code:OpTypeVector type with a code:Component code:Type with a
291e5c31af7Sopenharmony_ci    code:Width that is less than or equal to 32, the sum of its
292e5c31af7Sopenharmony_ci    code:Component code:Count and the code:Component decoration value must:
293e5c31af7Sopenharmony_ci    be less than 4
294e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-Component-04922]]
295e5c31af7Sopenharmony_ci    If the code:Component decoration is used on an code:OpVariable that has
296e5c31af7Sopenharmony_ci    a code:OpTypeVector type with a code:Component code:Type with a
297e5c31af7Sopenharmony_ci    code:Width that is equal to 64, the sum of two times its code:Component
298e5c31af7Sopenharmony_ci    code:Count and the code:Component decoration value must: be less than 4
299e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-Component-04923]]
300e5c31af7Sopenharmony_ci    The code:Component decorations value must: not be 1 or 3 for scalar or
301e5c31af7Sopenharmony_ci    two-component 64-bit data types
302e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-Component-04924]]
303e5c31af7Sopenharmony_ci    The code:Component decorations must: not used with any type that is not
304e5c31af7Sopenharmony_ci    a scalar or vector
305e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-GLSLShared-04669]]
306e5c31af7Sopenharmony_ci    The code:GLSLShared and code:GLSLPacked decorations must: not be used
307e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-Flat-04670]]
308e5c31af7Sopenharmony_ci    The code:Flat, code:NoPerspective, code:Sample, and code:Centroid
309e5c31af7Sopenharmony_ci    decorations must: only be used on variables with the code:Output or
310e5c31af7Sopenharmony_ci    code:Input storage class
311e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-Flat-06201]]
312e5c31af7Sopenharmony_ci    The code:Flat, code:NoPerspective, code:Sample, and code:Centroid
313e5c31af7Sopenharmony_ci    decorations must: not be used on variables with the code:Output storage
314e5c31af7Sopenharmony_ci    class in a fragment shader
315e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-Flat-06202]]
316e5c31af7Sopenharmony_ci    The code:Flat, code:NoPerspective, code:Sample, and code:Centroid
317e5c31af7Sopenharmony_ci    decorations must: not be used on variables with the code:Input storage
318e5c31af7Sopenharmony_ci    class in a vertex shader
319e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-Flat-04744]]
320e5c31af7Sopenharmony_ci    Any variable with integer or double-precision floating-point type and
321e5c31af7Sopenharmony_ci    with code:Input storage class in a fragment shader, must: be decorated
322e5c31af7Sopenharmony_ci    code:Flat
323e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-ViewportRelativeNV-04672]]
324e5c31af7Sopenharmony_ci    The code:ViewportRelativeNV decoration must: only be used on a variable
325e5c31af7Sopenharmony_ci    decorated with code:Layer in the vertex, tessellation evaluation, or
326e5c31af7Sopenharmony_ci    geometry shader stages
327e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-ViewportRelativeNV-04673]]
328e5c31af7Sopenharmony_ci    The code:ViewportRelativeNV decoration must: not be used unless a
329e5c31af7Sopenharmony_ci    variable decorated with one of code:ViewportIndex or code:ViewportMaskNV
330e5c31af7Sopenharmony_ci    is also statically used by the same code:OpEntryPoint
331e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-ViewportMaskNV-04674]]
332e5c31af7Sopenharmony_ci    The code:ViewportMaskNV and code:ViewportIndex decorations must: not
333e5c31af7Sopenharmony_ci    both be statically used by one or more code:OpEntryPoint's that form the
334e5c31af7Sopenharmony_ci    <<pipeline-graphics-subsets-pre-rasterization,pre-rasterization shader
335e5c31af7Sopenharmony_ci    stages>> of a graphics pipeline
336e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-FPRoundingMode-04675]]
337e5c31af7Sopenharmony_ci    Rounding modes other than round-to-nearest-even and round-towards-zero
338e5c31af7Sopenharmony_ci    must: not be used for the code:FPRoundingMode decoration
339e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-FPRoundingMode-04676]]
340e5c31af7Sopenharmony_ci    The code:FPRoundingMode decoration must: only be used for a width-only
341e5c31af7Sopenharmony_ci    conversion instruction whose only uses are code:Object operands of
342e5c31af7Sopenharmony_ci    code:OpStore instructions storing through a pointer to a 16-bit
343e5c31af7Sopenharmony_ci    floating-point object in the code:StorageBuffer,
344e5c31af7Sopenharmony_ci    code:PhysicalStorageBuffer, code:Uniform, or code:Output storage class
345e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-Invariant-04677]]
346e5c31af7Sopenharmony_ci    Variables decorated with code:Invariant and variables with structure
347e5c31af7Sopenharmony_ci    types that have any members decorated with code:Invariant must: be in
348e5c31af7Sopenharmony_ci    the code:Output or code:Input storage class, code:Invariant used on an
349e5c31af7Sopenharmony_ci    code:Input storage class variable or structure member has no effect
350e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-VulkanMemoryModel-04678]]
351e5c31af7Sopenharmony_ci    [[builtin-volatile-semantics]] If the code:VulkanMemoryModel capability
352e5c31af7Sopenharmony_ci    is not declared, the code:Volatile decoration must: be used on any
353e5c31af7Sopenharmony_ci    variable declaration that includes one of the code:SMIDNV,
354e5c31af7Sopenharmony_ci    code:WarpIDNV, code:SubgroupSize, code:SubgroupLocalInvocationId,
355e5c31af7Sopenharmony_ci    code:SubgroupEqMask, code:SubgroupGeMask, code:SubgroupGtMask,
356e5c31af7Sopenharmony_ci    code:SubgroupLeMask, or code:SubgroupLtMask code:BuiltIn decorations
357e5c31af7Sopenharmony_ci    when used in the ray generation, closest hit, miss, intersection, or
358e5c31af7Sopenharmony_ci    callable shaders, or with the code:RayTmaxKHR code:Builtin decoration
359e5c31af7Sopenharmony_ci    when used in an intersection shader
360e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-VulkanMemoryModel-04679]]
361e5c31af7Sopenharmony_ci    If the code:VulkanMemoryModel capability is declared, the code:OpLoad
362e5c31af7Sopenharmony_ci    instruction must: use the code:Volatile memory semantics when it
363e5c31af7Sopenharmony_ci    accesses into any variable that includes one of the code:SMIDNV,
364e5c31af7Sopenharmony_ci    code:WarpIDNV, code:SubgroupSize, code:SubgroupLocalInvocationId,
365e5c31af7Sopenharmony_ci    code:SubgroupEqMask, code:SubgroupGeMask, code:SubgroupGtMask,
366e5c31af7Sopenharmony_ci    code:SubgroupLeMask, or code:SubgroupLtMask code:BuiltIn decorations
367e5c31af7Sopenharmony_ci    when used in the ray generation, closest hit, miss, intersection, or
368e5c31af7Sopenharmony_ci    callable shaders, or with the code:RayTmaxKHR code:Builtin decoration
369e5c31af7Sopenharmony_ci    when used in an intersection shader
370e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpTypeRuntimeArray-04680]]
371e5c31af7Sopenharmony_ci     code:OpTypeRuntimeArray must: only be used for the last member of an
372e5c31af7Sopenharmony_ci     code:OpTypeStruct that is in the code:StorageBuffer or
373e5c31af7Sopenharmony_ci     code:PhysicalStorageBuffer storage class decorated as code:Block, or
374e5c31af7Sopenharmony_ci     that is in the code:Uniform storage class decorated as code:BufferBlock
375e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-Function-04681]]
376e5c31af7Sopenharmony_ci    A type _T_ that is an array sized with a specialization constant must:
377e5c31af7Sopenharmony_ci    neither be, nor be contained in, the type _T2_ of a variable _V_, unless
378e5c31af7Sopenharmony_ci    either: a) _T_ is equal to _T2_, b) _V_ is declared in the
379e5c31af7Sopenharmony_ci    code:Function, or code:Private storage classes, c) _V_ is a non-Block
380e5c31af7Sopenharmony_ci    variable in the code:Workgroup storage class, or d) _V_ is an interface
381e5c31af7Sopenharmony_ci    variable with an additional level of arrayness,
382e5c31af7Sopenharmony_ci    <<interfaces-iointerfaces-matching, as described in interface
383e5c31af7Sopenharmony_ci    matching>>, and _T_ is the member type of the array type _T2_
384e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpControlBarrier-04682]]
385e5c31af7Sopenharmony_ci    If code:OpControlBarrier is used in ray generation, intersection,
386e5c31af7Sopenharmony_ci    any-hit, closest hit, miss, fragment, vertex, tessellation evaluation,
387e5c31af7Sopenharmony_ci    or geometry shaders, the execution Scope must: be code:Subgroup
388e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-LocalSize-06426]]
389e5c31af7Sopenharmony_ci    For each compute shader entry point, either a code:LocalSize or
390e5c31af7Sopenharmony_ci    code:LocalSizeId execution mode, or an object decorated with the
391e5c31af7Sopenharmony_ci    code:WorkgroupSize decoration must: be specified
392e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-DerivativeGroupQuadsNV-04684]]
393e5c31af7Sopenharmony_ci    For compute shaders using the code:DerivativeGroupQuadsNV execution
394e5c31af7Sopenharmony_ci    mode, the first two dimensions of the local workgroup size must: be a
395e5c31af7Sopenharmony_ci    multiple of two
396e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-DerivativeGroupLinearNV-04778]]
397e5c31af7Sopenharmony_ci    For compute shaders using the code:DerivativeGroupLinearNV execution
398e5c31af7Sopenharmony_ci    mode, the product of the dimensions of the local workgroup size must: be
399e5c31af7Sopenharmony_ci    a multiple of four
400e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpGroupNonUniformBallotBitCount-04685]]
401e5c31af7Sopenharmony_ci    If code:OpGroupNonUniformBallotBitCount is used, the group operation
402e5c31af7Sopenharmony_ci    must: be limited to *Reduce*, *InclusiveScan*, or *ExclusiveScan*
403e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-None-04686]]
404e5c31af7Sopenharmony_ci    The _Pointer_ operand of all atomic instructions must: have a *Storage
405e5c31af7Sopenharmony_ci    Class* limited to *Uniform*, *Workgroup*, *Image*, *StorageBuffer*, or
406e5c31af7Sopenharmony_ci    *PhysicalStorageBuffer*
407e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-Offset-04687]]
408e5c31af7Sopenharmony_ci    Output variables or block members decorated with code:Offset that have a
409e5c31af7Sopenharmony_ci    64-bit type, or a composite type containing a 64-bit type, must: specify
410e5c31af7Sopenharmony_ci    an code:Offset value aligned to a 8 byte boundary
411e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-Offset-04689]]
412e5c31af7Sopenharmony_ci    The size of any output block containing any member decorated with
413e5c31af7Sopenharmony_ci    code:Offset that is a 64-bit type must: be a multiple of 8
414e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-Offset-04690]]
415e5c31af7Sopenharmony_ci    The first member of an output block specifying a code:Offset decoration
416e5c31af7Sopenharmony_ci    must: specify a code:Offset value that is aligned to an 8 byte boundary
417e5c31af7Sopenharmony_ci    if that block contains any member decorated with code:Offset and is a
418e5c31af7Sopenharmony_ci    64-bit type
419e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-Offset-04691]]
420e5c31af7Sopenharmony_ci    Output variables or block members decorated with code:Offset that have a
421e5c31af7Sopenharmony_ci    32-bit type, or a composite type contains a 32-bit type, must: specify
422e5c31af7Sopenharmony_ci    an code:Offset value aligned to a 4 byte boundary
423e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-Offset-04692]]
424e5c31af7Sopenharmony_ci    Output variables, blocks or block members decorated with code:Offset
425e5c31af7Sopenharmony_ci    must: only contain base types that have components that are either
426e5c31af7Sopenharmony_ci    32-bit or 64-bit in size
427e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-Offset-04716]]
428e5c31af7Sopenharmony_ci    Only variables or block members in the output interface decorated with
429e5c31af7Sopenharmony_ci    code:Offset can: be captured for transform feedback, and those variables
430e5c31af7Sopenharmony_ci    or block members must: also be decorated with code:XfbBuffer and
431e5c31af7Sopenharmony_ci    code:XfbStride, or inherit code:XfbBuffer and code:XfbStride decorations
432e5c31af7Sopenharmony_ci    from a block containing them
433e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-XfbBuffer-04693]]
434e5c31af7Sopenharmony_ci    All variables or block members in the output interface of the entry
435e5c31af7Sopenharmony_ci    point being compiled decorated with a specific code:XfbBuffer value
436e5c31af7Sopenharmony_ci    must: all be decorated with identical code:XfbStride values
437e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-Stream-04694]]
438e5c31af7Sopenharmony_ci    If any variables or block members in the output interface of the entry
439e5c31af7Sopenharmony_ci    point being compiled are decorated with code:Stream, then all variables
440e5c31af7Sopenharmony_ci    belonging to the same code:XfbBuffer must: specify the same code:Stream
441e5c31af7Sopenharmony_ci    value
442e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-XfbBuffer-04696]]
443e5c31af7Sopenharmony_ci    For any two variables or block members in the output interface of the
444e5c31af7Sopenharmony_ci    entry point being compiled with the same code:XfbBuffer value, the
445e5c31af7Sopenharmony_ci    ranges determined by the code:Offset decoration and the size of the type
446e5c31af7Sopenharmony_ci    must: not overlap
447e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-XfbBuffer-04697]]
448e5c31af7Sopenharmony_ci    All block members in the output interface of the entry point being
449e5c31af7Sopenharmony_ci    compiled that are in the same block and have a declared or inherited
450e5c31af7Sopenharmony_ci    code:XfbBuffer decoration must: specify the same code:XfbBuffer value
451e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-RayPayloadKHR-04698]]
452e5c31af7Sopenharmony_ci    code:RayPayloadKHR storage class must: only be used in ray generation,
453e5c31af7Sopenharmony_ci    closest hit or miss shaders
454e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-IncomingRayPayloadKHR-04699]]
455e5c31af7Sopenharmony_ci    code:IncomingRayPayloadKHR storage class must: only be used in closest
456e5c31af7Sopenharmony_ci    hit, any-hit, or miss shaders
457e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-IncomingRayPayloadKHR-04700]]
458e5c31af7Sopenharmony_ci    There must: be at most one variable with the code:IncomingRayPayloadKHR
459e5c31af7Sopenharmony_ci    storage class in the input interface of an entry point
460e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-HitAttributeKHR-04701]]
461e5c31af7Sopenharmony_ci    code:HitAttributeKHR storage class must: only be used in intersection,
462e5c31af7Sopenharmony_ci    any-hit, or closest hit shaders
463e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-HitAttributeKHR-04702]]
464e5c31af7Sopenharmony_ci    There must: be at most one variable with the code:HitAttributeKHR
465e5c31af7Sopenharmony_ci    storage class in the input interface of an entry point
466e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-HitAttributeKHR-04703]]
467e5c31af7Sopenharmony_ci    A variable with code:HitAttributeKHR storage class must: only be written
468e5c31af7Sopenharmony_ci    to in an intersection shader
469e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-CallableDataKHR-04704]]
470e5c31af7Sopenharmony_ci    code:CallableDataKHR storage class must: only be used in ray generation,
471e5c31af7Sopenharmony_ci    closest hit, miss, and callable shaders
472e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-IncomingCallableDataKHR-04705]]
473e5c31af7Sopenharmony_ci    code:IncomingCallableDataKHR storage class must: only be used in
474e5c31af7Sopenharmony_ci    callable shaders
475e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-IncomingCallableDataKHR-04706]]
476e5c31af7Sopenharmony_ci    There must: be at most one variable with the
477e5c31af7Sopenharmony_ci    code:IncomingCallableDataKHR storage class in the input interface of an
478e5c31af7Sopenharmony_ci    entry point
479e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-Base-04707]]
480e5c31af7Sopenharmony_ci    The code:Base operand of code:OpPtrAccessChain must: point to one of the
481e5c31af7Sopenharmony_ci    following: *Workgroup*, if code:VariablePointers is enabled;
482e5c31af7Sopenharmony_ci    *StorageBuffer*, if code:VariablePointers or
483e5c31af7Sopenharmony_ci    code:VariablePointersStorageBuffer is enabled; *PhysicalStorageBuffer*,
484e5c31af7Sopenharmony_ci    if the code:PhysicalStorageBuffer64 addressing model is enabled
485e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-PhysicalStorageBuffer64-04708]]
486e5c31af7Sopenharmony_ci    If the code:PhysicalStorageBuffer64 addressing model is enabled, all
487e5c31af7Sopenharmony_ci    instructions that support memory access operands and that use a physical
488e5c31af7Sopenharmony_ci    pointer must: include the code:Aligned operand
489e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-PhysicalStorageBuffer64-04709]]
490e5c31af7Sopenharmony_ci    If the code:PhysicalStorageBuffer64 addressing model is enabled, any
491e5c31af7Sopenharmony_ci    access chain instruction that accesses into a code:RowMajor matrix must:
492e5c31af7Sopenharmony_ci    only be used as the code:Pointer operand to code:OpLoad or code:OpStore
493e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-PhysicalStorageBuffer64-04710]]
494e5c31af7Sopenharmony_ci    If the code:PhysicalStorageBuffer64 addressing model is enabled,
495e5c31af7Sopenharmony_ci    code:OpConvertUToPtr and code:OpConvertPtrToU must: use an integer type
496e5c31af7Sopenharmony_ci    whose code:Width is 64
497e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpTypeForwardPointer-04711]]
498e5c31af7Sopenharmony_ci    code:OpTypeForwardPointer must: have a storage class of
499e5c31af7Sopenharmony_ci    code:PhysicalStorageBuffer
500e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-None-04745]]
501e5c31af7Sopenharmony_ci    All variables with a storage class of *PushConstant* declared as an
502e5c31af7Sopenharmony_ci    array must: only be accessed by dynamically uniform indices
503e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-Result-04780]]
504e5c31af7Sopenharmony_ci    The code:Result code:Type operand of any code:OpImageRead or
505e5c31af7Sopenharmony_ci    code:OpImageSparseRead instruction must: be a vector of four components
506e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-Base-04781]]
507e5c31af7Sopenharmony_ci    The code:Base operand of any code:OpBitCount, code:OpBitReverse,
508e5c31af7Sopenharmony_ci    code:OpBitFieldInsert, code:OpBitFieldSExtract, or
509e5c31af7Sopenharmony_ci    code:OpBitFieldUExtract instruction must: be a 32-bit integer scalar or
510e5c31af7Sopenharmony_ci    a vector of 32-bit integers
511e5c31af7Sopenharmony_ci****
512e5c31af7Sopenharmony_ci--
513e5c31af7Sopenharmony_ci
514e5c31af7Sopenharmony_ci[[spirvenv-module-validation-runtime]]
515e5c31af7Sopenharmony_ci=== Runtime SPIR-V Validation
516e5c31af7Sopenharmony_ci
517e5c31af7Sopenharmony_ci[open,refpage='RuntimeSpirv',desc='Runtime SPIR-V Validation',type='spirv']
518e5c31af7Sopenharmony_ci--
519e5c31af7Sopenharmony_ci:refpage: RuntimeSpirv
520e5c31af7Sopenharmony_ci
521e5c31af7Sopenharmony_ciThe following rules must: be validated at runtime.
522e5c31af7Sopenharmony_ciThese rules depend on knowledge of the implementation and its capabilities
523e5c31af7Sopenharmony_ciand knowledge of runtime information, such as enabled features.
524e5c31af7Sopenharmony_ci
525e5c31af7Sopenharmony_ci.Valid Usage
526e5c31af7Sopenharmony_ci****
527e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
528e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-vulkanMemoryModel-06265]]
529e5c31af7Sopenharmony_ci    If <<features-vulkanMemoryModel,pname:vulkanMemoryModel>> is enabled and
530e5c31af7Sopenharmony_ci    <<features-vulkanMemoryModelDeviceScope,pname:vulkanMemoryModelDeviceScope>>
531e5c31af7Sopenharmony_ci    is not enabled, *Device* memory scope must: not be used.
532e5c31af7Sopenharmony_ciendif::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
533e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
534e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-vulkanMemoryModel-06266]]
535e5c31af7Sopenharmony_ci    If <<features-vulkanMemoryModel,pname:vulkanMemoryModel>> is not
536e5c31af7Sopenharmony_ci    enabled, *QueueFamily* memory scope must: not be used.
537e5c31af7Sopenharmony_ciendif::VK_VERSION_1_2,VK_KHR_vulkan_memory_model[]
538e5c31af7Sopenharmony_ciifdef::VK_KHR_shader_clock[]
539e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-shaderSubgroupClock-06267]]
540e5c31af7Sopenharmony_ci    If <<features-shaderSubgroupClock,pname:shaderSubgroupClock>> is not
541e5c31af7Sopenharmony_ci    enabled, the code:Subgroup scope must: not be used for
542e5c31af7Sopenharmony_ci    code:OpReadClockKHR.
543e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-shaderDeviceClock-06268]]
544e5c31af7Sopenharmony_ci    If <<features-shaderDeviceClock,pname:shaderDeviceClock>> is not
545e5c31af7Sopenharmony_ci    enabled, the code:Device scope must: not be used for
546e5c31af7Sopenharmony_ci    code:OpReadClockKHR.
547e5c31af7Sopenharmony_ciendif::VK_KHR_shader_clock[]
548e5c31af7Sopenharmony_ciifndef::VK_KHR_format_feature_flags2[]
549e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpTypeImage-06269]]
550e5c31af7Sopenharmony_ci    If
551e5c31af7Sopenharmony_ci    <<features-shaderStorageImageWriteWithoutFormat,shaderStorageImageWriteWithoutFormat>>
552e5c31af7Sopenharmony_ci    is not enabled, any variable created with a "`Type`" of code:OpTypeImage
553e5c31af7Sopenharmony_ci    that has a "`Sampled`" operand of 2 and an "`Image Format`" operand of
554e5c31af7Sopenharmony_ci    code:Unknown must: be decorated with code:NonWritable.
555e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpTypeImage-06270]]
556e5c31af7Sopenharmony_ci    If
557e5c31af7Sopenharmony_ci    <<features-shaderStorageImageReadWithoutFormat,shaderStorageImageReadWithoutFormat>>
558e5c31af7Sopenharmony_ci    is not enabled, any variable created with a "`Type`" of code:OpTypeImage
559e5c31af7Sopenharmony_ci    that has a "`Sampled`" operand of 2 and an "`Image Format`" operand of
560e5c31af7Sopenharmony_ci    code:Unknown must: be decorated with code:NonReadable.
561e5c31af7Sopenharmony_ciendif::VK_KHR_format_feature_flags2[]
562e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-Location-06272]]
563e5c31af7Sopenharmony_ci    The sum of code:Location and the number of locations the variable it
564e5c31af7Sopenharmony_ci    decorates consumes must: be less than or equal to the value for the
565e5c31af7Sopenharmony_ci    matching {ExecutionModel} defined in <<interfaces-iointerfaces-limits>>
566e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-Fragment-06427]]
567e5c31af7Sopenharmony_ci    When blending is enabled and one of the dual source blend modes is in
568e5c31af7Sopenharmony_ci    use, the maximum number of output attachments written to in the
569e5c31af7Sopenharmony_ci    code:Fragment {ExecutionModel} must: be less than or equal to
570e5c31af7Sopenharmony_ci    <<limits-maxFragmentDualSrcAttachments,pname:maxFragmentDualSrcAttachments>>
571e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-Location-06428]]
572e5c31af7Sopenharmony_ci    The maximum number of storage buffers, storage images, and output
573e5c31af7Sopenharmony_ci    code:Location decorated color attachments written to in the
574e5c31af7Sopenharmony_ci    code:Fragment {ExecutionModel} must: be less than or equal to
575e5c31af7Sopenharmony_ci    <<limits-maxFragmentCombinedOutputResources,pname:maxFragmentCombinedOutputResources>>
576e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
577e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpTypeRuntimeArray-06273]]
578e5c31af7Sopenharmony_ci    code:OpTypeRuntimeArray must: only be used for an array of variables
579e5c31af7Sopenharmony_ci    with storage class code:Uniform, code:StorageBuffer, or
580e5c31af7Sopenharmony_ci    code:UniformConstant, or for the outermost dimension of an array of
581e5c31af7Sopenharmony_ci    arrays of such variables if the
582e5c31af7Sopenharmony_ci    <<features-runtimeDescriptorArray,runtimeDescriptorArray>> feature is
583e5c31af7Sopenharmony_ci    enabled,
584e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-NonUniform-06274]]
585e5c31af7Sopenharmony_ci    If an instruction loads from or stores to a resource (including atomics
586e5c31af7Sopenharmony_ci    and image instructions) and the resource descriptor being accessed is
587e5c31af7Sopenharmony_ci    not dynamically uniform, then the operand corresponding to that resource
588e5c31af7Sopenharmony_ci    (e.g. the pointer or sampled image operand) must: be decorated with
589e5c31af7Sopenharmony_ci    code:NonUniform.
590e5c31af7Sopenharmony_ciendif::VK_VERSION_1_2,VK_EXT_descriptor_indexing[]
591e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_1[]
592e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_2,VK_KHR_shader_subgroup_extended_types[]
593e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-None-06275]]
594e5c31af7Sopenharmony_ci    <<features-subgroup-extended-types,shaderSubgroupExtendedTypes>> must:
595e5c31af7Sopenharmony_ci    be enabled for <<shaders-group-operations,group operations>> to use
596e5c31af7Sopenharmony_ci    8-bit integer, 16-bit integer, 64-bit integer, 16-bit floating-point,
597e5c31af7Sopenharmony_ci    and vectors of these types
598e5c31af7Sopenharmony_ciendif::VK_VERSION_1_2,VK_KHR_shader_subgroup_extended_types[]
599e5c31af7Sopenharmony_ciendif::VK_VERSION_1_1[]
600e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_2[]
601e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-subgroupBroadcastDynamicId-06276]]
602e5c31af7Sopenharmony_ci    If
603e5c31af7Sopenharmony_ci    <<features-subgroupBroadcastDynamicId,code:subgroupBroadcastDynamicId>>
604e5c31af7Sopenharmony_ci    is ename:VK_TRUE, and the shader module version is 1.5 or higher, the
605e5c31af7Sopenharmony_ci    "`Index`" for code:OpGroupNonUniformQuadBroadcast must: be dynamically
606e5c31af7Sopenharmony_ci    uniform within the derivative group.
607e5c31af7Sopenharmony_ci    Otherwise, "`Index`" must: be a constant.
608e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-subgroupBroadcastDynamicId-06277]]
609e5c31af7Sopenharmony_ci    If
610e5c31af7Sopenharmony_ci    <<features-subgroupBroadcastDynamicId,code:subgroupBroadcastDynamicId>>
611e5c31af7Sopenharmony_ci    is ename:VK_TRUE, and the shader module version is 1.5 or higher, the
612e5c31af7Sopenharmony_ci    "`Id`" for code:OpGroupNonUniformBroadcast must: be dynamically uniform
613e5c31af7Sopenharmony_ci    within the subgroup.
614e5c31af7Sopenharmony_ci    Otherwise, "`Id`" must: be a constant.
615e5c31af7Sopenharmony_ciendif::VK_VERSION_1_2[]
616e5c31af7Sopenharmony_ciifdef::VK_KHR_shader_atomic_int64[]
617e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-None-06278]]
618e5c31af7Sopenharmony_ci    <<features-shaderBufferInt64Atomics,shaderBufferInt64Atomics>> must: be
619e5c31af7Sopenharmony_ci    enabled for 64-bit integer atomic operations to be supported on a
620e5c31af7Sopenharmony_ci    _Pointer_ with a *Storage Class* of *StorageBuffer* or *Uniform*.
621e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-None-06279]]
622e5c31af7Sopenharmony_ci    <<features-shaderSharedInt64Atomics,shaderSharedInt64Atomics>> must: be
623e5c31af7Sopenharmony_ci    enabled for 64-bit integer atomic operations to be supported on a
624e5c31af7Sopenharmony_ci    _Pointer_ with a *Storage Class* of *Workgroup*.
625e5c31af7Sopenharmony_ciendif::VK_KHR_shader_atomic_int64[]
626e5c31af7Sopenharmony_ciifdef::VK_EXT_shader_atomic_float[]
627e5c31af7Sopenharmony_ciifndef::VK_EXT_shader_atomic_float2[]
628e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-None-06280]]
629e5c31af7Sopenharmony_ci    <<features-shaderBufferFloat32Atomics,shaderBufferFloat32Atomics>>, or
630e5c31af7Sopenharmony_ci    <<features-shaderBufferFloat32AtomicAdd,shaderBufferFloat32AtomicAdd>>,
631e5c31af7Sopenharmony_ci    or <<features-shaderBufferFloat64Atomics,shaderBufferFloat64Atomics>>,
632e5c31af7Sopenharmony_ci    or
633e5c31af7Sopenharmony_ci    <<features-shaderBufferFloat64AtomicAdd,shaderBufferFloat64AtomicAdd>>
634e5c31af7Sopenharmony_ci    must: be enabled for floating-point atomic operations to be supported on
635e5c31af7Sopenharmony_ci    a _Pointer_ with a *Storage Class* of *StorageBuffer*.
636e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-None-06281]]
637e5c31af7Sopenharmony_ci    <<features-shaderSharedFloat32Atomics,shaderSharedFloat32Atomics>>, or
638e5c31af7Sopenharmony_ci    <<features-shaderSharedFloat32AtomicAdd,shaderSharedFloat32AtomicAdd>>,
639e5c31af7Sopenharmony_ci    or <<features-shaderSharedFloat64Atomics,shaderSharedFloat64Atomics>>,
640e5c31af7Sopenharmony_ci    or
641e5c31af7Sopenharmony_ci    <<features-shaderSharedFloat64AtomicAdd,shaderSharedFloat64AtomicAdd>>
642e5c31af7Sopenharmony_ci    must: be enabled for floating-point atomic operations to be supported on
643e5c31af7Sopenharmony_ci    a _Pointer_ with a *Storage Class* of *Workgroup*.
644e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-None-06282]]
645e5c31af7Sopenharmony_ci    <<features-shaderImageFloat32Atomics,shaderImageFloat32Atomics>> or
646e5c31af7Sopenharmony_ci    <<features-shaderImageFloat32AtomicAdd,shaderImageFloat32AtomicAdd>>
647e5c31af7Sopenharmony_ci    must: be enabled for 32-bit floating-point atomic operations to be
648e5c31af7Sopenharmony_ci    supported on a _Pointer_ with a *Storage Class* of *Image*.
649e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-None-06283]]
650e5c31af7Sopenharmony_ci    <<features-sparseImageFloat32Atomics,sparseImageFloat32Atomics>> or
651e5c31af7Sopenharmony_ci    <<features-sparseImageFloat32AtomicAdd,sparseImageFloat32AtomicAdd>>
652e5c31af7Sopenharmony_ci    must: be enabled for 32-bit floating-point atomics to be supported on
653e5c31af7Sopenharmony_ci    sparse images.
654e5c31af7Sopenharmony_ciendif::VK_EXT_shader_atomic_float2[]
655e5c31af7Sopenharmony_ciendif::VK_EXT_shader_atomic_float[]
656e5c31af7Sopenharmony_ciifdef::VK_EXT_shader_atomic_float2[]
657e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-None-06284]]
658e5c31af7Sopenharmony_ci    <<features-shaderBufferFloat32Atomics,shaderBufferFloat32Atomics>>, or
659e5c31af7Sopenharmony_ci    <<features-shaderBufferFloat32AtomicAdd,shaderBufferFloat32AtomicAdd>>,
660e5c31af7Sopenharmony_ci    or <<features-shaderBufferFloat64Atomics,shaderBufferFloat64Atomics>>,
661e5c31af7Sopenharmony_ci    or
662e5c31af7Sopenharmony_ci    <<features-shaderBufferFloat64AtomicAdd,shaderBufferFloat64AtomicAdd>>,
663e5c31af7Sopenharmony_ci    or
664e5c31af7Sopenharmony_ci    <<features-shaderBufferFloat16AtomicMinMax,shaderBufferFloat16Atomics>>,
665e5c31af7Sopenharmony_ci    or
666e5c31af7Sopenharmony_ci    <<features-shaderBufferFloat16AtomicMinMax,shaderBufferFloat16AtomicAdd>>,
667e5c31af7Sopenharmony_ci    or
668e5c31af7Sopenharmony_ci    <<features-shaderBufferFloat16AtomicMinMax,shaderBufferFloat16AtomicMinMax>>,
669e5c31af7Sopenharmony_ci    or
670e5c31af7Sopenharmony_ci    <<features-shaderBufferFloat32AtomicMinMax,shaderBufferFloat32AtomicMinMax>>,
671e5c31af7Sopenharmony_ci    or
672e5c31af7Sopenharmony_ci    <<features-shaderBufferFloat64AtomicMinMax,shaderBufferFloat64AtomicMinMax>>
673e5c31af7Sopenharmony_ci    must: be enabled for floating-point atomic operations to be supported on
674e5c31af7Sopenharmony_ci    a _Pointer_ with a *Storage Class* of *StorageBuffer*.
675e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-None-06285]]
676e5c31af7Sopenharmony_ci    <<features-shaderSharedFloat32Atomics,shaderSharedFloat32Atomics>>, or
677e5c31af7Sopenharmony_ci    <<features-shaderSharedFloat32AtomicAdd,shaderSharedFloat32AtomicAdd>>,
678e5c31af7Sopenharmony_ci    or <<features-shaderSharedFloat64Atomics,shaderSharedFloat64Atomics>>,
679e5c31af7Sopenharmony_ci    or
680e5c31af7Sopenharmony_ci    <<features-shaderSharedFloat64AtomicAdd,shaderSharedFloat64AtomicAdd>>,
681e5c31af7Sopenharmony_ci    or
682e5c31af7Sopenharmony_ci    <<features-shaderBufferFloat16AtomicMinMax,shaderSharedFloat16Atomics>>,
683e5c31af7Sopenharmony_ci    or
684e5c31af7Sopenharmony_ci    <<features-shaderBufferFloat16AtomicMinMax,shaderSharedFloat16AtomicAdd>>,
685e5c31af7Sopenharmony_ci    or
686e5c31af7Sopenharmony_ci    <<features-shaderBufferFloat16AtomicMinMax,shaderSharedFloat16AtomicMinMax>>,
687e5c31af7Sopenharmony_ci    or
688e5c31af7Sopenharmony_ci    <<features-shaderSharedFloat32AtomicMinMax,shaderSharedFloat32AtomicMinMax>>,
689e5c31af7Sopenharmony_ci    or
690e5c31af7Sopenharmony_ci    <<features-shaderSharedFloat64AtomicMinMax,shaderSharedFloat64AtomicMinMax>>
691e5c31af7Sopenharmony_ci    must: be enabled for floating-point atomic operations to be supported on
692e5c31af7Sopenharmony_ci    a _Pointer_ with a *Storage Class* of *Workgroup*.
693e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-None-06286]]
694e5c31af7Sopenharmony_ci    <<features-shaderImageFloat32Atomics,shaderImageFloat32Atomics>>, or
695e5c31af7Sopenharmony_ci    <<features-shaderImageFloat32AtomicAdd,shaderImageFloat32AtomicAdd>>, or
696e5c31af7Sopenharmony_ci    <<features-shaderImageFloat32AtomicMinMax,shaderImageFloat32AtomicMinMax>>
697e5c31af7Sopenharmony_ci    must: be enabled for 32-bit floating-point atomic operations to be
698e5c31af7Sopenharmony_ci    supported on a _Pointer_ with a *Storage Class* of *Image*.
699e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-None-06287]]
700e5c31af7Sopenharmony_ci    <<features-sparseImageFloat32Atomics,sparseImageFloat32Atomics>>, or
701e5c31af7Sopenharmony_ci    <<features-sparseImageFloat32AtomicAdd,sparseImageFloat32AtomicAdd>>, or
702e5c31af7Sopenharmony_ci    <<features-sparseImageFloat32AtomicMinMax,sparseImageFloat32AtomicMinMax>>
703e5c31af7Sopenharmony_ci    must: be enabled for 32-bit floating-point atomics to be supported on
704e5c31af7Sopenharmony_ci    sparse images.
705e5c31af7Sopenharmony_ciendif::VK_EXT_shader_atomic_float2[]
706e5c31af7Sopenharmony_ciifdef::VK_EXT_shader_image_atomic_int64[]
707e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-None-06288]]
708e5c31af7Sopenharmony_ci    <<features-shaderImageInt64Atomics,shaderImageInt64Atomics>> must: be
709e5c31af7Sopenharmony_ci    enabled for 64-bit integer atomic operations to be supported on a
710e5c31af7Sopenharmony_ci    _Pointer_ with a *Storage Class* of *Image*.
711e5c31af7Sopenharmony_ciendif::VK_EXT_shader_image_atomic_int64[]
712e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_2,VK_KHR_shader_float_controls[]
713e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-denormBehaviorIndependence-06289]]
714e5c31af7Sopenharmony_ci    If
715e5c31af7Sopenharmony_ci    <<features-denormBehaviorIndependence,pname:denormBehaviorIndependence>>
716e5c31af7Sopenharmony_ci    is ename:VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY, then the
717e5c31af7Sopenharmony_ci    entry point must: use the same denormals execution mode for both 16-bit
718e5c31af7Sopenharmony_ci    and 64-bit floating-point types.
719e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-denormBehaviorIndependence-06290]]
720e5c31af7Sopenharmony_ci    If
721e5c31af7Sopenharmony_ci    <<features-denormBehaviorIndependence,pname:denormBehaviorIndependence>>
722e5c31af7Sopenharmony_ci    is ename:VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE, then the entry
723e5c31af7Sopenharmony_ci    point must: use the same denormals execution mode for all floating-point
724e5c31af7Sopenharmony_ci    types.
725e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-roundingModeIndependence-06291]]
726e5c31af7Sopenharmony_ci    If <<features-roundingModeIndependence,pname:roundingModeIndependence>>
727e5c31af7Sopenharmony_ci    is ename:VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY, then the
728e5c31af7Sopenharmony_ci    entry point must: use the same rounding execution mode for both 16-bit
729e5c31af7Sopenharmony_ci    and 64-bit floating-point types.
730e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-roundingModeIndependence-06292]]
731e5c31af7Sopenharmony_ci    If <<features-roundingModeIndependence,pname:roundingModeIndependence>>
732e5c31af7Sopenharmony_ci    is ename:VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE, then the entry
733e5c31af7Sopenharmony_ci    point must: use the same rounding execution mode for all floating-point
734e5c31af7Sopenharmony_ci    types.
735e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-shaderSignedZeroInfNanPreserveFloat16-06293]]
736e5c31af7Sopenharmony_ci    If
737e5c31af7Sopenharmony_ci    <<limits-shaderSignedZeroInfNanPreserveFloat16,pname:shaderSignedZeroInfNanPreserveFloat16>>
738e5c31af7Sopenharmony_ci    is ename:VK_FALSE, then code:SignedZeroInfNanPreserve for 16-bit
739e5c31af7Sopenharmony_ci    floating-point type must: not be used.
740e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-shaderSignedZeroInfNanPreserveFloat32-06294]]
741e5c31af7Sopenharmony_ci    If
742e5c31af7Sopenharmony_ci    <<limits-shaderSignedZeroInfNanPreserveFloat32,pname:shaderSignedZeroInfNanPreserveFloat32>>
743e5c31af7Sopenharmony_ci    is ename:VK_FALSE, then code:SignedZeroInfNanPreserve for 32-bit
744e5c31af7Sopenharmony_ci    floating-point type must: not be used.
745e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-shaderSignedZeroInfNanPreserveFloat64-06295]]
746e5c31af7Sopenharmony_ci    If
747e5c31af7Sopenharmony_ci    <<limits-shaderSignedZeroInfNanPreserveFloat64,pname:shaderSignedZeroInfNanPreserveFloat64>>
748e5c31af7Sopenharmony_ci    is ename:VK_FALSE, then code:SignedZeroInfNanPreserve for 64-bit
749e5c31af7Sopenharmony_ci    floating-point type must: not be used.
750e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-shaderDenormPreserveFloat16-06296]]
751e5c31af7Sopenharmony_ci    If
752e5c31af7Sopenharmony_ci    <<limits-shaderDenormPreserveFloat16,pname:shaderDenormPreserveFloat16>>
753e5c31af7Sopenharmony_ci    is ename:VK_FALSE, then code:DenormPreserve for 16-bit floating-point
754e5c31af7Sopenharmony_ci    type must: not be used.
755e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-shaderDenormPreserveFloat32-06297]]
756e5c31af7Sopenharmony_ci    If
757e5c31af7Sopenharmony_ci    <<limits-shaderDenormPreserveFloat32,pname:shaderDenormPreserveFloat32>>
758e5c31af7Sopenharmony_ci    is ename:VK_FALSE, then code:DenormPreserve for 32-bit floating-point
759e5c31af7Sopenharmony_ci    type must: not be used.
760e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-shaderDenormPreserveFloat64-06298]]
761e5c31af7Sopenharmony_ci    If
762e5c31af7Sopenharmony_ci    <<limits-shaderDenormPreserveFloat64,pname:shaderDenormPreserveFloat64>>
763e5c31af7Sopenharmony_ci    is ename:VK_FALSE, then code:DenormPreserve for 64-bit floating-point
764e5c31af7Sopenharmony_ci    type must: not be used.
765e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-shaderDenormFlushToZeroFloat16-06299]]
766e5c31af7Sopenharmony_ci    If
767e5c31af7Sopenharmony_ci    <<limits-shaderDenormFlushToZeroFloat16,pname:shaderDenormFlushToZeroFloat16>>
768e5c31af7Sopenharmony_ci    is ename:VK_FALSE, then code:DenormFlushToZero for 16-bit floating-point
769e5c31af7Sopenharmony_ci    type must: not be used.
770e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-shaderDenormFlushToZeroFloat32-06300]]
771e5c31af7Sopenharmony_ci    If
772e5c31af7Sopenharmony_ci    <<limits-shaderDenormFlushToZeroFloat32,pname:shaderDenormFlushToZeroFloat32>>
773e5c31af7Sopenharmony_ci    is ename:VK_FALSE, then code:DenormFlushToZero for 32-bit floating-point
774e5c31af7Sopenharmony_ci    type must: not be used.
775e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-shaderDenormFlushToZeroFloat64-06301]]
776e5c31af7Sopenharmony_ci    If
777e5c31af7Sopenharmony_ci    <<limits-shaderDenormFlushToZeroFloat64,pname:shaderDenormFlushToZeroFloat64>>
778e5c31af7Sopenharmony_ci    is ename:VK_FALSE, then code:DenormFlushToZero for 64-bit floating-point
779e5c31af7Sopenharmony_ci    type must: not be used.
780e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-shaderRoundingModeRTEFloat16-06302]]
781e5c31af7Sopenharmony_ci    If
782e5c31af7Sopenharmony_ci    <<limits-shaderRoundingModeRTEFloat16,pname:shaderRoundingModeRTEFloat16>>
783e5c31af7Sopenharmony_ci    is ename:VK_FALSE, then code:RoundingModeRTE for 16-bit floating-point
784e5c31af7Sopenharmony_ci    type must: not be used.
785e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-shaderRoundingModeRTEFloat32-06303]]
786e5c31af7Sopenharmony_ci    If
787e5c31af7Sopenharmony_ci    <<limits-shaderRoundingModeRTEFloat32,pname:shaderRoundingModeRTEFloat32>>
788e5c31af7Sopenharmony_ci    is ename:VK_FALSE, then code:RoundingModeRTE for 32-bit floating-point
789e5c31af7Sopenharmony_ci    type must: not be used.
790e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-shaderRoundingModeRTEFloat64-06304]]
791e5c31af7Sopenharmony_ci    If
792e5c31af7Sopenharmony_ci    <<limits-shaderRoundingModeRTEFloat64,pname:shaderRoundingModeRTEFloat64>>
793e5c31af7Sopenharmony_ci    is ename:VK_FALSE, then code:RoundingModeRTE for 64-bit floating-point
794e5c31af7Sopenharmony_ci    type must: not be used.
795e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-shaderRoundingModeRTZFloat16-06305]]
796e5c31af7Sopenharmony_ci    If
797e5c31af7Sopenharmony_ci    <<limits-shaderRoundingModeRTZFloat16,pname:shaderRoundingModeRTZFloat16>>
798e5c31af7Sopenharmony_ci    is ename:VK_FALSE, then code:RoundingModeRTZ for 16-bit floating-point
799e5c31af7Sopenharmony_ci    type must: not be used.
800e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-shaderRoundingModeRTZFloat32-06306]]
801e5c31af7Sopenharmony_ci    If
802e5c31af7Sopenharmony_ci    <<limits-shaderRoundingModeRTZFloat32,pname:shaderRoundingModeRTZFloat32>>
803e5c31af7Sopenharmony_ci    is ename:VK_FALSE, then code:RoundingModeRTZ for 32-bit floating-point
804e5c31af7Sopenharmony_ci    type must: not be used.
805e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-shaderRoundingModeRTZFloat64-06307]]
806e5c31af7Sopenharmony_ci    If
807e5c31af7Sopenharmony_ci    <<limits-shaderRoundingModeRTZFloat64,pname:shaderRoundingModeRTZFloat64>>
808e5c31af7Sopenharmony_ci    is ename:VK_FALSE, then code:RoundingModeRTZ for 64-bit floating-point
809e5c31af7Sopenharmony_ci    type must: not be used.
810e5c31af7Sopenharmony_ciendif::VK_VERSION_1_2,VK_KHR_shader_float_controls[]
811e5c31af7Sopenharmony_ciifdef::VK_EXT_transform_feedback[]
812e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-Offset-06308]]
813e5c31af7Sopenharmony_ci    The code:Offset plus size of the type of each variable, in the output
814e5c31af7Sopenharmony_ci    interface of the entry point being compiled, decorated with
815e5c31af7Sopenharmony_ci    code:XfbBuffer must: not be greater than
816e5c31af7Sopenharmony_ci    sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:maxTransformFeedbackBufferDataSize
817e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-XfbBuffer-06309]]
818e5c31af7Sopenharmony_ci    For any given code:XfbBuffer value, define the buffer data size to be
819e5c31af7Sopenharmony_ci    smallest number of bytes such that, for all outputs decorated with the
820e5c31af7Sopenharmony_ci    same code:XfbBuffer value, the size of the output interface variable
821e5c31af7Sopenharmony_ci    plus the code:Offset is less than or equal to the buffer data size.
822e5c31af7Sopenharmony_ci    For a given code:Stream, the sum of all the buffer data sizes for all
823e5c31af7Sopenharmony_ci    buffers writing to that stream the must: not exceed
824e5c31af7Sopenharmony_ci    sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:maxTransformFeedbackStreamDataSize
825e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpEmitStreamVertex-06310]]
826e5c31af7Sopenharmony_ci    The Stream value to code:OpEmitStreamVertex and
827e5c31af7Sopenharmony_ci    code:OpEndStreamPrimitive must: be less than
828e5c31af7Sopenharmony_ci    sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:maxTransformFeedbackStreams
829e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-transformFeedbackStreamsLinesTriangles-06311]]
830e5c31af7Sopenharmony_ci    If the geometry shader emits to more than one vertex stream and
831e5c31af7Sopenharmony_ci    sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:transformFeedbackStreamsLinesTriangles
832e5c31af7Sopenharmony_ci    is ename:VK_FALSE, then execution mode must: be code:OutputPoints
833e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-Stream-06312]]
834e5c31af7Sopenharmony_ci    The stream number value to code:Stream must: be less than
835e5c31af7Sopenharmony_ci    sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:maxTransformFeedbackStreams
836e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-XfbStride-06313]]
837e5c31af7Sopenharmony_ci    The XFB Stride value to code:XfbStride must: be less than or equal to
838e5c31af7Sopenharmony_ci    sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:maxTransformFeedbackBufferDataStride
839e5c31af7Sopenharmony_ciendif::VK_EXT_transform_feedback[]
840e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
841e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-PhysicalStorageBuffer64-06314]]
842e5c31af7Sopenharmony_ci    If the code:PhysicalStorageBuffer64 addressing model is enabled any load
843e5c31af7Sopenharmony_ci    or store through a physical pointer type must: be aligned to a multiple
844e5c31af7Sopenharmony_ci    of the size of the largest scalar type in the pointed-to type.
845e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-PhysicalStorageBuffer64-06315]]
846e5c31af7Sopenharmony_ci    If the code:PhysicalStorageBuffer64 addressing model is enabled the
847e5c31af7Sopenharmony_ci    pointer value of a memory access instruction must: be at least as
848e5c31af7Sopenharmony_ci    aligned as specified by the code:Aligned memory access operand.
849e5c31af7Sopenharmony_ciendif::VK_VERSION_1_2,VK_EXT_buffer_device_address,VK_KHR_buffer_device_address[]
850e5c31af7Sopenharmony_ciifdef::VK_NV_cooperative_matrix[]
851e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpTypeCooperativeMatrixNV-06316]]
852e5c31af7Sopenharmony_ci    For code:OpTypeCooperativeMatrixNV, the component type, scope, number of
853e5c31af7Sopenharmony_ci    rows, and number of columns must: match one of the matrices in any of
854e5c31af7Sopenharmony_ci    the supported slink:VkCooperativeMatrixPropertiesNV.
855e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpCooperativeMatrixMulAddNV-06317]]
856e5c31af7Sopenharmony_ci    For code:OpCooperativeMatrixMulAddNV, the type of code:A must: have
857e5c31af7Sopenharmony_ci    slink:VkCooperativeMatrixPropertiesNV::pname:MSize rows and
858e5c31af7Sopenharmony_ci    slink:VkCooperativeMatrixPropertiesNV::pname:KSize columns and have a
859e5c31af7Sopenharmony_ci    component type that matches
860e5c31af7Sopenharmony_ci    slink:VkCooperativeMatrixPropertiesNV::pname:AType.
861e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpCooperativeMatrixMulAddNV-06318]]
862e5c31af7Sopenharmony_ci    For code:OpCooperativeMatrixMulAddNV, the type of code:B must: have
863e5c31af7Sopenharmony_ci    slink:VkCooperativeMatrixPropertiesNV::pname:KSize rows and
864e5c31af7Sopenharmony_ci    slink:VkCooperativeMatrixPropertiesNV::pname:NSize columns and have a
865e5c31af7Sopenharmony_ci    component type that matches
866e5c31af7Sopenharmony_ci    slink:VkCooperativeMatrixPropertiesNV::pname:BType.
867e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpCooperativeMatrixMulAddNV-06319]]
868e5c31af7Sopenharmony_ci    For code:OpCooperativeMatrixMulAddNV, the type of code:C must: have
869e5c31af7Sopenharmony_ci    slink:VkCooperativeMatrixPropertiesNV::pname:MSize rows and
870e5c31af7Sopenharmony_ci    slink:VkCooperativeMatrixPropertiesNV::pname:NSize columns and have a
871e5c31af7Sopenharmony_ci    component type that matches
872e5c31af7Sopenharmony_ci    slink:VkCooperativeMatrixPropertiesNV::pname:CType.
873e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpCooperativeMatrixMulAddNV-06320]]
874e5c31af7Sopenharmony_ci    For code:OpCooperativeMatrixMulAddNV, the type of code:Result must: have
875e5c31af7Sopenharmony_ci    slink:VkCooperativeMatrixPropertiesNV::pname:MSize rows and
876e5c31af7Sopenharmony_ci    slink:VkCooperativeMatrixPropertiesNV::pname:NSize columns and have a
877e5c31af7Sopenharmony_ci    component type that matches
878e5c31af7Sopenharmony_ci    slink:VkCooperativeMatrixPropertiesNV::pname:DType.
879e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpCooperativeMatrixMulAddNV-06321]]
880e5c31af7Sopenharmony_ci    For code:OpCooperativeMatrixMulAddNV, the type of code:A, code:B,
881e5c31af7Sopenharmony_ci    code:C, and code:Result must: all have a scope of pname:scope.
882e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpTypeCooperativeMatrixNV-06322]]
883e5c31af7Sopenharmony_ci    code:OpTypeCooperativeMatrixNV and code:OpCooperativeMatrix*
884e5c31af7Sopenharmony_ci    instructions must: not be used in shader stages not included in
885e5c31af7Sopenharmony_ci    slink:VkPhysicalDeviceCooperativeMatrixPropertiesNV::pname:cooperativeMatrixSupportedStages.
886e5c31af7Sopenharmony_ciendif::VK_NV_cooperative_matrix[]
887e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-DescriptorSet-06323]]
888e5c31af7Sopenharmony_ci    code:DescriptorSet and code:Binding decorations must: obey the
889e5c31af7Sopenharmony_ci    constraints on storage class, type, and descriptor type described in
890e5c31af7Sopenharmony_ci    <<interfaces-resources-setandbinding,DescriptorSet and Binding
891e5c31af7Sopenharmony_ci    Assignment>>
892e5c31af7Sopenharmony_ciifdef::VK_NV_cooperative_matrix[]
893e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpCooperativeMatrixLoadNV-06324]]
894e5c31af7Sopenharmony_ci    For code:OpCooperativeMatrixLoadNV and code:OpCooperativeMatrixStoreNV
895e5c31af7Sopenharmony_ci    instructions, the code:Pointer and code:Stride operands must: be aligned
896e5c31af7Sopenharmony_ci    to at least the lesser of 16 bytes or the natural alignment of a row or
897e5c31af7Sopenharmony_ci    column (depending on code:ColumnMajor) of the matrix (where the natural
898e5c31af7Sopenharmony_ci    alignment is the number of columns/rows multiplied by the component
899e5c31af7Sopenharmony_ci    size).
900e5c31af7Sopenharmony_ciendif::VK_NV_cooperative_matrix[]
901e5c31af7Sopenharmony_ciifdef::VK_KHR_portability_subset[]
902e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-shaderSampleRateInterpolationFunctions-06325]]
903e5c31af7Sopenharmony_ci    If the `apiext:VK_KHR_portability_subset` extension is enabled, and
904e5c31af7Sopenharmony_ci    slink:VkPhysicalDevicePortabilitySubsetFeaturesKHR::pname:shaderSampleRateInterpolationFunctions
905e5c31af7Sopenharmony_ci    is ename:VK_FALSE, then `GLSL.std.450` fragment interpolation functions
906e5c31af7Sopenharmony_ci    are not supported by the implementation and code:OpCapability must: not
907e5c31af7Sopenharmony_ci    be set to code:InterpolationFunction.
908e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-tessellationShader-06326]]
909e5c31af7Sopenharmony_ci    If <<features-tessellationShader,pname:tessellationShader>> is enabled,
910e5c31af7Sopenharmony_ci    and the `apiext:VK_KHR_portability_subset` extension is enabled, and
911e5c31af7Sopenharmony_ci    slink:VkPhysicalDevicePortabilitySubsetFeaturesKHR::pname:tessellationIsolines
912e5c31af7Sopenharmony_ci    is ename:VK_FALSE, then code:OpExecutionMode must: not be set to
913e5c31af7Sopenharmony_ci    code:IsoLines.
914e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-tessellationShader-06327]]
915e5c31af7Sopenharmony_ci    If <<features-tessellationShader,pname:tessellationShader>> is enabled,
916e5c31af7Sopenharmony_ci    and the `apiext:VK_KHR_portability_subset` extension is enabled, and
917e5c31af7Sopenharmony_ci    slink:VkPhysicalDevicePortabilitySubsetFeaturesKHR::pname:tessellationPointMode
918e5c31af7Sopenharmony_ci    is ename:VK_FALSE, then code:OpExecutionMode must: not be set to
919e5c31af7Sopenharmony_ci    code:PointMode.
920e5c31af7Sopenharmony_ciendif::VK_KHR_portability_subset[]
921e5c31af7Sopenharmony_ciifdef::VK_KHR_8bit_storage[]
922e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-storageBuffer8BitAccess-06328]]
923e5c31af7Sopenharmony_ci    If <<features-storageBuffer8BitAccess,pname:storageBuffer8BitAccess>> is
924e5c31af7Sopenharmony_ci    ename:VK_FALSE, then objects containing an 8-bit integer element must:
925e5c31af7Sopenharmony_ci    not have storage class of *StorageBuffer*, *ShaderRecordBufferKHR*, or
926e5c31af7Sopenharmony_ci    *PhysicalStorageBuffer*.
927e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-uniformAndStorageBuffer8BitAccess-06329]]
928e5c31af7Sopenharmony_ci    If
929e5c31af7Sopenharmony_ci    <<features-uniformAndStorageBuffer8BitAccess,pname:uniformAndStorageBuffer8BitAccess>>
930e5c31af7Sopenharmony_ci    is ename:VK_FALSE, then objects in the *Uniform* storage class with the
931e5c31af7Sopenharmony_ci    *Block* decoration must: not have an 8-bit integer member.
932e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-storagePushConstant8-06330]]
933e5c31af7Sopenharmony_ci    If <<features-storagePushConstant8,pname:storagePushConstant8>> is
934e5c31af7Sopenharmony_ci    ename:VK_FALSE, then objects containing an 8-bit integer element must:
935e5c31af7Sopenharmony_ci    not have storage class of *PushConstant*.
936e5c31af7Sopenharmony_ciendif::VK_KHR_8bit_storage[]
937e5c31af7Sopenharmony_ciifdef::VK_KHR_16bit_storage[]
938e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-storageBuffer16BitAccess-06331]]
939e5c31af7Sopenharmony_ci    If <<features-storageBuffer16BitAccess,pname:storageBuffer16BitAccess>>
940e5c31af7Sopenharmony_ci    is ename:VK_FALSE, then objects containing 16-bit integer or 16-bit
941e5c31af7Sopenharmony_ci    floating-point elements must: not have storage class of *StorageBuffer*,
942e5c31af7Sopenharmony_ci    *ShaderRecordBufferKHR*, or *PhysicalStorageBuffer*.
943e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-uniformAndStorageBuffer16BitAccess-06332]]
944e5c31af7Sopenharmony_ci    If
945e5c31af7Sopenharmony_ci    <<features-uniformAndStorageBuffer16BitAccess,pname:uniformAndStorageBuffer16BitAccess>>
946e5c31af7Sopenharmony_ci    is ename:VK_FALSE, then objects in the *Uniform* storage class with the
947e5c31af7Sopenharmony_ci    *Block* decoration must: not have 16-bit integer or 16-bit
948e5c31af7Sopenharmony_ci    floating-point members.
949e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-storagePushConstant16-06333]]
950e5c31af7Sopenharmony_ci    If <<features-storagePushConstant16,pname:storagePushConstant16>> is
951e5c31af7Sopenharmony_ci    ename:VK_FALSE, then objects containing 16-bit integer or 16-bit
952e5c31af7Sopenharmony_ci    floating-point elements must: not have storage class of *PushConstant*.
953e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-storageInputOutput16-06334]]
954e5c31af7Sopenharmony_ci    If <<features-storageInputOutput16,pname:storageInputOutput16>> is
955e5c31af7Sopenharmony_ci    ename:VK_FALSE, then objects containing 16-bit integer or 16-bit
956e5c31af7Sopenharmony_ci    floating-point elements must: not have storage class of *Input* or
957e5c31af7Sopenharmony_ci    *Output*.
958e5c31af7Sopenharmony_ciendif::VK_KHR_16bit_storage[]
959e5c31af7Sopenharmony_ciifdef::VK_EXT_shader_atomic_float[]
960e5c31af7Sopenharmony_ciifndef::VK_EXT_shader_atomic_float2[]
961e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-None-06335]]
962e5c31af7Sopenharmony_ci    <<features-shaderBufferFloat32Atomics,shaderBufferFloat32Atomics>>, or
963e5c31af7Sopenharmony_ci    <<features-shaderBufferFloat32AtomicAdd,shaderBufferFloat32AtomicAdd>>,
964e5c31af7Sopenharmony_ci    or <<features-shaderSharedFloat32Atomics,shaderSharedFloat32Atomics>>,
965e5c31af7Sopenharmony_ci    or
966e5c31af7Sopenharmony_ci    <<features-shaderSharedFloat32AtomicAdd,shaderSharedFloat32AtomicAdd>>,
967e5c31af7Sopenharmony_ci    or <<features-shaderImageFloat32Atomics,shaderImageFloat32Atomics>>, or
968e5c31af7Sopenharmony_ci    <<features-shaderImageFloat32AtomicAdd,shaderImageFloat32AtomicAdd>>
969e5c31af7Sopenharmony_ci    must: be enabled for 32-bit floating point atomic operations
970e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-None-06336]]
971e5c31af7Sopenharmony_ci    <<features-shaderBufferFloat64Atomics,shaderBufferFloat64Atomics>>, or
972e5c31af7Sopenharmony_ci    <<features-shaderBufferFloat64AtomicAdd,shaderBufferFloat64AtomicAdd>>,
973e5c31af7Sopenharmony_ci    or <<features-shaderSharedFloat64Atomics,shaderSharedFloat64Atomics>>,
974e5c31af7Sopenharmony_ci    or
975e5c31af7Sopenharmony_ci    <<features-shaderSharedFloat64AtomicAdd,shaderSharedFloat64AtomicAdd>>
976e5c31af7Sopenharmony_ci    must: be enabled for 64-bit floating point atomic operations
977e5c31af7Sopenharmony_ciendif::VK_EXT_shader_atomic_float2[]
978e5c31af7Sopenharmony_ciendif::VK_EXT_shader_atomic_float[]
979e5c31af7Sopenharmony_ciifdef::VK_EXT_shader_atomic_float2[]
980e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-None-06337]]
981e5c31af7Sopenharmony_ci    <<features-shaderBufferFloat16Atomics,shaderBufferFloat16Atomics>>, or
982e5c31af7Sopenharmony_ci    <<features-shaderBufferFloat16AtomicAdd,shaderBufferFloat16AtomicAdd>>,
983e5c31af7Sopenharmony_ci    or
984e5c31af7Sopenharmony_ci    <<features-shaderBufferFloat16AtomicMinMax,shaderBufferFloat16AtomicMinMax>>,
985e5c31af7Sopenharmony_ci    or <<features-shaderSharedFloat16Atomics,shaderSharedFloat16Atomics>>,
986e5c31af7Sopenharmony_ci    or
987e5c31af7Sopenharmony_ci    <<features-shaderSharedFloat16AtomicAdd,shaderSharedFloat16AtomicAdd>>,
988e5c31af7Sopenharmony_ci    or
989e5c31af7Sopenharmony_ci    <<features-shaderSharedFloat16AtomicMinMax,shaderSharedFloat16AtomicMinMax>>
990e5c31af7Sopenharmony_ci    must: be enabled for 16-bit floating point atomic operations
991e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-None-06338]]
992e5c31af7Sopenharmony_ci    <<features-shaderBufferFloat32Atomics,shaderBufferFloat32Atomics>>, or
993e5c31af7Sopenharmony_ci    <<features-shaderBufferFloat32AtomicAdd,shaderBufferFloat32AtomicAdd>>,
994e5c31af7Sopenharmony_ci    or <<features-shaderSharedFloat32Atomics,shaderSharedFloat32Atomics>>,
995e5c31af7Sopenharmony_ci    or
996e5c31af7Sopenharmony_ci    <<features-shaderSharedFloat32AtomicAdd,shaderSharedFloat32AtomicAdd>>,
997e5c31af7Sopenharmony_ci    or <<features-shaderImageFloat32Atomics,shaderImageFloat32Atomics>>, or
998e5c31af7Sopenharmony_ci    <<features-shaderImageFloat32AtomicAdd,shaderImageFloat32AtomicAdd>> or
999e5c31af7Sopenharmony_ci    <<features-shaderBufferFloat32AtomicMinMax,shaderBufferFloat32AtomicMinMax>>,
1000e5c31af7Sopenharmony_ci    or
1001e5c31af7Sopenharmony_ci    <<features-shaderSharedFloat32AtomicMinMax,shaderSharedFloat32AtomicMinMax>>,
1002e5c31af7Sopenharmony_ci    or
1003e5c31af7Sopenharmony_ci    <<features-shaderImageFloat32AtomicMinMax,shaderImageFloat32AtomicMinMax>>
1004e5c31af7Sopenharmony_ci    must: be enabled for 32-bit floating point atomic operations
1005e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-None-06339]]
1006e5c31af7Sopenharmony_ci    <<features-shaderBufferFloat64Atomics,shaderBufferFloat64Atomics>>, or
1007e5c31af7Sopenharmony_ci    <<features-shaderBufferFloat64AtomicAdd,shaderBufferFloat64AtomicAdd>>,
1008e5c31af7Sopenharmony_ci    or <<features-shaderSharedFloat64Atomics,shaderSharedFloat64Atomics>>,
1009e5c31af7Sopenharmony_ci    or
1010e5c31af7Sopenharmony_ci    <<features-shaderSharedFloat64AtomicAdd,shaderSharedFloat64AtomicAdd>>,
1011e5c31af7Sopenharmony_ci    or
1012e5c31af7Sopenharmony_ci    <<features-shaderBufferFloat64AtomicMinMax,shaderBufferFloat64AtomicMinMax>>,
1013e5c31af7Sopenharmony_ci    or
1014e5c31af7Sopenharmony_ci    <<features-shaderSharedFloat64AtomicMinMax,shaderSharedFloat64AtomicMinMax>>,
1015e5c31af7Sopenharmony_ci    must: be enabled for 64-bit floating point atomic operations
1016e5c31af7Sopenharmony_ciendif::VK_EXT_shader_atomic_float2[]
1017e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-NonWritable-06340]]
1018e5c31af7Sopenharmony_ci    If <<features-fragmentStoresAndAtomics, fragmentStoresAndAtomics>> is
1019e5c31af7Sopenharmony_ci    not enabled, then all storage image, storage texel buffer, and storage
1020e5c31af7Sopenharmony_ci    buffer variables in the fragment stage must: be decorated with the
1021e5c31af7Sopenharmony_ci    code:NonWritable decoration.
1022e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-NonWritable-06341]]
1023e5c31af7Sopenharmony_ci    If <<features-vertexPipelineStoresAndAtomics,
1024e5c31af7Sopenharmony_ci    vertexPipelineStoresAndAtomics>> is not enabled, then all storage image,
1025e5c31af7Sopenharmony_ci    storage texel buffer, and storage buffer variables in the vertex,
1026e5c31af7Sopenharmony_ci    tessellation, and geometry stages must: be decorated with the
1027e5c31af7Sopenharmony_ci    code:NonWritable decoration.
1028e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-None-06342]]
1029e5c31af7Sopenharmony_ci    If <<limits-subgroupQuadOperationsInAllStages,
1030e5c31af7Sopenharmony_ci    subgroupQuadOperationsInAllStages>> is ename:VK_FALSE, then
1031e5c31af7Sopenharmony_ci    <<features-subgroup-quad,quad subgroup operations>> must: not be used
1032e5c31af7Sopenharmony_ci    except for in fragment and compute stages.
1033e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_1[]
1034e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-None-06343]]
1035e5c31af7Sopenharmony_ci    <<shaders-group-operations,Group operations>> with
1036e5c31af7Sopenharmony_ci    <<shaders-scope-subgroup, subgroup scope>> must: not be used if the
1037e5c31af7Sopenharmony_ci    shader stage is not in <<limits-subgroupSupportedStages,
1038e5c31af7Sopenharmony_ci    subgroupSupportedStages>>.
1039e5c31af7Sopenharmony_ciendif::VK_VERSION_1_1[]
1040e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-Offset-06344]]
1041e5c31af7Sopenharmony_ci    The first element of the code:Offset operand of code:InterpolateAtOffset
1042e5c31af7Sopenharmony_ci    must: be greater than or equal to:
1043e5c31af7Sopenharmony_ci    {empty}:: [eq]#frag~width~ {times} <<limits-minInterpolationOffset,
1044e5c31af7Sopenharmony_ci              pname:minInterpolationOffset>>#
1045e5c31af7Sopenharmony_ci+
1046e5c31af7Sopenharmony_ciwhere [eq]#frag~width~# is the width of the current fragment in pixels.
1047e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-Offset-06345]]
1048e5c31af7Sopenharmony_ci    The first element of the code:Offset operand of code:InterpolateAtOffset
1049e5c31af7Sopenharmony_ci    must: be less than or equal to:
1050e5c31af7Sopenharmony_ci    {empty}:: [eq]#frag~width~ {times} (<<limits-maxInterpolationOffset,
1051e5c31af7Sopenharmony_ci              pname:maxInterpolationOffset>> {plus} ULP ) - ULP#
1052e5c31af7Sopenharmony_ci+
1053e5c31af7Sopenharmony_ciwhere [eq]#frag~width~# is the width of the current fragment in pixels and
1054e5c31af7Sopenharmony_ci[eq]#ULP = 1 /
1055e5c31af7Sopenharmony_ci2^<<limits-subPixelInterpolationOffsetBits,pname:subPixelInterpolationOffsetBits>>^#.
1056e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-Offset-06346]]
1057e5c31af7Sopenharmony_ci    The second element of the code:Offset operand of
1058e5c31af7Sopenharmony_ci    code:InterpolateAtOffset must: be greater than or equal to:
1059e5c31af7Sopenharmony_ci    {empty}:: [eq]#frag~height~ {times} <<limits-minInterpolationOffset,
1060e5c31af7Sopenharmony_ci              pname:minInterpolationOffset>>#
1061e5c31af7Sopenharmony_ci+
1062e5c31af7Sopenharmony_ciwhere [eq]#frag~height~# is the height of the current fragment in pixels.
1063e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-Offset-06347]]
1064e5c31af7Sopenharmony_ci    The second element of the code:Offset operand of
1065e5c31af7Sopenharmony_ci    code:InterpolateAtOffset must: be less than or equal to:
1066e5c31af7Sopenharmony_ci    {empty}:: [eq]#frag~height~ {times} (<<limits-maxInterpolationOffset,
1067e5c31af7Sopenharmony_ci              pname:maxInterpolationOffset>> {plus} ULP ) - ULP#
1068e5c31af7Sopenharmony_ci+
1069e5c31af7Sopenharmony_ciwhere [eq]#frag~height~# is the height of the current fragment in pixels and
1070e5c31af7Sopenharmony_ci[eq]#ULP = 1 /
1071e5c31af7Sopenharmony_ci2^<<limits-subPixelInterpolationOffsetBits,pname:subPixelInterpolationOffsetBits>>^#.
1072e5c31af7Sopenharmony_ci
1073e5c31af7Sopenharmony_ciifdef::VK_KHR_ray_query[]
1074e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpRayQueryInitializeKHR-06348]]
1075e5c31af7Sopenharmony_ci    For code:OpRayQueryInitializeKHR instructions, all components of the
1076e5c31af7Sopenharmony_ci    code:RayOrigin and code:RayDirection operands must: be finite
1077e5c31af7Sopenharmony_ci    floating-point values.
1078e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpRayQueryInitializeKHR-06349]]
1079e5c31af7Sopenharmony_ci    For code:OpRayQueryInitializeKHR instructions, the code:RayTmin and
1080e5c31af7Sopenharmony_ci    code:RayTmax operands must: be non-negative floating-point values.
1081e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpRayQueryInitializeKHR-06350]]
1082e5c31af7Sopenharmony_ci    For code:OpRayQueryInitializeKHR instructions, the code:RayTmin operand
1083e5c31af7Sopenharmony_ci    must: be less than or equal to the code:RayTmax operand.
1084e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpRayQueryInitializeKHR-06351]]
1085e5c31af7Sopenharmony_ci    For code:OpRayQueryInitializeKHR instructions, code:RayOrigin,
1086e5c31af7Sopenharmony_ci    code:RayDirection, code:RayTmin, and code:RayTmax operands must: not
1087e5c31af7Sopenharmony_ci    contain NaNs.
1088e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpRayQueryInitializeKHR-06352]]
1089e5c31af7Sopenharmony_ci    For code:OpRayQueryInitializeKHR instructions, code:Acceleration
1090e5c31af7Sopenharmony_ci    code:Structure must: be an acceleration structure built as a
1091e5c31af7Sopenharmony_ci    <<acceleration-structure-top-level, top-level acceleration structure>>.
1092e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpRayQueryGenerateIntersectionKHR-06353]]
1093e5c31af7Sopenharmony_ci    For code:OpRayQueryGenerateIntersectionKHR instructions, code:Hit code:T
1094e5c31af7Sopenharmony_ci    must: satisfy the condition [eq]##code:RayTmin {leq} code:Hit code:T
1095e5c31af7Sopenharmony_ci    {leq} code:RayTmax##, where code:RayTmin is equal to the value returned
1096e5c31af7Sopenharmony_ci    by code:OpRayQueryGetRayTMinKHR with the same ray query object, and
1097e5c31af7Sopenharmony_ci    code:RayTmax is equal to the value of code:OpRayQueryGetIntersectionTKHR
1098e5c31af7Sopenharmony_ci    for the current committed intersection with the same ray query object.
1099e5c31af7Sopenharmony_ciifdef::VK_NV_ray_tracing_motion_blur[]
1100e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpRayQueryGenerateIntersectionKHR-06354]]
1101e5c31af7Sopenharmony_ci    For code:OpRayQueryGenerateIntersectionKHR instructions,
1102e5c31af7Sopenharmony_ci    code:Acceleration code:Structure must: not be built with
1103e5c31af7Sopenharmony_ci    ename:VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV in pname:flags.
1104e5c31af7Sopenharmony_ciendif::VK_NV_ray_tracing_motion_blur[]
1105e5c31af7Sopenharmony_ciendif::VK_KHR_ray_query[]
1106e5c31af7Sopenharmony_ciifdef::VK_KHR_ray_tracing_pipeline[]
1107e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpTraceRayKHR-06355]]
1108e5c31af7Sopenharmony_ci    For code:OpTraceRayKHR instructions, all components of the
1109e5c31af7Sopenharmony_ci    code:RayOrigin and code:RayDirection operands must: be finite
1110e5c31af7Sopenharmony_ci    floating-point values.
1111e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpTraceRayKHR-06356]]
1112e5c31af7Sopenharmony_ci    For code:OpTraceRayKHR instructions, the code:RayTmin and code:RayTmax
1113e5c31af7Sopenharmony_ci    operands must: be non-negative floating-point values.
1114e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpTraceRayKHR-06357]]
1115e5c31af7Sopenharmony_ci    For code:OpTraceRayKHR instructions, the code:RayTmin operand must: be
1116e5c31af7Sopenharmony_ci    less than or equal to the code:RayTmax operand.
1117e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpTraceRayKHR-06358]]
1118e5c31af7Sopenharmony_ci    For code:OpTraceRayKHR instructions, code:RayOrigin, code:RayDirection,
1119e5c31af7Sopenharmony_ci    code:RayTmin, and code:RayTmax operands must: not contain NaNs.
1120e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpTraceRayKHR-06359]]
1121e5c31af7Sopenharmony_ci    For code:OpTraceRayKHR instructions, code:Acceleration code:Structure
1122e5c31af7Sopenharmony_ci    must: be an acceleration structure built as a
1123e5c31af7Sopenharmony_ci    <<acceleration-structure-top-level, top-level acceleration structure>>.
1124e5c31af7Sopenharmony_ciendif::VK_KHR_ray_tracing_pipeline[]
1125e5c31af7Sopenharmony_ciifdef::VK_NV_ray_tracing_motion_blur[]
1126e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpTraceRayKHR-06360]]
1127e5c31af7Sopenharmony_ci    For code:OpTraceRayKHR instructions, if code:Acceleration code:Structure
1128e5c31af7Sopenharmony_ci    was built with ename:VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV in
1129e5c31af7Sopenharmony_ci    pname:flags, the pipeline must: have been created with
1130e5c31af7Sopenharmony_ci    ename:VK_PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV set
1131e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpTraceRayMotionNV-06361]]
1132e5c31af7Sopenharmony_ci    For code:OpTraceRayMotionNV instructions, all components of the
1133e5c31af7Sopenharmony_ci    code:RayOrigin and code:RayDirection operands must: be finite
1134e5c31af7Sopenharmony_ci    floating-point values.
1135e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpTraceRayMotionNV-06362]]
1136e5c31af7Sopenharmony_ci    For code:OpTraceRayMotionNV instructions, the code:RayTmin and
1137e5c31af7Sopenharmony_ci    code:RayTmax operands must: be non-negative floating-point values.
1138e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpTraceRayMotionNV-06363]]
1139e5c31af7Sopenharmony_ci    For code:OpTraceRayMotionNV instructions, the code:RayTmin operand must:
1140e5c31af7Sopenharmony_ci    be less than or equal to the code:RayTmax operand.
1141e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpTraceRayMotionNV-06364]]
1142e5c31af7Sopenharmony_ci    For code:OpTraceRayMotionNV instructions, code:RayOrigin,
1143e5c31af7Sopenharmony_ci    code:RayDirection, code:RayTmin, and code:RayTmax operands must: not
1144e5c31af7Sopenharmony_ci    contain NaNs.
1145e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpTraceRayMotionNV-06365]]
1146e5c31af7Sopenharmony_ci    For code:OpTraceRayMotionNV instructions, code:Acceleration
1147e5c31af7Sopenharmony_ci    code:Structure must: be an acceleration structure built as a
1148e5c31af7Sopenharmony_ci    <<acceleration-structure-top-level, top-level acceleration structure>>
1149e5c31af7Sopenharmony_ci    with ename:VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV in pname:flags
1150e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpTraceRayMotionNV-06366]]
1151e5c31af7Sopenharmony_ci    For code:OpTraceRayMotionNV instructions the code:time operand must: be
1152e5c31af7Sopenharmony_ci    between 0.0 and 1.0
1153e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpTraceRayMotionNV-06367]]
1154e5c31af7Sopenharmony_ci    For code:OpTraceRayMotionNV instructions the pipeline must: have been
1155e5c31af7Sopenharmony_ci    created with ename:VK_PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV
1156e5c31af7Sopenharmony_ci    set
1157e5c31af7Sopenharmony_ciendif::VK_NV_ray_tracing_motion_blur[]
1158e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-x-06429]]
1159e5c31af7Sopenharmony_ci    The pname:x size in code:LocalSize or code:LocalSizeId must: be less
1160e5c31af7Sopenharmony_ci    than or equal to
1161e5c31af7Sopenharmony_ci    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupSize[0]
1162e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-y-06430]]
1163e5c31af7Sopenharmony_ci    The pname:y size in code:LocalSize or code:LocalSizeId must: be less
1164e5c31af7Sopenharmony_ci    than or equal to
1165e5c31af7Sopenharmony_ci    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupSize[1]
1166e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-z-06431]]
1167e5c31af7Sopenharmony_ci    The pname:z size in code:LocalSize or code:LocalSizeId must: be less
1168e5c31af7Sopenharmony_ci    than or equal to
1169e5c31af7Sopenharmony_ci    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupSize[2]
1170e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-x-06432]]
1171e5c31af7Sopenharmony_ci    The product of pname:x size, pname:y size, and pname:z size in
1172e5c31af7Sopenharmony_ci    code:LocalSize or code:LocalSizeId must: be less than or equal to
1173e5c31af7Sopenharmony_ci    sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupInvocations
1174e5c31af7Sopenharmony_ciifndef::VK_KHR_maintenance4[]
1175e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-LocalSizeId-06433]]
1176e5c31af7Sopenharmony_ci    The execution mode code:LocalSizeId must: not be used
1177e5c31af7Sopenharmony_ciendif::VK_KHR_maintenance4[]
1178e5c31af7Sopenharmony_ciifdef::VK_KHR_maintenance4[]
1179e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-LocalSizeId-06434]]
1180e5c31af7Sopenharmony_ci    if execution mode code:LocalSizeId is used, <<features-maintenance4,
1181e5c31af7Sopenharmony_ci    pname:maintenance4>> must: be enabled
1182e5c31af7Sopenharmony_ciendif::VK_KHR_maintenance4[]
1183e5c31af7Sopenharmony_ciifdef::VK_KHR_zero_initialize_workgroup_memory[]
1184e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-shaderZeroInitializeWorkgroupMemory-06372]]
1185e5c31af7Sopenharmony_ci    If
1186e5c31af7Sopenharmony_ci    <<features-shaderZeroInitializeWorkgroupMemory,pname:shaderZeroInitializeWorkgroupMemory>>
1187e5c31af7Sopenharmony_ci    is not enabled, any code:OpVariable with *Workgroup* as its *Storage
1188e5c31af7Sopenharmony_ci    Class* must: not have an code:Initializer operand
1189e5c31af7Sopenharmony_ciendif::VK_KHR_zero_initialize_workgroup_memory[]
1190e5c31af7Sopenharmony_ciifndef::VK_KHR_zero_initialize_workgroup_memory[]
1191e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpVariable-06373]]
1192e5c31af7Sopenharmony_ci    Any code:OpVariable with *Workgroup* as its *Storage Class* must: not
1193e5c31af7Sopenharmony_ci    have an code:Initializer operand
1194e5c31af7Sopenharmony_ciendif::VK_KHR_zero_initialize_workgroup_memory[]
1195e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpImage-06376]]
1196e5c31af7Sopenharmony_ci    If an code:OpImage*Gather operation has an image operand of code:Offset,
1197e5c31af7Sopenharmony_ci    code:ConstOffset, or code:ConstOffsets the offset value must: be greater
1198e5c31af7Sopenharmony_ci    than or equal to <<limits-minTexelGatherOffset,minTexelGatherOffset>>
1199e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpImage-06377]]
1200e5c31af7Sopenharmony_ci    If an code:OpImage*Gather operation has an image operand of code:Offset,
1201e5c31af7Sopenharmony_ci    code:ConstOffset, or code:ConstOffsets the offset value must: be less
1202e5c31af7Sopenharmony_ci    than or equal to <<limits-maxTexelGatherOffset,maxTexelGatherOffset>>
1203e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpImageSample-06435]]
1204e5c31af7Sopenharmony_ci    If an code:OpImageSample* or code:OpImageFetch* operation has an image
1205e5c31af7Sopenharmony_ci    operand of code:ConstOffset then the offset value must: be greater than
1206e5c31af7Sopenharmony_ci    or equal to <<limits-minTexelOffset,minTexelOffset>>
1207e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-OpImageSample-06436]]
1208e5c31af7Sopenharmony_ci    If an code:OpImageSample* or code:OpImageFetch* operation has an image
1209e5c31af7Sopenharmony_ci    operand of code:ConstOffset then the offset value must: be less than or
1210e5c31af7Sopenharmony_ci    equal to <<limits-maxTexelOffset,maxTexelOffset>>
1211e5c31af7Sopenharmony_ciifdef::VK_QCOM_render_pass_shader_resolve[]
1212e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-SampleRateShading-06378]]
1213e5c31af7Sopenharmony_ci    If the subpass description contains
1214e5c31af7Sopenharmony_ci    ename:VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM, then the SPIR-V
1215e5c31af7Sopenharmony_ci    fragment shader Capability code:SampleRateShading must: not be enabled.
1216e5c31af7Sopenharmony_ciendif::VK_QCOM_render_pass_shader_resolve[]
1217e5c31af7Sopenharmony_ciifdef::VK_KHR_shader_subgroup_uniform_control_flow[]
1218e5c31af7Sopenharmony_ci  * [[VUID-{refpage}-SubgroupUniformControlFlowKHR-06379]]
1219e5c31af7Sopenharmony_ci    The execution mode code:SubgroupUniformControlFlowKHR must: not be
1220e5c31af7Sopenharmony_ci    applied to an entry point unless
1221e5c31af7Sopenharmony_ci    <<features-shaderSubgroupUniformControlFlow,
1222e5c31af7Sopenharmony_ci    pname:shaderSubgroupUniformControlFlow>> is enabled and the
1223e5c31af7Sopenharmony_ci    corresponding shader stage bit is set in subgroup
1224e5c31af7Sopenharmony_ci    <<limits-subgroup-supportedStages, pname:supportedStages>> and the entry
1225e5c31af7Sopenharmony_ci    point does not execute any <<ray-tracing-repack,_invocation repack
1226e5c31af7Sopenharmony_ci    instructions_>>.
1227e5c31af7Sopenharmony_ciendif::VK_KHR_shader_subgroup_uniform_control_flow[]
1228e5c31af7Sopenharmony_ci****
1229e5c31af7Sopenharmony_ci--
1230e5c31af7Sopenharmony_ci
1231e5c31af7Sopenharmony_ci[[spirvenv-precision-operation]]
1232e5c31af7Sopenharmony_ci== Precision and Operation of SPIR-V Instructions
1233e5c31af7Sopenharmony_ci
1234e5c31af7Sopenharmony_ciThe following rules apply to half, single, and double-precision floating
1235e5c31af7Sopenharmony_cipoint instructions:
1236e5c31af7Sopenharmony_ci
1237e5c31af7Sopenharmony_ci  * Positive and negative infinities and positive and negative zeros are
1238e5c31af7Sopenharmony_ci    generated as dictated by <<ieee-754,IEEE 754>>, but subject to the
1239e5c31af7Sopenharmony_ci    precisions allowed in the following table.
1240e5c31af7Sopenharmony_ci  * Dividing a non-zero by a zero results in the appropriately signed
1241e5c31af7Sopenharmony_ci    <<ieee-754,IEEE 754>> infinity.
1242e5c31af7Sopenharmony_ci  * Signaling [eq]##NaN##s are not required to be generated and exceptions
1243e5c31af7Sopenharmony_ci    are never raised.
1244e5c31af7Sopenharmony_ci    Signaling [eq]##NaN## may: be converted to quiet [eq]##NaN##s values by
1245e5c31af7Sopenharmony_ci    any floating point instruction.
1246e5c31af7Sopenharmony_ci  * By default, the implementation may: perform optimizations on half,
1247e5c31af7Sopenharmony_ci    single, or double-precision floating-point instructions that ignore sign
1248e5c31af7Sopenharmony_ci    of a zero, or assume that arguments and results are not NaNs or
1249e5c31af7Sopenharmony_ci    infinities.
1250e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_2,VK_KHR_shader_float_controls[]
1251e5c31af7Sopenharmony_ci    If the entry point is declared with the code:SignedZeroInfNanPreserve
1252e5c31af7Sopenharmony_ci    execution mode, then NaNs, infinities, and the sign of zero must: not be
1253e5c31af7Sopenharmony_ci    ignored.
1254e5c31af7Sopenharmony_ci  ** The following core SPIR-V instructions must: respect the
1255e5c31af7Sopenharmony_ci     code:SignedZeroInfNanPreserve execution mode: code:OpPhi,
1256e5c31af7Sopenharmony_ci     code:OpSelect, code:OpReturnValue, code:OpVectorExtractDynamic,
1257e5c31af7Sopenharmony_ci     code:OpVectorInsertDynamic, code:OpVectorShuffle,
1258e5c31af7Sopenharmony_ci     code:OpCompositeConstruct, code:OpCompositeExtract,
1259e5c31af7Sopenharmony_ci     code:OpCompositeInsert, code:OpCopyObject, code:OpTranspose,
1260e5c31af7Sopenharmony_ci     code:OpFConvert, code:OpFNegate, code:OpFAdd, code:OpFSub, code:OpFMul,
1261e5c31af7Sopenharmony_ci     code:OpStore.
1262e5c31af7Sopenharmony_ci     This execution mode must: also be respected by code:OpLoad except for
1263e5c31af7Sopenharmony_ci     loads from the code:Input storage class in the fragment shader stage
1264e5c31af7Sopenharmony_ci     with the floating-point result type.
1265e5c31af7Sopenharmony_ci     Other SPIR-V instructions may: also respect the
1266e5c31af7Sopenharmony_ci     code:SignedZeroInfNanPreserve execution mode.
1267e5c31af7Sopenharmony_ciendif::VK_VERSION_1_2,VK_KHR_shader_float_controls[]
1268e5c31af7Sopenharmony_ci  * The following instructions must: not flush denormalized values:
1269e5c31af7Sopenharmony_ci    code:OpConstant, code:OpConstantComposite, code:OpSpecConstant,
1270e5c31af7Sopenharmony_ci    code:OpSpecConstantComposite, code:OpLoad, code:OpStore, code:OpBitcast,
1271e5c31af7Sopenharmony_ci    code:OpPhi, code:OpSelect, code:OpFunctionCall, code:OpReturnValue,
1272e5c31af7Sopenharmony_ci    code:OpVectorExtractDynamic, code:OpVectorInsertDynamic,
1273e5c31af7Sopenharmony_ci    code:OpVectorShuffle, code:OpCompositeConstruct,
1274e5c31af7Sopenharmony_ci    code:OpCompositeExtract, code:OpCompositeInsert, code:OpCopyMemory,
1275e5c31af7Sopenharmony_ci    code:OpCopyObject.
1276e5c31af7Sopenharmony_ciifndef::VK_VERSION_1_2,VK_KHR_shader_float_controls[]
1277e5c31af7Sopenharmony_ci  * Any denormalized value input into a shader or potentially generated by
1278e5c31af7Sopenharmony_ci    any instruction in a shader (except those listed above) may: be flushed
1279e5c31af7Sopenharmony_ci    to 0.
1280e5c31af7Sopenharmony_ci  * The rounding mode cannot: be set, and results will be
1281e5c31af7Sopenharmony_ci    <<spirvenv-correctly-rounded, correctly rounded>>, as described below.
1282e5c31af7Sopenharmony_ci  * [eq]##NaN##s may: not be generated.
1283e5c31af7Sopenharmony_ci    Instructions that operate on a [eq]#NaN# may: not result in a [eq]#NaN#.
1284e5c31af7Sopenharmony_ciendif::VK_VERSION_1_2,VK_KHR_shader_float_controls[]
1285e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_2,VK_KHR_shader_float_controls[]
1286e5c31af7Sopenharmony_ci  * Denormalized values are supported.
1287e5c31af7Sopenharmony_ci  ** By default, any half, single, or double-precision denormalized value
1288e5c31af7Sopenharmony_ci     input into a shader or potentially generated by any instruction (except
1289e5c31af7Sopenharmony_ci     those listed above) or any extended instructions for GLSL in a shader
1290e5c31af7Sopenharmony_ci     may: be flushed to zero.
1291e5c31af7Sopenharmony_ci  ** If the entry point is declared with the code:DenormFlushToZero
1292e5c31af7Sopenharmony_ci     execution mode then for the affected instuctions the denormalized
1293e5c31af7Sopenharmony_ci     result must: be flushed to zero and the denormalized operands may: be
1294e5c31af7Sopenharmony_ci     flushed to zero.
1295e5c31af7Sopenharmony_ci     Denormalized values obtained via unpacking an integer into a vector of
1296e5c31af7Sopenharmony_ci     values with smaller bit width and interpreting those values as
1297e5c31af7Sopenharmony_ci     floating-point numbers must: be flushed to zero.
1298e5c31af7Sopenharmony_ci  ** The following core SPIR-V instructions must: respect the
1299e5c31af7Sopenharmony_ci     code:DenormFlushToZero execution mode: code:OpSpecConstantOp (with
1300e5c31af7Sopenharmony_ci     opcode code:OpFConvert), code:OpFConvert, code:OpFNegate, code:OpFAdd,
1301e5c31af7Sopenharmony_ci     code:OpFSub, code:OpFMul, code:OpFDiv, code:OpFRem, code:OpFMod,
1302e5c31af7Sopenharmony_ci     code:OpVectorTimesScalar, code:OpMatrixTimesScalar,
1303e5c31af7Sopenharmony_ci     code:OpVectorTimesMatrix, code:OpMatrixTimesVector,
1304e5c31af7Sopenharmony_ci     code:OpMatrixTimesMatrix, code:OpOuterProduct, code:OpDot; and the
1305e5c31af7Sopenharmony_ci     following extended instructions for GLSL: code:Round, code:RoundEven,
1306e5c31af7Sopenharmony_ci     code:Trunc, code:FAbs, code:Floor, code:Ceil, code:Fract, code:Radians,
1307e5c31af7Sopenharmony_ci     code:Degrees, code:Sin, code:Cos, code:Tan, code:Asin, code:Acos,
1308e5c31af7Sopenharmony_ci     code:Atan, code:Sinh, code:Cosh, code:Tanh, code:Asinh, code:Acosh,
1309e5c31af7Sopenharmony_ci     code:Atanh, code:Atan2, code:Pow, code:Exp, code:Log, code:Exp2,
1310e5c31af7Sopenharmony_ci     code:Log2, code:Sqrt, code:InverseSqrt, code:Determinant,
1311e5c31af7Sopenharmony_ci     code:MatrixInverse, code:Modf, code:ModfStruct, code:FMin, code:FMax,
1312e5c31af7Sopenharmony_ci     code:FClamp, code:FMix, code:Step, code:SmoothStep, code:Fma,
1313e5c31af7Sopenharmony_ci     code:UnpackHalf2x16, code:UnpackDouble2x32, code:Length, code:Distance,
1314e5c31af7Sopenharmony_ci     code:Cross, code:Normalize, code:FaceForward, code:Reflect,
1315e5c31af7Sopenharmony_ci     code:Refract, code:NMin, code:NMax, code:NClamp.
1316e5c31af7Sopenharmony_ci     Other SPIR-V instructions (except those excluded above) may: also flush
1317e5c31af7Sopenharmony_ci     denormalized values.
1318e5c31af7Sopenharmony_ci  ** The following core SPIR-V instructions must: respect the
1319e5c31af7Sopenharmony_ci     code:DenormPreserve execution mode: code:OpTranspose,
1320e5c31af7Sopenharmony_ci     code:OpSpecConstantOp, code:OpFConvert, code:OpFNegate, code:OpFAdd,
1321e5c31af7Sopenharmony_ci     code:OpFSub, code:OpFMul, code:OpVectorTimesScalar,
1322e5c31af7Sopenharmony_ci     code:OpMatrixTimesScalar, code:OpVectorTimesMatrix,
1323e5c31af7Sopenharmony_ci     code:OpMatrixTimesVector, code:OpMatrixTimesMatrix,
1324e5c31af7Sopenharmony_ci     code:OpOuterProduct, code:OpDot, code:OpFOrdEqual, code:OpFUnordEqual,
1325e5c31af7Sopenharmony_ci     code:OpFOrdNotEqual, code:OpFUnordNotEqual, code:OpFOrdLessThan,
1326e5c31af7Sopenharmony_ci     code:OpFUnordLessThan, code:OpFOrdGreaterThan,
1327e5c31af7Sopenharmony_ci     code:OpFUnordGreaterThan, code:OpFOrdLessThanEqual,
1328e5c31af7Sopenharmony_ci     code:OpFUnordLessThanEqual, code:OpFOrdGreaterThanEqual,
1329e5c31af7Sopenharmony_ci     code:OpFUnordGreaterThanEqual; and the following extended instructions
1330e5c31af7Sopenharmony_ci     for GLSL: code:FAbs, code:FSign, code:Radians, code:Degrees, code:FMin,
1331e5c31af7Sopenharmony_ci     code:FMax, code:FClamp, code:FMix, code:Fma, code:PackHalf2x16,
1332e5c31af7Sopenharmony_ci     code:PackDouble2x32, code:UnpackHalf2x16, code:UnpackDouble2x32,
1333e5c31af7Sopenharmony_ci     code:NMin, code:NMax, code:NClamp.
1334e5c31af7Sopenharmony_ci     Other SPIR-V instructions may: also preserve denorm values.
1335e5c31af7Sopenharmony_ciendif::VK_VERSION_1_2,VK_KHR_shader_float_controls[]
1336e5c31af7Sopenharmony_ci
1337e5c31af7Sopenharmony_ciThe precision of double-precision instructions is at least that of single
1338e5c31af7Sopenharmony_ciprecision.
1339e5c31af7Sopenharmony_ci
1340e5c31af7Sopenharmony_ciThe precision of operations is defined either in terms of rounding, as an
1341e5c31af7Sopenharmony_cierror bound in ULP, or as inherited from a formula as follows.
1342e5c31af7Sopenharmony_ci
1343e5c31af7Sopenharmony_ci[[spirvenv-correctly-rounded]]
1344e5c31af7Sopenharmony_ci.Correctly Rounded
1345e5c31af7Sopenharmony_ciOperations described as "`correctly rounded`" will return the infinitely
1346e5c31af7Sopenharmony_ciprecise result, [eq]#x#, rounded so as to be representable in
1347e5c31af7Sopenharmony_cifloating-point.
1348e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_2,VK_KHR_shader_float_controls[]
1349e5c31af7Sopenharmony_ciThe rounding mode is not specified, unless the entry point is declared with
1350e5c31af7Sopenharmony_cithe code:RoundingModeRTE or the code:RoundingModeRTZ execution mode.
1351e5c31af7Sopenharmony_ciThese execution modes affect only correctly rounded SPIR-V instructions.
1352e5c31af7Sopenharmony_ciThese execution modes do not affect code:OpQuantizeToF16.
1353e5c31af7Sopenharmony_ciIf the rounding mode is not specified then this rounding is implementation
1354e5c31af7Sopenharmony_cispecific, subject to the following rules.
1355e5c31af7Sopenharmony_ciendif::VK_VERSION_1_2,VK_KHR_shader_float_controls[]
1356e5c31af7Sopenharmony_ciifndef::VK_VERSION_1_2,VK_KHR_shader_float_controls[]
1357e5c31af7Sopenharmony_ciThe rounding mode used is not defined but must: obey the following rules.
1358e5c31af7Sopenharmony_ciendif::VK_VERSION_1_2,VK_KHR_shader_float_controls[]
1359e5c31af7Sopenharmony_ciIf [eq]#x# is exactly representable then [eq]#x# will be returned.
1360e5c31af7Sopenharmony_ciOtherwise, either the floating-point value closest to and no less than
1361e5c31af7Sopenharmony_ci[eq]#x# or the value closest to and no greater than [eq]#x# will be
1362e5c31af7Sopenharmony_cireturned.
1363e5c31af7Sopenharmony_ci
1364e5c31af7Sopenharmony_ci.ULP
1365e5c31af7Sopenharmony_ciWhere an error bound of [eq]#n# ULP (units in the last place) is given, for
1366e5c31af7Sopenharmony_cian operation with infinitely precise result #x# the value returned must: be
1367e5c31af7Sopenharmony_ciin the range [eq]#[x - n {times} ulp(x), x {plus} n {times} ulp(x)]#.
1368e5c31af7Sopenharmony_ciThe function [eq]#ulp(x)# is defined as follows:
1369e5c31af7Sopenharmony_ci
1370e5c31af7Sopenharmony_ci  {empty}:: If there exist non-equal floating-point numbers #a# and #b# such
1371e5c31af7Sopenharmony_ci    that [eq]#a {leq} x {leq} b# then [eq]#ulp(x)# is the minimum possible
1372e5c31af7Sopenharmony_ci    distance between such numbers, latexmath:[ulp(x) = \mathrm{min}_{a,b} |
1373e5c31af7Sopenharmony_ci    b - a |].
1374e5c31af7Sopenharmony_ci    If such numbers do not exist then [eq]#ulp(x)# is defined to be the
1375e5c31af7Sopenharmony_ci    difference between the two finite floating-point numbers nearest to
1376e5c31af7Sopenharmony_ci    [eq]#x#.
1377e5c31af7Sopenharmony_ci
1378e5c31af7Sopenharmony_ciWhere the range of allowed return values includes any value of magnitude
1379e5c31af7Sopenharmony_cilarger than that of the largest representable finite floating-point number,
1380e5c31af7Sopenharmony_cioperations may:, additionally, return either an infinity of the appropriate
1381e5c31af7Sopenharmony_cisign or the finite number with the largest magnitude of the appropriate
1382e5c31af7Sopenharmony_cisign.
1383e5c31af7Sopenharmony_ciIf the infinitely precise result of the operation is not mathematically
1384e5c31af7Sopenharmony_cidefined then the value returned is undefined:.
1385e5c31af7Sopenharmony_ci
1386e5c31af7Sopenharmony_ci.Inherited From ...
1387e5c31af7Sopenharmony_ciWhere an operation's precision is described as being inherited from a
1388e5c31af7Sopenharmony_ciformula, the result returned must: be at least as accurate as the result of
1389e5c31af7Sopenharmony_cicomputing an approximation to [eq]#x# using a formula equivalent to the
1390e5c31af7Sopenharmony_cigiven formula applied to the supplied inputs.
1391e5c31af7Sopenharmony_ciSpecifically, the formula given may be transformed using the mathematical
1392e5c31af7Sopenharmony_ciassociativity, commutativity and distributivity of the operators involved to
1393e5c31af7Sopenharmony_ciyield an equivalent formula.
1394e5c31af7Sopenharmony_ciThe SPIR-V precision rules, when applied to each such formula and the given
1395e5c31af7Sopenharmony_ciinput values, define a range of permitted values.
1396e5c31af7Sopenharmony_ciIf [eq]#NaN# is one of the permitted values then the operation may return
1397e5c31af7Sopenharmony_ciany result, otherwise let the largest permitted value in any of the ranges
1398e5c31af7Sopenharmony_cibe [eq]#F~max~# and the smallest be [eq]#F~min~#.
1399e5c31af7Sopenharmony_ciThe operation must: return a value in the range [eq]#[x - E, x {plus} E]#
1400e5c31af7Sopenharmony_ciwhere latexmath:[E = \mathrm{max} \left( | x - F_{\mathrm{min}} |, | x -
1401e5c31af7Sopenharmony_ciF_{\mathrm{max}} | \right) ].
1402e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_2,VK_KHR_shader_float_controls[]
1403e5c31af7Sopenharmony_ciIf the entry point is declared with the code:DenormFlushToZero execution
1404e5c31af7Sopenharmony_cimode, then any intermediate denormal value(s) while evaluating the formula
1405e5c31af7Sopenharmony_cimay: be flushed to zero.
1406e5c31af7Sopenharmony_ciDenormal final results must: be flushed to zero.
1407e5c31af7Sopenharmony_ciIf the entry point is declared with the code:DenormPreserve execution mode,
1408e5c31af7Sopenharmony_cithen denormals must: be preserved throughout the formula.
1409e5c31af7Sopenharmony_ciendif::VK_VERSION_1_2,VK_KHR_shader_float_controls[]
1410e5c31af7Sopenharmony_ci
1411e5c31af7Sopenharmony_ciifdef::VK_VERSION_1_2,VK_KHR_shader_float16_int8[]
1412e5c31af7Sopenharmony_ciFor half- (16 bit) and single- (32 bit) precision instructions, precisions
1413e5c31af7Sopenharmony_ciare required: to be at least as follows:
1414e5c31af7Sopenharmony_ci
1415e5c31af7Sopenharmony_ci.Precision of core SPIR-V Instructions
1416e5c31af7Sopenharmony_ci[options="header", cols=",,"]
1417e5c31af7Sopenharmony_ci|====
1418e5c31af7Sopenharmony_ci| Instruction
1419e5c31af7Sopenharmony_ci | Single precision, unless decorated with RelaxedPrecision | Half precision
1420e5c31af7Sopenharmony_ci| code:OpFAdd
1421e5c31af7Sopenharmony_ci2+| Correctly rounded.
1422e5c31af7Sopenharmony_ci| code:OpFSub
1423e5c31af7Sopenharmony_ci2+| Correctly rounded.
1424e5c31af7Sopenharmony_ci| code:OpFMul, code:OpVectorTimesScalar, code:OpMatrixTimesScalar
1425e5c31af7Sopenharmony_ci2+| Correctly rounded.
1426e5c31af7Sopenharmony_ci| code:OpDot(x, y)
1427e5c31af7Sopenharmony_ci2+a| Inherited from latexmath:[\sum_{i = 0}^{n - 1} x_{i} \times y_{i}].
1428e5c31af7Sopenharmony_ci| code:OpFOrdEqual, code:OpFUnordEqual
1429e5c31af7Sopenharmony_ci2+| Correct result.
1430e5c31af7Sopenharmony_ci| code:OpFOrdLessThan, code:OpFUnordLessThan
1431e5c31af7Sopenharmony_ci2+| Correct result.
1432e5c31af7Sopenharmony_ci| code:OpFOrdGreaterThan, code:OpFUnordGreaterThan
1433e5c31af7Sopenharmony_ci2+| Correct result.
1434e5c31af7Sopenharmony_ci| code:OpFOrdLessThanEqual, code:OpFUnordLessThanEqual
1435e5c31af7Sopenharmony_ci2+| Correct result.
1436e5c31af7Sopenharmony_ci| code:OpFOrdGreaterThanEqual, code:OpFUnordGreaterThanEqual
1437e5c31af7Sopenharmony_ci2+| Correct result.
1438e5c31af7Sopenharmony_ci| code:OpFDiv(x,y)
1439e5c31af7Sopenharmony_ci | 2.5 ULP for [eq]#{vert}y{vert}# in the range [2^-126^, 2^126^].   | 2.5 ULP for [eq]#{vert}y{vert}# in the range [2^-14^, 2^14^].
1440e5c31af7Sopenharmony_ci| code:OpFRem(x,y)
1441e5c31af7Sopenharmony_ci2+| Inherited from [eq]#x - y {times} trunc(x/y)#.
1442e5c31af7Sopenharmony_ci| code:OpFMod(x,y)
1443e5c31af7Sopenharmony_ci2+| Inherited from [eq]#x - y {times} floor(x/y)#.
1444e5c31af7Sopenharmony_ci| conversions between types
1445e5c31af7Sopenharmony_ci2+| Correctly rounded.
1446e5c31af7Sopenharmony_ci|====
1447e5c31af7Sopenharmony_ci
1448e5c31af7Sopenharmony_ci[NOTE]
1449e5c31af7Sopenharmony_ci.Note
1450e5c31af7Sopenharmony_ci====
1451e5c31af7Sopenharmony_ciThe code:OpFRem and code:OpFMod instructions use cheap approximations of
1452e5c31af7Sopenharmony_ciremainder, and the error can be large due to the discontinuity in trunc()
1453e5c31af7Sopenharmony_ciand floor().
1454e5c31af7Sopenharmony_ciThis can produce mathematically unexpected results in some cases, such as
1455e5c31af7Sopenharmony_ciFMod(x,x) computing x rather than 0, and can also cause the result to have a
1456e5c31af7Sopenharmony_cidifferent sign than the infinitely precise result.
1457e5c31af7Sopenharmony_ci====
1458e5c31af7Sopenharmony_ci
1459e5c31af7Sopenharmony_ci.Precision of GLSL.std.450 Instructions
1460e5c31af7Sopenharmony_ci[options="header", cols=",,"]
1461e5c31af7Sopenharmony_ci|====
1462e5c31af7Sopenharmony_ci|Instruction
1463e5c31af7Sopenharmony_ci  | Single precision, unless decorated with RelaxedPrecision | Half precision
1464e5c31af7Sopenharmony_ci| code:fma()
1465e5c31af7Sopenharmony_ci2+| Inherited from code:OpFMul followed by code:OpFAdd.
1466e5c31af7Sopenharmony_ci| code:exp(x),  code:exp2(x)
1467e5c31af7Sopenharmony_ci a| latexmath:[3 + 2 \times \vert x \vert] ULP.             a| latexmath:[1 + 2 \times \vert x \vert] ULP.
1468e5c31af7Sopenharmony_ci| code:log(),  code:log2()
1469e5c31af7Sopenharmony_ci a| 3 ULP outside the range latexmath:[[0.5, 2.0\]]. Absolute error < latexmath:[2^{-21}] inside the range latexmath:[[0.5, 2.0\]].
1470e5c31af7Sopenharmony_ci a| 3 ULP outside the range latexmath:[[0.5, 2.0\]]. Absolute error < latexmath:[2^{-7}] inside the range latexmath:[[0.5, 2.0\]].
1471e5c31af7Sopenharmony_ci| code:pow(x, y)
1472e5c31af7Sopenharmony_ci2+| Inherited from code:exp2(y {times} code:log2(x)).
1473e5c31af7Sopenharmony_ci| code:sqrt()
1474e5c31af7Sopenharmony_ci2+| Inherited from 1.0 / code:inversesqrt().
1475e5c31af7Sopenharmony_ci| code:inversesqrt()
1476e5c31af7Sopenharmony_ci2+| 2 ULP.
1477e5c31af7Sopenharmony_ci| code:radians(x)
1478e5c31af7Sopenharmony_ci2+a| Inherited from latexmath:[x \times \frac{\pi}{180}].
1479e5c31af7Sopenharmony_ci| code:degrees(x)
1480e5c31af7Sopenharmony_ci2+a| Inherited from latexmath:[x \times \frac{180}{\pi}].
1481e5c31af7Sopenharmony_ci| code:sin()
1482e5c31af7Sopenharmony_ci  a| Absolute error latexmath:[\leq 2^{-11}] inside the range latexmath:[[-\pi, \pi\]]. a| Absolute error latexmath:[\leq 2^{-7}] inside the range latexmath:[[-\pi, \pi\]].
1483e5c31af7Sopenharmony_ci| code:cos()
1484e5c31af7Sopenharmony_ci  a| Absolute error latexmath:[\leq 2^{-11}] inside the range latexmath:[[-\pi, \pi\]]. a| Absolute error latexmath:[\leq 2^{-7}] inside the range latexmath:[[-\pi, \pi\]].
1485e5c31af7Sopenharmony_ci| code:tan()
1486e5c31af7Sopenharmony_ci2+a| Inherited from latexmath:[\frac{\sin()}{\cos()}].
1487e5c31af7Sopenharmony_ci| code:asin(x)
1488e5c31af7Sopenharmony_ci2+a| Inherited from latexmath:[\mathrm{atan2}(x, sqrt(1.0 - x \times x))].
1489e5c31af7Sopenharmony_ci| code:acos(x)
1490e5c31af7Sopenharmony_ci2+a| Inherited from latexmath:[\mathrm{atan2}(sqrt(1.0 - x \times x), x)].
1491e5c31af7Sopenharmony_ci| code:atan(), code:atan2()
1492e5c31af7Sopenharmony_ci   | 4096 ULP                                                      | 5 ULP.
1493e5c31af7Sopenharmony_ci| code:sinh(x)
1494e5c31af7Sopenharmony_ci2+a| Inherited from latexmath:[(\exp(x) - \exp(-x)) \times 0.5].
1495e5c31af7Sopenharmony_ci| code:cosh(x)
1496e5c31af7Sopenharmony_ci2+a| Inherited from latexmath:[(\exp(x) + \exp(-x)) \times 0.5].
1497e5c31af7Sopenharmony_ci| code:tanh()
1498e5c31af7Sopenharmony_ci2+a| Inherited from latexmath:[\frac{\sinh()}{\cosh()}].
1499e5c31af7Sopenharmony_ci| code:asinh(x)
1500e5c31af7Sopenharmony_ci2+a| Inherited from latexmath:[\log(x + sqrt(x \times x + 1.0))].
1501e5c31af7Sopenharmony_ci| code:acosh(x)
1502e5c31af7Sopenharmony_ci2+a| Inherited from latexmath:[\log(x + sqrt(x \times x - 1.0))].
1503e5c31af7Sopenharmony_ci| code:atanh(x)
1504e5c31af7Sopenharmony_ci2+a| Inherited from latexmath:[\log(\frac{1.0 + x}{1.0 - x}) \times 0.5].
1505e5c31af7Sopenharmony_ci| code:frexp()
1506e5c31af7Sopenharmony_ci2+| Correctly rounded.
1507e5c31af7Sopenharmony_ci| code:ldexp()
1508e5c31af7Sopenharmony_ci2+| Correctly rounded.
1509e5c31af7Sopenharmony_ci| code:length(x)
1510e5c31af7Sopenharmony_ci2+a| Inherited from latexmath:[sqrt(dot(x, x))].
1511e5c31af7Sopenharmony_ci| code:distance(x, y)
1512e5c31af7Sopenharmony_ci2+a| Inherited from latexmath:[length(x - y)].
1513e5c31af7Sopenharmony_ci| code:cross()
1514e5c31af7Sopenharmony_ci2+| Inherited from [eq]#code:OpFSub(code:OpFMul, code:OpFMul)#.
1515e5c31af7Sopenharmony_ci| code:normalize(x)
1516e5c31af7Sopenharmony_ci2+a| Inherited from latexmath:[\frac{x}{length(x)}].
1517e5c31af7Sopenharmony_ci| code:faceforward(N, I, NRef)
1518e5c31af7Sopenharmony_ci2+| Inherited from [eq]#code:dot(NRef, I) < 0.0 ? N : -N#.
1519e5c31af7Sopenharmony_ci| code:reflect(x, y)
1520e5c31af7Sopenharmony_ci2+| Inherited from [eq]#x - 2.0 {times} code:dot(y, x) {times} y#.
1521e5c31af7Sopenharmony_ci| code:refract(I, N, eta)
1522e5c31af7Sopenharmony_ci2+| Inherited from [eq]#k < 0.0 ? 0.0 : eta {times} I - (eta {times} code:dot(N, I) {plus} code:sqrt(k)) {times} N#, where [eq]#k = 1 - eta {times} eta {times} (1.0 - code:dot(N, I) {times} code:dot(N, I))#.
1523e5c31af7Sopenharmony_ci| code:round
1524e5c31af7Sopenharmony_ci2+| Correctly rounded.
1525e5c31af7Sopenharmony_ci| code:roundEven
1526e5c31af7Sopenharmony_ci2+| Correctly rounded.
1527e5c31af7Sopenharmony_ci| code:trunc
1528e5c31af7Sopenharmony_ci2+| Correctly rounded.
1529e5c31af7Sopenharmony_ci| code:fabs
1530e5c31af7Sopenharmony_ci2+| Correctly rounded.
1531e5c31af7Sopenharmony_ci| code:fsign
1532e5c31af7Sopenharmony_ci2+| Correctly rounded.
1533e5c31af7Sopenharmony_ci| code:floor
1534e5c31af7Sopenharmony_ci2+| Correctly rounded.
1535e5c31af7Sopenharmony_ci| code:ceil
1536e5c31af7Sopenharmony_ci2+| Correctly rounded.
1537e5c31af7Sopenharmony_ci| code:fract
1538e5c31af7Sopenharmony_ci2+| Correctly rounded.
1539e5c31af7Sopenharmony_ci| code:modf
1540e5c31af7Sopenharmony_ci2+| Correctly rounded.
1541e5c31af7Sopenharmony_ci| code:fmin
1542e5c31af7Sopenharmony_ci2+| Correctly rounded.
1543e5c31af7Sopenharmony_ci| code:fmax
1544e5c31af7Sopenharmony_ci2+| Correctly rounded.
1545e5c31af7Sopenharmony_ci| code:fclamp
1546e5c31af7Sopenharmony_ci2+| Correctly rounded.
1547e5c31af7Sopenharmony_ci| code:fmix(x, y, a)
1548e5c31af7Sopenharmony_ci2+a| Inherited from latexmath:[x \times (1.0 - a) + y \times a].
1549e5c31af7Sopenharmony_ci| code:step
1550e5c31af7Sopenharmony_ci2+| Correctly rounded.
1551e5c31af7Sopenharmony_ci| code:smoothStep(edge0, edge1, x)
1552e5c31af7Sopenharmony_ci2+a| Inherited from latexmath:[t \times t \times (3.0 - 2.0 \times t)],
1553e5c31af7Sopenharmony_ciwhere latexmath:[t = clamp(\frac{x - edge0}{edge1 - edge0}, 0.0, 1.0)].
1554e5c31af7Sopenharmony_ci| code:nmin
1555e5c31af7Sopenharmony_ci2+| Correctly rounded.
1556e5c31af7Sopenharmony_ci| code:nmax
1557e5c31af7Sopenharmony_ci2+| Correctly rounded.
1558e5c31af7Sopenharmony_ci| code:nclamp
1559e5c31af7Sopenharmony_ci2+| Correctly rounded.
1560e5c31af7Sopenharmony_ci|====
1561e5c31af7Sopenharmony_ciendif::VK_VERSION_1_2,VK_KHR_shader_float16_int8[]
1562e5c31af7Sopenharmony_ci
1563e5c31af7Sopenharmony_ciifndef::VK_VERSION_1_2,VK_KHR_shader_float16_int8[]
1564e5c31af7Sopenharmony_ciFor single precision (32 bit) instructions, precisions are required: to be
1565e5c31af7Sopenharmony_ciat least as follows, unless decorated with RelaxedPrecision:
1566e5c31af7Sopenharmony_ci
1567e5c31af7Sopenharmony_ci.Precision of core SPIR-V Instructions
1568e5c31af7Sopenharmony_ci[options="header"]
1569e5c31af7Sopenharmony_ci|====
1570e5c31af7Sopenharmony_ci| Instruction                                                     | Precision
1571e5c31af7Sopenharmony_ci| code:OpFAdd                                                     | Correctly rounded.
1572e5c31af7Sopenharmony_ci| code:OpFSub                                                     | Correctly rounded.
1573e5c31af7Sopenharmony_ci| code:OpFMul, code:OpVectorTimesScalar, code:OpMatrixTimesScalar | Correctly rounded.
1574e5c31af7Sopenharmony_ci| code:OpFOrdEqual, code:OpFUnordEqual                            | Correct result.
1575e5c31af7Sopenharmony_ci| code:OpFOrdLessThan, code:OpFUnordLessThan                      | Correct result.
1576e5c31af7Sopenharmony_ci| code:OpFOrdGreaterThan, code:OpFUnordGreaterThan                | Correct result.
1577e5c31af7Sopenharmony_ci| code:OpFOrdLessThanEqual, code:OpFUnordLessThanEqual            | Correct result.
1578e5c31af7Sopenharmony_ci| code:OpFOrdGreaterThanEqual, code:OpFUnordGreaterThanEqual      | Correct result.
1579e5c31af7Sopenharmony_ci| code:OpFDiv(x,y)                                                | 2.5 ULP for [eq]#{vert}y{vert}# in the range [2^-126^, 2^126^].
1580e5c31af7Sopenharmony_ci| conversions between types                                       | Correctly rounded.
1581e5c31af7Sopenharmony_ci|====
1582e5c31af7Sopenharmony_ci
1583e5c31af7Sopenharmony_ci.Precision of GLSL.std.450 Instructions
1584e5c31af7Sopenharmony_ci[options="header"]
1585e5c31af7Sopenharmony_ci|====
1586e5c31af7Sopenharmony_ci|Instruction                 | Precision
1587e5c31af7Sopenharmony_ci| code:fma()                 | Inherited from code:OpFMul followed by code:OpFAdd.
1588e5c31af7Sopenharmony_ci| code:exp(x),  code:exp2(x) | [eq]#3 {plus} 2 {times} {vert}x{vert}# ULP.
1589e5c31af7Sopenharmony_ci| code:log(),  code:log2()   | 3 ULP outside the range [eq]#[0.5, 2.0]#. Absolute error < [eq]#2^-21^# inside the range [eq]#[0.5, 2.0]#.
1590e5c31af7Sopenharmony_ci| code:pow(x, y)             | Inherited from code:exp2(y {times} code:log2(x)).
1591e5c31af7Sopenharmony_ci| code:sqrt()                | Inherited from 1.0 / code:inversesqrt().
1592e5c31af7Sopenharmony_ci| code:inversesqrt()         | 2 ULP.
1593e5c31af7Sopenharmony_ci|====
1594e5c31af7Sopenharmony_ciendif::VK_VERSION_1_2,VK_KHR_shader_float16_int8[]
1595e5c31af7Sopenharmony_ci
1596e5c31af7Sopenharmony_ciGLSL.std.450 extended instructions specifically defined in terms of the
1597e5c31af7Sopenharmony_ciabove instructions inherit the above errors.
1598e5c31af7Sopenharmony_ciGLSL.std.450 extended instructions not listed above and not defined in terms
1599e5c31af7Sopenharmony_ciof the above have undefined: precision.
1600e5c31af7Sopenharmony_ci
1601e5c31af7Sopenharmony_ciFor the code:OpSRem and code:OpSMod instructions, if either operand is
1602e5c31af7Sopenharmony_cinegative the result is undefined:.
1603e5c31af7Sopenharmony_ci
1604e5c31af7Sopenharmony_ci[NOTE]
1605e5c31af7Sopenharmony_ci.Note
1606e5c31af7Sopenharmony_ci====
1607e5c31af7Sopenharmony_ciWhile the code:OpSRem and code:OpSMod instructions are supported by the
1608e5c31af7Sopenharmony_ciVulkan environment, they require non-negative values and thus do not enable
1609e5c31af7Sopenharmony_ciadditional functionality beyond what code:OpUMod provides.
1610e5c31af7Sopenharmony_ci====
1611e5c31af7Sopenharmony_ci
1612e5c31af7Sopenharmony_ciifdef::VK_NV_cooperative_matrix[]
1613e5c31af7Sopenharmony_cicode:OpCooperativeMatrixMulAddNV performs its operations in an
1614e5c31af7Sopenharmony_ciimplementation-dependent order and internal precision.
1615e5c31af7Sopenharmony_ciendif::VK_NV_cooperative_matrix[]
1616e5c31af7Sopenharmony_ci
1617e5c31af7Sopenharmony_ci[[spirvenv-image-signedness]]
1618e5c31af7Sopenharmony_ci== Signedness of SPIR-V Image Accesses
1619e5c31af7Sopenharmony_ci
1620e5c31af7Sopenharmony_ciSPIR-V associates a signedness with all integer image accesses.
1621e5c31af7Sopenharmony_ciThis is required in certain parts of the SPIR-V and the Vulkan image access
1622e5c31af7Sopenharmony_cipipeline to ensure defined results.
1623e5c31af7Sopenharmony_ciThe signedness is determined from a combination of the access instruction's
1624e5c31af7Sopenharmony_cicode:Image code:Operands and the underlying image's code:Sampled code:Type
1625e5c31af7Sopenharmony_cias follows:
1626e5c31af7Sopenharmony_ci
1627e5c31af7Sopenharmony_ci 1. If the instruction's code:Image code:Operands contains the
1628e5c31af7Sopenharmony_ci    code:SignExtend operand then the access is signed.
1629e5c31af7Sopenharmony_ci 2. If the instruction's code:Image code:Operands contains the
1630e5c31af7Sopenharmony_ci    code:ZeroExtend operand then the access is unsigned.
1631e5c31af7Sopenharmony_ci 3. Otherwise, the image accesses signedness matches that of the
1632e5c31af7Sopenharmony_ci    code:Sampled code:Type of the code:OpTypeImage being accessed.
1633e5c31af7Sopenharmony_ci
1634e5c31af7Sopenharmony_ci[[spirvenv-format-type-matching]]
1635e5c31af7Sopenharmony_ci== Image Format and Type Matching
1636e5c31af7Sopenharmony_ci
1637e5c31af7Sopenharmony_ciWhen specifying the code:Image code:Format of an code:OpTypeImage, the
1638e5c31af7Sopenharmony_ciconverted bit width and type, as shown in the table below, must: match the
1639e5c31af7Sopenharmony_cicode:Sampled code:Type.
1640e5c31af7Sopenharmony_ciThe signedness must: match the <<spirvenv-image-signedness,signedness of any
1641e5c31af7Sopenharmony_ciaccess>> to the image.
1642e5c31af7Sopenharmony_ci
1643e5c31af7Sopenharmony_ci[NOTE]
1644e5c31af7Sopenharmony_ci.Note
1645e5c31af7Sopenharmony_ci====
1646e5c31af7Sopenharmony_ciFormatted accesses are always converted from a shader readable type to the
1647e5c31af7Sopenharmony_ciresource's format or vice versa via <<textures-format-conversion>> for reads
1648e5c31af7Sopenharmony_ciand <<textures-output-format-conversion>> for writes.
1649e5c31af7Sopenharmony_ciAs such, the bit width and format below do not necessarily match 1:1 with
1650e5c31af7Sopenharmony_ciwhat might be expected for some formats.
1651e5c31af7Sopenharmony_ci====
1652e5c31af7Sopenharmony_ci
1653e5c31af7Sopenharmony_ciFor a given code:Image code:Format, the code:Sampled code:Type must: be the
1654e5c31af7Sopenharmony_citype described in the _Type_ column of the below table, with its
1655e5c31af7Sopenharmony_cicode:Literal code:Width set to that in the _Bit Width_ column.
1656e5c31af7Sopenharmony_ciEvery access that is made to the image must: have a signedness equal to that
1657e5c31af7Sopenharmony_ciin the _Signedness_ column (where applicable).
1658e5c31af7Sopenharmony_ci
1659e5c31af7Sopenharmony_ci[options="autowidth"]
1660e5c31af7Sopenharmony_ci|===
1661e5c31af7Sopenharmony_ci| Image Format       | Type                 | Bit Width | Signedness
1662e5c31af7Sopenharmony_ci
1663e5c31af7Sopenharmony_ci| code:Unknown       | Any                  | Any       | Any
1664e5c31af7Sopenharmony_ci| code:Rgba32f   .20+| code:OpTypeFloat .20+| 32    .20+| N/A
1665e5c31af7Sopenharmony_ci| code:Rg32f
1666e5c31af7Sopenharmony_ci| code:R32f
1667e5c31af7Sopenharmony_ci| code:Rgba16f
1668e5c31af7Sopenharmony_ci| code:Rg16f
1669e5c31af7Sopenharmony_ci| code:R16f
1670e5c31af7Sopenharmony_ci| code:Rgba16
1671e5c31af7Sopenharmony_ci| code:Rg16
1672e5c31af7Sopenharmony_ci| code:R16
1673e5c31af7Sopenharmony_ci| code:Rgba16Snorm
1674e5c31af7Sopenharmony_ci| code:Rg16Snorm
1675e5c31af7Sopenharmony_ci| code:R16Snorm
1676e5c31af7Sopenharmony_ci| code:Rgb10A2
1677e5c31af7Sopenharmony_ci| code:R11fG11fB10f
1678e5c31af7Sopenharmony_ci| code:Rgba8
1679e5c31af7Sopenharmony_ci| code:Rg8
1680e5c31af7Sopenharmony_ci| code:R8
1681e5c31af7Sopenharmony_ci| code:Rgba8Snorm
1682e5c31af7Sopenharmony_ci| code:Rg8Snorm
1683e5c31af7Sopenharmony_ci| code:R8Snorm
1684e5c31af7Sopenharmony_ci| code:Rgba32i   .19+| code:OpTypeInt   .19+| 32     .9+| 1
1685e5c31af7Sopenharmony_ci| code:Rg32i
1686e5c31af7Sopenharmony_ci| code:R32i
1687e5c31af7Sopenharmony_ci| code:Rgba16i
1688e5c31af7Sopenharmony_ci| code:Rg16i
1689e5c31af7Sopenharmony_ci| code:R16i
1690e5c31af7Sopenharmony_ci| code:Rgba8i
1691e5c31af7Sopenharmony_ci| code:Rg8i
1692e5c31af7Sopenharmony_ci| code:R8i
1693e5c31af7Sopenharmony_ci| code:Rgba32ui                                     .10+| 0
1694e5c31af7Sopenharmony_ci| code:Rg32ui
1695e5c31af7Sopenharmony_ci| code:R32ui
1696e5c31af7Sopenharmony_ci| code:Rgba16ui
1697e5c31af7Sopenharmony_ci| code:Rg16ui
1698e5c31af7Sopenharmony_ci| code:R16ui
1699e5c31af7Sopenharmony_ci| code:Rgb10a2ui
1700e5c31af7Sopenharmony_ci| code:Rgba8ui
1701e5c31af7Sopenharmony_ci| code:Rg8ui
1702e5c31af7Sopenharmony_ci| code:R8ui
1703e5c31af7Sopenharmony_ci| code:R64i       .2+| code:OpTypeInt    .2+| 64        | 1
1704e5c31af7Sopenharmony_ci| code:R64ui                                            | 0
1705e5c31af7Sopenharmony_ci|===
1706e5c31af7Sopenharmony_ci
1707e5c31af7Sopenharmony_ci[[spirvenv-image-formats]]
1708e5c31af7Sopenharmony_ci== Compatibility Between SPIR-V Image Formats And Vulkan Formats
1709e5c31af7Sopenharmony_ci
1710e5c31af7Sopenharmony_ciSPIR-V code:Image code:Format values are compatible with elink:VkFormat
1711e5c31af7Sopenharmony_civalues as defined below:
1712e5c31af7Sopenharmony_ci
1713e5c31af7Sopenharmony_ci.SPIR-V and Vulkan Image Format Compatibility
1714e5c31af7Sopenharmony_ci[cols="2*", options="header"]
1715e5c31af7Sopenharmony_ci|====
1716e5c31af7Sopenharmony_ci|SPIR-V Image Format    |Compatible Vulkan Format
1717e5c31af7Sopenharmony_ci|code:Unknown           |Any
1718e5c31af7Sopenharmony_ci|code:Rgba32f           |ename:VK_FORMAT_R32G32B32A32_SFLOAT
1719e5c31af7Sopenharmony_ci|code:Rgba16f           |ename:VK_FORMAT_R16G16B16A16_SFLOAT
1720e5c31af7Sopenharmony_ci|code:R32f              |ename:VK_FORMAT_R32_SFLOAT
1721e5c31af7Sopenharmony_ci|code:Rgba8             |ename:VK_FORMAT_R8G8B8A8_UNORM
1722e5c31af7Sopenharmony_ci|code:Rgba8Snorm        |ename:VK_FORMAT_R8G8B8A8_SNORM
1723e5c31af7Sopenharmony_ci|code:Rg32f             |ename:VK_FORMAT_R32G32_SFLOAT
1724e5c31af7Sopenharmony_ci|code:Rg16f             |ename:VK_FORMAT_R16G16_SFLOAT
1725e5c31af7Sopenharmony_ci|code:R11fG11fB10f      |ename:VK_FORMAT_B10G11R11_UFLOAT_PACK32
1726e5c31af7Sopenharmony_ci|code:R16f              |ename:VK_FORMAT_R16_SFLOAT
1727e5c31af7Sopenharmony_ci|code:Rgba16            |ename:VK_FORMAT_R16G16B16A16_UNORM
1728e5c31af7Sopenharmony_ci|code:Rgb10A2           |ename:VK_FORMAT_A2B10G10R10_UNORM_PACK32
1729e5c31af7Sopenharmony_ci|code:Rg16              |ename:VK_FORMAT_R16G16_UNORM
1730e5c31af7Sopenharmony_ci|code:Rg8               |ename:VK_FORMAT_R8G8_UNORM
1731e5c31af7Sopenharmony_ci|code:R16               |ename:VK_FORMAT_R16_UNORM
1732e5c31af7Sopenharmony_ci|code:R8                |ename:VK_FORMAT_R8_UNORM
1733e5c31af7Sopenharmony_ci|code:Rgba16Snorm       |ename:VK_FORMAT_R16G16B16A16_SNORM
1734e5c31af7Sopenharmony_ci|code:Rg16Snorm         |ename:VK_FORMAT_R16G16_SNORM
1735e5c31af7Sopenharmony_ci|code:Rg8Snorm          |ename:VK_FORMAT_R8G8_SNORM
1736e5c31af7Sopenharmony_ci|code:R16Snorm          |ename:VK_FORMAT_R16_SNORM
1737e5c31af7Sopenharmony_ci|code:R8Snorm           |ename:VK_FORMAT_R8_SNORM
1738e5c31af7Sopenharmony_ci|code:Rgba32i           |ename:VK_FORMAT_R32G32B32A32_SINT
1739e5c31af7Sopenharmony_ci|code:Rgba16i           |ename:VK_FORMAT_R16G16B16A16_SINT
1740e5c31af7Sopenharmony_ci|code:Rgba8i            |ename:VK_FORMAT_R8G8B8A8_SINT
1741e5c31af7Sopenharmony_ci|code:R32i              |ename:VK_FORMAT_R32_SINT
1742e5c31af7Sopenharmony_ci|code:Rg32i             |ename:VK_FORMAT_R32G32_SINT
1743e5c31af7Sopenharmony_ci|code:Rg16i             |ename:VK_FORMAT_R16G16_SINT
1744e5c31af7Sopenharmony_ci|code:Rg8i              |ename:VK_FORMAT_R8G8_SINT
1745e5c31af7Sopenharmony_ci|code:R16i              |ename:VK_FORMAT_R16_SINT
1746e5c31af7Sopenharmony_ci|code:R8i               |ename:VK_FORMAT_R8_SINT
1747e5c31af7Sopenharmony_ci|code:Rgba32ui          |ename:VK_FORMAT_R32G32B32A32_UINT
1748e5c31af7Sopenharmony_ci|code:Rgba16ui          |ename:VK_FORMAT_R16G16B16A16_UINT
1749e5c31af7Sopenharmony_ci|code:Rgba8ui           |ename:VK_FORMAT_R8G8B8A8_UINT
1750e5c31af7Sopenharmony_ci|code:R32ui             |ename:VK_FORMAT_R32_UINT
1751e5c31af7Sopenharmony_ci|code:Rgb10a2ui         |ename:VK_FORMAT_A2B10G10R10_UINT_PACK32
1752e5c31af7Sopenharmony_ci|code:Rg32ui            |ename:VK_FORMAT_R32G32_UINT
1753e5c31af7Sopenharmony_ci|code:Rg16ui            |ename:VK_FORMAT_R16G16_UINT
1754e5c31af7Sopenharmony_ci|code:Rg8ui             |ename:VK_FORMAT_R8G8_UINT
1755e5c31af7Sopenharmony_ci|code:R16ui             |ename:VK_FORMAT_R16_UINT
1756e5c31af7Sopenharmony_ci|code:R8ui              |ename:VK_FORMAT_R8_UINT
1757e5c31af7Sopenharmony_ci|code:R64i              |ename:VK_FORMAT_R64_SINT
1758e5c31af7Sopenharmony_ci|code:R64ui             |ename:VK_FORMAT_R64_UINT
1759e5c31af7Sopenharmony_ci|====
1760