SPIR-V 的 Vulkan 环境

Vulkan 的着色器由Khronos SPIR-V 规范以及GLSL 的 Khronos SPIR-V 扩展指令规范定义。本附录定义了适用于 Vulkan 着色器的其他 SPIR-V 要求。

版本和格式

Vulkan 1.4 实现必须支持 SPIR-V 的 1.0、1.1、1.2、1.3、1.4、1.5 和 1.6 版本,以及 GLSL 的 SPIR-V 扩展指令的 1.0 版本。

传入 vkCreateShaderModule 的 SPIR-V 模块被解释为主机字节序中的一系列 32 位字,其中文字字符串按照 SPIR-V 规范第 2.2 节中的描述进行打包。SPIR-V 模块的前几个字必须是幻数和 SPIR-V 版本号,如 SPIR-V 规范的第 2.3 节中所述。

功能

下表列出了 Vulkan 实现中可能支持的 SPIR-V 功能集。除非满足以下针对 vkCreateShaderModuledevice 参数中指定的 VkDevice 的条件之一,否则应用程序不得在传递给 vkCreateShaderModule 的 SPIR-V 中使用这些功能中的任何一个。

  • 表中相应的字段为空。

  • 任何相应的 Vulkan 特性已启用。

  • 任何相应的 Vulkan 扩展已启用。

  • 支持任何相应的 Vulkan 属性。

  • 支持相应的核心版本(由 VkPhysicalDeviceProperties::apiVersion 返回)。

表 1. SPIR-V 功能列表以及相应的 Vulkan 特性、扩展或核心版本
SPIR-V OpCapability
                Vulkan 特性、扩展或核心版本

Matrix
                VK_VERSION_1_0

Shader
                VK_VERSION_1_0

InputAttachment
                VK_VERSION_1_0

Sampled1D
                VK_VERSION_1_0

Image1D
                VK_VERSION_1_0

SampledBuffer
                VK_VERSION_1_0

ImageBuffer
                VK_VERSION_1_0

ImageQuery
                VK_VERSION_1_0

DerivativeControl
                VK_VERSION_1_0

Geometry
                VkPhysicalDeviceFeatures::geometryShader

Tessellation
                VkPhysicalDeviceFeatures::tessellationShader

Float64
                VkPhysicalDeviceFeatures::shaderFloat64

Int64
                VkPhysicalDeviceFeatures::shaderInt64

Int64Atomics
                VkPhysicalDeviceVulkan12Features::shaderBufferInt64Atomics
                VkPhysicalDeviceVulkan12Features::shaderSharedInt64Atomics
                VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT::shaderImageInt64Atomics

AtomicFloat16AddEXT
                VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT::shaderBufferFloat16AtomicAdd
                VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT::shaderSharedFloat16AtomicAdd

AtomicFloat32AddEXT
                VkPhysicalDeviceShaderAtomicFloatFeaturesEXT::shaderBufferFloat32AtomicAdd
                VkPhysicalDeviceShaderAtomicFloatFeaturesEXT::shaderSharedFloat32AtomicAdd
                VkPhysicalDeviceShaderAtomicFloatFeaturesEXT::shaderImageFloat32AtomicAdd

AtomicFloat64AddEXT
                VkPhysicalDeviceShaderAtomicFloatFeaturesEXT::shaderBufferFloat64AtomicAdd
                VkPhysicalDeviceShaderAtomicFloatFeaturesEXT::shaderSharedFloat64AtomicAdd

AtomicFloat16MinMaxEXT
                VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT::shaderBufferFloat16AtomicMinMax
                VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT::shaderSharedFloat16AtomicMinMax

AtomicFloat32MinMaxEXT
                VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT::shaderBufferFloat32AtomicMinMax
                VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT::shaderSharedFloat32AtomicMinMax
                VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT::shaderImageFloat32AtomicMinMax

AtomicFloat64MinMaxEXT
                VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT::shaderBufferFloat64AtomicMinMax
                VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT::shaderSharedFloat64AtomicMinMax

AtomicFloat16VectorNV
                VkPhysicalDeviceShaderAtomicFloat16VectorFeaturesNV::shaderFloat16VectorAtomics

Int64ImageEXT
                VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT::shaderImageInt64Atomics

Int16
                VkPhysicalDeviceFeatures::shaderInt16

TessellationPointSize
                VkPhysicalDeviceFeatures::shaderTessellationAndGeometryPointSize

GeometryPointSize
                VkPhysicalDeviceFeatures::shaderTessellationAndGeometryPointSize

ImageGatherExtended
                VkPhysicalDeviceFeatures::shaderImageGatherExtended

StorageImageMultisample
                VkPhysicalDeviceFeatures::shaderStorageImageMultisample

UniformBufferArrayDynamicIndexing
                VkPhysicalDeviceFeatures::shaderUniformBufferArrayDynamicIndexing

SampledImageArrayDynamicIndexing
                VkPhysicalDeviceFeatures::shaderSampledImageArrayDynamicIndexing

StorageBufferArrayDynamicIndexing
                VkPhysicalDeviceFeatures::shaderStorageBufferArrayDynamicIndexing

StorageImageArrayDynamicIndexing
                VkPhysicalDeviceFeatures::shaderStorageImageArrayDynamicIndexing

ClipDistance
                VkPhysicalDeviceFeatures::shaderClipDistance

CullDistance
                VkPhysicalDeviceFeatures::shaderCullDistance

ImageCubeArray
                VkPhysicalDeviceFeatures::imageCubeArray

SampleRateShading
                VkPhysicalDeviceFeatures::sampleRateShading

SparseResidency
                VkPhysicalDeviceFeatures::shaderResourceResidency

MinLod
                VkPhysicalDeviceFeatures::shaderResourceMinLod

SampledCubeArray
                VkPhysicalDeviceFeatures::imageCubeArray

ImageMSArray
                VkPhysicalDeviceFeatures::shaderStorageImageMultisample

StorageImageExtendedFormats
                VK_VERSION_1_0

InterpolationFunction
                VkPhysicalDeviceFeatures::sampleRateShading

StorageImageReadWithoutFormat
                VkPhysicalDeviceFeatures::shaderStorageImageReadWithoutFormat
                VK_VERSION_1_3
                VK_KHR_format_feature_flags2

StorageImageWriteWithoutFormat
                VkPhysicalDeviceFeatures::shaderStorageImageWriteWithoutFormat
                VK_VERSION_1_3
                VK_KHR_format_feature_flags2

MultiViewport
                VkPhysicalDeviceFeatures::multiViewport

DrawParameters
                VkPhysicalDeviceVulkan11Features::shaderDrawParameters
                VkPhysicalDeviceShaderDrawParametersFeatures::shaderDrawParameters
                VK_KHR_shader_draw_parameters

MultiView
                VkPhysicalDeviceVulkan11Features::multiview
                VkPhysicalDeviceMultiviewFeatures::multiview

DeviceGroup
                VK_VERSION_1_1
                VK_KHR_device_group

VariablePointersStorageBuffer
                VkPhysicalDeviceVulkan11Features::variablePointersStorageBuffer
                VkPhysicalDeviceVariablePointersFeatures::variablePointersStorageBuffer

VariablePointers
                VkPhysicalDeviceVulkan11Features::variablePointers
                VkPhysicalDeviceVariablePointersFeatures::variablePointers

ShaderClockKHR
                VK_KHR_shader_clock

StencilExportEXT
                VK_EXT_shader_stencil_export

SubgroupBallotKHR
                VK_EXT_shader_subgroup_ballot

SubgroupVoteKHR
                VK_EXT_shader_subgroup_vote

ImageReadWriteLodAMD
                VK_AMD_shader_image_load_store_lod

ImageGatherBiasLodAMD
                VK_AMD_texture_gather_bias_lod

FragmentMaskAMD
                VK_AMD_shader_fragment_mask

SampleMaskOverrideCoverageNV
                VK_NV_sample_mask_override_coverage

GeometryShaderPassthroughNV
                VK_NV_geometry_shader_passthrough

ShaderViewportIndex
                VkPhysicalDeviceVulkan12Features::shaderOutputViewportIndex

ShaderLayer
                VkPhysicalDeviceVulkan12Features::shaderOutputLayer

ShaderViewportIndexLayerEXT
                VK_EXT_shader_viewport_index_layer
                VK_NV_viewport_array2

ShaderViewportMaskNV
                VK_NV_viewport_array2

PerViewAttributesNV
                VK_NVX_multiview_per_view_attributes

StorageBuffer16BitAccess
                VkPhysicalDeviceVulkan11Features::storageBuffer16BitAccess
                VkPhysicalDevice16BitStorageFeatures::storageBuffer16BitAccess

UniformAndStorageBuffer16BitAccess
                VkPhysicalDeviceVulkan11Features::uniformAndStorageBuffer16BitAccess
                VkPhysicalDevice16BitStorageFeatures::uniformAndStorageBuffer16BitAccess

StoragePushConstant16
                VkPhysicalDeviceVulkan11Features::storagePushConstant16
                VkPhysicalDevice16BitStorageFeatures::storagePushConstant16

StorageInputOutput16
                VkPhysicalDeviceVulkan11Features::storageInputOutput16
                VkPhysicalDevice16BitStorageFeatures::storageInputOutput16

GroupNonUniform
                VK_SUBGROUP_FEATURE_BASIC_BIT

GroupNonUniformVote
                VK_SUBGROUP_FEATURE_VOTE_BIT

GroupNonUniformArithmetic
                VK_SUBGROUP_FEATURE_ARITHMETIC_BIT

GroupNonUniformBallot
                VK_SUBGROUP_FEATURE_BALLOT_BIT

GroupNonUniformShuffle
                VK_SUBGROUP_FEATURE_SHUFFLE_BIT

GroupNonUniformShuffleRelative
                VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT

GroupNonUniformClustered
                VK_SUBGROUP_FEATURE_CLUSTERED_BIT

GroupNonUniformQuad
                VK_SUBGROUP_FEATURE_QUAD_BIT

GroupNonUniformPartitionedNV
                VK_SUBGROUP_FEATURE_PARTITIONED_BIT_NV

SampleMaskPostDepthCoverage
                VK_EXT_post_depth_coverage

ShaderNonUniform
                VK_VERSION_1_2
                VK_EXT_descriptor_indexing

RuntimeDescriptorArray
                VkPhysicalDeviceVulkan12Features::runtimeDescriptorArray

InputAttachmentArrayDynamicIndexing
                VkPhysicalDeviceVulkan12Features::shaderInputAttachmentArrayDynamicIndexing

UniformTexelBufferArrayDynamicIndexing
                VkPhysicalDeviceVulkan12Features::shaderUniformTexelBufferArrayDynamicIndexing

StorageTexelBufferArrayDynamicIndexing
                VkPhysicalDeviceVulkan12Features::shaderStorageTexelBufferArrayDynamicIndexing

UniformBufferArrayNonUniformIndexing
                VkPhysicalDeviceVulkan12Features::shaderUniformBufferArrayNonUniformIndexing

SampledImageArrayNonUniformIndexing
                VkPhysicalDeviceVulkan12Features::shaderSampledImageArrayNonUniformIndexing

StorageBufferArrayNonUniformIndexing
                VkPhysicalDeviceVulkan12Features::shaderStorageBufferArrayNonUniformIndexing

StorageImageArrayNonUniformIndexing
                VkPhysicalDeviceVulkan12Features::shaderStorageImageArrayNonUniformIndexing

InputAttachmentArrayNonUniformIndexing
                VkPhysicalDeviceVulkan12Features::shaderInputAttachmentArrayNonUniformIndexing

UniformTexelBufferArrayNonUniformIndexing
                VkPhysicalDeviceVulkan12Features::shaderUniformTexelBufferArrayNonUniformIndexing

StorageTexelBufferArrayNonUniformIndexing
                VkPhysicalDeviceVulkan12Features::shaderStorageTexelBufferArrayNonUniformIndexing

FragmentFullyCoveredEXT
                VK_EXT_conservative_rasterization

Float16
                VkPhysicalDeviceVulkan12Features::shaderFloat16
                VK_AMD_gpu_shader_half_float

Int8
                VkPhysicalDeviceVulkan12Features::shaderInt8

StorageBuffer8BitAccess
                VkPhysicalDeviceVulkan12Features::storageBuffer8BitAccess

VkPhysicalDeviceVulkan12Features::uniformAndStorageBuffer8BitAccess

StoragePushConstant8
                VkPhysicalDeviceVulkan12Features::storagePushConstant8

VulkanMemoryModel
                VkPhysicalDeviceVulkan12Features::vulkanMemoryModel

VulkanMemoryModelDeviceScope
                VkPhysicalDeviceVulkan12Features::vulkanMemoryModelDeviceScope

DenormPreserve
                VkPhysicalDeviceVulkan12Properties::shaderDenormPreserveFloat16
                VkPhysicalDeviceVulkan12Properties::shaderDenormPreserveFloat32
                VkPhysicalDeviceVulkan12Properties::shaderDenormPreserveFloat64

DenormFlushToZero
                VkPhysicalDeviceVulkan12Properties::shaderDenormFlushToZeroFloat16
                VkPhysicalDeviceVulkan12Properties::shaderDenormFlushToZeroFloat32
                VkPhysicalDeviceVulkan12Properties::shaderDenormFlushToZeroFloat64

SignedZeroInfNanPreserve
                VkPhysicalDeviceVulkan12Properties::shaderSignedZeroInfNanPreserveFloat16
                VkPhysicalDeviceVulkan12Properties::shaderSignedZeroInfNanPreserveFloat32
                VkPhysicalDeviceVulkan12Properties::shaderSignedZeroInfNanPreserveFloat64

RoundingModeRTE
                VkPhysicalDeviceVulkan12Properties::shaderRoundingModeRTEFloat16
                VkPhysicalDeviceVulkan12Properties::shaderRoundingModeRTEFloat32
                VkPhysicalDeviceVulkan12Properties::shaderRoundingModeRTEFloat64

RoundingModeRTZ
                VkPhysicalDeviceVulkan12Properties::shaderRoundingModeRTZFloat16
                VkPhysicalDeviceVulkan12Properties::shaderRoundingModeRTZFloat32
                VkPhysicalDeviceVulkan12Properties::shaderRoundingModeRTZFloat64

ComputeDerivativeGroupQuadsKHR
                VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR::computeDerivativeGroupQuads
                VkPhysicalDeviceComputeShaderDerivativesFeaturesNV::computeDerivativeGroupQuads

ComputeDerivativeGroupLinearKHR
                VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR::computeDerivativeGroupLinear
                VkPhysicalDeviceComputeShaderDerivativesFeaturesNV::computeDerivativeGroupLinear

ImageFootprintNV
                VkPhysicalDeviceShaderImageFootprintFeaturesNV::imageFootprint

MeshShadingNV
                VK_NV_mesh_shader

RayTracingKHR
                VkPhysicalDeviceRayTracingPipelineFeaturesKHR::rayTracingPipeline

RayQueryKHR
                VkPhysicalDeviceRayQueryFeaturesKHR::rayQuery

RayTraversalPrimitiveCullingKHR
                VkPhysicalDeviceRayTracingPipelineFeaturesKHR::rayTraversalPrimitiveCulling
                VkPhysicalDeviceRayQueryFeaturesKHR::rayQuery

RayCullMaskKHR
                VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR::rayTracingMaintenance1

RayTracingNV
                VK_NV_ray_tracing

RayTracingMotionBlurNV
                VkPhysicalDeviceRayTracingMotionBlurFeaturesNV::rayTracingMotionBlur

TransformFeedback
                VkPhysicalDeviceTransformFeedbackFeaturesEXT::transformFeedback

GeometryStreams
                VkPhysicalDeviceTransformFeedbackFeaturesEXT::geometryStreams

FragmentDensityEXT
                VkPhysicalDeviceFragmentDensityMapFeaturesEXT::fragmentDensityMap
                VkPhysicalDeviceShadingRateImageFeaturesNV::shadingRateImage

PhysicalStorageBufferAddresses
                VkPhysicalDeviceVulkan12Features::bufferDeviceAddress
                VkPhysicalDeviceBufferDeviceAddressFeaturesEXT::bufferDeviceAddress

CooperativeMatrixNV
                VkPhysicalDeviceCooperativeMatrixFeaturesNV::cooperativeMatrix

IntegerFunctions2INTEL
                VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL::shaderIntegerFunctions2

ShaderSMBuiltinsNV
                VkPhysicalDeviceShaderSMBuiltinsFeaturesNV::shaderSMBuiltins

FragmentShaderSampleInterlockEXT
                VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT::fragmentShaderSampleInterlock

FragmentShaderPixelInterlockEXT
                VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT::fragmentShaderPixelInterlock

FragmentShaderShadingRateInterlockEXT
                VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT::fragmentShaderShadingRateInterlock
                VkPhysicalDeviceShadingRateImageFeaturesNV::shadingRateImage

DemoteToHelperInvocation
                VkPhysicalDeviceVulkan13Features::shaderDemoteToHelperInvocation
                VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT::shaderDemoteToHelperInvocation

FragmentShadingRateKHR
                VkPhysicalDeviceFragmentShadingRateFeaturesKHR::pipelineFragmentShadingRate
                VkPhysicalDeviceFragmentShadingRateFeaturesKHR::primitiveFragmentShadingRate
                VkPhysicalDeviceFragmentShadingRateFeaturesKHR::attachmentFragmentShadingRate

WorkgroupMemoryExplicitLayoutKHR
                VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR::workgroupMemoryExplicitLayout

WorkgroupMemoryExplicitLayout8BitAccessKHR
                VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR::workgroupMemoryExplicitLayout8BitAccess

WorkgroupMemoryExplicitLayout16BitAccessKHR
                VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR::workgroupMemoryExplicitLayout16BitAccess

DotProductInputAll
                VkPhysicalDeviceVulkan13Features::shaderIntegerDotProduct
                VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR::shaderIntegerDotProduct

DotProductInput4x8Bit
                VkPhysicalDeviceVulkan13Features::shaderIntegerDotProduct
                VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR::shaderIntegerDotProduct

DotProductInput4x8BitPacked
                VkPhysicalDeviceVulkan13Features::shaderIntegerDotProduct
                VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR::shaderIntegerDotProduct

DotProduct
                VkPhysicalDeviceVulkan13Features::shaderIntegerDotProduct
                VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR::shaderIntegerDotProduct

FragmentBarycentricKHR
                VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR::fragmentShaderBarycentric
                VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV::fragmentShaderBarycentric

TextureSampleWeightedQCOM
                VkPhysicalDeviceImageProcessingFeaturesQCOM::textureSampleWeighted

TextureBoxFilterQCOM
                VkPhysicalDeviceImageProcessingFeaturesQCOM::textureBoxFilter

TextureBlockMatchQCOM
                VkPhysicalDeviceImageProcessingFeaturesQCOM::textureBlockMatch

TextureBlockMatch2QCOM
                VkPhysicalDeviceImageProcessing2FeaturesQCOM::textureBlockMatch2

MeshShadingEXT
                VK_EXT_mesh_shader

RayTracingOpacityMicromapEXT
                VK_EXT_opacity_micromap

CoreBuiltinsARM
                VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM::shaderCoreBuiltins

ShaderInvocationReorderNV
                VK_NV_ray_tracing_invocation_reorder

ClusterCullingShadingHUAWEI
                VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI::clustercullingShader

RayTracingPositionFetchKHR
                VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR::rayTracingPositionFetch

RayQueryPositionFetchKHR
                VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR::rayTracingPositionFetch

TileImageColorReadAccessEXT
                VkPhysicalDeviceShaderTileImageFeaturesEXT::shaderTileImageColorReadAccess

TileImageDepthReadAccessEXT
                VkPhysicalDeviceShaderTileImageFeaturesEXT::shaderTileImageDepthReadAccess

TileImageStencilReadAccessEXT
                VkPhysicalDeviceShaderTileImageFeaturesEXT::shaderTileImageStencilReadAccess

CooperativeMatrixKHR
                VkPhysicalDeviceCooperativeMatrixFeaturesKHR::cooperativeMatrix

ShaderEnqueueAMDX
                VkPhysicalDeviceShaderEnqueueFeaturesAMDX::shaderEnqueue

GroupNonUniformRotateKHR
                VkPhysicalDeviceVulkan14Features::shaderSubgroupRotate
                VkPhysicalDeviceShaderSubgroupRotateFeatures::shaderSubgroupRotate

ExpectAssumeKHR
                VkPhysicalDeviceVulkan14Features::shaderExpectAssume
                VkPhysicalDeviceShaderExpectAssumeFeatures::shaderExpectAssume

FloatControls2
                VkPhysicalDeviceVulkan14Features::shaderFloatControls2
                VkPhysicalDeviceShaderFloatControls2Features::shaderFloatControls2

QuadControlKHR
                VkPhysicalDeviceShaderQuadControlFeaturesKHR::shaderQuadControl

RawAccessChainsNV
                VkPhysicalDeviceRawAccessChainsFeaturesNV::shaderRawAccessChains

ReplicatedCompositesEXT
                VkPhysicalDeviceShaderReplicatedCompositesFeaturesEXT::shaderReplicatedComposites

TensorAddressingNV
                VkPhysicalDeviceCooperativeMatrix2FeaturesNV::cooperativeMatrixTensorAddressing

CooperativeMatrixReductionsNV
                VkPhysicalDeviceCooperativeMatrix2FeaturesNV::cooperativeMatrixReductions

CooperativeMatrixConversionsNV
                VkPhysicalDeviceCooperativeMatrix2FeaturesNV::cooperativeMatrixConversions

CooperativeMatrixPerElementOperationsNV
                VkPhysicalDeviceCooperativeMatrix2FeaturesNV::cooperativeMatrixPerElementOperations

CooperativeMatrixTensorAddressingNV
                VkPhysicalDeviceCooperativeMatrix2FeaturesNV::cooperativeMatrixTensorAddressing

CooperativeMatrixBlockLoadsNV
                VkPhysicalDeviceCooperativeMatrix2FeaturesNV::cooperativeMatrixBlockLoads

应用程序**必须**不将包含以下任何内容的 SPIR-V 模块传递给vkCreateShaderModule

  • 任何上面未列出的 OpCapability

  • 不支持的功能,或

  • 与未启用的 Vulkan 功能或扩展相对应的功能。

SPIR-V 扩展

下表列出了实现**可能**支持的 SPIR-V 扩展。应用程序**必须**不将使用以下 SPIR-V 扩展的 SPIR-V 模块传递给vkCreateShaderModule,除非满足以下条件之一:VkDevicevkCreateShaderModuledevice 参数中指定

表 2. SPIR-V 扩展列表以及对应的 Vulkan 扩展或核心版本
SPIR-V OpExtension
                Vulkan 扩展或核心版本

SPV_KHR_variable_pointers
                VK_VERSION_1_1
                VK_KHR_variable_pointers

SPV_AMD_shader_explicit_vertex_parameter
                VK_AMD_shader_explicit_vertex_parameter

SPV_AMD_gcn_shader
                VK_AMD_gcn_shader

SPV_AMD_gpu_shader_half_float
                VK_AMD_gpu_shader_half_float

SPV_AMD_gpu_shader_int16
                VK_AMD_gpu_shader_int16

SPV_AMD_shader_ballot
                VK_AMD_shader_ballot

SPV_AMD_shader_fragment_mask
                VK_AMD_shader_fragment_mask

SPV_AMD_shader_image_load_store_lod
                VK_AMD_shader_image_load_store_lod

SPV_AMD_shader_trinary_minmax
                VK_AMD_shader_trinary_minmax

SPV_AMD_texture_gather_bias_lod
                VK_AMD_texture_gather_bias_lod

SPV_AMD_shader_early_and_late_fragment_tests
                VK_AMD_shader_early_and_late_fragment_tests

SPV_KHR_shader_draw_parameters
                VK_VERSION_1_1
                VK_KHR_shader_draw_parameters

SPV_KHR_8bit_storage
                VK_VERSION_1_2
                VK_KHR_8bit_storage

SPV_KHR_16bit_storage
                VK_VERSION_1_1
                VK_KHR_16bit_storage

SPV_KHR_shader_clock
                VK_KHR_shader_clock

SPV_KHR_float_controls
                VK_VERSION_1_2
                VK_KHR_shader_float_controls

SPV_KHR_storage_buffer_storage_class
                VK_VERSION_1_1
                VK_KHR_storage_buffer_storage_class

SPV_KHR_post_depth_coverage
                VK_EXT_post_depth_coverage

SPV_EXT_shader_stencil_export
                VK_EXT_shader_stencil_export

SPV_KHR_shader_ballot
                VK_EXT_shader_subgroup_ballot

SPV_KHR_subgroup_vote
                VK_EXT_shader_subgroup_vote

SPV_NV_sample_mask_override_coverage
                VK_NV_sample_mask_override_coverage

SPV_NV_geometry_shader_passthrough
                VK_NV_geometry_shader_passthrough

SPV_NV_mesh_shader
                VK_NV_mesh_shader

SPV_NV_viewport_array2
                VK_NV_viewport_array2

SPV_NV_shader_subgroup_partitioned
                VK_NV_shader_subgroup_partitioned

SPV_NV_shader_invocation_reorder
                VK_NV_ray_tracing_invocation_reorder

SPV_EXT_shader_viewport_index_layer
                VK_VERSION_1_2
                VK_EXT_shader_viewport_index_layer

SPV_NVX_multiview_per_view_attributes
                VK_NVX_multiview_per_view_attributes

SPV_EXT_descriptor_indexing
                VK_VERSION_1_2
                VK_EXT_descriptor_indexing

SPV_KHR_vulkan_memory_model
                VK_VERSION_1_2
                VK_KHR_vulkan_memory_model

SPV_NV_compute_shader_derivatives
                VK_NV_compute_shader_derivatives

SPV_NV_fragment_shader_barycentric
                VK_NV_fragment_shader_barycentric

SPV_NV_shader_image_footprint
                VK_NV_shader_image_footprint

SPV_NV_shading_rate
                VK_NV_shading_rate_image

SPV_NV_ray_tracing
                VK_NV_ray_tracing

SPV_KHR_ray_tracing
                VK_KHR_ray_tracing_pipeline

SPV_KHR_ray_query
                VK_KHR_ray_query

SPV_KHR_ray_cull_mask
                VK_KHR_ray_tracing_maintenance1

SPV_GOOGLE_hlsl_functionality1
                VK_GOOGLE_hlsl_functionality1

SPV_GOOGLE_user_type
                VK_GOOGLE_user_type

SPV_GOOGLE_decorate_string
                VK_GOOGLE_decorate_string

SPV_EXT_fragment_invocation_density
                VK_EXT_fragment_density_map

SPV_KHR_physical_storage_buffer
                VK_VERSION_1_2
                VK_KHR_buffer_device_address

SPV_EXT_physical_storage_buffer
                VK_EXT_buffer_device_address

SPV_NV_cooperative_matrix
                VK_NV_cooperative_matrix

SPV_NV_shader_sm_builtins
                VK_NV_shader_sm_builtins

SPV_EXT_fragment_shader_interlock
                VK_EXT_fragment_shader_interlock

SPV_EXT_demote_to_helper_invocation
                VK_VERSION_1_3
                VK_EXT_shader_demote_to_helper_invocation

SPV_KHR_fragment_shading_rate
                VK_KHR_fragment_shading_rate

SPV_KHR_non_semantic_info
                VK_VERSION_1_3
                VK_KHR_shader_non_semantic_info

SPV_EXT_shader_image_int64
                VK_EXT_shader_image_atomic_int64

SPV_KHR_terminate_invocation
                VK_VERSION_1_3
                VK_KHR_shader_terminate_invocation

SPV_KHR_multiview
                VK_VERSION_1_1
                VK_KHR_multiview

SPV_KHR_workgroup_memory_explicit_layout
                VK_KHR_workgroup_memory_explicit_layout

SPV_EXT_shader_atomic_float_add
                VK_EXT_shader_atomic_float

SPV_KHR_fragment_shader_barycentric
                VK_KHR_fragment_shader_barycentric

SPV_KHR_subgroup_uniform_control_flow
                VK_VERSION_1_3
                VK_KHR_shader_subgroup_uniform_control_flow

SPV_EXT_shader_atomic_float_min_max
                VK_EXT_shader_atomic_float2

SPV_EXT_shader_atomic_float16_add
                VK_EXT_shader_atomic_float2

SPV_NV_shader_atomic_fp16_vector
                VK_NV_shader_atomic_float16_vector

SPV_EXT_fragment_fully_covered
                VK_EXT_conservative_rasterization

SPV_KHR_integer_dot_product
                VK_VERSION_1_3
                VK_KHR_shader_integer_dot_product

SPV_INTEL_shader_integer_functions2
                VK_INTEL_shader_integer_functions2

SPV_KHR_device_group
                VK_VERSION_1_1
                VK_KHR_device_group

SPV_QCOM_image_processing
                VK_QCOM_image_processing

SPV_QCOM_image_processing2
                VK_QCOM_image_processing2

SPV_EXT_mesh_shader
                VK_EXT_mesh_shader

SPV_KHR_ray_tracing_position_fetch
                VK_KHR_ray_tracing_position_fetch

SPV_EXT_shader_tile_image
                VK_EXT_shader_tile_image

SPV_EXT_opacity_micromap
                VK_EXT_opacity_micromap

SPV_KHR_cooperative_matrix
                VK_KHR_cooperative_matrix

SPV_ARM_core_builtins
                VK_ARM_shader_core_builtins

SPV_AMDX_shader_enqueue
                VK_AMDX_shader_enqueue

SPV_HUAWEI_cluster_culling_shader
                VK_HUAWEI_cluster_culling_shader

SPV_HUAWEI_subpass_shading
                VK_HUAWEI_subpass_shading

SPV_NV_ray_tracing_motion_blur
                VK_NV_ray_tracing_motion_blur

SPV_KHR_maximal_reconvergence
                VK_KHR_shader_maximal_reconvergence

SPV_KHR_subgroup_rotate
                VK_VERSION_1_4
                VK_KHR_shader_subgroup_rotate

SPV_KHR_expect_assume
                VK_VERSION_1_4
                VK_KHR_shader_expect_assume

SPV_KHR_float_controls2
                VK_VERSION_1_4
                VK_KHR_shader_float_controls2

SPV_KHR_quad_control
                VK_KHR_shader_quad_control

SPV_NV_raw_access_chains
                VK_NV_raw_access_chains

SPV_KHR_compute_shader_derivatives
                VK_KHR_compute_shader_derivatives

SPV_EXT_replicated_composites
                VK_EXT_shader_replicated_composites

SPV_KHR_relaxed_extended_instruction
                VK_KHR_shader_relaxed_extended_instruction

SPV_NV_cooperative_matrix2
                VK_NV_cooperative_matrix2

SPV_NV_tensor_addressing
                VK_NV_cooperative_matrix2

模块内的验证规则

传递给vkCreateShaderModule的 SPIR-V 模块**必须**符合以下规则

独立的 SPIR-V 验证

以下规则**可以**仅使用 SPIR-V 模块本身进行验证。它们不依赖于对实现及其功能或运行时信息(例如启用的功能)的了解。

有效使用
  • VUID-StandaloneSpirv-None-04633
    每个入口点必须没有返回值,并且不接受任何参数

  • VUID-StandaloneSpirv-None-04634
    入口点的静态函数调用图必须不包含循环;也就是说,不允许静态递归

  • VUID-StandaloneSpirv-None-04635
    必须选择 LogicalPhysicalStorageBuffer64 寻址模型

  • VUID-StandaloneSpirv-None-04636
    执行的 Scope 必须限制为 WorkgroupSubgroup

  • VUID-StandaloneSpirv-None-04637
    如果执行的 ScopeWorkgroup,那么它必须仅在 task、mesh、tessellation control 或 compute Execution Model 中使用

  • VUID-StandaloneSpirv-None-04638
    内存的 Scope 必须限制为 DeviceQueueFamilyWorkgroupShaderCallKHRSubgroupInvocation

  • VUID-StandaloneSpirv-ExecutionModel-07320
    如果 Execution ModelTessellationControl,并且 MemoryModelGLSL450,则内存的 Scope 必须不能是 Workgroup

  • VUID-StandaloneSpirv-None-07321
    如果内存的 ScopeWorkgroup,那么它必须仅在 task、mesh、tessellation control 或 compute Execution Model 中使用

  • VUID-StandaloneSpirv-None-04640
    如果内存的 ScopeShaderCallKHR,那么它必须仅在 ray generation、intersection、closest hit、any-hit、miss 和 callable Execution Model 中使用

  • VUID-StandaloneSpirv-None-04641
    如果内存的 ScopeInvocation,那么内存语义必须None

  • VUID-StandaloneSpirv-None-04642
    组操作Scope 必须限制为 Subgroup

  • VUID-StandaloneSpirv-SubgroupVoteKHR-07951
    如果未声明 SubgroupVoteKHRGroupNonUniformSubgroupBallotKHR 中的任何一项功能,则内存的 Scope 必须不能是 Subgroup

  • VUID-StandaloneSpirv-None-04643
    Storage Class 必须限制为 UniformConstantInputUniformOutputWorkgroupPrivateFunctionPushConstantImageStorageBufferRayPayloadKHRIncomingRayPayloadKHRHitAttributeKHRCallableDataKHRIncomingCallableDataKHRShaderRecordBufferKHRPhysicalStorageBufferTileImageEXT

  • VUID-StandaloneSpirv-None-04644
    如果 Storage ClassOutput,那么它必须不能在 GlComputeRayGenerationKHRIntersectionKHRAnyHitKHRClosestHitKHRMissKHRCallableKHR Execution Model 中使用

  • VUID-StandaloneSpirv-None-04645
    如果 Storage ClassWorkgroup,那么它必须仅在 task、mesh 或 compute Execution Model 中使用

  • VUID-StandaloneSpirv-None-08720
    如果 Storage ClassTileImageEXT,那么它必须仅在 fragment 执行模型中使用

  • VUID-StandaloneSpirv-OpAtomicStore-04730
    OpAtomicStore 必须不使用 AcquireAcquireReleaseSequentiallyConsistent 内存语义

  • VUID-StandaloneSpirv-OpAtomicLoad-04731
    OpAtomicLoad 必须不使用 ReleaseAcquireReleaseSequentiallyConsistent 内存语义

  • VUID-StandaloneSpirv-OpMemoryBarrier-04732
    OpMemoryBarrier 必须使用 AcquireReleaseAcquireReleaseSequentiallyConsistent 内存语义之一

  • VUID-StandaloneSpirv-OpMemoryBarrier-04733
    OpMemoryBarrier 必须包含至少一个 Storage Class

  • VUID-StandaloneSpirv-OpControlBarrier-04650
    如果 OpControlBarrier 的语义包含 AcquireReleaseAcquireReleaseSequentiallyConsistent 内存语义之一,则它必须包含至少一个 Storage Class

  • VUID-StandaloneSpirv-OpVariable-04651
    任何带有 Initializer 操作数的 OpVariable 必须将其 Storage Class 操作数设为 OutputPrivateFunctionWorkgroup

  • VUID-StandaloneSpirv-OpVariable-04734
    任何带有 Initializer 操作数且 Storage Class 操作数为 WorkgroupOpVariable 必须使用 OpConstantNull 作为初始化器

  • VUID-StandaloneSpirv-OpReadClockKHR-04652
    OpReadClockKHRScope 必须限制为 SubgroupDevice

  • VUID-StandaloneSpirv-OriginLowerLeft-04653
    必须不使用 OriginLowerLeft Execution Mode;fragment 入口点必须声明 OriginUpperLeft

  • VUID-StandaloneSpirv-PixelCenterInteger-04654
    必须不使用 PixelCenterInteger Execution Mode(像素始终以半整数坐标为中心)

  • VUID-StandaloneSpirv-UniformConstant-04655
    UniformConstant Storage Class 中的任何变量的类型必须OpTypeImageOpTypeSamplerOpTypeSampledImageOpTypeAccelerationStructureKHR 或其中一种类型的数组

  • VUID-StandaloneSpirv-Uniform-06807
    UniformStorageBuffer Storage Class 中的任何变量的类型必须OpTypeStruct 或此类型的数组

  • VUID-StandaloneSpirv-PushConstant-06808
    PushConstant Storage Class 中的任何变量的类型必须OpTypeStruct

  • VUID-StandaloneSpirv-OpTypeImage-04656
    OpTypeImage 必须为 “Sampled Type” 声明一个标量 32 位浮点数、64 位整数或 32 位整数类型(RelaxedPrecision 可以应用于采样指令以及保存采样指令结果的变量)

  • VUID-StandaloneSpirv-OpTypeImage-04657
    OpTypeImage 必须具有 1(采样图像)或 2(存储图像)的 “Sampled” 操作数

  • VUID-StandaloneSpirv-OpTypeSampledImage-06671
    OpTypeSampledImage 必须 具有一个“Sampled”操作数为 1(采样图像)的 OpTypeImage

  • VUID-StandaloneSpirv-Image-04965
    OpTypeImageImage Format 操作数的 SPIR-V 类型 必须图像格式和类型匹配 中定义的 Sampled Type 相匹配。

  • VUID-StandaloneSpirv-OpImageTexelPointer-04658
    如果在原子操作中使用 OpImageTexelPointer,则 OpImageTexelPointerimage 参数的图像类型 必须 具有 R64iR64uiR32fR32iR32ui 的图像格式。

  • VUID-StandaloneSpirv-OpImageQuerySizeLod-04659
    OpImageQuerySizeLodOpImageQueryLodOpImageQueryLevels 必须 仅消耗类型中“Sampled”操作数设置为 1 的“Image”操作数。

  • VUID-StandaloneSpirv-OpTypeImage-09638
    OpTypeImage 的“Dim”操作数 必须 不能为 Rect

  • VUID-StandaloneSpirv-OpTypeImage-06214
    “Dim”操作数为 SubpassDataOpTypeImage 必须 具有“Arrayed”操作数为 0(非数组)和“Sampled”操作数为 2(存储图像)。

  • VUID-StandaloneSpirv-SubpassData-04660
    用于 SubpassData(u,v) 坐标 必须 是常量向量 (0,0) 的 <id>。

  • VUID-StandaloneSpirv-OpTypeImage-06924
    OpTypeImageOpTypeSamplerOpTypeSampledImageOpTypeAccelerationStructureKHR 类型对象以及这些类型的数组 必须 不能存储或修改。

  • VUID-StandaloneSpirv-Uniform-06925
    任何在 Uniform Storage Class 中被装饰为 Block 的变量 必须 不能存储或修改。

  • VUID-StandaloneSpirv-Offset-04865
    任何使用 OffsetConstOffsetConstOffsets 图像操作数的图像指令,必须 仅消耗类型中“Sampled”操作数设置为 1 的“采样图像”操作数。

  • VUID-StandaloneSpirv-OpImageGather-04664
    OpImageGatherOpImageSparseGather 的“Component”操作数 必须 是常量指令的 <id>。

  • VUID-StandaloneSpirv-OpImage-04777
    OpImage*Dref* 指令 必须 不能消耗 Dim 为 3D 的图像。

  • VUID-StandaloneSpirv-None-04667
    结构类型 必须 不能包含不透明类型。

  • VUID-StandaloneSpirv-BuiltIn-04668
    内置变量 中未列出的任何 BuiltIn 装饰 必须 不能使用。

  • VUID-StandaloneSpirv-OpEntryPoint-09658
    对于给定的 OpEntryPoint,任何 BuiltIn 装饰 必须 不能被 Input 接口多次使用。

  • VUID-StandaloneSpirv-OpEntryPoint-09659
    对于给定的 OpEntryPoint,任何 BuiltIn 装饰 必须 不能被 Output 接口多次使用。

  • VUID-StandaloneSpirv-Location-06672
    LocationComponent 装饰 必须 仅与 InputOutputRayPayloadKHRIncomingRayPayloadKHRHitAttributeKHRHitObjectAttributeNVCallableDataKHRIncomingCallableDataKHRShaderRecordBufferKHR 存储类一起使用。

  • VUID-StandaloneSpirv-Location-04915
    LocationComponent 装饰 必须 不能与 BuiltIn 一起使用。

  • VUID-StandaloneSpirv-Location-04916
    Location 装饰 必须用户定义的变量 上使用。

  • VUID-StandaloneSpirv-Location-04917
    如果 用户定义的变量 不是指向被装饰的 BlockOpTypeStruct 的指针,则 OpVariable 必须 具有 Location 装饰。

  • VUID-StandaloneSpirv-Location-04918
    如果 用户定义的变量 具有 Location 装饰,并且该变量是指向 OpTypeStruct 的指针,则该结构的成员 必须 不得具有 Location 装饰。

  • VUID-StandaloneSpirv-Location-04919
    如果 用户定义的变量 没有 Location 装饰,并且该变量是指向被装饰为 BlockOpTypeStruct 的指针,则结构的每个成员 必须 具有 Location 装饰。

  • VUID-StandaloneSpirv-Component-04920
    Component 装饰值 必须 不大于 3。

  • VUID-StandaloneSpirv-Component-04921
    如果在具有 OpTypeVector 类型的 OpVariable 上使用了 Component 装饰,并且该类型的 Component TypeWidth 小于或等于 32,则其 Component CountComponent 装饰值的总和 必须 小于或等于 4。

  • VUID-StandaloneSpirv-Component-04922
    如果在具有 OpTypeVector 类型的 OpVariable 上使用了 Component 装饰,并且该类型的 Component TypeWidth 等于 64,则其 Component Count 的两倍与 Component 装饰值的总和 必须 小于或等于 4。

  • VUID-StandaloneSpirv-Component-04923
    对于标量或双分量 64 位数据类型,Component 装饰值 必须 不能为 1 或 3。

  • VUID-StandaloneSpirv-Component-04924
    Component 装饰 必须 不能与任何不是标量或向量或此类类型的数组的类型一起使用。

  • VUID-StandaloneSpirv-Component-07703
    Component 修饰符必须不能用于具有两个以上分量的 64 位向量类型

  • VUID-StandaloneSpirv-Input-09557
    任何 InputOutput 接口用户自定义变量的指针必须不包含任何 PhysicalStorageBuffer Storage Class 指针

  • VUID-StandaloneSpirv-GLSLShared-04669
    GLSLSharedGLSLPacked 修饰符必须不能使用

  • VUID-StandaloneSpirv-Flat-04670
    FlatNoPerspectiveSampleCentroid 修饰符必须只能用于具有 OutputInput Storage Class 的变量

  • VUID-StandaloneSpirv-Flat-06201
    FlatNoPerspectiveSampleCentroid 修饰符必须不能用于片段着色器中具有 Output 存储类的变量

  • VUID-StandaloneSpirv-Flat-06202
    FlatNoPerspectiveSampleCentroid 修饰符必须不能用于顶点着色器中具有 Input 存储类的变量

  • VUID-StandaloneSpirv-PerVertexKHR-06777
    PerVertexKHR 修饰符必须只能用于片段着色器中具有 Input Storage Class 的变量

  • VUID-StandaloneSpirv-Flat-04744
    在片段着色器中,任何具有整数或双精度浮点类型,并且具有 Input Storage Class 的变量,必须使用 Flat 修饰

  • VUID-StandaloneSpirv-ViewportRelativeNV-04672
    ViewportRelativeNV 修饰符必须只能用于在顶点、细分评估或几何着色器阶段使用 Layer 修饰的变量

  • VUID-StandaloneSpirv-ViewportRelativeNV-04673
    除非同一个 OpEntryPoint 也静态使用了使用 ViewportIndexViewportMaskNV 修饰的变量,否则必须不能使用 ViewportRelativeNV 修饰符

  • VUID-StandaloneSpirv-ViewportMaskNV-04674
    ViewportMaskNVViewportIndex 修饰符必须不能都被形成图形管线的光栅化前着色器阶段的一个或多个 OpEntryPoint 静态使用

  • VUID-StandaloneSpirv-FPRoundingMode-04675
    对于 FPRoundingMode 修饰符,必须不能使用除 round-to-nearest-even 和 round-towards-zero 之外的舍入模式

  • VUID-StandaloneSpirv-Invariant-04677
    使用 Invariant 修饰的变量和具有任何使用 Invariant 修饰的成员的结构类型的变量,必须OutputInput Storage Class 中,在 Input Storage Class 变量或结构成员上使用 Invariant 没有效果

  • VUID-StandaloneSpirv-VulkanMemoryModel-04678
    如果未声明 VulkanMemoryModel 功能,则当在光线生成、最近命中、未命中、相交或可调用着色器中使用时,或在相交着色器中使用 RayTmaxKHR Builtin 修饰符时,任何包含 SMIDNVWarpIDNVSubgroupSizeSubgroupLocalInvocationIdSubgroupEqMaskSubgroupGeMaskSubgroupGtMaskSubgroupLeMaskSubgroupLtMask BuiltIn 修饰符的变量声明,必须使用 Volatile 修饰符

  • VUID-StandaloneSpirv-VulkanMemoryModel-04679
    如果声明了 VulkanMemoryModel 功能,则当它访问任何包含 SMIDNVWarpIDNVSubgroupSizeSubgroupLocalInvocationIdSubgroupEqMaskSubgroupGeMaskSubgroupGtMaskSubgroupLeMaskSubgroupLtMask BuiltIn 修饰符的变量时(在光线生成、最近命中、未命中、相交或可调用着色器中使用时),或当在相交着色器中使用 RayTmaxKHR Builtin 修饰符时,OpLoad 指令必须使用 Volatile 内存语义

  • VUID-StandaloneSpirv-OpTypeRuntimeArray-04680
    OpTypeRuntimeArray 必须仅用于

    • StorageBufferPhysicalStorageBuffer 存储 Storage Class 中使用 Block 修饰的 OpTypeStruct 的最后一个成员

    • Uniform 存储 Storage Class 中使用 BufferBlock 修饰的 OpTypeStruct

    • StorageBufferUniformUniformConstant 存储 Storage Class 中数组变量的最外层维度

    • 当指定 CoalescingAMDX Execution Mode 时,NodePayloadAMDX 存储 Storage Class 中的变量

  • VUID-StandaloneSpirv-Function-04681
    除非:a) T 等于 T2,b) VFunctionPrivate Storage Class 中声明,c) VWorkgroup Storage Class 中的非 Block 变量,或者 d) V 是具有额外数组级别的接口变量,如接口匹配中所述,并且 T 是数组类型 T2 的成员类型,否则使用专业化常量调整大小的数组类型 T 必须既不属于也不包含在变量 V 的类型 T2

  • VUID-StandaloneSpirv-OpControlBarrier-04682
    如果在光线生成、相交、任何命中、最近命中、未命中、片段、顶点、细分评估或几何着色器中使用 OpControlBarrier,则执行范围必须Subgroup

  • VUID-StandaloneSpirv-LocalSize-06426
    对于每个计算着色器入口点,必须指定 LocalSizeLocalSizeId Execution Mode,或者使用 WorkgroupSize 修饰的对象

  • VUID-StandaloneSpirv-DerivativeGroupQuadsNV-04684
    对于使用 DerivativeGroupQuadsNV 执行模式的计算着色器,局部工作组大小的前两个维度必须是二的倍数

  • VUID-StandaloneSpirv-DerivativeGroupLinearNV-04778
    对于使用 DerivativeGroupLinearNV 执行模式的计算着色器,局部工作组大小的维度乘积必须是四的倍数

  • VUID-StandaloneSpirv-DerivativeGroupQuadsKHR-10151
    对于使用 DerivativeGroupQuadsKHR 执行模式的计算、网格或任务着色器,局部工作组大小的前两个维度必须是二的倍数

  • VUID-StandaloneSpirv-DerivativeGroupLinearKHR-10152
    对于使用 DerivativeGroupLinearKHR 执行模式的计算、网格或任务着色器,局部工作组大小的各维度乘积必须是四的倍数

  • VUID-StandaloneSpirv-OpGroupNonUniformBallotBitCount-04685
    如果使用 OpGroupNonUniformBallotBitCount,则组操作必须限制为 ReduceInclusiveScanExclusiveScan

  • VUID-StandaloneSpirv-None-04686
    所有原子指令的 Pointer 操作数必须具有 Storage Class,其限制为 UniformWorkgroupImageStorageBufferPhysicalStorageBufferTaskPayloadWorkgroupEXT

  • VUID-StandaloneSpirv-Offset-04687
    使用 Offset 修饰的输出变量或块成员,如果具有 64 位类型,或包含 64 位类型的复合类型,则必须指定对齐到 8 字节边界的 Offset

  • VUID-StandaloneSpirv-Offset-04689
    任何包含使用 Offset 修饰的 64 位类型成员的输出块的大小必须是 8 的倍数

  • VUID-StandaloneSpirv-Offset-04690
    如果一个输出块包含使用 Offset 修饰并且是 64 位类型的成员,则指定 Offset 修饰的该输出块的第一个成员必须指定对齐到 8 字节边界的 Offset

  • VUID-StandaloneSpirv-Offset-04691
    使用 Offset 修饰的输出变量或块成员,如果具有 32 位类型,或包含 32 位类型的复合类型,则必须指定对齐到 4 字节边界的 Offset

  • VUID-StandaloneSpirv-Offset-04692
    使用 Offset 修饰的输出变量、块或块成员必须只包含基本类型,这些基本类型的组成部分大小为 32 位或 64 位

  • VUID-StandaloneSpirv-Offset-04716
    只有输出接口中用 Offset 修饰的变量或块成员可以被捕获以进行变换反馈,并且这些变量或块成员也必须使用 XfbBufferXfbStride 修饰,或者从包含它们的块继承 XfbBufferXfbStride 修饰

  • VUID-StandaloneSpirv-XfbBuffer-04693
    正在编译的入口点的输出接口中,所有使用特定 XfbBuffer 值修饰的变量或块成员必须都使用相同的 XfbStride 值修饰

  • VUID-StandaloneSpirv-Stream-04694
    如果正在编译的入口点的输出接口中的任何变量或块成员使用 Stream 修饰,则属于同一 XfbBuffer 的所有变量必须指定相同的 Stream

  • VUID-StandaloneSpirv-XfbBuffer-04696
    对于正在编译的入口点的输出接口中具有相同 XfbBuffer 值的任何两个变量或块成员,由 Offset 修饰和类型大小确定的范围必须不重叠

  • VUID-StandaloneSpirv-XfbBuffer-04697
    正在编译的入口点的输出接口中,位于同一块中且具有声明或继承的 XfbBuffer 修饰的所有块成员必须指定相同的 XfbBuffer

  • VUID-StandaloneSpirv-RayPayloadKHR-04698
    RayPayloadKHR Storage Class必须仅在射线生成、最近命中或未命中着色器中使用

  • VUID-StandaloneSpirv-IncomingRayPayloadKHR-04699
    IncomingRayPayloadKHR Storage Class必须仅在最近命中、任意命中或未命中着色器中使用

  • VUID-StandaloneSpirv-IncomingRayPayloadKHR-04700
    在入口点的输入接口中,必须最多有一个具有 IncomingRayPayloadKHR Storage Class 的变量

  • VUID-StandaloneSpirv-HitAttributeKHR-04701
    HitAttributeKHR Storage Class必须仅在交集、任意命中或最近命中着色器中使用

  • VUID-StandaloneSpirv-HitAttributeKHR-04702
    在入口点的输入接口中,必须最多有一个具有 HitAttributeKHR Storage Class 的变量

  • VUID-StandaloneSpirv-HitAttributeKHR-04703
    具有 HitAttributeKHR Storage Class 的变量必须仅在交集着色器中写入

  • VUID-StandaloneSpirv-CallableDataKHR-04704
    CallableDataKHR Storage Class必须仅在射线生成、最近命中、未命中和可调用着色器中使用

  • VUID-StandaloneSpirv-IncomingCallableDataKHR-04705
    IncomingCallableDataKHR Storage Class必须仅在可调用着色器中使用

  • VUID-StandaloneSpirv-IncomingCallableDataKHR-04706
    在入口点的输入接口中,必须最多有一个具有 IncomingCallableDataKHR Storage Class 的变量

  • VUID-StandaloneSpirv-ShaderRecordBufferKHR-07119
    ShaderRecordBufferKHR Storage Class必须仅在射线生成、交集、任意命中、最近命中、可调用或未命中着色器中使用

  • VUID-StandaloneSpirv-Base-07650
    OpPtrAccessChainBase 操作数的存储类必须WorkgroupStorageBufferPhysicalStorageBuffer

  • VUID-StandaloneSpirv-Base-07651
    如果 OpPtrAccessChainBase 操作数具有 Workgroup 存储 ,则必须声明 VariablePointers 功能。

  • VUID-StandaloneSpirv-Base-07652
    如果 OpPtrAccessChainBase 操作数具有 StorageBuffer 存储 ,则必须声明 VariablePointersVariablePointersStorageBuffer 功能。

  • VUID-StandaloneSpirv-PhysicalStorageBuffer64-04708
    如果启用了 PhysicalStorageBuffer64 寻址模型,则所有支持内存访问操作数并使用物理指针的指令必须包含 Aligned 操作数。

  • VUID-StandaloneSpirv-PhysicalStorageBuffer64-04709
    如果启用了 PhysicalStorageBuffer64 寻址模型,则任何访问 RowMajor 矩阵的访问链指令必须仅用作 OpLoadOpStorePointer 操作数。

  • VUID-StandaloneSpirv-PhysicalStorageBuffer64-04710
    如果启用了 PhysicalStorageBuffer64 寻址模型,则 OpConvertUToPtrOpConvertPtrToU 必须使用 Width 为 64 的整数类型。

  • VUID-StandaloneSpirv-OpTypeForwardPointer-04711
    OpTypeForwardPointer 必须具有 PhysicalStorageBuffer存储

  • VUID-StandaloneSpirv-None-04745
    PushConstant 存储 中声明为数组的变量中的所有块成员必须仅通过动态统一索引访问。

  • VUID-StandaloneSpirv-OpVariable-06673
    在每个 OpEntryPointInterface 中列出的 PushConstant 存储 中,不得有多个 OpVariable

  • VUID-StandaloneSpirv-OpEntryPoint-06674
    每个 OpEntryPoint 不得静态使用超过一个 PushConstant 存储 中的 OpVariable

  • VUID-StandaloneSpirv-OpEntryPoint-08721
    每个 OpEntryPoint 不得Location 插槽内分配给同一 Component 字的多个 Input 变量,无论是显式还是隐式。

  • VUID-StandaloneSpirv-OpEntryPoint-08722
    每个 OpEntryPoint 不得Location 插槽内分配给同一 Component 字的多个 Output 变量,无论是显式还是隐式。

  • VUID-StandaloneSpirv-Result-04780
    任何 OpImageReadOpImageSparseRead 指令的 Result Type 操作数必须是四个组件的向量。

  • VUID-StandaloneSpirv-Base-04781
    任何 OpBitCountOpBitReverseOpBitFieldInsertOpBitFieldSExtractOpBitFieldUExtract 指令的 Base 操作数必须是 32 位整数标量或 32 位整数向量。

  • VUID-StandaloneSpirv-PushConstant-06675
    PushConstantStorageBuffer 存储类中的任何变量必须被装饰为 Block

  • VUID-StandaloneSpirv-Uniform-06676
    Uniform 存储 中的任何变量必须被装饰为 BlockBufferBlock

  • VUID-StandaloneSpirv-UniformConstant-06677
    UniformConstantStorageBufferUniform 存储 中的任何变量必须使用 DescriptorSetBinding 进行装饰。

  • VUID-StandaloneSpirv-InputAttachmentIndex-06678
    使用 InputAttachmentIndex 装饰的变量必须位于 UniformConstant 存储 中。

  • VUID-StandaloneSpirv-DescriptorSet-06491
    如果一个变量使用 DescriptorSetBinding 进行装饰,则 存储 必须着色器资源和存储类对应关系 中的条目相对应。

  • VUID-StandaloneSpirv-Input-06778
    在片段着色器阶段中,具有 Input 存储 并且使用 PerVertexKHR 装饰的变量必须声明为数组。

  • VUID-StandaloneSpirv-MeshEXT-07102
    该模块不得同时包含使用 TaskEXTMeshEXT 执行 模型的入口点和使用 TaskNVMeshNV 执行 模型的入口点。

  • VUID-StandaloneSpirv-MeshEXT-07106
    在使用 MeshEXT 执行 模型的网格着色器中,在写入任何输出之前必须调用 OpSetMeshOutputsEXT

  • VUID-StandaloneSpirv-MeshEXT-07107
    在使用 MeshEXT 执行 模型的网格着色器中,所有声明为输出的变量不得从中读取。

  • VUID-StandaloneSpirv-MeshEXT-07108
    在使用 MeshEXT 执行 模型的网格着色器中,对于 OpSetMeshOutputsEXT 指令,“顶点计数”和“图元计数”操作数不得依赖于 ViewIndex

  • VUID-StandaloneSpirv-MeshEXT-07109
    在使用 MeshEXT 执行 模型的网格着色器中,使用 PrimitivePointIndicesEXTPrimitiveLineIndicesEXTPrimitiveTriangleIndicesEXT 装饰的声明为数组的变量不得通过依赖于 ViewIndex 的索引访问。

  • VUID-StandaloneSpirv-MeshEXT-07110
    在使用 MeshEXT 执行 模型的网格着色器中,存储在使用 PrimitivePointIndicesEXTPrimitiveLineIndicesEXTPrimitiveTriangleIndicesEXT 装饰的变量中的任何值不得依赖于 ViewIndex

  • VUID-StandaloneSpirv-MeshEXT-07111
    在使用 MeshEXT 执行 模型的网格着色器中,声明为或包含复合类型的工作组或私有 存储 中的变量不得通过依赖于 ViewIndex 的索引访问。

  • VUID-StandaloneSpirv-MeshEXT-07330
    在使用 MeshEXT 执行 模型的网格着色器中,OutputVertices 执行 模式必须大于 0。

  • VUID-StandaloneSpirv-MeshEXT-07331
    在使用 MeshEXT 执行 模型的网格着色器中,OutputPrimitivesEXT 执行 模式必须大于 0。

  • VUID-StandaloneSpirv-Input-07290
    存储类为 InputOutput 且类型为 OpTypeBool 的变量必须使用 BuiltIn 修饰。

  • VUID-StandaloneSpirv-TileImageEXT-08723
    瓦片图像变量声明必须遵守 片段瓦片图像接口 中描述的关于 TileImageEXT Storage ClassLocation 修饰的约束。

  • VUID-StandaloneSpirv-None-08724
    TileImageEXT Storage Class 必须仅用于声明瓦片图像变量。

  • VUID-StandaloneSpirv-Pointer-08973
    OpCooperativeMatrixLoadKHROpCooperativeMatrixStoreKHRPointer 操作数的 Storage Class 必须限制为 WorkgroupStorageBufferPhysicalStorageBuffer

  • VUID-StandaloneSpirv-UniformBufferArrayDynamicIndexing-10127
    如果未声明 UniformBufferArrayDynamicIndexing 功能,并且指令通过 uniform buffer 访问内存,则访问该内存所通过的 uniform buffer 必须常量整数表达式确定。

  • VUID-StandaloneSpirv-SampledImageArrayDynamicIndexing-10128
    如果未声明 SampledImageArrayDynamicIndexing 功能,并且指令通过采样图像或采样器访问内存,则访问该内存所通过的采样图像或采样器必须常量整数表达式确定。

  • VUID-StandaloneSpirv-StorageBufferArrayDynamicIndexing-10129
    如果未声明 StorageBufferArrayDynamicIndexing 功能,并且指令通过存储缓冲区访问内存,则访问该内存所通过的存储缓冲区必须常量整数表达式确定。

  • VUID-StandaloneSpirv-StorageImageArrayDynamicIndexing-10130
    如果未声明 StorageImageArrayDynamicIndexing 功能,并且指令通过存储图像访问内存,则访问该内存所通过的存储图像必须常量整数表达式确定。

  • VUID-StandaloneSpirv-InputAttachmentArrayDynamicIndexing-10131
    如果未声明 InputAttachmentArrayDynamicIndexing 功能,并且指令通过输入附件访问内存,则访问该内存所通过的输入附件必须常量整数表达式确定。

  • VUID-StandaloneSpirv-UniformTexelBufferArrayDynamicIndexing-10132
    如果未声明 UniformTexelBufferArrayDynamicIndexing 功能,并且指令通过 uniform texel buffer 访问内存,则访问该内存所通过的 uniform texel buffer 必须常量整数表达式确定。

  • VUID-StandaloneSpirv-StorageTexelBufferArrayDynamicIndexing-10133
    如果未声明 StorageTexelBufferArrayDynamicIndexing 功能,并且指令通过存储 texel buffer 访问内存,则访问该内存所通过的存储 texel buffer 必须常量整数表达式确定。

运行时 SPIR-V 验证

以下规则必须在运行时进行验证。这些规则取决于对实现及其功能以及运行时信息(例如启用的功能)的了解。

有效使用
  • VUID-RuntimeSpirv-vulkanMemoryModel-06265
    如果启用了 vulkanMemoryModel 功能,但未启用 vulkanMemoryModelDeviceScope 功能,则必须不使用 Device 内存作用域。

  • VUID-RuntimeSpirv-vulkanMemoryModel-06266
    如果未启用 vulkanMemoryModel 功能,则必须不使用 QueueFamily 内存作用域。

  • VUID-RuntimeSpirv-shaderSubgroupClock-06267
    如果未启用 shaderSubgroupClock 功能,则 OpReadClockKHR 必须不使用 Subgroup 作用域。

  • VUID-RuntimeSpirv-shaderDeviceClock-06268
    如果未启用 shaderDeviceClock 功能,则 OpReadClockKHR 必须不使用 Device 作用域。

  • VUID-RuntimeSpirv-None-09558
    如果未启用 dynamicRenderingLocalRead 功能,则任何使用 OpTypeImage “Type” 创建且 “Dim” 操作数为 SubpassData 的变量必须使用 InputAttachmentIndex 修饰。

  • VUID-RuntimeSpirv-OpTypeImage-09644
    任何声明为 OpTypeArray 的变量,其中 Element Type 是 “Dim” 操作数为 SubpassDataOpTypeImage必须使用 InputAttachmentIndex 修饰。

  • VUID-RuntimeSpirv-apiVersion-07954
    如果 VkPhysicalDeviceProperties::apiVersion 小于 Vulkan 1.3,不支持 VK_KHR_format_feature_flags2 扩展,并且未启用 shaderStorageImageWriteWithoutFormat 功能,则任何使用 “Sampled” 操作数为 2 且 “Image Format” 操作数为 UnknownOpTypeImage “Type” 创建的变量必须使用 NonWritable 修饰。

  • VUID-RuntimeSpirv-apiVersion-07955
    如果 VkPhysicalDeviceProperties::apiVersion 小于 Vulkan 1.3,不支持 VK_KHR_format_feature_flags2 扩展,并且未启用 shaderStorageImageReadWithoutFormat 功能,则任何使用 “Sampled” 操作数为 2 且 “Image Format” 操作数为 UnknownOpTypeImage “Type” 创建的变量必须使用 NonReadable 修饰。

  • VUID-RuntimeSpirv-OpImageWrite-07112
    对于任何 Image Format 不是 UnknownImageOpImageWrite,其 Texel 操作数必须至少包含与 VkFormat 中给出的相应组件数量一样多的组件,如 SPIR-V 图像格式兼容性表 中所示。

  • VUID-RuntimeSpirv-Location-06272
    Location 的值与其修饰的变量所消耗的 location 数量之和必须小于或等于 着色器输入和输出位置中定义的匹配 Execution Model 的值。

  • VUID-RuntimeSpirv-Location-06428
    Fragment Execution Model 中,存储缓冲区的最大数量、存储图像的最大数量,以及写入的具有 Location 修饰的颜色附件的最大数量,必须小于或等于 maxFragmentCombinedOutputResources

  • VUID-RuntimeSpirv-UniformBufferArrayNonUniformIndexing-10134
    如果未声明 UniformBufferArrayNonUniformIndexing 功能,并且指令通过统一缓冲区访问内存,则访问该内存的统一缓冲区必须在调用组或子组内动态统一。

  • VUID-RuntimeSpirv-SampledImageArrayNonUniformIndexing-10135
    如果未声明 SampledImageArrayNonUniformIndexing 功能,并且指令通过采样图像或采样器访问内存,则访问该内存的采样图像或采样器必须在调用组或子组内动态统一。

  • VUID-RuntimeSpirv-StorageBufferArrayNonUniformIndexing-10136
    如果未声明 StorageBufferArrayNonUniformIndexing 功能,并且指令通过存储缓冲区访问内存,则访问该内存的存储缓冲区必须在调用组或子组内动态统一。

  • VUID-RuntimeSpirv-StorageImageArrayNonUniformIndexing-10137
    如果未声明 StorageImageArrayNonUniformIndexing 功能,并且指令通过存储图像访问内存,则访问该内存的存储图像必须在调用组或子组内动态统一。

  • VUID-RuntimeSpirv-InputAttachmentArrayNonUniformIndexing-10138
    如果未声明 InputAttachmentArrayNonUniformIndexing 功能,并且指令通过输入附件访问内存,则访问该内存的输入附件必须在调用组或子组内动态统一。

  • VUID-RuntimeSpirv-UniformTexelBufferArrayNonUniformIndexing-10139
    如果未声明 UniformTexelBufferArrayNonUniformIndexing 功能,并且指令通过统一纹理缓冲区访问内存,则访问该内存的统一纹理缓冲区必须在调用组或子组内动态统一。

  • VUID-RuntimeSpirv-StorageTexelBufferArrayNonUniformIndexing-10140
    如果未声明 StorageTexelBufferArrayNonUniformIndexing 功能,并且指令通过存储纹理缓冲区访问内存,则访问该内存的存储纹理缓冲区必须在调用组或子组内动态统一。

  • VUID-RuntimeSpirv-subgroupSize-10141
    如果 subgroupSize 为 1,未声明 UniformBufferArrayNonUniformIndexing 功能,并且指令通过统一缓冲区访问内存,则访问该内存的统一缓冲区必须在调用组内动态统一。

  • VUID-RuntimeSpirv-subgroupSize-10142
    如果 subgroupSize 为 1,未声明 SampledImageArrayNonUniformIndexing 功能,并且指令通过采样图像或采样器访问内存,则访问该内存的采样图像或采样器必须在调用组内动态统一。

  • VUID-RuntimeSpirv-subgroupSize-10143
    如果 subgroupSize 为 1,未声明 StorageBufferArrayNonUniformIndexing 功能,并且指令通过存储缓冲区访问内存,则访问该内存的存储缓冲区必须在调用组内动态统一。

  • VUID-RuntimeSpirv-subgroupSize-10144
    如果 subgroupSize 为 1,未声明 StorageImageArrayNonUniformIndexing 功能,并且指令通过存储图像访问内存,则访问该内存的存储图像必须在调用组内动态统一。

  • VUID-RuntimeSpirv-subgroupSize-10145
    如果 subgroupSize 为 1,未声明 InputAttachmentArrayNonUniformIndexing 功能,并且指令通过输入附件访问内存,则访问该内存的输入附件必须在调用组内动态统一。

  • VUID-RuntimeSpirv-subgroupSize-10146
    如果 subgroupSize 为 1,未声明 UniformTexelBufferArrayNonUniformIndexing 功能,并且指令通过统一纹理缓冲区访问内存,则访问该内存的统一纹理缓冲区必须在调用组内动态统一。

  • VUID-RuntimeSpirv-subgroupSize-10147
    如果 subgroupSize 为 1,未声明 StorageTexelBufferArrayNonUniformIndexing 功能,并且指令通过存储纹理缓冲区访问内存,则访问该内存的存储纹理缓冲区必须在调用组内动态统一。

  • VUID-RuntimeSpirv-None-10148
    如果指令通过任何资源访问内存,subgroupSize 为 1,并且访问该内存的资源在调用组内不统一,则与该资源对应的操作数(例如,指针或采样图像操作数)必须使用 NonUniform 进行修饰。

  • VUID-RuntimeSpirv-subgroupSize-10149
    如果指令通过任何资源访问内存,subgroupSize 大于 1,并且访问该内存的资源在调用组内不统一,并且在子组内不统一,则与该资源对应的操作数(例如,指针或采样图像操作数)必须使用 NonUniform 进行修饰。

  • VUID-RuntimeSpirv-None-06275
    shaderSubgroupExtendedTypes 必须启用,组操作 才能使用 8 位整数、16 位整数、64 位整数、16 位浮点数以及这些类型的向量。

  • VUID-RuntimeSpirv-subgroupBroadcastDynamicId-06276
    如果 subgroupBroadcastDynamicIdVK_TRUE,并且着色器模块版本为 1.5 或更高版本,则 OpGroupNonUniformQuadBroadcast 的“Index”必须在导数组内动态统一。否则,“Index”必须是一个常量。

  • VUID-RuntimeSpirv-subgroupBroadcastDynamicId-06277
    如果 subgroupBroadcastDynamicIdVK_TRUE,并且着色器模块版本为 1.5 或更高版本,则 OpGroupNonUniformBroadcast 的“Id”必须在子组内动态统一。否则,“Id”必须是一个常量。

  • VUID-RuntimeSpirv-None-06278
    对于在 Storage ClassStorageBufferUniform 的 *Pointer* 上支持 64 位整数原子操作,必须启用 shaderBufferInt64Atomics

  • VUID-RuntimeSpirv-None-06279
    对于在 Storage ClassWorkgroup 的 *Pointer* 上支持 64 位整数原子操作,必须启用 shaderSharedInt64Atomics

  • VUID-RuntimeSpirv-None-06284
    对于在 Storage ClassStorageBuffer 的 *Pointer* 上支持浮点原子操作,必须启用 shaderBufferFloat32Atomics、或 shaderBufferFloat32AtomicAdd、或 shaderBufferFloat64Atomics、或 shaderBufferFloat64AtomicAdd、或 shaderBufferFloat16Atomics、或 shaderBufferFloat16AtomicAdd、或 shaderBufferFloat16AtomicMinMax、或 shaderBufferFloat32AtomicMinMax、或 shaderBufferFloat64AtomicMinMax、或 shaderFloat16VectorAtomics

  • VUID-RuntimeSpirv-None-06285
    对于在 Storage ClassWorkgroup 的 *Pointer* 上支持浮点原子操作,必须启用 shaderSharedFloat32Atomics、或 shaderSharedFloat32AtomicAdd、或 shaderSharedFloat64Atomics、或 shaderSharedFloat64AtomicAdd、或 shaderSharedFloat16Atomics、或 shaderSharedFloat16AtomicAdd、或 shaderSharedFloat16AtomicMinMax、或 shaderSharedFloat32AtomicMinMax、或 shaderSharedFloat64AtomicMinMax、或 shaderFloat16VectorAtomics

  • VUID-RuntimeSpirv-None-06286
    对于在 Storage ClassImage 的 *Pointer* 上支持 32 位浮点原子操作,必须启用 shaderImageFloat32Atomics、或 shaderImageFloat32AtomicAdd、或 shaderImageFloat32AtomicMinMax

  • VUID-RuntimeSpirv-None-06287
    对于在稀疏图像上支持 32 位浮点原子操作,必须启用 sparseImageFloat32Atomics、或 sparseImageFloat32AtomicAdd、或 sparseImageFloat32AtomicMinMax

  • VUID-RuntimeSpirv-None-06288
    对于在 Storage ClassImage 的 *Pointer* 上支持 64 位整数原子操作,必须启用 shaderImageInt64Atomics

  • VUID-RuntimeSpirv-denormBehaviorIndependence-06289
    如果 denormBehaviorIndependenceVK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY,则入口点必须对 16 位和 64 位浮点类型使用相同的非正规数 Execution Mode

  • VUID-RuntimeSpirv-denormBehaviorIndependence-06290
    如果 denormBehaviorIndependenceVK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE,则入口点必须对所有浮点类型使用相同的非正规数 Execution Mode

  • VUID-RuntimeSpirv-roundingModeIndependence-06291
    如果 roundingModeIndependenceVK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY,则入口点必须对 16 位和 64 位浮点类型使用相同的舍入 Execution Mode

  • VUID-RuntimeSpirv-roundingModeIndependence-06292
    如果 roundingModeIndependenceVK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE,则入口点必须对所有浮点类型使用相同的舍入 Execution Mode

  • VUID-RuntimeSpirv-shaderSignedZeroInfNanPreserveFloat16-06293
    如果 shaderSignedZeroInfNanPreserveFloat16VK_FALSE,则必须不使用 16 位浮点类型的 SignedZeroInfNanPreserve

  • VUID-RuntimeSpirv-shaderSignedZeroInfNanPreserveFloat32-06294
    如果 shaderSignedZeroInfNanPreserveFloat32VK_FALSE,则必须不使用 32 位浮点类型的 SignedZeroInfNanPreserve

  • VUID-RuntimeSpirv-shaderSignedZeroInfNanPreserveFloat64-06295
    如果 shaderSignedZeroInfNanPreserveFloat64VK_FALSE,则必须不使用 64 位浮点类型的 SignedZeroInfNanPreserve

  • VUID-RuntimeSpirv-shaderDenormPreserveFloat16-06296
    如果 shaderDenormPreserveFloat16VK_FALSE,则 16 位浮点类型的 DenormPreserve 必须 不得使用

  • VUID-RuntimeSpirv-shaderDenormPreserveFloat32-06297
    如果 shaderDenormPreserveFloat32VK_FALSE,则 32 位浮点类型的 DenormPreserve 必须 不得使用

  • VUID-RuntimeSpirv-shaderDenormPreserveFloat64-06298
    如果 shaderDenormPreserveFloat64VK_FALSE,则 64 位浮点类型的 DenormPreserve 必须 不得使用

  • VUID-RuntimeSpirv-shaderDenormFlushToZeroFloat16-06299
    如果 shaderDenormFlushToZeroFloat16VK_FALSE,则 16 位浮点类型的 DenormFlushToZero 必须 不得使用

  • VUID-RuntimeSpirv-shaderDenormFlushToZeroFloat32-06300
    如果 shaderDenormFlushToZeroFloat32VK_FALSE,则 32 位浮点类型的 DenormFlushToZero 必须 不得使用

  • VUID-RuntimeSpirv-shaderDenormFlushToZeroFloat64-06301
    如果 shaderDenormFlushToZeroFloat64VK_FALSE,则 64 位浮点类型的 DenormFlushToZero 必须 不得使用

  • VUID-RuntimeSpirv-shaderRoundingModeRTEFloat16-06302
    如果 shaderRoundingModeRTEFloat16VK_FALSE,则 16 位浮点类型的 RoundingModeRTE 必须 不得使用

  • VUID-RuntimeSpirv-shaderRoundingModeRTEFloat32-06303
    如果 shaderRoundingModeRTEFloat32VK_FALSE,则 32 位浮点类型的 RoundingModeRTE 必须 不得使用

  • VUID-RuntimeSpirv-shaderRoundingModeRTEFloat64-06304
    如果 shaderRoundingModeRTEFloat64VK_FALSE,则 64 位浮点类型的 RoundingModeRTE 必须 不得使用

  • VUID-RuntimeSpirv-shaderRoundingModeRTZFloat16-06305
    如果 shaderRoundingModeRTZFloat16VK_FALSE,则 16 位浮点类型的 RoundingModeRTZ 必须 不得使用

  • VUID-RuntimeSpirv-shaderRoundingModeRTZFloat32-06306
    如果 shaderRoundingModeRTZFloat32VK_FALSE,则 32 位浮点类型的 RoundingModeRTZ 必须 不得使用

  • VUID-RuntimeSpirv-shaderRoundingModeRTZFloat64-06307
    如果 shaderRoundingModeRTZFloat64VK_FALSE,则 64 位浮点类型的 RoundingModeRTZ 必须 不得使用

  • VUID-RuntimeSpirv-shaderSignedZeroInfNanPreserveFloat16-09559
    如果 shaderSignedZeroInfNanPreserveFloat16VK_FALSE,则任何类型为 16 位浮点数的 FPFastMathDefault 执行模式必须包含 NSZNotInfNotNaN 标志

  • VUID-RuntimeSpirv-shaderSignedZeroInfNanPreserveFloat16-09560
    如果 shaderSignedZeroInfNanPreserveFloat16VK_FALSE,则任何具有结果类型或任何操作数类型包含 16 位浮点数的指令上的 FPFastMathMode 修饰符必须包含 NSZNotInfNotNaN 标志

  • VUID-RuntimeSpirv-shaderSignedZeroInfNanPreserveFloat32-09561
    如果 shaderSignedZeroInfNanPreserveFloat32VK_FALSE,则任何类型为 32 位浮点数的 FPFastMathDefault 执行模式必须包含 NSZNotInfNotNaN 标志

  • VUID-RuntimeSpirv-shaderSignedZeroInfNanPreserveFloat32-09562
    如果 shaderSignedZeroInfNanPreserveFloat32VK_FALSE,则任何具有结果类型或任何操作数类型包含 32 位浮点数的指令上的 FPFastMathMode 修饰符必须包含 NSZNotInfNotNaN 标志

  • VUID-RuntimeSpirv-shaderSignedZeroInfNanPreserveFloat64-09563
    如果 shaderSignedZeroInfNanPreserveFloat64VK_FALSE,则任何类型为 64 位浮点数的 FPFastMathDefault 执行模式必须包含 NSZNotInfNotNaN 标志

  • VUID-RuntimeSpirv-shaderSignedZeroInfNanPreserveFloat64-09564
    如果 shaderSignedZeroInfNanPreserveFloat64VK_FALSE,则任何具有结果类型或任何操作数类型包含 64 位浮点数的指令上的 FPFastMathMode 修饰符必须包含 NSZNotInfNotNaN 标志

  • VUID-RuntimeSpirv-Offset-06308
    在正在编译的入口点的输出接口中,使用 XfbBuffer 修饰的每个变量的 Offset 加上其类型大小必须不大于 VkPhysicalDeviceTransformFeedbackPropertiesEXT::maxTransformFeedbackBufferDataSize

  • VUID-RuntimeSpirv-XfbBuffer-06309
    对于任何给定的 XfbBuffer 值,定义缓冲区数据大小为最小字节数,使得对于所有使用相同 XfbBuffer 值修饰的输出,输出接口变量的大小加上 Offset 小于或等于缓冲区数据大小。对于给定的 Stream,写入该流的所有缓冲区的总缓冲区数据大小之和必须不超过 VkPhysicalDeviceTransformFeedbackPropertiesEXT::maxTransformFeedbackStreamDataSize

  • VUID-RuntimeSpirv-OpEmitStreamVertex-06310
    传递给 OpEmitStreamVertexOpEndStreamPrimitive 的 Stream 值必须小于 VkPhysicalDeviceTransformFeedbackPropertiesEXT::maxTransformFeedbackStreams

  • VUID-RuntimeSpirv-transformFeedbackStreamsLinesTriangles-06311
    如果几何着色器发射到多个顶点流,且 VkPhysicalDeviceTransformFeedbackPropertiesEXT::transformFeedbackStreamsLinesTrianglesVK_FALSE,则 Execution Mode 必须OutputPoints

  • VUID-RuntimeSpirv-Stream-06312
    传递给 Stream 的流编号值必须小于 VkPhysicalDeviceTransformFeedbackPropertiesEXT::maxTransformFeedbackStreams

  • VUID-RuntimeSpirv-XfbStride-06313
    传递给 XfbStride 的 XFB 跨距值必须小于或等于 VkPhysicalDeviceTransformFeedbackPropertiesEXT::maxTransformFeedbackBufferDataStride

  • VUID-RuntimeSpirv-PhysicalStorageBuffer64-06314
    如果启用了 PhysicalStorageBuffer64 寻址模型,则通过物理指针类型的任何加载或存储必须对齐到所指向类型中最大标量类型大小的倍数

  • VUID-RuntimeSpirv-PhysicalStorageBuffer64-06315
    如果启用了 PhysicalStorageBuffer64 寻址模型,则内存访问指令的指针值必须至少与 Aligned 内存访问操作数指定的对齐方式一样对齐

  • VUID-RuntimeSpirv-OpTypeCooperativeMatrixNV-06316
    对于 OpTypeCooperativeMatrixNV,组件类型、作用域、行数和列数必须与任何受支持的 VkCooperativeMatrixPropertiesNV 中的矩阵之一匹配

  • VUID-RuntimeSpirv-OpTypeCooperativeMatrixMulAddNV-10059
    对于 OpTypeCooperativeMatrixMulAddNV,操作数必须匹配受支持的 VkCooperativeMatrixPropertiesNV,使得

  • VUID-RuntimeSpirv-OpTypeCooperativeMatrixNV-06322
    OpTypeCooperativeMatrixNVOpCooperativeMatrix* 指令必须不能在未包含在 VkPhysicalDeviceCooperativeMatrixPropertiesNV::cooperativeMatrixSupportedStages 中的着色器阶段中使用

  • VUID-RuntimeSpirv-OpTypeCooperativeMatrixKHR-10163
    对于 OpTypeCooperativeMatrixKHR,如果未启用 cooperativeMatrixFlexibleDimensions 功能,则组件类型、作用域、行数和列数必须与任何受支持的 VkCooperativeMatrixPropertiesKHR 中的矩阵之一匹配,其中

  • VUID-RuntimeSpirv-OpCooperativeMatrixMulAddKHR-10060
    对于 OpCooperativeMatrixMulAddKHR,如果未启用 cooperativeMatrixFlexibleDimensions 功能,则操作数必须匹配受支持的 VkCooperativeMatrixPropertiesKHR,使得

  • VUID-RuntimeSpirv-cooperativeMatrixWorkgroupScope-10164
    如果 cooperativeMatrixWorkgroupScope 功能未启用,则所有 OpTypeCooperativeMatrixKHR 的范围必须不是 VkScopeKHR::VK_SCOPE_WORKGROUP_KHR

  • VUID-RuntimeSpirv-cooperativeMatrixFlexibleDimensions-10165
    对于 OpTypeCooperativeMatrixKHR,如果启用了 cooperativeMatrixFlexibleDimensions 功能,则组件类型、范围、行数和列数必须与上述一个受支持的 VkCooperativeMatrixPropertiesKHR 中某个矩阵的匹配,或者与受支持的 VkCooperativeMatrixFlexibleDimensionsPropertiesNV 之一的匹配,其中:

  • VUID-RuntimeSpirv-cooperativeMatrixFlexibleDimensions-10166
    对于 OpCooperativeMatrixMulAddKHR,如果启用了 cooperativeMatrixFlexibleDimensions 功能,则操作数必须与上述一个受支持的 VkCooperativeMatrixPropertiesKHR 匹配,或者与受支持的 VkCooperativeMatrixFlexibleDimensionsPropertiesNV 之一匹配,从而满足:

  • VUID-RuntimeSpirv-cooperativeMatrixFlexibleDimensionsMaxDimension-10167
    所有 OpTypeCooperativeMatrixKHR 的维度必须小于或等于 cooperativeMatrixFlexibleDimensionsMaxDimension

  • VUID-RuntimeSpirv-maxComputeSharedMemorySize-10168
    如果模块使用 Scope 等于 WorkgroupOpTypeCooperativeMatrixKHR,则 GLCompute Execution ModelWorkgroup Storage Class 的变量和填充的字节大小总和必须小于或等于 maxComputeSharedMemorySize 减去 cooperativeMatrixWorkgroupScopeReservedSharedMemory

  • VUID-RuntimeSpirv-cooperativeMatrixSupportedStages-08985
    OpTypeCooperativeMatrixKHROpCooperativeMatrix* 指令必须不在 VkPhysicalDeviceCooperativeMatrixPropertiesKHR::cooperativeMatrixSupportedStages 中未包含的着色器阶段中使用。

  • VUID-RuntimeSpirv-DescriptorSet-06323
    DescriptorSetBinding 修饰符必须遵守 描述符集和绑定分配 中描述的 Storage Class、类型和描述符类型约束。

  • VUID-RuntimeSpirv-OpCooperativeMatrixLoadNV-06324
    对于 OpCooperativeMatrixLoadNVOpCooperativeMatrixStoreNV 指令,PointerStride 操作数必须至少对齐到 16 字节,或者对齐到矩阵行或列的自然对齐方式(取决于 ColumnMajor),取两者中的较小者(其中自然对齐是列/行数乘以组件大小)。

  • VUID-RuntimeSpirv-MeshNV-07113
    对于使用 MeshNV Execution Model 的网格着色器,OutputVertices OpExecutionMode 必须小于或等于 VkPhysicalDeviceMeshShaderPropertiesNV::maxMeshOutputVertices

  • VUID-RuntimeSpirv-MeshNV-07114
    对于使用 MeshNV Execution Model 的网格着色器,OutputPrimitivesNV OpExecutionMode 必须小于或等于 VkPhysicalDeviceMeshShaderPropertiesNV::maxMeshOutputPrimitives

  • VUID-RuntimeSpirv-MeshEXT-07115
    对于使用 MeshEXT Execution Model 的网格着色器,OutputVertices OpExecutionMode 必须小于或等于 VkPhysicalDeviceMeshShaderPropertiesEXT::maxMeshOutputVertices

  • VUID-RuntimeSpirv-MeshEXT-07332
    对于使用 MeshEXT Execution Model 的网格着色器,OpSetMeshOutputsEXT 的“顶点计数”操作数必须小于或等于 OutputVertices OpExecutionMode

  • VUID-RuntimeSpirv-MeshEXT-07116
    对于使用 MeshEXT Execution Model 的网格着色器,OutputPrimitivesEXT OpExecutionMode 必须小于或等于 VkPhysicalDeviceMeshShaderPropertiesEXT::maxMeshOutputPrimitives

  • VUID-RuntimeSpirv-MeshEXT-07333
    对于使用 MeshEXT Execution Model 的网格着色器,OpSetMeshOutputsEXT 的“图元计数”操作数必须小于或等于 OutputPrimitivesEXT OpExecutionMode

  • VUID-RuntimeSpirv-TaskEXT-07117
    在使用 TaskEXT Execution Model 的任务着色器中,必须在动态统一条件下精确调用一次 OpEmitMeshTasksEXT

  • VUID-RuntimeSpirv-MeshEXT-07118
    在使用 MeshEXT 执行 模型 的网格着色器中,OpSetMeshOutputsEXT 必须 在动态一致的条件下最多调用一次。

  • VUID-RuntimeSpirv-TaskEXT-07291
    在使用 TaskEXT 执行 模型 的任务着色器中,LocalSizeLocalSizeId 中的 x 大小 必须 小于或等于 VkPhysicalDeviceMeshShaderPropertiesEXT::maxTaskWorkGroupSize[0]

  • VUID-RuntimeSpirv-TaskEXT-07292
    在使用 TaskEXT 执行 模型 的任务着色器中,LocalSizeLocalSizeId 中的 y 大小 必须 小于或等于 VkPhysicalDeviceMeshShaderPropertiesEXT::maxTaskWorkGroupSize[1]

  • VUID-RuntimeSpirv-TaskEXT-07293
    在使用 TaskEXT 执行 模型 的任务着色器中,LocalSizeLocalSizeId 中的 z 大小 必须 小于或等于 VkPhysicalDeviceMeshShaderPropertiesEXT::maxTaskWorkGroupSize[2]

  • VUID-RuntimeSpirv-TaskEXT-07294
    在使用 TaskEXT 执行 模型 的任务着色器中,LocalSizeLocalSizeIdx 大小、y 大小和 z 大小的乘积 必须 小于或等于 VkPhysicalDeviceMeshShaderPropertiesEXT::maxTaskWorkGroupInvocations

  • VUID-RuntimeSpirv-MeshEXT-07295
    对于使用 MeshEXT 执行 模型 的网格着色器,LocalSizeLocalSizeId 中的 x 大小 必须 小于或等于 VkPhysicalDeviceMeshShaderPropertiesEXT::maxMeshWorkGroupSize[0]

  • VUID-RuntimeSpirv-MeshEXT-07296
    对于使用 MeshEXT 执行 模型 的网格着色器,LocalSizeLocalSizeId 中的 y 大小 必须 小于或等于 VkPhysicalDeviceMeshShaderPropertiesEXT::maxMeshWorkGroupSize[1]

  • VUID-RuntimeSpirv-MeshEXT-07297
    对于使用 MeshEXT 执行 模型 的网格着色器,LocalSizeLocalSizeId 中的 z 大小 必须 小于或等于 VkPhysicalDeviceMeshShaderPropertiesEXT::maxMeshWorkGroupSize[2]

  • VUID-RuntimeSpirv-MeshEXT-07298
    对于使用 MeshEXT 执行 模型 的网格着色器,LocalSizeLocalSizeIdx 大小、y 大小和 z 大小的乘积 必须 小于或等于 VkPhysicalDeviceMeshShaderPropertiesEXT::maxMeshWorkGroupInvocations

  • VUID-RuntimeSpirv-TaskEXT-07299
    在使用 TaskEXT 执行 模型 的任务着色器中,OpEmitMeshTasksEXT 的 “Group Count X” 操作数的值 必须 小于或等于 VkPhysicalDeviceMeshShaderPropertiesEXT::maxMeshWorkGroupCount[0]

  • VUID-RuntimeSpirv-TaskEXT-07300
    在使用 TaskEXT 执行 模型 的任务着色器中,OpEmitMeshTasksEXT 的 “Group Count Y” 操作数的值 必须 小于或等于 VkPhysicalDeviceMeshShaderPropertiesEXT::maxMeshWorkGroupCount[1]

  • VUID-RuntimeSpirv-TaskEXT-07301
    在使用 TaskEXT 执行 模型 的任务着色器中,OpEmitMeshTasksEXT 的 “Group Count Z” 操作数的值 必须 小于或等于 VkPhysicalDeviceMeshShaderPropertiesEXT::maxMeshWorkGroupCount[2]

  • VUID-RuntimeSpirv-TaskEXT-07302
    在使用 TaskEXT 执行 模型 的任务着色器中,OpEmitMeshTasksEXT 的 “Group Count” 操作数的乘积 必须 小于或等于 VkPhysicalDeviceMeshShaderPropertiesEXT::maxMeshWorkGroupTotalCount

  • VUID-RuntimeSpirv-maxMeshSharedMemorySize-08754
    MeshEXT 执行 模型 中,Workgroup 存储 中变量和 填充 的字节大小总和 必须 小于或等于 maxMeshSharedMemorySize

  • VUID-RuntimeSpirv-maxMeshPayloadAndSharedMemorySize-08755
    MeshEXT 执行 模型 中,TaskPayloadWorkgroupEXTWorkgroup 存储 中变量和 填充 的字节大小总和 必须 小于或等于 maxMeshPayloadAndSharedMemorySize

  • VUID-RuntimeSpirv-maxMeshOutputMemorySize-08756
    MeshEXT 执行 模型 中,Output 存储 中变量的字节大小总和 必须 小于或等于 maxMeshOutputMemorySize,根据 网格着色器输出 中的公式计算。

  • VUID-RuntimeSpirv-maxMeshPayloadAndOutputMemorySize-08757
    MeshEXT 执行 模型 中,TaskPayloadWorkgroupEXTOutput 存储 中变量的字节大小总和 必须 小于或等于 maxMeshPayloadAndOutputMemorySize,根据 网格着色器输出 中的公式计算。

  • VUID-RuntimeSpirv-maxTaskPayloadSize-08758
    TaskEXT 执行 模型 中,TaskPayloadWorkgroupEXT 存储 中变量的字节大小总和 必须 小于或等于 maxTaskPayloadSize

  • VUID-RuntimeSpirv-maxTaskSharedMemorySize-08759
    TaskEXT 执行 模型 中,Workgroup 存储 中变量和填充的字节大小总和必须小于或等于maxTaskSharedMemorySize

  • VUID-RuntimeSpirv-maxTaskPayloadAndSharedMemorySize-08760
    TaskEXT 执行 模型 中,TaskPayloadWorkgroupEXTWorkgroup 存储 中变量和填充的字节大小总和必须小于或等于 maxTaskPayloadAndSharedMemorySize

  • VUID-RuntimeSpirv-OpCooperativeMatrixLoadKHR-08986
    对于 OpCooperativeMatrixLoadKHROpCooperativeMatrixStoreKHR 指令,PointerStride 操作数必须对齐到至少 16 字节或矩阵行或列的自然对齐方式(取决于 ColumnMajor),两者中的较小者(其中自然对齐方式是列/行数乘以组件大小)。

  • VUID-RuntimeSpirv-shaderSampleRateInterpolationFunctions-06325
    如果启用了 VK_KHR_portability_subset 扩展,并且 VkPhysicalDevicePortabilitySubsetFeaturesKHR::shaderSampleRateInterpolationFunctionsVK_FALSE,则实现不支持 GLSL.std.450 片段插值函数,并且 OpCapability 必须不是 InterpolationFunction

  • VUID-RuntimeSpirv-tessellationShader-06326
    如果启用了 tessellationShader 功能,并且启用了 VK_KHR_portability_subset 扩展,并且 VkPhysicalDevicePortabilitySubsetFeaturesKHR::tessellationIsolinesVK_FALSE,则 OpExecutionMode 必须不是 IsoLines

  • VUID-RuntimeSpirv-tessellationShader-06327
    如果启用了 tessellationShader 功能,并且启用了 VK_KHR_portability_subset 扩展,并且 VkPhysicalDevicePortabilitySubsetFeaturesKHR::tessellationPointModeVK_FALSE,则 OpExecutionMode 必须不是 PointMode

  • VUID-RuntimeSpirv-storageBuffer8BitAccess-06328
    如果 storageBuffer8BitAccessVK_FALSE,则包含 8 位整数元素的对象的 存储 必须不是 StorageBufferShaderRecordBufferKHRPhysicalStorageBuffer

  • VUID-RuntimeSpirv-uniformAndStorageBuffer8BitAccess-06329
    如果 uniformAndStorageBuffer8BitAccessVK_FALSE,则带有 Block 修饰的 Uniform 存储 中的对象必须没有 8 位整数成员。

  • VUID-RuntimeSpirv-storagePushConstant8-06330
    如果 storagePushConstant8VK_FALSE,则包含 8 位整数元素的对象的 存储 必须不是 PushConstant

  • VUID-RuntimeSpirv-storageBuffer16BitAccess-06331
    如果 storageBuffer16BitAccessVK_FALSE,则包含 16 位整数或 16 位浮点元素的对象的 存储 必须不是 StorageBufferShaderRecordBufferKHRPhysicalStorageBuffer

  • VUID-RuntimeSpirv-uniformAndStorageBuffer16BitAccess-06332
    如果 uniformAndStorageBuffer16BitAccessVK_FALSE,则带有 Block 修饰的 Uniform 存储 中的对象必须没有 16 位整数或 16 位浮点成员。

  • VUID-RuntimeSpirv-storagePushConstant16-06333
    如果 storagePushConstant16VK_FALSE,则包含 16 位整数或 16 位浮点元素的对象的 存储 必须不是 PushConstant

  • VUID-RuntimeSpirv-storageInputOutput16-06334
    如果 storageInputOutput16VK_FALSE,则包含 16 位整数或 16 位浮点元素的对象的 存储 必须不是 InputOutput

  • VUID-RuntimeSpirv-None-06337
    必须启用shaderBufferFloat16Atomics、或shaderBufferFloat16AtomicAdd、或shaderBufferFloat16AtomicMinMax、或shaderSharedFloat16Atomics、或shaderSharedFloat16AtomicAdd、或shaderSharedFloat16AtomicMinMax 中的一个或多个,才能进行 16 位浮点原子操作。

  • VUID-RuntimeSpirv-None-06338
    必须启用shaderBufferFloat32Atomics、或shaderBufferFloat32AtomicAdd、或shaderSharedFloat32Atomics、或shaderSharedFloat32AtomicAdd、或shaderImageFloat32Atomics、或shaderImageFloat32AtomicAdd、或 shaderBufferFloat32AtomicMinMax、或 shaderSharedFloat32AtomicMinMax、或 shaderImageFloat32AtomicMinMax 中的一个或多个,才能进行 32 位浮点原子操作。

  • VUID-RuntimeSpirv-None-06339
    shaderBufferFloat64Atomics,或 shaderBufferFloat64AtomicAdd,或 shaderSharedFloat64Atomics,或 shaderSharedFloat64AtomicAdd,或 shaderBufferFloat64AtomicMinMax,或 shaderSharedFloat64AtomicMinMax必须启用才能进行 64 位浮点原子操作

  • VUID-RuntimeSpirv-shaderFloat16VectorAtomics-09581
    shaderFloat16VectorAtomics必须启用才能支持 16 位浮点、2 分量和 4 分量向量原子操作

  • VUID-RuntimeSpirv-NonWritable-06340
    如果 fragmentStoresAndAtomics 功能未启用,则片元阶段中的所有存储图像、存储纹理缓冲和存储缓冲变量必须使用 NonWritable 修饰符进行修饰

  • VUID-RuntimeSpirv-NonWritable-06341
    如果 vertexPipelineStoresAndAtomics 功能未启用,则顶点、细分和几何阶段中的所有存储图像、存储纹理缓冲和存储缓冲变量必须使用 NonWritable 修饰符进行修饰

  • VUID-RuntimeSpirv-None-06342
    如果 subgroupQuadOperationsInAllStagesVK_FALSE,则 四元子组操作必须仅在片元和计算阶段使用,其他阶段不得使用

  • VUID-RuntimeSpirv-None-06343
    如果着色器阶段不在 subgroupSupportedStages 中,则必须不使用具有子组范围组操作

  • VUID-RuntimeSpirv-Offset-06344
    InterpolateAtOffsetOffset 操作数的第一个元素必须大于或等于
    fragwidth × minInterpolationOffset
    其中 fragwidth 是当前片元的宽度(以像素为单位)

  • VUID-RuntimeSpirv-Offset-06345
    InterpolateAtOffsetOffset 操作数的第一个元素必须小于或等于
    fragwidth × ( maxInterpolationOffset + ULP ) - ULP
    其中 fragwidth 是当前片元的宽度(以像素为单位),ULP = 1 / 2^ subPixelInterpolationOffsetBits^

  • VUID-RuntimeSpirv-Offset-06346
    InterpolateAtOffsetOffset 操作数的第二个元素必须大于或等于
    fragheight × minInterpolationOffset
    其中 fragheight 是当前片元的高度(以像素为单位)

  • VUID-RuntimeSpirv-Offset-06347
    InterpolateAtOffsetOffset 操作数的第二个元素必须小于或等于
    fragheight × ( maxInterpolationOffset + ULP ) - ULP
    其中 fragheight 是当前片元的高度(以像素为单位),ULP = 1 / 2^ subPixelInterpolationOffsetBits^

  • VUID-RuntimeSpirv-OpRayQueryInitializeKHR-06348
    对于 OpRayQueryInitializeKHR 指令,RayOriginRayDirection 操作数的所有分量必须是有限浮点值

  • VUID-RuntimeSpirv-OpRayQueryInitializeKHR-06349
    对于 OpRayQueryInitializeKHR 指令,RayTminRayTmax 操作数必须是非负浮点值

  • VUID-RuntimeSpirv-OpRayQueryInitializeKHR-06350
    对于 OpRayQueryInitializeKHR 指令,RayTmin 操作数必须小于或等于 RayTmax 操作数

  • VUID-RuntimeSpirv-OpRayQueryInitializeKHR-06351
    对于 OpRayQueryInitializeKHR 指令,RayOriginRayDirectionRayTminRayTmax 操作数必须不包含 NaN

  • VUID-RuntimeSpirv-OpRayQueryInitializeKHR-06352
    对于 OpRayQueryInitializeKHR 指令,Acceleration Structure必须是构建为顶层加速结构的加速结构

  • VUID-RuntimeSpirv-OpRayQueryInitializeKHR-06889
    对于 OpRayQueryInitializeKHR 指令,Rayflags 操作数必须不包含 SkipTrianglesKHRSkipAABBsKHR 两者

  • VUID-RuntimeSpirv-OpRayQueryInitializeKHR-06890
    对于 OpRayQueryInitializeKHR 指令,Rayflags 操作数必须不包含 SkipTrianglesKHRCullBackFacingTrianglesKHRCullFrontFacingTrianglesKHR 中的多个

  • VUID-RuntimeSpirv-OpRayQueryInitializeKHR-06891
    对于 OpRayQueryInitializeKHR 指令,Rayflags 操作数必须不包含 OpaqueKHRNoOpaqueKHRCullOpaqueKHRCullNoOpaqueKHR 中的多个

  • VUID-RuntimeSpirv-OpRayQueryGenerateIntersectionKHR-06353
    对于 OpRayQueryGenerateIntersectionKHR 指令,Hit T必须满足条件 RayTminHit TRayTmax,其中 RayTmin 等于使用相同光线查询对象通过 OpRayQueryGetRayTMinKHR 返回的值,RayTmax 等于使用相同光线查询对象当前已提交的交点通过 OpRayQueryGetIntersectionTKHR 获取的值

  • VUID-RuntimeSpirv-OpRayQueryGenerateIntersectionKHR-06354
    对于 OpRayQueryGenerateIntersectionKHR 指令,Acceleration Structure必须未在 flags 中使用 VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV 构建

  • VUID-RuntimeSpirv-flags-08761
    对于 OpRayQueryGetIntersectionTriangleVertexPositionsKHR 指令,Acceleration Structure必须已在 flags 中使用 VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DATA_ACCESS_KHR 构建

  • VUID-RuntimeSpirv-OpTraceRayKHR-06355
    对于 OpTraceRayKHR 指令,RayOriginRayDirection 操作数的所有分量必须是有限浮点值

  • VUID-RuntimeSpirv-OpTraceRayKHR-06356
    对于 OpTraceRayKHR 指令,RayTminRayTmax 操作数必须是非负浮点数值

  • VUID-RuntimeSpirv-OpTraceRayKHR-06552
    对于 OpTraceRayKHR 指令,Rayflags 操作数必须不能同时包含 SkipTrianglesKHRSkipAABBsKHR

  • VUID-RuntimeSpirv-OpTraceRayKHR-06892
    对于 OpTraceRayKHR 指令,Rayflags 操作数必须不能包含多于一个的 SkipTrianglesKHRCullBackFacingTrianglesKHRCullFrontFacingTrianglesKHR

  • VUID-RuntimeSpirv-OpTraceRayKHR-06893
    对于 OpTraceRayKHR 指令,Rayflags 操作数必须不能包含多于一个的 OpaqueKHRNoOpaqueKHRCullOpaqueKHRCullNoOpaqueKHR

  • VUID-RuntimeSpirv-OpTraceRayKHR-06553
    对于 OpTraceRayKHR 指令,如果 Rayflags 操作数包含 SkipTrianglesKHR,则管线必须没有使用设置了 VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR 创建

  • VUID-RuntimeSpirv-OpTraceRayKHR-06554
    对于 OpTraceRayKHR 指令,如果 Rayflags 操作数包含 SkipAABBsKHR,则管线必须没有使用设置了 VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR 创建

  • VUID-RuntimeSpirv-OpTraceRayKHR-06357
    对于 OpTraceRayKHR 指令,RayTmin 操作数必须小于或等于 RayTmax 操作数

  • VUID-RuntimeSpirv-OpTraceRayKHR-06358
    对于 OpTraceRayKHR 指令,RayOriginRayDirectionRayTminRayTmax 操作数必须不包含 NaN

  • VUID-RuntimeSpirv-OpTraceRayKHR-06359
    对于 OpTraceRayKHR 指令,Acceleration Structure 必须是作为顶层加速结构构建的加速结构

  • VUID-RuntimeSpirv-OpReportIntersectionKHR-06998
    OpReportIntersectionKHR 的“Hit Kind”操作数的值必须在范围 [0,127]

  • VUID-RuntimeSpirv-OpTraceRayKHR-06360
    对于 OpTraceRayKHR 指令,如果 Acceleration Structureflags 中使用 VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV 构建,则管线必须已经使用设置了 VK_PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV 创建

  • VUID-RuntimeSpirv-OpTraceRayMotionNV-06361
    对于 OpTraceRayMotionNV 指令,RayOriginRayDirection 操作数的所有分量必须是有限的浮点数值

  • VUID-RuntimeSpirv-OpTraceRayMotionNV-06362
    对于 OpTraceRayMotionNV 指令,RayTminRayTmax 操作数必须是非负浮点数值

  • VUID-RuntimeSpirv-OpTraceRayMotionNV-06363
    对于 OpTraceRayMotionNV 指令,RayTmin 操作数必须小于或等于 RayTmax 操作数

  • VUID-RuntimeSpirv-OpTraceRayMotionNV-06364
    对于 OpTraceRayMotionNV 指令,RayOriginRayDirectionRayTminRayTmax 操作数必须不包含 NaN

  • VUID-RuntimeSpirv-OpTraceRayMotionNV-06365
    对于 OpTraceRayMotionNV 指令,Acceleration Structure 必须是作为顶层加速结构构建且在 flags 中使用了 VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV 的加速结构

  • VUID-RuntimeSpirv-OpTraceRayMotionNV-06366
    对于 OpTraceRayMotionNV 指令,time 操作数必须介于 0.0 和 1.0 之间

  • VUID-RuntimeSpirv-OpTraceRayMotionNV-06367
    对于 OpTraceRayMotionNV 指令,管线必须已经使用设置了 VK_PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV 创建

  • VUID-RuntimeSpirv-OpHitObjectTraceRayMotionNV-07704
    对于 OpHitObjectTraceRayMotionNV 指令,如果 Acceleration Structureflags 中使用 VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV 构建,则管线必须已经使用设置了 VK_PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV 创建

  • VUID-RuntimeSpirv-OpHitObjectTraceRayNV-07705
    对于 OpHitObjectTraceRayNVOpHitObjectTraceRayMotionNV 指令,RayOriginRayDirection 操作数的所有分量必须是有限的浮点数值

  • VUID-RuntimeSpirv-OpHitObjectTraceRayNV-07706
    对于 OpHitObjectTraceRayNVOpHitObjectTraceRayMotionNV 指令,RayTminRayTmax 操作数必须是非负浮点数值

  • VUID-RuntimeSpirv-OpHitObjectTraceRayNV-07707
    对于 OpHitObjectTraceRayNVOpHitObjectTraceRayMotionNV 指令,RayTmin 操作数必须小于或等于 RayTmax 操作数

  • VUID-RuntimeSpirv-OpHitObjectTraceRayNV-07708
    对于 OpHitObjectTraceRayNVOpHitObjectTraceRayMotionNV 指令,RayOriginRayDirectionRayTminRayTmax 操作数必须不包含 NaN

  • VUID-RuntimeSpirv-OpHitObjectTraceRayMotionNV-07709
    对于 OpHitObjectTraceRayMotionNV 指令,Acceleration Structure 必须是作为顶层加速结构构建且在 flags 中使用了 VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV 的加速结构

  • VUID-RuntimeSpirv-OpHitObjectTraceRayNV-07710
    对于 OpHitObjectTraceRayNVOpHitObjectTraceRayMotionNV 指令,time 操作数必须介于 0.0 和 1.0 之间

  • VUID-RuntimeSpirv-OpHitObjectTraceRayMotionNV-07711
    对于 OpHitObjectTraceRayMotionNV 指令,管线必须已经使用设置了 VK_PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV 创建

  • VUID-RuntimeSpirv-OpHitObjectTraceRayNV-07712
    对于 OpHitObjectTraceRayNVOpHitObjectTraceRayMotionNV 指令,Rayflags 操作数必须不能同时包含 SkipTrianglesKHRSkipAABBsKHR

  • VUID-RuntimeSpirv-OpHitObjectTraceRayNV-07713
    对于 OpHitObjectTraceRayNVOpHitObjectTraceRayMotionNV 指令,Rayflags 操作数必须不能包含超过一个 SkipTrianglesKHRCullBackFacingTrianglesKHRCullFrontFacingTrianglesKHR 中的值。

  • VUID-RuntimeSpirv-OpHitObjectTraceRayNV-07714
    对于 OpHitObjectTraceRayNVOpHitObjectTraceRayMotionNV 指令,Rayflags 操作数必须不能包含超过一个 OpaqueKHRNoOpaqueKHRCullOpaqueKHRCullNoOpaqueKHR 中的值。

  • VUID-RuntimeSpirv-OpHitObjectTraceRayNV-07715
    对于 OpHitObjectTraceRayNVOpHitObjectTraceRayMotionNV 指令,如果 Rayflags 操作数包含 SkipTrianglesKHR,则管道必须不是使用设置了 VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR 创建的。

  • VUID-RuntimeSpirv-OpHitObjectTraceRayNV-07716
    对于 OpHitObjectTraceRayNVOpHitObjectTraceRayMotionNV 指令,如果 Rayflags 操作数包含 SkipAABBsKHR,则管道必须不是使用设置了 VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR 创建的。

  • VUID-RuntimeSpirv-x-06429
    在使用 GLCompute Execution Model 的计算着色器中,LocalSizeLocalSizeId 中的 x 大小必须小于或等于 VkPhysicalDeviceLimits::maxComputeWorkGroupSize[0]。

  • VUID-RuntimeSpirv-y-06430
    在使用 GLCompute Execution Model 的计算着色器中,LocalSizeLocalSizeId 中的 y 大小必须小于或等于 VkPhysicalDeviceLimits::maxComputeWorkGroupSize[1]。

  • VUID-RuntimeSpirv-z-06431
    在使用 GLCompute Execution Model 的计算着色器中,LocalSizeLocalSizeId 中的 z 大小必须小于或等于 VkPhysicalDeviceLimits::maxComputeWorkGroupSize[2]。

  • VUID-RuntimeSpirv-x-06432
    在使用 GLCompute Execution Model 的计算着色器中,LocalSizeLocalSizeIdx 大小、y 大小和 z 大小的乘积必须小于或等于 VkPhysicalDeviceLimits::maxComputeWorkGroupInvocations

  • VUID-RuntimeSpirv-LocalSizeId-06434
    如果使用 Execution Mode LocalSizeId,则必须启用 maintenance4

  • VUID-RuntimeSpirv-maintenance4-06817
    如果未启用 maintenance4 功能,则任何 OpTypeVector 输出接口变量的 Component Count必须不高于匹配的 OpTypeVector 输入接口变量。

  • VUID-RuntimeSpirv-OpEntryPoint-08743
    在两个着色器阶段的 OpEntryPoint 之间共享的任何用户定义的变量,并且在后续着色器阶段声明为 Storage ClassInput 的变量,必须在前面着色器阶段的 OpEntryPoint 中声明的所有 Location 插槽和 Component 字,且 Storage ClassOutput

  • VUID-RuntimeSpirv-OpEntryPoint-07754
    在两个着色器阶段的 OpEntryPoint 之间的任何用户定义的变量,对于每个 Component必须具有相同的类型和宽度。

  • VUID-RuntimeSpirv-OpVariable-08746
    在两个着色器阶段的 OpEntryPoint 之间共享的任何 OpVariableBlock 修饰的 OpTypeStructBlock 修饰的 OpTypeStruct 成员,必须具有与接口匹配中定义的匹配修饰。

  • VUID-RuntimeSpirv-Workgroup-06530
    GLCompute Execution Model 中,Workgroup Storage Class 中变量和填充的总字节大小必须小于或等于 maxComputeSharedMemorySize

  • VUID-RuntimeSpirv-shaderZeroInitializeWorkgroupMemory-06372
    如果未启用 shaderZeroInitializeWorkgroupMemory 功能,则任何 Storage ClassWorkgroupOpVariable必须没有 Initializer 操作数。

  • VUID-RuntimeSpirv-Offset-10213
    如果未启用 maintenance8 功能,则图像操作数 Offset必须仅与 OpImage*Gather 指令一起使用。

  • VUID-RuntimeSpirv-OpImage-06376
    如果 OpImage*Gather 操作的图像操作数具有 OffsetConstOffsetConstOffsets,则偏移值必须大于或等于 minTexelGatherOffset

  • VUID-RuntimeSpirv-OpImage-06377
    如果 OpImage*Gather 操作的图像操作数具有 OffsetConstOffsetConstOffsets,则偏移值必须小于或等于 maxTexelGatherOffset

  • VUID-RuntimeSpirv-OpImageSample-06435
    如果 OpImageSample*OpImageFetch* 操作的图像操作数具有 OffsetConstOffset,则偏移值必须大于或等于 minTexelOffset

  • VUID-RuntimeSpirv-OpImageSample-06436
    如果 OpImageSample*OpImageFetch* 操作的图像操作数具有 OffsetConstOffset,则偏移值必须小于或等于 maxTexelOffset

  • VUID-RuntimeSpirv-samples-08725
    如果 OpTypeImageMS 操作数为 0,则其绑定的图像必须已使用 VkImageCreateInfo::samples 作为 VK_SAMPLE_COUNT_1_BIT 创建。

  • VUID-RuntimeSpirv-samples-08726
    如果 OpTypeImageMS 操作数为 1,则其绑定的图像必须不是使用 VkImageCreateInfo::samples 作为 VK_SAMPLE_COUNT_1_BIT 创建的。

  • VUID-RuntimeSpirv-SampleRateShading-06378
    如果子通道描述包含 VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM,则 SPIR-V 片段着色器能力 SampleRateShading 必须 不启用。

  • VUID-RuntimeSpirv-SubgroupUniformControlFlowKHR-06379
    除非启用了 shaderSubgroupUniformControlFlow 功能,并且在 subgroupSupportedStages 中设置了相应的着色器阶段位,并且入口点不执行任何 调用重打包指令,否则 Execution Mode SubgroupUniformControlFlowKHR 必须 不应用于入口点。

  • VUID-RuntimeSpirv-shaderEarlyAndLateFragmentTests-06767
    如果未启用 shaderEarlyAndLateFragmentTests 功能,则 EarlyAndLateFragmentTestsEXT Execution Mode 必须 不使用。

  • VUID-RuntimeSpirv-shaderEarlyAndLateFragmentTests-06768
    如果未启用 shaderEarlyAndLateFragmentTests 功能,则 StencilRefUnchangedFrontEXT Execution Mode 必须 不使用。

  • VUID-RuntimeSpirv-shaderEarlyAndLateFragmentTests-06769
    如果未启用 shaderEarlyAndLateFragmentTests 功能,则 StencilRefUnchangedBackEXT Execution Mode 必须 不使用。

  • VUID-RuntimeSpirv-shaderEarlyAndLateFragmentTests-06770
    如果未启用 shaderEarlyAndLateFragmentTests 功能,则 StencilRefGreaterFrontEXT Execution Mode 必须 不使用。

  • VUID-RuntimeSpirv-shaderEarlyAndLateFragmentTests-06771
    如果未启用 shaderEarlyAndLateFragmentTests 功能,则 StencilRefGreaterBackEXT Execution Mode 必须 不使用。

  • VUID-RuntimeSpirv-shaderEarlyAndLateFragmentTests-06772
    如果未启用 shaderEarlyAndLateFragmentTests 功能,则 StencilRefLessFrontEXT Execution Mode 必须 不使用。

  • VUID-RuntimeSpirv-shaderEarlyAndLateFragmentTests-06773
    如果未启用 shaderEarlyAndLateFragmentTests 功能,则 StencilRefLessBackEXT Execution Mode 必须 不使用。

  • VUID-RuntimeSpirv-OpImageWeightedSampleQCOM-06979
    如果使用 OpImageWeightedSampleQCOM 操作,则 Texture Sampled ImageWeight Image 参数对于四边形 必须 均为 动态均匀

  • VUID-RuntimeSpirv-OpImageWeightedSampleQCOM-06980
    如果使用 OpImageWeightedSampleQCOM 操作,则 Weight Image 参数 必须 具有 Storage Class UniformConstant 和类型 OpTypeImage,其中 Depth=0,Dim=2DArrayed=1,MS=0,且 Sampled=1。

  • VUID-RuntimeSpirv-OpImageWeightedSampleQCOM-06981
    如果使用 OpImageWeightedSampleQCOM 操作,则 Weight Image 参数 必须 使用 WeightTextureQCOM 进行修饰。

  • VUID-RuntimeSpirv-OpImageBlockMatchSADQCOM-06982
    如果使用 OpImageBlockMatchSADQCOMOpImageBlockMatchSSDQCOM 操作,则 target sampled imagereference sampled imageBlock Size 参数对于四边形 必须 均为 动态均匀

  • VUID-RuntimeSpirv-OpImageBlockMatchSSDQCOM-06983
    如果使用 OpImageBlockMatchSSDQCOMOpImageBlockMatchSADQCOM 操作,则 target sampled imagereference sampled image 参数 必须 具有存储类 UniformConstant 和类型 OpTypeImage,其中 Depth=0,Dim=2DArrayed=0,MS=0,且 Sampled=1。

  • VUID-RuntimeSpirv-OpImageBlockMatchSSDQCOM-06984
    如果使用 OpImageBlockMatchSSDQCOMOpImageBlockMatchSADQCOM 操作,则 target sampled imagereference sampled image 参数 必须 使用 BlockMatchTextureQCOM 进行修饰。

  • VUID-RuntimeSpirv-OpImageBlockMatchSSDQCOM-06985
    如果使用 OpImageBlockMatchSSDQCOMOpImageBlockMatchSADQCOM 操作,则 target sampled imagereference sampled image 参数 必须 使用相同的采样器对象创建。

  • VUID-RuntimeSpirv-OpImageBlockMatchSSDQCOM-06986
    如果使用 OpImageBlockMatchSSDQCOMOpImageBlockMatchSADQCOM 操作,则 target sampled imagereference sampled image 参数 必须 使用 unnormalizedCoordinates 等于 VK_TRUE 的采样器对象创建。

  • VUID-RuntimeSpirv-OpImageBlockMatchSSDQCOM-06987
    如果使用 OpImageBlockMatchSSDQCOMOpImageBlockMatchSADQCOM 操作,则 target sampled imagereference sampled image 参数 必须 使用 unnormalizedCoordinates 等于 VK_TRUE 的采样器对象创建。

  • VUID-RuntimeSpirv-OpImageBlockMatchSSDQCOM-06988
    如果使用 OpImageBlockMatchSSDQCOMOpImageBlockMatchSADQCOM 操作,则 Block Size 小于或等于 maxBlockMatchRegion

  • VUID-RuntimeSpirv-OpImageBoxFilterQCOM-06989
    如果使用了 OpImageBoxFilterQCOM 操作,则 BoxSize.y 必须 大于等于 1.0 且小于等于 maxBoxFilterBlockSize.height

  • VUID-RuntimeSpirv-OpImageBoxFilterQCOM-06990
    如果使用了 OpImageBoxFilterQCOM 操作,则 Sampled Texture ImageBoxSize 参数必须动态一致的

  • VUID-RuntimeSpirv-OpEntryPoint-08727
    每个 OpEntryPoint 必须 对于绑定到它的附件图像的每个图像方面,不超过一个使用 InputAttachmentIndex 修饰的变量,无论是显式还是隐式地通过 输入附件接口描述。

  • VUID-RuntimeSpirv-minSampleShading-08731
    如果启用了 采样着色 并且 minSampleShading 为 1.0,则任何 OpColorAttachmentReadEXTOpDepthAttachmentReadEXTOpStencilAttachmentReadEXT 操作的 sample 操作数必须评估为任何给定片段调用的 覆盖率索引 的值

  • VUID-RuntimeSpirv-minSampleShading-08732
    如果启用了 采样着色 并且使用了任何 OpColorAttachmentReadEXTOpDepthAttachmentReadEXTOpStencilAttachmentReadEXT 操作,则 minSampleShading 必须 为 1.0

  • VUID-RuntimeSpirv-MeshEXT-09218
    在使用 MeshEXTMeshNV Execution ModelOutputPoints Execution Mode 的网格着色器中,如果未启用 maintenance5 功能,并且如果输出点的数量大于 0,则必须为每个输出点写入一个使用 PointSize 修饰的变量

  • VUID-RuntimeSpirv-maintenance5-09190
    如果启用了 maintenance5 功能并且写入了使用 PointSize 修饰的变量,则所有执行路径必须写入使用 PointSize 修饰的变量

  • VUID-RuntimeSpirv-ShaderEnqueueAMDX-09191
    ShaderEnqueueAMDX 功能必须仅在具有 GLComputeMeshEXT 执行模型的着色器中使用

  • VUID-RuntimeSpirv-NodePayloadAMDX-09192
    NodePayloadAMDX 存储类中的变量必须仅在 GLComputeMeshEXT 执行模型中声明

  • VUID-RuntimeSpirv-maxExecutionGraphShaderPayloadSize-09193
    NodePayloadAMDX 存储类中声明的变量必须不大于 maxExecutionGraphShaderPayloadSize 限制

  • VUID-RuntimeSpirv-maxExecutionGraphShaderPayloadSize-09194
    NodeOutputPayloadAMDX 存储类中声明的变量必须不大于 maxExecutionGraphShaderPayloadSize 限制

  • VUID-RuntimeSpirv-maxExecutionGraphShaderPayloadSize-09195
    对于给定的入口点,NodePayloadAMDX 存储类中任何变量的大小,以及 NodeOutputPayloadAMDX 存储类中所有静态初始化变量的总大小之和必须不大于 maxExecutionGraphShaderPayloadSize

  • VUID-RuntimeSpirv-maxExecutionGraphShaderPayloadCount-09196
    着色器必须不在 NodeOutputPayloadAMDX 存储类中静态初始化超过 maxExecutionGraphShaderPayloadCount 个变量

  • VUID-RuntimeSpirv-maxExecutionGraphShaderOutputNodes-09197
    着色器必须不包含超过 maxExecutionGraphShaderOutputNodesOpInitializeNodePayloadsAMDX 实例

  • VUID-RuntimeSpirv-OpImageBlockMatchWindow-09219
    如果使用了 OpImageBlockMatchWindow*QCOMOpImageBlockMatchGather*QCOM 操作,则 target sampled imagereference sampled imageBlock Size 参数对于四边形都必须动态一致的

  • VUID-RuntimeSpirv-OpImageBlockMatchWindow-09220
    如果使用了 OpImageBlockMatchWindow*QCOMOpImageBlockMatchGather*QCOM 操作,则 target sampled imagereference sampled image 参数必须具有 UniformConstant 存储类和类型为 OpTypeImage,并且 Depth=0,Dim=2DArrayed=0,MS=0 和 Sampled=1

  • VUID-RuntimeSpirv-OpImageBlockMatchWindow-09221
    如果使用了 OpImageBlockMatchWindow*QCOMOpImageBlockMatchGather*QCOM 操作,则 target sampled imagereference sampled image 参数必须使用 BlockMatchTextureQCOM 修饰

  • VUID-RuntimeSpirv-OpImageBlockMatchWindow-09222
    如果使用了 OpImageBlockMatchWindow*QCOMOpImageBlockMatchGather*QCOM 操作,则 target sampled imagereference sampled image 参数必须使用相同的采样器对象创建

  • VUID-RuntimeSpirv-OpImageBlockMatchWindow-09223
    如果使用了 OpImageBlockMatchWindow*QCOMOpImageBlockMatchGather*QCOM 操作,则 target sampled imagereference sampled image 参数必须使用 unnormalizedCoordinates 等于 VK_TRUE 的采样器对象创建

  • VUID-RuntimeSpirv-OpImageBlockMatchWindow-09224
    如果使用了 OpImageBlockMatchWindow*QCOMOpImageBlockMatchGather*QCOM 操作,则 target sampled imagereference sampled image 参数必须使用 unnormalizedCoordinates 等于 VK_TRUE 的采样器对象创建

  • VUID-RuntimeSpirv-maxBlockMatchRegion-09225
    如果使用了 OpImageBlockMatchWindow*QCOMOpImageBlockMatchGather*QCOM 操作,则 Block Size 小于等于 maxBlockMatchRegion

  • VUID-RuntimeSpirv-pNext-09226
    如果使用了 OpImageBlockMatchWindow*QCOM 操作,则 target sampled image 必须使用在 pNext 链中包含 VkSamplerBlockMatchWindowCreateInfoQCOM 的采样器对象创建

  • VUID-RuntimeSpirv-MaximallyReconvergesKHR-09565
    执行模式 MaximallyReconvergesKHR 必须 不应用于入口点,除非该入口点不执行任何调用重打包指令

  • VUID-RuntimeSpirv-shaderSubgroupRotateClustered-09566
    如果 shaderSubgroupRotateClusteredVK_FALSE,则 OpGroupNonUniformRotateKHRClusterSize 操作数必须不被使用。

  • VUID-RuntimeSpirv-protectedNoFault-09645
    如果不支持 protectedNoFault,则如果被访问的缓冲区是受保护的,则必须不使用 PhysicalStorageBufferStorage Class

  • VUID-RuntimeSpirv-meshAndTaskShaderDerivatives-10153
    如果 meshAndTaskShaderDerivativesVK_FALSE,则 MeshEXTMeshNVTaskEXTTaskNV Execution Model必须不使用 DerivativeGroupLinearKHRDerivativeGroupQuadsKHR 执行模式。

SPIR-V 指令的精度和操作

以下规则适用于半精度、单精度和双精度浮点指令。

  • 正无穷大、负无穷大以及正零和负零的生成方式由 IEEE 754 规定,但须符合下表中允许的精度。

  • 不要求生成信号 NaN,并且永远不会引发异常。任何浮点指令可能将信号 NaN 转换为静默 NaN 值。

  • 操作集合 OpPhiOpSelectOpFunctionCallOpReturnValueOpVectorExtractDynamicOpVectorInsertDynamicOpVectorShuffleOpCompositeConstructOpCompositeExtractOpCompositeInsertOpTransposeOpCopyObjectOpCopyLogicalOpCopyMemoryOpGroupNonUniformBroadcastOpGroupNonUniformBroadcastFirstOpGroupNonUniformShuffleOpGroupNonUniformShuffleXorOpGroupNonUniformShuffleUpOpGroupNonUniformShuffleDownOpGroupNonUniformQuadBroadcastOpGroupNonUniformQuadSwapOpSubgroupReadInvocationKHROpSubgroupFirstInvocationKHROpGroupNonUniformRotateKHROpCooperativeMatrixLoadKHROpCooperativeMatrixStoreKHROpCooperativeMatrixLoadNVOpCooperativeMatrixStoreNVOpCooperativeMatrixLoadTensorNVOpCooperativeMatrixStoreTensorNVOpAtomicLoadOpAtomicStoreOpAtomicExchangeOpStoreOpLoad 被称为位保留操作

  • 用于指令的浮点环境可以按如下方式确定:

    • 如果 SPIR-V 使用 FPFastMath 修饰符或 FPFastMathDefault Execution Mode 显式指定,则使用该指定的环境。

    • 如果未在 SPIR-V 中指定环境,则按如下方式确定:

      • 如果操作未修饰 NoContraction,则假定标志 AllowContractAllowReassocAllowRecipAllowTransform

      • 如果满足以下任何条件,则假定标志 NSZNotInfNotNaN

        • 入口点不使用 Execution Mode SignedZeroInfNanPreserve,其位宽对应于其中一个操作数或结果类型。

        • 该操作不是位保留操作,也不是 OpFConvertOpFNegateOpFAddOpFSubOpFMulOpFDivOpIsNanOpIsInfOpVectorTimesScalarOpMatrixTimesScalarOpVectorTimesMatrixOpMatrixTimesVectorOpMatrixTimesMatrixOpOuterProductOpDotOpFOrdEqualOpFUnordEqualOpFOrdNotEqualOpFUnordNotEqualOpFOrdLessThanOpFUnordLessThanOpFOrdGreaterThanOpFUnordGreaterThanOpFOrdLessThanEqualOpFUnordLessThanEqualOpFOrdGreaterThanEqualOpFUnordGreaterThanEqualOpGroupNonUniformAllEqualOpSubgroupAllEqualKHROpGroupNonUniformFMinOpGroupNonUniformFMaxOpAtomicCompareExchangeOpAtomicCompareExchangeWeakOpDPdxOpDPdyOpFwidthOpDPdxFineOpDPdyFineOpFwidthFineOpDPdxCoarseOpDPdyCoarseOpFwidthCoarse 之一。

        • 该操作是从片段着色器阶段的 Input Storage Class 执行的 OpLoad

  • 所有位保留操作和以下指令必须不刷新非规格化值:OpConstantOpConstantCompositeOpSpecConstantOpSpecConstantCompositeOpBitcast

  • 支持非规格化值。

    • 默认情况下,输入到着色器中或可能由着色器中任何指令(上述列表中的指令除外)或任何 GLSL 扩展指令生成的任何半精度、单精度或双精度非规格化值可能被刷新为零。

    • 如果入口点声明了 DenormFlushToZero Execution Mode,则对于受影响的指令,非规格化结果必须被刷新为零,并且非规格化操作数可能被刷新为零。通过将整数解包为具有较小位宽的值向量并将这些值解释为浮点数而获得的非规格化值必须被刷新为零。

    • 以下核心 SPIR-V 指令必须遵守 DenormFlushToZero Execution ModeOpSpecConstantOp (操作码为 OpFConvert)、OpFConvertOpFNegateOpFAddOpFSubOpFMulOpFDivOpFRemOpFModOpVectorTimesScalarOpMatrixTimesScalarOpVectorTimesMatrixOpMatrixTimesVectorOpMatrixTimesMatrixOpOuterProductOpDotOpGroupNonUniformFMinOpGroupNonUniformFMaxOpAtomicFAddEXTOpAtomicFMinEXTOpAtomicFMaxEXTOpDPdxOpDPdyOpFwidthOpDPdxFineOpDPdyFine OpFwidthFineOpDPdxCoarseOpDPdyCoarseOpFwidthCoarse;以及以下 GLSL 扩展指令:RoundRoundEvenTruncFAbsFloorCeilFractRadiansDegreesSinCosTanAsinAcosAtanSinhCoshTanhAsinhAcoshAtanhAtan2PowExpLogExp2Log2SqrtInverseSqrtDeterminantMatrixInverseModfModfStructFMinFMaxFClampFMixStepSmoothStepFmaUnpackHalf2x16LengthDistanceCrossNormalizeFaceForwardReflectRefractNMinNMaxNClamp

    • 以下核心 SPIR-V 指令必须遵守 DenormPreserve Execution ModeOpSpecConstantOpOpFConvertOpFNegateOpFAddOpFSubOpFMulOpVectorTimesScalarOpMatrixTimesScalarOpVectorTimesMatrixOpMatrixTimesVectorOpMatrixTimesMatrixOpOuterProductOpDotOpFOrdEqualOpFUnordEqualOpFOrdNotEqualOpFUnordNotEqualOpFOrdLessThanOpFUnordLessThanOpFOrdGreaterThanOpFUnordGreaterThanOpFOrdLessThanEqualOpFUnordLessThanEqualOpFOrdGreaterThanEqualOpFUnordGreaterThanEqualOpSubgroupAllEqualKHROpGroupNonUniformAllEqualOpGroupNonUniformFMinOpGroupNonUniformFMaxOpAtomicCompareExchangeOpAtomicCompareExchangeWeakOpAtomicFAddEXTOpAtomicFMinEXTOpAtomicFMaxEXTOpDPdxOpDPdyOpFwidthOpDPdxFineOpDPdyFine OpFwidthFineOpDPdxCoarseOpDPdyCoarseOpFwidthCoarse;以及以下 GLSL 扩展指令:FAbsFSignRadiansDegreesFMinFMaxFClampFMixFmaPackHalf2x16PackDouble2x32UnpackHalf2x16UnpackDouble2x32NMinNMaxNClamp

双精度指令的精度至少与单精度指令的精度相同。

各个操作的精度在各个操作的精度中定义。然而,在满足以下约束的情况下,实现**可以**重新排序或组合操作,从而导致表达式的精度与构成操作的预期精度不同。

表达式的求值

实现**可以**使用精确算术中支配表达式的任何数学属性来重新排列浮点运算,即使浮点运算不共享这些属性。这包括但不限于结合律和分配律,并且**可能**涉及与未重新排列操作时发生的不同的舍入步骤数量。在使用 SignedZeroInfNanPreserve Execution Mode 的着色器中,如果在任何重新排列之后生成值,则**必须**保留这些值,但 Execution Mode 不会改变哪些重新排列是有效的。可以使用 NoContraction 修饰来阻止特定操作的这种重新排列。

例如,在没有 NoContraction 修饰的情况下,允许实现将 a + b - a 和 \({a \times b}\over{a}\) 实现为 b。即使在浮点求值时它们可能溢出到无穷大或 NaN,SignedZeroInfNanPreserve 也不会阻止这些转换。

如果应用了 NoContraction 修饰,则操作可能不会被重新排列,因此,例如,a + a - a 必须考虑可能溢出到无穷大。如果无穷大不被保留,则可以将表达式替换为 a,因为当不发生溢出时,替换是精确的,并且无穷大可以替换为**未定义**的值。如果同时使用 NoContractionSignedZeroInfNanPreserve,则对于足够大的 a,结果必须是无穷大。

各个操作的精度

各个操作的精度根据舍入(正确舍入)、ULP中的误差范围或从公式继承来定义,如下所示

正确结果

描述为返回“正确结果”的操作将返回无限精确的结果,由于操作的性质,该结果不需要舍入。

正确舍入

描述为“正确舍入”的操作将返回无限精确的结果,x,并进行舍入以使其可以在浮点中表示。如果入口点声明为使用 RoundingModeRTERoundingModeRTZ Execution Mode,则分别根据 IEEE 754 “roundTiesToEven” 或 “roundTowardZero” 舍入方向进行舍入。否则,它们将使用 实现定义的舍入模式进行舍入。

使用实现定义的舍入模式进行正确舍入

描述为“使用实现定义的舍入模式进行正确舍入”的操作将返回无限精确的结果,x,并进行舍入以使其可以在浮点中表示。如果 x 可以精确表示,则将返回 x。否则,将返回最接近且不小于 x 的浮点值或最接近且不大于 x 的值。选择哪个值由实现定义。

ULP

如果给定的误差范围为 n ULP(最后一位的单位),对于具有无限精确结果 x 的操作,返回的值**必须**在范围 [x - n × ulp(x), x + n × ulp(x)] 内。函数 ulp(x) 定义如下

如果存在不相等的有限浮点数 ab,使得 a ≤ x ≤ b,则 ulp(x) 是这些数字之间的最小可能距离,\(ulp(x) = \mathrm{min}_{a,b} | b - a |\)。如果不存在这样的数字,则 ulp(x) 定义为最接近 x 的两个不相等的有限浮点数之间的差。

如果允许的返回值范围包括任何大于最大可表示的有限浮点数的量级的值,则操作**可能**还会返回具有适当符号的无穷大或具有适当符号的最大量级的有限数字。如果操作的无限精确结果在数学上未定义,则返回的值是**未定义的**。

从…继承

如果操作的精度被描述为从公式继承,则返回的结果**必须**至少与使用等效于给定公式应用于提供的输入的公式计算 x 的近似值的结果一样准确。具体而言,可以使用所涉及运算符的数学结合律、交换律和分配律转换给定的公式,以产生等效的公式。当应用于每个此类公式和给定输入值时,SPIR-V 精度规则定义了允许值的范围。如果 NaN 是允许值之一,则操作可能返回任何结果,否则,让任何范围内的最大允许值为 Fmax,最小值为 Fmin。该操作**必须**返回范围 [x - E, x + E] 内的值,其中 \(E = \mathrm{max} \left( | x - F_{\mathrm{min}} |, | x - F_{\mathrm{max}} | \right) \)。如果入口点声明为使用 DenormFlushToZero 执行模式,则在评估公式时,任何中间次正规值都**可能**被刷新为零。次正规最终结果**必须**被刷新为零。如果入口点声明为使用 DenormPreserve Execution Mode,则次正规值**必须**在整个公式中保留。

对于半精度(16 位)和单精度(32 位)指令,精度**必须**至少如下所示

表 3. 核心 SPIR-V 指令的精度
指令 单精度,除非使用 RelaxedPrecision 修饰 半精度

OpFNegate

正确结果。

OpFAdd

正确舍入。

OpFSub

正确舍入。

OpFMul, OpVectorTimesScalar, OpMatrixTimesScalar

正确舍入。

OpMatrixTimesVector

继承自

OpVectorTimesMatrix

继承自

OpMatrixTimesMatrix

Inherited from .

OpOuterProduct

正确舍入。

OpDot(x, y)

继承自

OpIsNan, OpIsInf

正确结果。

OpFOrdEqual, OpFUnordEqual

正确结果。

OpFOrdNotEqual, OpFUnordNotEqual

正确结果。

OpFOrdLessThan, OpFUnordLessThan

正确结果。

OpFOrdGreaterThan, OpFUnordGreaterThan

正确结果。

OpFOrdLessThanEqual, OpFUnordLessThanEqual

正确结果。

OpFOrdGreaterThanEqual, OpFUnordGreaterThanEqual

正确结果。

OpSubgroupAllEqualKHR

正确结果。

OpGroupNonUniformAllEqual

正确结果。

OpGroupNonUniformFMin, OpGroupNonUniformFMax

正确结果。

OpFDiv(x,y)

|y| = 0|y| 在 [2-126, 2126] 范围内时,为 2.5 ULP。

|y| = 0|y| 在 [2-14, 214] 范围内时,为 2.5 ULP。

OpFRem(x,y)

继承自 x - y × trunc(x/y)

OpFMod(x,y)

继承自 x - y × floor(x/y)

OpQuantizeToF16

使用实现定义的舍入模式正确舍入。

类型之间的转换

正确舍入。

OpAtomicCompareExchange, OpAtomicCompareExchangeWeak

正确结果。

OpAtomicFAddEXT

返回值正确,内存中的值已正确舍入。

OpAtomicFMinEXT, OpAtomicFMaxEXT

正确结果。

OpDPdx, OpDPdy, OpFwidth

正确舍入。

OpDPdxCoarse, OpDPdyCoarse, OpFwidthCoarse

正确舍入。

OpDPdxFine, OpDPdyFine, OpFwidthFine

正确舍入。

OpFRemOpFMod 指令使用余数的廉价近似值,并且由于 trunc() 和 floor() 中的不连续性,误差可能很大。这在某些情况下会产生数学上意想不到的结果,例如 FMod(x,x) 计算出 x 而不是 0,并且还可能导致结果的符号与无限精确的结果不同。

表 4. GLSL.std.450 指令的精度
指令 单精度,除非使用 RelaxedPrecision 修饰 半精度

fma()

继承自 OpFMul 后跟 OpFAdd

exp(x), exp2(x)

ULP。

ULP。

log(), log2()

超出范围 范围 3 ULP。 绝对误差 < 范围。

超出范围 3 ULP 。绝对误差 < 在范围 内。

pow(x, y)

继承自 exp2(y × log2(x))。

sqrt()

继承自 1.0 / inversesqrt()。

inversesqrt()

2 ULP。

radians(x)

Inherited from , where is a correctly rounded approximation to .

degrees(x)

Inherited from , where is a correctly rounded approximation to .

sin()

绝对误差 在范围 内。

绝对误差 在范围 内。

cos()

绝对误差 在范围 内。

绝对误差 在范围 内。

tan()

继承自

asin(x)

Inherited from .

acos(x)

Inherited from .

atan(), atan2()

4096 ULP

5 ULP。

sinh(x)

Inherited from .

cosh(x)

Inherited from .

tanh()

继承自 .

asinh(x)

Inherited from .

acosh(x)

Inherited from .

atanh(x)

继承自

frexp()

正确结果。

ldexp()

正确舍入。

length(x)

继承自

distance(x, y)

继承自

交叉()

继承自 OpFSub(OpFMul, OpFMul)

normalize(x)

Inherited from .

faceforward(N, I, NRef)

继承自 dot(NRef, I) < 0.0 ? N : -N

reflect(x, y)

继承自 x - 2.0 × dot(y, x) × y

refract(I, N, eta)

继承自 k < 0.0 ? 0.0 : eta × I - (eta × dot(N, I) + sqrt(k)) × N,其中 k = 1 - eta × eta × (1.0 - dot(N, I) × dot(N, I))

round

正确舍入。

roundEven

正确舍入。

trunc

正确舍入。

fabs

正确结果。

fsign

正确结果。

floor

正确舍入。

ceil

正确舍入。

fract

正确舍入。

modf

正确舍入。

fmin

正确结果。

fmax

正确结果。

fclamp

正确结果。

fmix(x, y, a)

继承自

步骤

正确舍入。

smoothStep(edge0, edge1, x)

Inherited from , where .

nmin

正确结果。

nmax

正确结果。

nclamp

正确结果。

packHalf2x16

使用实现定义的舍入模式正确舍入。

GLSL.std.450 扩展指令,特别是根据上述指令定义的,会继承上述错误。未列出且不是根据上述定义的 GLSL.std.450 扩展指令具有未定义的精度。

如果未启用 maintenance8 功能,并且 OpSRemOpSMod 指令的任何一个操作数为负数,则结果为未定义

虽然 Vulkan 环境支持 OpSRemOpSMod 指令,但如果未启用 maintenance8 功能,则它们需要非负值,因此除了 OpUMod 提供的功能之外,不会启用其他功能。

OpCooperativeMatrixMulAddNV 以依赖于实现的方式和内部精度执行其操作。

OpCooperativeMatrixMulAddKHR 以依赖于实现的方式和内部精度执行其操作。

SPIR-V 图像访问的符号性

SPIR-V 将符号性与所有整数图像访问相关联。这是 SPIR-V 和 Vulkan 图像访问管道的某些部分所必需的,以确保定义的结果。符号性由访问指令的 Image Operands 和底层图像的 Sampled Type 的组合确定,如下所示

  1. 如果指令的 Image Operands 包含 SignExtend 操作数,则访问为带符号的。

  2. 如果指令的 Image Operands 包含 ZeroExtend 操作数,则访问为无符号的。

  3. 否则,图像访问的符号性与正在访问的 OpTypeImageSampled Type 的符号性匹配。

图像格式和类型匹配

当指定 OpTypeImageImage Format 时,如下表所示,转换后的位宽和类型必须Sampled Type 匹配。符号性必须与对图像的任何访问的符号性匹配。

格式化访问始终通过格式转换(用于读取)和纹素输出格式转换(用于写入)从着色器可读类型转换为资源的格式,反之亦然。因此,下面的位宽和格式不一定与某些格式的预期值 1:1 匹配。

对于给定的 Image FormatSampled Type 必须是下表类型列中描述的类型,其 Literal Width 设置为位宽列中的值。对图像进行的每次访问必须具有与符号性列中相同的符号性(如果适用)。

图像格式 类型声明指令 位宽 符号性

未知

任意

任意

任意

Rgba32f

OpTypeFloat

32

32

Rg32f

R32f

Rgba16f

Rg16f

R16f

Rgba16

Rg16

R16

Rgba16Snorm

Rg16Snorm

R16Snorm

Rgb10A2

R11fG11fB10f

Rgba8

Rg8

R8

Rgba8Snorm

Rg8Snorm

R8Snorm

Rgba32i

OpTypeInt

32

1

Rg32i

R32i

Rgba16i

Rg16i

R16i

Rgba8i

Rg8i

R8i

Rgba32ui

0

Rg32ui

R32ui

Rgba16ui

Rg16ui

R16ui

Rgb10a2ui

Rgba8ui

Rg8ui

R8ui

OpTypeInt

OpTypeInt

64

1

OpTypeInt

0

SPIR-V 类型由 SPIR-V 中的指令定义,该指令使用上面的类型声明指令、位宽和符号性声明。

SPIR-V 图像维度和 Vulkan ImageView 类型之间的兼容性

SPIR-V Image Dim 值与 VkImageView viewType 值兼容,如下定义

表 5. SPIR-V 和 Vulkan ImageView 维度兼容性
SPIR-V 图像 Dim 兼容的 Vulkan ImageView viewTypes

1D

VK_IMAGE_VIEW_TYPE_1DVK_IMAGE_VIEW_TYPE_1D_ARRAY

2D

VK_IMAGE_VIEW_TYPE_2DVK_IMAGE_VIEW_TYPE_2D_ARRAY

3D

VK_IMAGE_VIEW_TYPE_3D

立方体

VK_IMAGE_VIEW_TYPE_CUBEVK_IMAGE_VIEW_TYPE_CUBE_ARRAY

SPIR-V 图像格式和 Vulkan 格式之间的兼容性

SPIR-V Image Format 值与 VkFormat 值兼容,如下定义

表 6. SPIR-V 和 Vulkan 图像格式兼容性
SPIR-V 图像格式 兼容的 Vulkan 格式

未知

任意

R8

VK_FORMAT_R8_UNORM

R8Snorm

VK_FORMAT_R8_SNORM

R8ui

VK_FORMAT_R8_UINT

R8i

VK_FORMAT_R8_SINT

Rg8

VK_FORMAT_R8G8_UNORM

Rg8Snorm

VK_FORMAT_R8G8_SNORM

Rg8ui

VK_FORMAT_R8G8_UINT

Rg8i

VK_FORMAT_R8G8_SINT

Rgba8

VK_FORMAT_R8G8B8A8_UNORM

Rgba8Snorm

VK_FORMAT_R8G8B8A8_SNORM

Rgba8ui

VK_FORMAT_R8G8B8A8_UINT

Rgba8i

VK_FORMAT_R8G8B8A8_SINT

Rgb10A2

VK_FORMAT_A2B10G10R10_UNORM_PACK32

Rgb10a2ui

VK_FORMAT_A2B10G10R10_UINT_PACK32

R16

VK_FORMAT_R16_UNORM

R16Snorm

VK_FORMAT_R16_SNORM

R16ui

VK_FORMAT_R16_UINT

R16i

VK_FORMAT_R16_SINT

R16f

VK_FORMAT_R16_SFLOAT

Rg16

VK_FORMAT_R16G16_UNORM

Rg16Snorm

VK_FORMAT_R16G16_SNORM

Rg16ui

VK_FORMAT_R16G16_UINT

Rg16i

VK_FORMAT_R16G16_SINT

Rg16f

VK_FORMAT_R16G16_SFLOAT

Rgba16

VK_FORMAT_R16G16B16A16_UNORM

Rgba16Snorm

VK_FORMAT_R16G16B16A16_SNORM

Rgba16ui

VK_FORMAT_R16G16B16A16_UINT

Rgba16i

VK_FORMAT_R16G16B16A16_SINT

Rgba16f

VK_FORMAT_R16G16B16A16_SFLOAT

R32ui

VK_FORMAT_R32_UINT

R32i

VK_FORMAT_R32_SINT

R32f

VK_FORMAT_R32_SFLOAT

Rg32ui

VK_FORMAT_R32G32_UINT

Rg32i

VK_FORMAT_R32G32_SINT

Rg32f

VK_FORMAT_R32G32_SFLOAT

Rgba32ui

VK_FORMAT_R32G32B32A32_UINT

Rgba32i

VK_FORMAT_R32G32B32A32_SINT

Rgba32f

VK_FORMAT_R32G32B32A32_SFLOAT

OpTypeInt

VK_FORMAT_R64_UINT

OpTypeInt

VK_FORMAT_R64_SINT

R11fG11fB10f

VK_FORMAT_B10G11R11_UFLOAT_PACK32

射线查询精度和操作

OpRayQueryGetIntersectionTriangleVertexPositionsKHR 返回的值通过几何变换进行转换,几何变换以标准浮点精度执行,但没有明确定义的浮点运算顺序来执行矩阵乘法。