mirror of
https://github.com/bkaradzic/bgfx.git
synced 2026-02-17 12:42:34 +01:00
Updated spirv-tools.
This commit is contained in:
@@ -1 +1 @@
|
||||
"v2025.1", "SPIRV-Tools v2025.1 v2025.1.rc1-22-gabb6ee0e"
|
||||
"v2025.2", "SPIRV-Tools v2025.2 v2025.2.rc2-29-g9c392f66"
|
||||
|
||||
@@ -1,942 +0,0 @@
|
||||
static const char* pygen_variable_aliases_OpDecorateStringGOOGLE[] = {"OpDecorateStringGOOGLE"};
|
||||
static const char* pygen_variable_aliases_OpDemoteToHelperInvocationEXT[] = {"OpDemoteToHelperInvocationEXT"};
|
||||
static const char* pygen_variable_aliases_OpMemberDecorateStringGOOGLE[] = {"OpMemberDecorateStringGOOGLE"};
|
||||
static const char* pygen_variable_aliases_OpReportIntersectionNV[] = {"OpReportIntersectionNV"};
|
||||
static const char* pygen_variable_aliases_OpSDotAccSatKHR[] = {"OpSDotAccSatKHR"};
|
||||
static const char* pygen_variable_aliases_OpSDotKHR[] = {"OpSDotKHR"};
|
||||
static const char* pygen_variable_aliases_OpSUDotAccSatKHR[] = {"OpSUDotAccSatKHR"};
|
||||
static const char* pygen_variable_aliases_OpSUDotKHR[] = {"OpSUDotKHR"};
|
||||
static const char* pygen_variable_aliases_OpTypeAccelerationStructureNV[] = {"OpTypeAccelerationStructureNV"};
|
||||
static const char* pygen_variable_aliases_OpUDotAccSatKHR[] = {"OpUDotAccSatKHR"};
|
||||
static const char* pygen_variable_aliases_OpUDotKHR[] = {"OpUDotKHR"};
|
||||
|
||||
static const spv::Capability pygen_variable_caps_Addresses[] = {spv::Capability::Addresses};
|
||||
static const spv::Capability pygen_variable_caps_AddressesPhysicalStorageBufferAddresses[] = {spv::Capability::Addresses, spv::Capability::PhysicalStorageBufferAddresses};
|
||||
static const spv::Capability pygen_variable_caps_AddressesUntypedPointersKHR[] = {spv::Capability::Addresses, spv::Capability::UntypedPointersKHR};
|
||||
static const spv::Capability pygen_variable_caps_AddressesVariablePointersVariablePointersStorageBuffer[] = {spv::Capability::Addresses, spv::Capability::VariablePointers, spv::Capability::VariablePointersStorageBuffer};
|
||||
static const spv::Capability pygen_variable_caps_AddressesVariablePointersVariablePointersStorageBufferPhysicalStorageBufferAddresses[] = {spv::Capability::Addresses, spv::Capability::VariablePointers, spv::Capability::VariablePointersStorageBuffer, spv::Capability::PhysicalStorageBufferAddresses};
|
||||
static const spv::Capability pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL[] = {spv::Capability::ArbitraryPrecisionFixedPointINTEL};
|
||||
static const spv::Capability pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL[] = {spv::Capability::ArbitraryPrecisionFloatingPointINTEL};
|
||||
static const spv::Capability pygen_variable_caps_ArithmeticFenceEXT[] = {spv::Capability::ArithmeticFenceEXT};
|
||||
static const spv::Capability pygen_variable_caps_AsmINTEL[] = {spv::Capability::AsmINTEL};
|
||||
static const spv::Capability pygen_variable_caps_AtomicFloat16AddEXTAtomicFloat32AddEXTAtomicFloat64AddEXTAtomicFloat16VectorNV[] = {spv::Capability::AtomicFloat16AddEXT, spv::Capability::AtomicFloat32AddEXT, spv::Capability::AtomicFloat64AddEXT, spv::Capability::AtomicFloat16VectorNV};
|
||||
static const spv::Capability pygen_variable_caps_AtomicFloat16MinMaxEXTAtomicFloat32MinMaxEXTAtomicFloat64MinMaxEXTAtomicFloat16VectorNV[] = {spv::Capability::AtomicFloat16MinMaxEXT, spv::Capability::AtomicFloat32MinMaxEXT, spv::Capability::AtomicFloat64MinMaxEXT, spv::Capability::AtomicFloat16VectorNV};
|
||||
static const spv::Capability pygen_variable_caps_BFloat16ConversionINTEL[] = {spv::Capability::BFloat16ConversionINTEL};
|
||||
static const spv::Capability pygen_variable_caps_BindlessTextureNV[] = {spv::Capability::BindlessTextureNV};
|
||||
static const spv::Capability pygen_variable_caps_BlockingPipesINTEL[] = {spv::Capability::BlockingPipesINTEL};
|
||||
static const spv::Capability pygen_variable_caps_CooperativeMatrixConversionsNV[] = {spv::Capability::CooperativeMatrixConversionsNV};
|
||||
static const spv::Capability pygen_variable_caps_CooperativeMatrixKHR[] = {spv::Capability::CooperativeMatrixKHR};
|
||||
static const spv::Capability pygen_variable_caps_CooperativeMatrixNV[] = {spv::Capability::CooperativeMatrixNV};
|
||||
static const spv::Capability pygen_variable_caps_CooperativeMatrixPerElementOperationsNV[] = {spv::Capability::CooperativeMatrixPerElementOperationsNV};
|
||||
static const spv::Capability pygen_variable_caps_CooperativeMatrixReductionsNV[] = {spv::Capability::CooperativeMatrixReductionsNV};
|
||||
static const spv::Capability pygen_variable_caps_CooperativeMatrixTensorAddressingNV[] = {spv::Capability::CooperativeMatrixTensorAddressingNV};
|
||||
static const spv::Capability pygen_variable_caps_CooperativeVectorNV[] = {spv::Capability::CooperativeVectorNV};
|
||||
static const spv::Capability pygen_variable_caps_CooperativeVectorTrainingNV[] = {spv::Capability::CooperativeVectorTrainingNV};
|
||||
static const spv::Capability pygen_variable_caps_DemoteToHelperInvocation[] = {spv::Capability::DemoteToHelperInvocation};
|
||||
static const spv::Capability pygen_variable_caps_DerivativeControl[] = {spv::Capability::DerivativeControl};
|
||||
static const spv::Capability pygen_variable_caps_DeviceEnqueue[] = {spv::Capability::DeviceEnqueue};
|
||||
static const spv::Capability pygen_variable_caps_DisplacementMicromapNV[] = {spv::Capability::DisplacementMicromapNV};
|
||||
static const spv::Capability pygen_variable_caps_DotProduct[] = {spv::Capability::DotProduct};
|
||||
static const spv::Capability pygen_variable_caps_ExpectAssumeKHR[] = {spv::Capability::ExpectAssumeKHR};
|
||||
static const spv::Capability pygen_variable_caps_FPGARegINTEL[] = {spv::Capability::FPGARegINTEL};
|
||||
static const spv::Capability pygen_variable_caps_FragmentMaskAMD[] = {spv::Capability::FragmentMaskAMD};
|
||||
static const spv::Capability pygen_variable_caps_FragmentShaderSampleInterlockEXTFragmentShaderPixelInterlockEXTFragmentShaderShadingRateInterlockEXT[] = {spv::Capability::FragmentShaderSampleInterlockEXT, spv::Capability::FragmentShaderPixelInterlockEXT, spv::Capability::FragmentShaderShadingRateInterlockEXT};
|
||||
static const spv::Capability pygen_variable_caps_FunctionPointersINTEL[] = {spv::Capability::FunctionPointersINTEL};
|
||||
static const spv::Capability pygen_variable_caps_Geometry[] = {spv::Capability::Geometry};
|
||||
static const spv::Capability pygen_variable_caps_GeometryStreams[] = {spv::Capability::GeometryStreams};
|
||||
static const spv::Capability pygen_variable_caps_GroupNonUniform[] = {spv::Capability::GroupNonUniform};
|
||||
static const spv::Capability pygen_variable_caps_GroupNonUniformArithmeticGroupNonUniformClusteredGroupNonUniformPartitionedNV[] = {spv::Capability::GroupNonUniformArithmetic, spv::Capability::GroupNonUniformClustered, spv::Capability::GroupNonUniformPartitionedNV};
|
||||
static const spv::Capability pygen_variable_caps_GroupNonUniformBallot[] = {spv::Capability::GroupNonUniformBallot};
|
||||
static const spv::Capability pygen_variable_caps_GroupNonUniformPartitionedNV[] = {spv::Capability::GroupNonUniformPartitionedNV};
|
||||
static const spv::Capability pygen_variable_caps_GroupNonUniformQuad[] = {spv::Capability::GroupNonUniformQuad};
|
||||
static const spv::Capability pygen_variable_caps_GroupNonUniformRotateKHR[] = {spv::Capability::GroupNonUniformRotateKHR};
|
||||
static const spv::Capability pygen_variable_caps_GroupNonUniformShuffle[] = {spv::Capability::GroupNonUniformShuffle};
|
||||
static const spv::Capability pygen_variable_caps_GroupNonUniformShuffleRelative[] = {spv::Capability::GroupNonUniformShuffleRelative};
|
||||
static const spv::Capability pygen_variable_caps_GroupNonUniformVote[] = {spv::Capability::GroupNonUniformVote};
|
||||
static const spv::Capability pygen_variable_caps_GroupUniformArithmeticKHR[] = {spv::Capability::GroupUniformArithmeticKHR};
|
||||
static const spv::Capability pygen_variable_caps_Groups[] = {spv::Capability::Groups};
|
||||
static const spv::Capability pygen_variable_caps_ImageFootprintNV[] = {spv::Capability::ImageFootprintNV};
|
||||
static const spv::Capability pygen_variable_caps_ImageQuery[] = {spv::Capability::ImageQuery};
|
||||
static const spv::Capability pygen_variable_caps_IntegerFunctions2INTEL[] = {spv::Capability::IntegerFunctions2INTEL};
|
||||
static const spv::Capability pygen_variable_caps_Kernel[] = {spv::Capability::Kernel};
|
||||
static const spv::Capability pygen_variable_caps_KernelImageQuery[] = {spv::Capability::Kernel, spv::Capability::ImageQuery};
|
||||
static const spv::Capability pygen_variable_caps_LiteralSampler[] = {spv::Capability::LiteralSampler};
|
||||
static const spv::Capability pygen_variable_caps_LongCompositesINTEL[] = {spv::Capability::LongCompositesINTEL};
|
||||
static const spv::Capability pygen_variable_caps_MaskedGatherScatterINTEL[] = {spv::Capability::MaskedGatherScatterINTEL};
|
||||
static const spv::Capability pygen_variable_caps_Matrix[] = {spv::Capability::Matrix};
|
||||
static const spv::Capability pygen_variable_caps_MemoryAccessAliasingINTEL[] = {spv::Capability::MemoryAccessAliasingINTEL};
|
||||
static const spv::Capability pygen_variable_caps_MeshShadingEXT[] = {spv::Capability::MeshShadingEXT};
|
||||
static const spv::Capability pygen_variable_caps_MeshShadingNV[] = {spv::Capability::MeshShadingNV};
|
||||
static const spv::Capability pygen_variable_caps_NamedBarrier[] = {spv::Capability::NamedBarrier};
|
||||
static const spv::Capability pygen_variable_caps_PipeStorage[] = {spv::Capability::PipeStorage};
|
||||
static const spv::Capability pygen_variable_caps_Pipes[] = {spv::Capability::Pipes};
|
||||
static const spv::Capability pygen_variable_caps_QuadControlKHR[] = {spv::Capability::QuadControlKHR};
|
||||
static const spv::Capability pygen_variable_caps_RawAccessChainsNV[] = {spv::Capability::RawAccessChainsNV};
|
||||
static const spv::Capability pygen_variable_caps_RayQueryKHR[] = {spv::Capability::RayQueryKHR};
|
||||
static const spv::Capability pygen_variable_caps_RayQueryPositionFetchKHR[] = {spv::Capability::RayQueryPositionFetchKHR};
|
||||
static const spv::Capability pygen_variable_caps_RayTracingClusterAccelerationStructureNV[] = {spv::Capability::RayTracingClusterAccelerationStructureNV};
|
||||
static const spv::Capability pygen_variable_caps_RayTracingKHR[] = {spv::Capability::RayTracingKHR};
|
||||
static const spv::Capability pygen_variable_caps_RayTracingKHRRayQueryKHR[] = {spv::Capability::RayTracingKHR, spv::Capability::RayQueryKHR};
|
||||
static const spv::Capability pygen_variable_caps_RayTracingLinearSweptSpheresGeometryNV[] = {spv::Capability::RayTracingLinearSweptSpheresGeometryNV};
|
||||
static const spv::Capability pygen_variable_caps_RayTracingMotionBlurNV[] = {spv::Capability::RayTracingMotionBlurNV};
|
||||
static const spv::Capability pygen_variable_caps_RayTracingNV[] = {spv::Capability::RayTracingNV};
|
||||
static const spv::Capability pygen_variable_caps_RayTracingNVRayTracingKHR[] = {spv::Capability::RayTracingNV, spv::Capability::RayTracingKHR};
|
||||
static const spv::Capability pygen_variable_caps_RayTracingNVRayTracingKHRRayQueryKHR[] = {spv::Capability::RayTracingNV, spv::Capability::RayTracingKHR, spv::Capability::RayQueryKHR};
|
||||
static const spv::Capability pygen_variable_caps_RayTracingSpheresGeometryNV[] = {spv::Capability::RayTracingSpheresGeometryNV};
|
||||
static const spv::Capability pygen_variable_caps_ReplicatedCompositesEXT[] = {spv::Capability::ReplicatedCompositesEXT};
|
||||
static const spv::Capability pygen_variable_caps_Shader[] = {spv::Capability::Shader};
|
||||
static const spv::Capability pygen_variable_caps_ShaderBitInstructions[] = {spv::Capability::Shader, spv::Capability::BitInstructions};
|
||||
static const spv::Capability pygen_variable_caps_ShaderClockKHR[] = {spv::Capability::ShaderClockKHR};
|
||||
static const spv::Capability pygen_variable_caps_ShaderEnqueueAMDX[] = {spv::Capability::ShaderEnqueueAMDX};
|
||||
static const spv::Capability pygen_variable_caps_ShaderInvocationReorderNV[] = {spv::Capability::ShaderInvocationReorderNV};
|
||||
static const spv::Capability pygen_variable_caps_ShaderInvocationReorderNVRayTracingMotionBlurNV[] = {spv::Capability::ShaderInvocationReorderNV, spv::Capability::RayTracingMotionBlurNV};
|
||||
static const spv::Capability pygen_variable_caps_SparseResidency[] = {spv::Capability::SparseResidency};
|
||||
static const spv::Capability pygen_variable_caps_SplitBarrierINTEL[] = {spv::Capability::SplitBarrierINTEL};
|
||||
static const spv::Capability pygen_variable_caps_Subgroup2DBlockIOINTEL[] = {spv::Capability::Subgroup2DBlockIOINTEL};
|
||||
static const spv::Capability pygen_variable_caps_Subgroup2DBlockTransformINTEL[] = {spv::Capability::Subgroup2DBlockTransformINTEL};
|
||||
static const spv::Capability pygen_variable_caps_Subgroup2DBlockTransposeINTEL[] = {spv::Capability::Subgroup2DBlockTransposeINTEL};
|
||||
static const spv::Capability pygen_variable_caps_SubgroupAvcMotionEstimationINTEL[] = {spv::Capability::SubgroupAvcMotionEstimationINTEL};
|
||||
static const spv::Capability pygen_variable_caps_SubgroupAvcMotionEstimationINTELSubgroupAvcMotionEstimationChromaINTEL[] = {spv::Capability::SubgroupAvcMotionEstimationINTEL, spv::Capability::SubgroupAvcMotionEstimationChromaINTEL};
|
||||
static const spv::Capability pygen_variable_caps_SubgroupAvcMotionEstimationINTELSubgroupAvcMotionEstimationIntraINTEL[] = {spv::Capability::SubgroupAvcMotionEstimationINTEL, spv::Capability::SubgroupAvcMotionEstimationIntraINTEL};
|
||||
static const spv::Capability pygen_variable_caps_SubgroupBallotKHR[] = {spv::Capability::SubgroupBallotKHR};
|
||||
static const spv::Capability pygen_variable_caps_SubgroupBufferBlockIOINTEL[] = {spv::Capability::SubgroupBufferBlockIOINTEL};
|
||||
static const spv::Capability pygen_variable_caps_SubgroupBufferPrefetchINTEL[] = {spv::Capability::SubgroupBufferPrefetchINTEL};
|
||||
static const spv::Capability pygen_variable_caps_SubgroupDispatch[] = {spv::Capability::SubgroupDispatch};
|
||||
static const spv::Capability pygen_variable_caps_SubgroupImageBlockIOINTEL[] = {spv::Capability::SubgroupImageBlockIOINTEL};
|
||||
static const spv::Capability pygen_variable_caps_SubgroupImageMediaBlockIOINTEL[] = {spv::Capability::SubgroupImageMediaBlockIOINTEL};
|
||||
static const spv::Capability pygen_variable_caps_SubgroupMatrixMultiplyAccumulateINTEL[] = {spv::Capability::SubgroupMatrixMultiplyAccumulateINTEL};
|
||||
static const spv::Capability pygen_variable_caps_SubgroupShuffleINTEL[] = {spv::Capability::SubgroupShuffleINTEL};
|
||||
static const spv::Capability pygen_variable_caps_SubgroupVoteKHR[] = {spv::Capability::SubgroupVoteKHR};
|
||||
static const spv::Capability pygen_variable_caps_TensorAddressingNV[] = {spv::Capability::TensorAddressingNV};
|
||||
static const spv::Capability pygen_variable_caps_TextureBlockMatch2QCOM[] = {spv::Capability::TextureBlockMatch2QCOM};
|
||||
static const spv::Capability pygen_variable_caps_TextureBlockMatchQCOM[] = {spv::Capability::TextureBlockMatchQCOM};
|
||||
static const spv::Capability pygen_variable_caps_TextureBoxFilterQCOM[] = {spv::Capability::TextureBoxFilterQCOM};
|
||||
static const spv::Capability pygen_variable_caps_TextureSampleWeightedQCOM[] = {spv::Capability::TextureSampleWeightedQCOM};
|
||||
static const spv::Capability pygen_variable_caps_TileImageColorReadAccessEXT[] = {spv::Capability::TileImageColorReadAccessEXT};
|
||||
static const spv::Capability pygen_variable_caps_TileImageDepthReadAccessEXT[] = {spv::Capability::TileImageDepthReadAccessEXT};
|
||||
static const spv::Capability pygen_variable_caps_TileImageStencilReadAccessEXT[] = {spv::Capability::TileImageStencilReadAccessEXT};
|
||||
static const spv::Capability pygen_variable_caps_USMStorageClassesINTEL[] = {spv::Capability::USMStorageClassesINTEL};
|
||||
static const spv::Capability pygen_variable_caps_UnstructuredLoopControlsINTEL[] = {spv::Capability::UnstructuredLoopControlsINTEL};
|
||||
static const spv::Capability pygen_variable_caps_UntypedPointersKHR[] = {spv::Capability::UntypedPointersKHR};
|
||||
static const spv::Capability pygen_variable_caps_VariableLengthArrayINTEL[] = {spv::Capability::VariableLengthArrayINTEL};
|
||||
static const spv::Capability pygen_variable_caps_VectorComputeINTEL[] = {spv::Capability::VectorComputeINTEL};
|
||||
|
||||
static const spvtools::Extension pygen_variable_exts_SPV_AMD_shader_ballot[] = {spvtools::Extension::kSPV_AMD_shader_ballot};
|
||||
static const spvtools::Extension pygen_variable_exts_SPV_AMD_shader_fragment_mask[] = {spvtools::Extension::kSPV_AMD_shader_fragment_mask};
|
||||
static const spvtools::Extension pygen_variable_exts_SPV_EXT_demote_to_helper_invocation[] = {spvtools::Extension::kSPV_EXT_demote_to_helper_invocation};
|
||||
static const spvtools::Extension pygen_variable_exts_SPV_EXT_fragment_shader_interlock[] = {spvtools::Extension::kSPV_EXT_fragment_shader_interlock};
|
||||
static const spvtools::Extension pygen_variable_exts_SPV_EXT_shader_atomic_float_add[] = {spvtools::Extension::kSPV_EXT_shader_atomic_float_add};
|
||||
static const spvtools::Extension pygen_variable_exts_SPV_GOOGLE_decorate_stringSPV_GOOGLE_hlsl_functionality1[] = {spvtools::Extension::kSPV_GOOGLE_decorate_string, spvtools::Extension::kSPV_GOOGLE_hlsl_functionality1};
|
||||
static const spvtools::Extension pygen_variable_exts_SPV_GOOGLE_hlsl_functionality1[] = {spvtools::Extension::kSPV_GOOGLE_hlsl_functionality1};
|
||||
static const spvtools::Extension pygen_variable_exts_SPV_INTEL_blocking_pipes[] = {spvtools::Extension::kSPV_INTEL_blocking_pipes};
|
||||
static const spvtools::Extension pygen_variable_exts_SPV_INTEL_fpga_reg[] = {spvtools::Extension::kSPV_INTEL_fpga_reg};
|
||||
static const spvtools::Extension pygen_variable_exts_SPV_INTEL_function_pointers[] = {spvtools::Extension::kSPV_INTEL_function_pointers};
|
||||
static const spvtools::Extension pygen_variable_exts_SPV_INTEL_memory_access_aliasing[] = {spvtools::Extension::kSPV_INTEL_memory_access_aliasing};
|
||||
static const spvtools::Extension pygen_variable_exts_SPV_INTEL_unstructured_loop_controls[] = {spvtools::Extension::kSPV_INTEL_unstructured_loop_controls};
|
||||
static const spvtools::Extension pygen_variable_exts_SPV_KHR_expect_assume[] = {spvtools::Extension::kSPV_KHR_expect_assume};
|
||||
static const spvtools::Extension pygen_variable_exts_SPV_KHR_integer_dot_product[] = {spvtools::Extension::kSPV_KHR_integer_dot_product};
|
||||
static const spvtools::Extension pygen_variable_exts_SPV_KHR_ray_query[] = {spvtools::Extension::kSPV_KHR_ray_query};
|
||||
static const spvtools::Extension pygen_variable_exts_SPV_KHR_ray_tracing[] = {spvtools::Extension::kSPV_KHR_ray_tracing};
|
||||
static const spvtools::Extension pygen_variable_exts_SPV_KHR_ray_tracingSPV_KHR_ray_query[] = {spvtools::Extension::kSPV_KHR_ray_tracing, spvtools::Extension::kSPV_KHR_ray_query};
|
||||
static const spvtools::Extension pygen_variable_exts_SPV_KHR_relaxed_extended_instruction[] = {spvtools::Extension::kSPV_KHR_relaxed_extended_instruction};
|
||||
static const spvtools::Extension pygen_variable_exts_SPV_KHR_shader_ballot[] = {spvtools::Extension::kSPV_KHR_shader_ballot};
|
||||
static const spvtools::Extension pygen_variable_exts_SPV_KHR_subgroup_vote[] = {spvtools::Extension::kSPV_KHR_subgroup_vote};
|
||||
static const spvtools::Extension pygen_variable_exts_SPV_KHR_terminate_invocation[] = {spvtools::Extension::kSPV_KHR_terminate_invocation};
|
||||
static const spvtools::Extension pygen_variable_exts_SPV_NV_cooperative_matrix[] = {spvtools::Extension::kSPV_NV_cooperative_matrix};
|
||||
static const spvtools::Extension pygen_variable_exts_SPV_NV_mesh_shader[] = {spvtools::Extension::kSPV_NV_mesh_shader};
|
||||
static const spvtools::Extension pygen_variable_exts_SPV_NV_ray_tracing[] = {spvtools::Extension::kSPV_NV_ray_tracing};
|
||||
static const spvtools::Extension pygen_variable_exts_SPV_NV_ray_tracingSPV_KHR_ray_tracing[] = {spvtools::Extension::kSPV_NV_ray_tracing, spvtools::Extension::kSPV_KHR_ray_tracing};
|
||||
static const spvtools::Extension pygen_variable_exts_SPV_NV_ray_tracingSPV_KHR_ray_tracingSPV_KHR_ray_query[] = {spvtools::Extension::kSPV_NV_ray_tracing, spvtools::Extension::kSPV_KHR_ray_tracing, spvtools::Extension::kSPV_KHR_ray_query};
|
||||
static const spvtools::Extension pygen_variable_exts_SPV_NV_ray_tracing_motion_blur[] = {spvtools::Extension::kSPV_NV_ray_tracing_motion_blur};
|
||||
static const spvtools::Extension pygen_variable_exts_SPV_NV_shader_image_footprint[] = {spvtools::Extension::kSPV_NV_shader_image_footprint};
|
||||
static const spvtools::Extension pygen_variable_exts_SPV_NV_shader_subgroup_partitioned[] = {spvtools::Extension::kSPV_NV_shader_subgroup_partitioned};
|
||||
|
||||
static const spv_opcode_desc_t kOpcodeTableEntries[] = {
|
||||
{"Nop", spv::Op::OpNop, 0, nullptr, 0, nullptr, 0, {}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"Undef", spv::Op::OpUndef, 0, nullptr, 0, nullptr, 2, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"SourceContinued", spv::Op::OpSourceContinued, 0, nullptr, 0, nullptr, 1, {SPV_OPERAND_TYPE_LITERAL_STRING}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"Source", spv::Op::OpSource, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_SOURCE_LANGUAGE, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_OPTIONAL_ID, SPV_OPERAND_TYPE_OPTIONAL_LITERAL_STRING}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"SourceExtension", spv::Op::OpSourceExtension, 0, nullptr, 0, nullptr, 1, {SPV_OPERAND_TYPE_LITERAL_STRING}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"Name", spv::Op::OpName, 0, nullptr, 0, nullptr, 2, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_STRING}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"MemberName", spv::Op::OpMemberName, 0, nullptr, 0, nullptr, 3, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_STRING}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"String", spv::Op::OpString, 0, nullptr, 0, nullptr, 2, {SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_LITERAL_STRING}, 1, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"Line", spv::Op::OpLine, 0, nullptr, 0, nullptr, 3, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"Extension", spv::Op::OpExtension, 0, nullptr, 0, nullptr, 1, {SPV_OPERAND_TYPE_LITERAL_STRING}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ExtInstImport", spv::Op::OpExtInstImport, 0, nullptr, 0, nullptr, 2, {SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_LITERAL_STRING}, 1, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ExtInst", spv::Op::OpExtInst, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_EXTENSION_INSTRUCTION_NUMBER}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"MemoryModel", spv::Op::OpMemoryModel, 0, nullptr, 0, nullptr, 2, {SPV_OPERAND_TYPE_ADDRESSING_MODEL, SPV_OPERAND_TYPE_MEMORY_MODEL}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"EntryPoint", spv::Op::OpEntryPoint, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_EXECUTION_MODEL, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_STRING, SPV_OPERAND_TYPE_VARIABLE_ID}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ExecutionMode", spv::Op::OpExecutionMode, 0, nullptr, 0, nullptr, 2, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_EXECUTION_MODE}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"Capability", spv::Op::OpCapability, 0, nullptr, 0, nullptr, 1, {SPV_OPERAND_TYPE_CAPABILITY}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"TypeVoid", spv::Op::OpTypeVoid, 0, nullptr, 0, nullptr, 1, {SPV_OPERAND_TYPE_RESULT_ID}, 1, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"TypeBool", spv::Op::OpTypeBool, 0, nullptr, 0, nullptr, 1, {SPV_OPERAND_TYPE_RESULT_ID}, 1, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"TypeInt", spv::Op::OpTypeInt, 0, nullptr, 0, nullptr, 3, {SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"TypeFloat", spv::Op::OpTypeFloat, 0, nullptr, 0, nullptr, 3, {SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_OPTIONAL_FPENCODING}, 1, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"TypeVector", spv::Op::OpTypeVector, 0, nullptr, 0, nullptr, 3, {SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"TypeMatrix", spv::Op::OpTypeMatrix, 0, nullptr, 1, pygen_variable_caps_Matrix, 3, {SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"TypeImage", spv::Op::OpTypeImage, 0, nullptr, 0, nullptr, 9, {SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_DIMENSIONALITY, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT, SPV_OPERAND_TYPE_OPTIONAL_ACCESS_QUALIFIER}, 1, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"TypeSampler", spv::Op::OpTypeSampler, 0, nullptr, 0, nullptr, 1, {SPV_OPERAND_TYPE_RESULT_ID}, 1, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"TypeSampledImage", spv::Op::OpTypeSampledImage, 0, nullptr, 0, nullptr, 2, {SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"TypeArray", spv::Op::OpTypeArray, 0, nullptr, 0, nullptr, 3, {SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"TypeRuntimeArray", spv::Op::OpTypeRuntimeArray, 0, nullptr, 1, pygen_variable_caps_Shader, 2, {SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"TypeStruct", spv::Op::OpTypeStruct, 0, nullptr, 0, nullptr, 2, {SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_VARIABLE_ID}, 1, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"TypeOpaque", spv::Op::OpTypeOpaque, 0, nullptr, 1, pygen_variable_caps_Kernel, 2, {SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_LITERAL_STRING}, 1, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"TypePointer", spv::Op::OpTypePointer, 0, nullptr, 0, nullptr, 3, {SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_STORAGE_CLASS, SPV_OPERAND_TYPE_ID}, 1, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"TypeFunction", spv::Op::OpTypeFunction, 0, nullptr, 0, nullptr, 3, {SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_ID}, 1, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"TypeEvent", spv::Op::OpTypeEvent, 0, nullptr, 1, pygen_variable_caps_Kernel, 1, {SPV_OPERAND_TYPE_RESULT_ID}, 1, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"TypeDeviceEvent", spv::Op::OpTypeDeviceEvent, 0, nullptr, 1, pygen_variable_caps_DeviceEnqueue, 1, {SPV_OPERAND_TYPE_RESULT_ID}, 1, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"TypeReserveId", spv::Op::OpTypeReserveId, 0, nullptr, 1, pygen_variable_caps_Pipes, 1, {SPV_OPERAND_TYPE_RESULT_ID}, 1, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"TypeQueue", spv::Op::OpTypeQueue, 0, nullptr, 1, pygen_variable_caps_DeviceEnqueue, 1, {SPV_OPERAND_TYPE_RESULT_ID}, 1, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"TypePipe", spv::Op::OpTypePipe, 0, nullptr, 1, pygen_variable_caps_Pipes, 2, {SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ACCESS_QUALIFIER}, 1, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"TypeForwardPointer", spv::Op::OpTypeForwardPointer, 0, nullptr, 2, pygen_variable_caps_AddressesPhysicalStorageBufferAddresses, 2, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_STORAGE_CLASS}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ConstantTrue", spv::Op::OpConstantTrue, 0, nullptr, 0, nullptr, 2, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ConstantFalse", spv::Op::OpConstantFalse, 0, nullptr, 0, nullptr, 2, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"Constant", spv::Op::OpConstant, 0, nullptr, 0, nullptr, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_TYPED_LITERAL_NUMBER}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ConstantComposite", spv::Op::OpConstantComposite, 0, nullptr, 0, nullptr, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_VARIABLE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ConstantSampler", spv::Op::OpConstantSampler, 0, nullptr, 1, pygen_variable_caps_LiteralSampler, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SAMPLER_ADDRESSING_MODE, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_SAMPLER_FILTER_MODE}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ConstantNull", spv::Op::OpConstantNull, 0, nullptr, 0, nullptr, 2, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"SpecConstantTrue", spv::Op::OpSpecConstantTrue, 0, nullptr, 0, nullptr, 2, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"SpecConstantFalse", spv::Op::OpSpecConstantFalse, 0, nullptr, 0, nullptr, 2, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"SpecConstant", spv::Op::OpSpecConstant, 0, nullptr, 0, nullptr, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_TYPED_LITERAL_NUMBER}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"SpecConstantComposite", spv::Op::OpSpecConstantComposite, 0, nullptr, 0, nullptr, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_VARIABLE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"SpecConstantOp", spv::Op::OpSpecConstantOp, 0, nullptr, 0, nullptr, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SPEC_CONSTANT_OP_NUMBER}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"Function", spv::Op::OpFunction, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_FUNCTION_CONTROL, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"FunctionParameter", spv::Op::OpFunctionParameter, 0, nullptr, 0, nullptr, 2, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"FunctionEnd", spv::Op::OpFunctionEnd, 0, nullptr, 0, nullptr, 0, {}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"FunctionCall", spv::Op::OpFunctionCall, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"Variable", spv::Op::OpVariable, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_STORAGE_CLASS, SPV_OPERAND_TYPE_OPTIONAL_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ImageTexelPointer", spv::Op::OpImageTexelPointer, 0, nullptr, 0, nullptr, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"Load", spv::Op::OpLoad, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_MEMORY_ACCESS}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"Store", spv::Op::OpStore, 0, nullptr, 0, nullptr, 3, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_MEMORY_ACCESS}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"CopyMemory", spv::Op::OpCopyMemory, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_MEMORY_ACCESS, SPV_OPERAND_TYPE_OPTIONAL_MEMORY_ACCESS}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"CopyMemorySized", spv::Op::OpCopyMemorySized, 0, nullptr, 2, pygen_variable_caps_AddressesUntypedPointersKHR, 5, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_MEMORY_ACCESS, SPV_OPERAND_TYPE_OPTIONAL_MEMORY_ACCESS}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"AccessChain", spv::Op::OpAccessChain, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"InBoundsAccessChain", spv::Op::OpInBoundsAccessChain, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"PtrAccessChain", spv::Op::OpPtrAccessChain, 0, nullptr, 4, pygen_variable_caps_AddressesVariablePointersVariablePointersStorageBufferPhysicalStorageBufferAddresses, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ArrayLength", spv::Op::OpArrayLength, 0, nullptr, 1, pygen_variable_caps_Shader, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"GenericPtrMemSemantics", spv::Op::OpGenericPtrMemSemantics, 0, nullptr, 1, pygen_variable_caps_Kernel, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"InBoundsPtrAccessChain", spv::Op::OpInBoundsPtrAccessChain, 0, nullptr, 1, pygen_variable_caps_Addresses, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"Decorate", spv::Op::OpDecorate, 0, nullptr, 0, nullptr, 2, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_DECORATION}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"MemberDecorate", spv::Op::OpMemberDecorate, 0, nullptr, 0, nullptr, 3, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_DECORATION}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"DecorationGroup", spv::Op::OpDecorationGroup, 0, nullptr, 0, nullptr, 1, {SPV_OPERAND_TYPE_RESULT_ID}, 1, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"GroupDecorate", spv::Op::OpGroupDecorate, 0, nullptr, 0, nullptr, 2, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_ID}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"GroupMemberDecorate", spv::Op::OpGroupMemberDecorate, 0, nullptr, 0, nullptr, 2, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_ID_LITERAL_INTEGER}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"VectorExtractDynamic", spv::Op::OpVectorExtractDynamic, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"VectorInsertDynamic", spv::Op::OpVectorInsertDynamic, 0, nullptr, 0, nullptr, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"VectorShuffle", spv::Op::OpVectorShuffle, 0, nullptr, 0, nullptr, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_LITERAL_INTEGER}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"CompositeConstruct", spv::Op::OpCompositeConstruct, 0, nullptr, 0, nullptr, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_VARIABLE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"CompositeExtract", spv::Op::OpCompositeExtract, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_LITERAL_INTEGER}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"CompositeInsert", spv::Op::OpCompositeInsert, 0, nullptr, 0, nullptr, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_LITERAL_INTEGER}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"CopyObject", spv::Op::OpCopyObject, 0, nullptr, 0, nullptr, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"Transpose", spv::Op::OpTranspose, 0, nullptr, 1, pygen_variable_caps_Matrix, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"SampledImage", spv::Op::OpSampledImage, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ImageSampleImplicitLod", spv::Op::OpImageSampleImplicitLod, 0, nullptr, 1, pygen_variable_caps_Shader, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_IMAGE}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ImageSampleExplicitLod", spv::Op::OpImageSampleExplicitLod, 0, nullptr, 0, nullptr, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_IMAGE}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ImageSampleDrefImplicitLod", spv::Op::OpImageSampleDrefImplicitLod, 0, nullptr, 1, pygen_variable_caps_Shader, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_IMAGE}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ImageSampleDrefExplicitLod", spv::Op::OpImageSampleDrefExplicitLod, 0, nullptr, 1, pygen_variable_caps_Shader, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_IMAGE}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ImageSampleProjImplicitLod", spv::Op::OpImageSampleProjImplicitLod, 0, nullptr, 1, pygen_variable_caps_Shader, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_IMAGE}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ImageSampleProjExplicitLod", spv::Op::OpImageSampleProjExplicitLod, 0, nullptr, 1, pygen_variable_caps_Shader, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_IMAGE}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ImageSampleProjDrefImplicitLod", spv::Op::OpImageSampleProjDrefImplicitLod, 0, nullptr, 1, pygen_variable_caps_Shader, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_IMAGE}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ImageSampleProjDrefExplicitLod", spv::Op::OpImageSampleProjDrefExplicitLod, 0, nullptr, 1, pygen_variable_caps_Shader, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_IMAGE}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ImageFetch", spv::Op::OpImageFetch, 0, nullptr, 0, nullptr, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_IMAGE}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ImageGather", spv::Op::OpImageGather, 0, nullptr, 1, pygen_variable_caps_Shader, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_IMAGE}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ImageDrefGather", spv::Op::OpImageDrefGather, 0, nullptr, 1, pygen_variable_caps_Shader, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_IMAGE}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ImageRead", spv::Op::OpImageRead, 0, nullptr, 0, nullptr, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_IMAGE}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ImageWrite", spv::Op::OpImageWrite, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_IMAGE}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"Image", spv::Op::OpImage, 0, nullptr, 0, nullptr, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ImageQueryFormat", spv::Op::OpImageQueryFormat, 0, nullptr, 1, pygen_variable_caps_Kernel, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ImageQueryOrder", spv::Op::OpImageQueryOrder, 0, nullptr, 1, pygen_variable_caps_Kernel, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ImageQuerySizeLod", spv::Op::OpImageQuerySizeLod, 0, nullptr, 2, pygen_variable_caps_KernelImageQuery, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ImageQuerySize", spv::Op::OpImageQuerySize, 0, nullptr, 2, pygen_variable_caps_KernelImageQuery, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ImageQueryLod", spv::Op::OpImageQueryLod, 0, nullptr, 1, pygen_variable_caps_ImageQuery, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ImageQueryLevels", spv::Op::OpImageQueryLevels, 0, nullptr, 2, pygen_variable_caps_KernelImageQuery, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ImageQuerySamples", spv::Op::OpImageQuerySamples, 0, nullptr, 2, pygen_variable_caps_KernelImageQuery, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ConvertFToU", spv::Op::OpConvertFToU, 0, nullptr, 0, nullptr, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ConvertFToS", spv::Op::OpConvertFToS, 0, nullptr, 0, nullptr, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ConvertSToF", spv::Op::OpConvertSToF, 0, nullptr, 0, nullptr, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ConvertUToF", spv::Op::OpConvertUToF, 0, nullptr, 0, nullptr, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"UConvert", spv::Op::OpUConvert, 0, nullptr, 0, nullptr, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"SConvert", spv::Op::OpSConvert, 0, nullptr, 0, nullptr, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"FConvert", spv::Op::OpFConvert, 0, nullptr, 0, nullptr, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"QuantizeToF16", spv::Op::OpQuantizeToF16, 0, nullptr, 0, nullptr, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ConvertPtrToU", spv::Op::OpConvertPtrToU, 0, nullptr, 2, pygen_variable_caps_AddressesPhysicalStorageBufferAddresses, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"SatConvertSToU", spv::Op::OpSatConvertSToU, 0, nullptr, 1, pygen_variable_caps_Kernel, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"SatConvertUToS", spv::Op::OpSatConvertUToS, 0, nullptr, 1, pygen_variable_caps_Kernel, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ConvertUToPtr", spv::Op::OpConvertUToPtr, 0, nullptr, 2, pygen_variable_caps_AddressesPhysicalStorageBufferAddresses, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"PtrCastToGeneric", spv::Op::OpPtrCastToGeneric, 0, nullptr, 1, pygen_variable_caps_Kernel, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"GenericCastToPtr", spv::Op::OpGenericCastToPtr, 0, nullptr, 1, pygen_variable_caps_Kernel, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"GenericCastToPtrExplicit", spv::Op::OpGenericCastToPtrExplicit, 0, nullptr, 1, pygen_variable_caps_Kernel, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_STORAGE_CLASS}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"Bitcast", spv::Op::OpBitcast, 0, nullptr, 0, nullptr, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"SNegate", spv::Op::OpSNegate, 0, nullptr, 0, nullptr, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"FNegate", spv::Op::OpFNegate, 0, nullptr, 0, nullptr, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"IAdd", spv::Op::OpIAdd, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"FAdd", spv::Op::OpFAdd, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ISub", spv::Op::OpISub, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"FSub", spv::Op::OpFSub, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"IMul", spv::Op::OpIMul, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"FMul", spv::Op::OpFMul, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"UDiv", spv::Op::OpUDiv, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"SDiv", spv::Op::OpSDiv, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"FDiv", spv::Op::OpFDiv, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"UMod", spv::Op::OpUMod, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"SRem", spv::Op::OpSRem, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"SMod", spv::Op::OpSMod, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"FRem", spv::Op::OpFRem, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"FMod", spv::Op::OpFMod, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"VectorTimesScalar", spv::Op::OpVectorTimesScalar, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"MatrixTimesScalar", spv::Op::OpMatrixTimesScalar, 0, nullptr, 1, pygen_variable_caps_Matrix, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"VectorTimesMatrix", spv::Op::OpVectorTimesMatrix, 0, nullptr, 1, pygen_variable_caps_Matrix, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"MatrixTimesVector", spv::Op::OpMatrixTimesVector, 0, nullptr, 1, pygen_variable_caps_Matrix, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"MatrixTimesMatrix", spv::Op::OpMatrixTimesMatrix, 0, nullptr, 1, pygen_variable_caps_Matrix, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"OuterProduct", spv::Op::OpOuterProduct, 0, nullptr, 1, pygen_variable_caps_Matrix, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"Dot", spv::Op::OpDot, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"IAddCarry", spv::Op::OpIAddCarry, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ISubBorrow", spv::Op::OpISubBorrow, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"UMulExtended", spv::Op::OpUMulExtended, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"SMulExtended", spv::Op::OpSMulExtended, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"Any", spv::Op::OpAny, 0, nullptr, 0, nullptr, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"All", spv::Op::OpAll, 0, nullptr, 0, nullptr, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"IsNan", spv::Op::OpIsNan, 0, nullptr, 0, nullptr, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"IsInf", spv::Op::OpIsInf, 0, nullptr, 0, nullptr, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"IsFinite", spv::Op::OpIsFinite, 0, nullptr, 1, pygen_variable_caps_Kernel, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"IsNormal", spv::Op::OpIsNormal, 0, nullptr, 1, pygen_variable_caps_Kernel, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"SignBitSet", spv::Op::OpSignBitSet, 0, nullptr, 1, pygen_variable_caps_Kernel, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"LessOrGreater", spv::Op::OpLessOrGreater, 0, nullptr, 1, pygen_variable_caps_Kernel, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), SPV_SPIRV_VERSION_WORD(1,5)},
|
||||
{"Ordered", spv::Op::OpOrdered, 0, nullptr, 1, pygen_variable_caps_Kernel, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"Unordered", spv::Op::OpUnordered, 0, nullptr, 1, pygen_variable_caps_Kernel, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"LogicalEqual", spv::Op::OpLogicalEqual, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"LogicalNotEqual", spv::Op::OpLogicalNotEqual, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"LogicalOr", spv::Op::OpLogicalOr, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"LogicalAnd", spv::Op::OpLogicalAnd, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"LogicalNot", spv::Op::OpLogicalNot, 0, nullptr, 0, nullptr, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"Select", spv::Op::OpSelect, 0, nullptr, 0, nullptr, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"IEqual", spv::Op::OpIEqual, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"INotEqual", spv::Op::OpINotEqual, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"UGreaterThan", spv::Op::OpUGreaterThan, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"SGreaterThan", spv::Op::OpSGreaterThan, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"UGreaterThanEqual", spv::Op::OpUGreaterThanEqual, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"SGreaterThanEqual", spv::Op::OpSGreaterThanEqual, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ULessThan", spv::Op::OpULessThan, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"SLessThan", spv::Op::OpSLessThan, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ULessThanEqual", spv::Op::OpULessThanEqual, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"SLessThanEqual", spv::Op::OpSLessThanEqual, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"FOrdEqual", spv::Op::OpFOrdEqual, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"FUnordEqual", spv::Op::OpFUnordEqual, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"FOrdNotEqual", spv::Op::OpFOrdNotEqual, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"FUnordNotEqual", spv::Op::OpFUnordNotEqual, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"FOrdLessThan", spv::Op::OpFOrdLessThan, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"FUnordLessThan", spv::Op::OpFUnordLessThan, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"FOrdGreaterThan", spv::Op::OpFOrdGreaterThan, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"FUnordGreaterThan", spv::Op::OpFUnordGreaterThan, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"FOrdLessThanEqual", spv::Op::OpFOrdLessThanEqual, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"FUnordLessThanEqual", spv::Op::OpFUnordLessThanEqual, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"FOrdGreaterThanEqual", spv::Op::OpFOrdGreaterThanEqual, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"FUnordGreaterThanEqual", spv::Op::OpFUnordGreaterThanEqual, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ShiftRightLogical", spv::Op::OpShiftRightLogical, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ShiftRightArithmetic", spv::Op::OpShiftRightArithmetic, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ShiftLeftLogical", spv::Op::OpShiftLeftLogical, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"BitwiseOr", spv::Op::OpBitwiseOr, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"BitwiseXor", spv::Op::OpBitwiseXor, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"BitwiseAnd", spv::Op::OpBitwiseAnd, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"Not", spv::Op::OpNot, 0, nullptr, 0, nullptr, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"BitFieldInsert", spv::Op::OpBitFieldInsert, 0, nullptr, 2, pygen_variable_caps_ShaderBitInstructions, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"BitFieldSExtract", spv::Op::OpBitFieldSExtract, 0, nullptr, 2, pygen_variable_caps_ShaderBitInstructions, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"BitFieldUExtract", spv::Op::OpBitFieldUExtract, 0, nullptr, 2, pygen_variable_caps_ShaderBitInstructions, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"BitReverse", spv::Op::OpBitReverse, 0, nullptr, 2, pygen_variable_caps_ShaderBitInstructions, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"BitCount", spv::Op::OpBitCount, 0, nullptr, 0, nullptr, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"DPdx", spv::Op::OpDPdx, 0, nullptr, 1, pygen_variable_caps_Shader, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"DPdy", spv::Op::OpDPdy, 0, nullptr, 1, pygen_variable_caps_Shader, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"Fwidth", spv::Op::OpFwidth, 0, nullptr, 1, pygen_variable_caps_Shader, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"DPdxFine", spv::Op::OpDPdxFine, 0, nullptr, 1, pygen_variable_caps_DerivativeControl, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"DPdyFine", spv::Op::OpDPdyFine, 0, nullptr, 1, pygen_variable_caps_DerivativeControl, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"FwidthFine", spv::Op::OpFwidthFine, 0, nullptr, 1, pygen_variable_caps_DerivativeControl, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"DPdxCoarse", spv::Op::OpDPdxCoarse, 0, nullptr, 1, pygen_variable_caps_DerivativeControl, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"DPdyCoarse", spv::Op::OpDPdyCoarse, 0, nullptr, 1, pygen_variable_caps_DerivativeControl, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"FwidthCoarse", spv::Op::OpFwidthCoarse, 0, nullptr, 1, pygen_variable_caps_DerivativeControl, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"EmitVertex", spv::Op::OpEmitVertex, 0, nullptr, 1, pygen_variable_caps_Geometry, 0, {}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"EndPrimitive", spv::Op::OpEndPrimitive, 0, nullptr, 1, pygen_variable_caps_Geometry, 0, {}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"EmitStreamVertex", spv::Op::OpEmitStreamVertex, 0, nullptr, 1, pygen_variable_caps_GeometryStreams, 1, {SPV_OPERAND_TYPE_ID}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"EndStreamPrimitive", spv::Op::OpEndStreamPrimitive, 0, nullptr, 1, pygen_variable_caps_GeometryStreams, 1, {SPV_OPERAND_TYPE_ID}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ControlBarrier", spv::Op::OpControlBarrier, 0, nullptr, 0, nullptr, 3, {SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"MemoryBarrier", spv::Op::OpMemoryBarrier, 0, nullptr, 0, nullptr, 2, {SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"AtomicLoad", spv::Op::OpAtomicLoad, 0, nullptr, 0, nullptr, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"AtomicStore", spv::Op::OpAtomicStore, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID, SPV_OPERAND_TYPE_ID}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"AtomicExchange", spv::Op::OpAtomicExchange, 0, nullptr, 0, nullptr, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"AtomicCompareExchange", spv::Op::OpAtomicCompareExchange, 0, nullptr, 0, nullptr, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID, SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"AtomicCompareExchangeWeak", spv::Op::OpAtomicCompareExchangeWeak, 0, nullptr, 1, pygen_variable_caps_Kernel, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID, SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), SPV_SPIRV_VERSION_WORD(1,3)},
|
||||
{"AtomicIIncrement", spv::Op::OpAtomicIIncrement, 0, nullptr, 0, nullptr, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"AtomicIDecrement", spv::Op::OpAtomicIDecrement, 0, nullptr, 0, nullptr, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"AtomicIAdd", spv::Op::OpAtomicIAdd, 0, nullptr, 0, nullptr, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"AtomicISub", spv::Op::OpAtomicISub, 0, nullptr, 0, nullptr, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"AtomicSMin", spv::Op::OpAtomicSMin, 0, nullptr, 0, nullptr, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"AtomicUMin", spv::Op::OpAtomicUMin, 0, nullptr, 0, nullptr, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"AtomicSMax", spv::Op::OpAtomicSMax, 0, nullptr, 0, nullptr, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"AtomicUMax", spv::Op::OpAtomicUMax, 0, nullptr, 0, nullptr, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"AtomicAnd", spv::Op::OpAtomicAnd, 0, nullptr, 0, nullptr, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"AtomicOr", spv::Op::OpAtomicOr, 0, nullptr, 0, nullptr, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"AtomicXor", spv::Op::OpAtomicXor, 0, nullptr, 0, nullptr, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"Phi", spv::Op::OpPhi, 0, nullptr, 0, nullptr, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_VARIABLE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"LoopMerge", spv::Op::OpLoopMerge, 0, nullptr, 0, nullptr, 3, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LOOP_CONTROL}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"SelectionMerge", spv::Op::OpSelectionMerge, 0, nullptr, 0, nullptr, 2, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_SELECTION_CONTROL}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"Label", spv::Op::OpLabel, 0, nullptr, 0, nullptr, 1, {SPV_OPERAND_TYPE_RESULT_ID}, 1, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"Branch", spv::Op::OpBranch, 0, nullptr, 0, nullptr, 1, {SPV_OPERAND_TYPE_ID}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"BranchConditional", spv::Op::OpBranchConditional, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_LITERAL_INTEGER}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"Switch", spv::Op::OpSwitch, 0, nullptr, 0, nullptr, 3, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_LITERAL_INTEGER_ID}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"Kill", spv::Op::OpKill, 0, nullptr, 1, pygen_variable_caps_Shader, 0, {}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"Return", spv::Op::OpReturn, 0, nullptr, 0, nullptr, 0, {}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ReturnValue", spv::Op::OpReturnValue, 0, nullptr, 0, nullptr, 1, {SPV_OPERAND_TYPE_ID}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"Unreachable", spv::Op::OpUnreachable, 0, nullptr, 0, nullptr, 0, {}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"LifetimeStart", spv::Op::OpLifetimeStart, 0, nullptr, 1, pygen_variable_caps_Kernel, 2, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"LifetimeStop", spv::Op::OpLifetimeStop, 0, nullptr, 1, pygen_variable_caps_Kernel, 2, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"GroupAsyncCopy", spv::Op::OpGroupAsyncCopy, 0, nullptr, 1, pygen_variable_caps_Kernel, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"GroupWaitEvents", spv::Op::OpGroupWaitEvents, 0, nullptr, 1, pygen_variable_caps_Kernel, 3, {SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"GroupAll", spv::Op::OpGroupAll, 0, nullptr, 1, pygen_variable_caps_Groups, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"GroupAny", spv::Op::OpGroupAny, 0, nullptr, 1, pygen_variable_caps_Groups, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"GroupBroadcast", spv::Op::OpGroupBroadcast, 0, nullptr, 1, pygen_variable_caps_Groups, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"GroupIAdd", spv::Op::OpGroupIAdd, 0, nullptr, 1, pygen_variable_caps_Groups, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"GroupFAdd", spv::Op::OpGroupFAdd, 0, nullptr, 1, pygen_variable_caps_Groups, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"GroupFMin", spv::Op::OpGroupFMin, 0, nullptr, 1, pygen_variable_caps_Groups, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"GroupUMin", spv::Op::OpGroupUMin, 0, nullptr, 1, pygen_variable_caps_Groups, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"GroupSMin", spv::Op::OpGroupSMin, 0, nullptr, 1, pygen_variable_caps_Groups, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"GroupFMax", spv::Op::OpGroupFMax, 0, nullptr, 1, pygen_variable_caps_Groups, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"GroupUMax", spv::Op::OpGroupUMax, 0, nullptr, 1, pygen_variable_caps_Groups, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"GroupSMax", spv::Op::OpGroupSMax, 0, nullptr, 1, pygen_variable_caps_Groups, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ReadPipe", spv::Op::OpReadPipe, 0, nullptr, 1, pygen_variable_caps_Pipes, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"WritePipe", spv::Op::OpWritePipe, 0, nullptr, 1, pygen_variable_caps_Pipes, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ReservedReadPipe", spv::Op::OpReservedReadPipe, 0, nullptr, 1, pygen_variable_caps_Pipes, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ReservedWritePipe", spv::Op::OpReservedWritePipe, 0, nullptr, 1, pygen_variable_caps_Pipes, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ReserveReadPipePackets", spv::Op::OpReserveReadPipePackets, 0, nullptr, 1, pygen_variable_caps_Pipes, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ReserveWritePipePackets", spv::Op::OpReserveWritePipePackets, 0, nullptr, 1, pygen_variable_caps_Pipes, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"CommitReadPipe", spv::Op::OpCommitReadPipe, 0, nullptr, 1, pygen_variable_caps_Pipes, 4, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"CommitWritePipe", spv::Op::OpCommitWritePipe, 0, nullptr, 1, pygen_variable_caps_Pipes, 4, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"IsValidReserveId", spv::Op::OpIsValidReserveId, 0, nullptr, 1, pygen_variable_caps_Pipes, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"GetNumPipePackets", spv::Op::OpGetNumPipePackets, 0, nullptr, 1, pygen_variable_caps_Pipes, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"GetMaxPipePackets", spv::Op::OpGetMaxPipePackets, 0, nullptr, 1, pygen_variable_caps_Pipes, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"GroupReserveReadPipePackets", spv::Op::OpGroupReserveReadPipePackets, 0, nullptr, 1, pygen_variable_caps_Pipes, 7, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"GroupReserveWritePipePackets", spv::Op::OpGroupReserveWritePipePackets, 0, nullptr, 1, pygen_variable_caps_Pipes, 7, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"GroupCommitReadPipe", spv::Op::OpGroupCommitReadPipe, 0, nullptr, 1, pygen_variable_caps_Pipes, 5, {SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"GroupCommitWritePipe", spv::Op::OpGroupCommitWritePipe, 0, nullptr, 1, pygen_variable_caps_Pipes, 5, {SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"EnqueueMarker", spv::Op::OpEnqueueMarker, 0, nullptr, 1, pygen_variable_caps_DeviceEnqueue, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"EnqueueKernel", spv::Op::OpEnqueueKernel, 0, nullptr, 1, pygen_variable_caps_DeviceEnqueue, 13, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"GetKernelNDrangeSubGroupCount", spv::Op::OpGetKernelNDrangeSubGroupCount, 0, nullptr, 1, pygen_variable_caps_DeviceEnqueue, 7, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"GetKernelNDrangeMaxSubGroupSize", spv::Op::OpGetKernelNDrangeMaxSubGroupSize, 0, nullptr, 1, pygen_variable_caps_DeviceEnqueue, 7, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"GetKernelWorkGroupSize", spv::Op::OpGetKernelWorkGroupSize, 0, nullptr, 1, pygen_variable_caps_DeviceEnqueue, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"GetKernelPreferredWorkGroupSizeMultiple", spv::Op::OpGetKernelPreferredWorkGroupSizeMultiple, 0, nullptr, 1, pygen_variable_caps_DeviceEnqueue, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"RetainEvent", spv::Op::OpRetainEvent, 0, nullptr, 1, pygen_variable_caps_DeviceEnqueue, 1, {SPV_OPERAND_TYPE_ID}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ReleaseEvent", spv::Op::OpReleaseEvent, 0, nullptr, 1, pygen_variable_caps_DeviceEnqueue, 1, {SPV_OPERAND_TYPE_ID}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"CreateUserEvent", spv::Op::OpCreateUserEvent, 0, nullptr, 1, pygen_variable_caps_DeviceEnqueue, 2, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"IsValidEvent", spv::Op::OpIsValidEvent, 0, nullptr, 1, pygen_variable_caps_DeviceEnqueue, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"SetUserEventStatus", spv::Op::OpSetUserEventStatus, 0, nullptr, 1, pygen_variable_caps_DeviceEnqueue, 2, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"CaptureEventProfilingInfo", spv::Op::OpCaptureEventProfilingInfo, 0, nullptr, 1, pygen_variable_caps_DeviceEnqueue, 3, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"GetDefaultQueue", spv::Op::OpGetDefaultQueue, 0, nullptr, 1, pygen_variable_caps_DeviceEnqueue, 2, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"BuildNDRange", spv::Op::OpBuildNDRange, 0, nullptr, 1, pygen_variable_caps_DeviceEnqueue, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ImageSparseSampleImplicitLod", spv::Op::OpImageSparseSampleImplicitLod, 0, nullptr, 1, pygen_variable_caps_SparseResidency, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_IMAGE}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ImageSparseSampleExplicitLod", spv::Op::OpImageSparseSampleExplicitLod, 0, nullptr, 1, pygen_variable_caps_SparseResidency, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_IMAGE}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ImageSparseSampleDrefImplicitLod", spv::Op::OpImageSparseSampleDrefImplicitLod, 0, nullptr, 1, pygen_variable_caps_SparseResidency, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_IMAGE}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ImageSparseSampleDrefExplicitLod", spv::Op::OpImageSparseSampleDrefExplicitLod, 0, nullptr, 1, pygen_variable_caps_SparseResidency, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_IMAGE}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ImageSparseSampleProjImplicitLod", spv::Op::OpImageSparseSampleProjImplicitLod, 0, nullptr, 1, pygen_variable_caps_SparseResidency, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_IMAGE}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ImageSparseSampleProjExplicitLod", spv::Op::OpImageSparseSampleProjExplicitLod, 0, nullptr, 1, pygen_variable_caps_SparseResidency, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_IMAGE}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ImageSparseSampleProjDrefImplicitLod", spv::Op::OpImageSparseSampleProjDrefImplicitLod, 0, nullptr, 1, pygen_variable_caps_SparseResidency, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_IMAGE}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ImageSparseSampleProjDrefExplicitLod", spv::Op::OpImageSparseSampleProjDrefExplicitLod, 0, nullptr, 1, pygen_variable_caps_SparseResidency, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_IMAGE}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ImageSparseFetch", spv::Op::OpImageSparseFetch, 0, nullptr, 1, pygen_variable_caps_SparseResidency, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_IMAGE}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ImageSparseGather", spv::Op::OpImageSparseGather, 0, nullptr, 1, pygen_variable_caps_SparseResidency, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_IMAGE}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ImageSparseDrefGather", spv::Op::OpImageSparseDrefGather, 0, nullptr, 1, pygen_variable_caps_SparseResidency, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_IMAGE}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ImageSparseTexelsResident", spv::Op::OpImageSparseTexelsResident, 0, nullptr, 1, pygen_variable_caps_SparseResidency, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"NoLine", spv::Op::OpNoLine, 0, nullptr, 0, nullptr, 0, {}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"AtomicFlagTestAndSet", spv::Op::OpAtomicFlagTestAndSet, 0, nullptr, 1, pygen_variable_caps_Kernel, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"AtomicFlagClear", spv::Op::OpAtomicFlagClear, 0, nullptr, 1, pygen_variable_caps_Kernel, 3, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"ImageSparseRead", spv::Op::OpImageSparseRead, 0, nullptr, 1, pygen_variable_caps_SparseResidency, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_IMAGE}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu},
|
||||
{"SizeOf", spv::Op::OpSizeOf, 0, nullptr, 1, pygen_variable_caps_Addresses, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,1), 0xffffffffu},
|
||||
{"TypePipeStorage", spv::Op::OpTypePipeStorage, 0, nullptr, 1, pygen_variable_caps_PipeStorage, 1, {SPV_OPERAND_TYPE_RESULT_ID}, 1, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,1), 0xffffffffu},
|
||||
{"ConstantPipeStorage", spv::Op::OpConstantPipeStorage, 0, nullptr, 1, pygen_variable_caps_PipeStorage, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,1), 0xffffffffu},
|
||||
{"CreatePipeFromPipeStorage", spv::Op::OpCreatePipeFromPipeStorage, 0, nullptr, 1, pygen_variable_caps_PipeStorage, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,1), 0xffffffffu},
|
||||
{"GetKernelLocalSizeForSubgroupCount", spv::Op::OpGetKernelLocalSizeForSubgroupCount, 0, nullptr, 1, pygen_variable_caps_SubgroupDispatch, 7, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,1), 0xffffffffu},
|
||||
{"GetKernelMaxNumSubgroups", spv::Op::OpGetKernelMaxNumSubgroups, 0, nullptr, 1, pygen_variable_caps_SubgroupDispatch, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,1), 0xffffffffu},
|
||||
{"TypeNamedBarrier", spv::Op::OpTypeNamedBarrier, 0, nullptr, 1, pygen_variable_caps_NamedBarrier, 1, {SPV_OPERAND_TYPE_RESULT_ID}, 1, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,1), 0xffffffffu},
|
||||
{"NamedBarrierInitialize", spv::Op::OpNamedBarrierInitialize, 0, nullptr, 1, pygen_variable_caps_NamedBarrier, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,1), 0xffffffffu},
|
||||
{"MemoryNamedBarrier", spv::Op::OpMemoryNamedBarrier, 0, nullptr, 1, pygen_variable_caps_NamedBarrier, 3, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,1), 0xffffffffu},
|
||||
{"ModuleProcessed", spv::Op::OpModuleProcessed, 0, nullptr, 0, nullptr, 1, {SPV_OPERAND_TYPE_LITERAL_STRING}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,1), 0xffffffffu},
|
||||
{"ExecutionModeId", spv::Op::OpExecutionModeId, 0, nullptr, 0, nullptr, 2, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_EXECUTION_MODE}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,2), 0xffffffffu},
|
||||
{"DecorateId", spv::Op::OpDecorateId, 0, nullptr, 0, nullptr, 2, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_DECORATION}, 0, 0, 1, pygen_variable_exts_SPV_GOOGLE_hlsl_functionality1, SPV_SPIRV_VERSION_WORD(1,2), 0xffffffffu},
|
||||
{"GroupNonUniformElect", spv::Op::OpGroupNonUniformElect, 0, nullptr, 1, pygen_variable_caps_GroupNonUniform, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu},
|
||||
{"GroupNonUniformAll", spv::Op::OpGroupNonUniformAll, 0, nullptr, 1, pygen_variable_caps_GroupNonUniformVote, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu},
|
||||
{"GroupNonUniformAny", spv::Op::OpGroupNonUniformAny, 0, nullptr, 1, pygen_variable_caps_GroupNonUniformVote, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu},
|
||||
{"GroupNonUniformAllEqual", spv::Op::OpGroupNonUniformAllEqual, 0, nullptr, 1, pygen_variable_caps_GroupNonUniformVote, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu},
|
||||
{"GroupNonUniformBroadcast", spv::Op::OpGroupNonUniformBroadcast, 0, nullptr, 1, pygen_variable_caps_GroupNonUniformBallot, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu},
|
||||
{"GroupNonUniformBroadcastFirst", spv::Op::OpGroupNonUniformBroadcastFirst, 0, nullptr, 1, pygen_variable_caps_GroupNonUniformBallot, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu},
|
||||
{"GroupNonUniformBallot", spv::Op::OpGroupNonUniformBallot, 0, nullptr, 1, pygen_variable_caps_GroupNonUniformBallot, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu},
|
||||
{"GroupNonUniformInverseBallot", spv::Op::OpGroupNonUniformInverseBallot, 0, nullptr, 1, pygen_variable_caps_GroupNonUniformBallot, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu},
|
||||
{"GroupNonUniformBallotBitExtract", spv::Op::OpGroupNonUniformBallotBitExtract, 0, nullptr, 1, pygen_variable_caps_GroupNonUniformBallot, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu},
|
||||
{"GroupNonUniformBallotBitCount", spv::Op::OpGroupNonUniformBallotBitCount, 0, nullptr, 1, pygen_variable_caps_GroupNonUniformBallot, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu},
|
||||
{"GroupNonUniformBallotFindLSB", spv::Op::OpGroupNonUniformBallotFindLSB, 0, nullptr, 1, pygen_variable_caps_GroupNonUniformBallot, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu},
|
||||
{"GroupNonUniformBallotFindMSB", spv::Op::OpGroupNonUniformBallotFindMSB, 0, nullptr, 1, pygen_variable_caps_GroupNonUniformBallot, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu},
|
||||
{"GroupNonUniformShuffle", spv::Op::OpGroupNonUniformShuffle, 0, nullptr, 1, pygen_variable_caps_GroupNonUniformShuffle, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu},
|
||||
{"GroupNonUniformShuffleXor", spv::Op::OpGroupNonUniformShuffleXor, 0, nullptr, 1, pygen_variable_caps_GroupNonUniformShuffle, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu},
|
||||
{"GroupNonUniformShuffleUp", spv::Op::OpGroupNonUniformShuffleUp, 0, nullptr, 1, pygen_variable_caps_GroupNonUniformShuffleRelative, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu},
|
||||
{"GroupNonUniformShuffleDown", spv::Op::OpGroupNonUniformShuffleDown, 0, nullptr, 1, pygen_variable_caps_GroupNonUniformShuffleRelative, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu},
|
||||
{"GroupNonUniformIAdd", spv::Op::OpGroupNonUniformIAdd, 0, nullptr, 3, pygen_variable_caps_GroupNonUniformArithmeticGroupNonUniformClusteredGroupNonUniformPartitionedNV, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu},
|
||||
{"GroupNonUniformFAdd", spv::Op::OpGroupNonUniformFAdd, 0, nullptr, 3, pygen_variable_caps_GroupNonUniformArithmeticGroupNonUniformClusteredGroupNonUniformPartitionedNV, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu},
|
||||
{"GroupNonUniformIMul", spv::Op::OpGroupNonUniformIMul, 0, nullptr, 3, pygen_variable_caps_GroupNonUniformArithmeticGroupNonUniformClusteredGroupNonUniformPartitionedNV, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu},
|
||||
{"GroupNonUniformFMul", spv::Op::OpGroupNonUniformFMul, 0, nullptr, 3, pygen_variable_caps_GroupNonUniformArithmeticGroupNonUniformClusteredGroupNonUniformPartitionedNV, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu},
|
||||
{"GroupNonUniformSMin", spv::Op::OpGroupNonUniformSMin, 0, nullptr, 3, pygen_variable_caps_GroupNonUniformArithmeticGroupNonUniformClusteredGroupNonUniformPartitionedNV, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu},
|
||||
{"GroupNonUniformUMin", spv::Op::OpGroupNonUniformUMin, 0, nullptr, 3, pygen_variable_caps_GroupNonUniformArithmeticGroupNonUniformClusteredGroupNonUniformPartitionedNV, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu},
|
||||
{"GroupNonUniformFMin", spv::Op::OpGroupNonUniformFMin, 0, nullptr, 3, pygen_variable_caps_GroupNonUniformArithmeticGroupNonUniformClusteredGroupNonUniformPartitionedNV, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu},
|
||||
{"GroupNonUniformSMax", spv::Op::OpGroupNonUniformSMax, 0, nullptr, 3, pygen_variable_caps_GroupNonUniformArithmeticGroupNonUniformClusteredGroupNonUniformPartitionedNV, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu},
|
||||
{"GroupNonUniformUMax", spv::Op::OpGroupNonUniformUMax, 0, nullptr, 3, pygen_variable_caps_GroupNonUniformArithmeticGroupNonUniformClusteredGroupNonUniformPartitionedNV, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu},
|
||||
{"GroupNonUniformFMax", spv::Op::OpGroupNonUniformFMax, 0, nullptr, 3, pygen_variable_caps_GroupNonUniformArithmeticGroupNonUniformClusteredGroupNonUniformPartitionedNV, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu},
|
||||
{"GroupNonUniformBitwiseAnd", spv::Op::OpGroupNonUniformBitwiseAnd, 0, nullptr, 3, pygen_variable_caps_GroupNonUniformArithmeticGroupNonUniformClusteredGroupNonUniformPartitionedNV, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu},
|
||||
{"GroupNonUniformBitwiseOr", spv::Op::OpGroupNonUniformBitwiseOr, 0, nullptr, 3, pygen_variable_caps_GroupNonUniformArithmeticGroupNonUniformClusteredGroupNonUniformPartitionedNV, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu},
|
||||
{"GroupNonUniformBitwiseXor", spv::Op::OpGroupNonUniformBitwiseXor, 0, nullptr, 3, pygen_variable_caps_GroupNonUniformArithmeticGroupNonUniformClusteredGroupNonUniformPartitionedNV, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu},
|
||||
{"GroupNonUniformLogicalAnd", spv::Op::OpGroupNonUniformLogicalAnd, 0, nullptr, 3, pygen_variable_caps_GroupNonUniformArithmeticGroupNonUniformClusteredGroupNonUniformPartitionedNV, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu},
|
||||
{"GroupNonUniformLogicalOr", spv::Op::OpGroupNonUniformLogicalOr, 0, nullptr, 3, pygen_variable_caps_GroupNonUniformArithmeticGroupNonUniformClusteredGroupNonUniformPartitionedNV, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu},
|
||||
{"GroupNonUniformLogicalXor", spv::Op::OpGroupNonUniformLogicalXor, 0, nullptr, 3, pygen_variable_caps_GroupNonUniformArithmeticGroupNonUniformClusteredGroupNonUniformPartitionedNV, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu},
|
||||
{"GroupNonUniformQuadBroadcast", spv::Op::OpGroupNonUniformQuadBroadcast, 0, nullptr, 1, pygen_variable_caps_GroupNonUniformQuad, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu},
|
||||
{"GroupNonUniformQuadSwap", spv::Op::OpGroupNonUniformQuadSwap, 0, nullptr, 1, pygen_variable_caps_GroupNonUniformQuad, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu},
|
||||
{"CopyLogical", spv::Op::OpCopyLogical, 0, nullptr, 0, nullptr, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,4), 0xffffffffu},
|
||||
{"PtrEqual", spv::Op::OpPtrEqual, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,4), 0xffffffffu},
|
||||
{"PtrNotEqual", spv::Op::OpPtrNotEqual, 0, nullptr, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,4), 0xffffffffu},
|
||||
{"PtrDiff", spv::Op::OpPtrDiff, 0, nullptr, 3, pygen_variable_caps_AddressesVariablePointersVariablePointersStorageBuffer, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,4), 0xffffffffu},
|
||||
{"ColorAttachmentReadEXT", spv::Op::OpColorAttachmentReadEXT, 0, nullptr, 1, pygen_variable_caps_TileImageColorReadAccessEXT, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"DepthAttachmentReadEXT", spv::Op::OpDepthAttachmentReadEXT, 0, nullptr, 1, pygen_variable_caps_TileImageDepthReadAccessEXT, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_OPTIONAL_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"StencilAttachmentReadEXT", spv::Op::OpStencilAttachmentReadEXT, 0, nullptr, 1, pygen_variable_caps_TileImageStencilReadAccessEXT, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_OPTIONAL_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"TerminateInvocation", spv::Op::OpTerminateInvocation, 0, nullptr, 1, pygen_variable_caps_Shader, 0, {}, 0, 0, 1, pygen_variable_exts_SPV_KHR_terminate_invocation, SPV_SPIRV_VERSION_WORD(1,6), 0xffffffffu},
|
||||
{"TypeUntypedPointerKHR", spv::Op::OpTypeUntypedPointerKHR, 0, nullptr, 1, pygen_variable_caps_UntypedPointersKHR, 2, {SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_STORAGE_CLASS}, 1, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"UntypedVariableKHR", spv::Op::OpUntypedVariableKHR, 0, nullptr, 1, pygen_variable_caps_UntypedPointersKHR, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_STORAGE_CLASS, SPV_OPERAND_TYPE_OPTIONAL_ID, SPV_OPERAND_TYPE_OPTIONAL_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"UntypedAccessChainKHR", spv::Op::OpUntypedAccessChainKHR, 0, nullptr, 1, pygen_variable_caps_UntypedPointersKHR, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"UntypedInBoundsAccessChainKHR", spv::Op::OpUntypedInBoundsAccessChainKHR, 0, nullptr, 1, pygen_variable_caps_UntypedPointersKHR, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupBallotKHR", spv::Op::OpSubgroupBallotKHR, 0, nullptr, 1, pygen_variable_caps_SubgroupBallotKHR, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_KHR_shader_ballot, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupFirstInvocationKHR", spv::Op::OpSubgroupFirstInvocationKHR, 0, nullptr, 1, pygen_variable_caps_SubgroupBallotKHR, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_KHR_shader_ballot, 0xffffffffu, 0xffffffffu},
|
||||
{"UntypedPtrAccessChainKHR", spv::Op::OpUntypedPtrAccessChainKHR, 0, nullptr, 1, pygen_variable_caps_UntypedPointersKHR, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"UntypedInBoundsPtrAccessChainKHR", spv::Op::OpUntypedInBoundsPtrAccessChainKHR, 0, nullptr, 1, pygen_variable_caps_UntypedPointersKHR, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"UntypedArrayLengthKHR", spv::Op::OpUntypedArrayLengthKHR, 0, nullptr, 1, pygen_variable_caps_UntypedPointersKHR, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"UntypedPrefetchKHR", spv::Op::OpUntypedPrefetchKHR, 0, nullptr, 1, pygen_variable_caps_UntypedPointersKHR, 5, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID, SPV_OPERAND_TYPE_OPTIONAL_ID, SPV_OPERAND_TYPE_OPTIONAL_ID}, 0, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAllKHR", spv::Op::OpSubgroupAllKHR, 0, nullptr, 1, pygen_variable_caps_SubgroupVoteKHR, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_KHR_subgroup_vote, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAnyKHR", spv::Op::OpSubgroupAnyKHR, 0, nullptr, 1, pygen_variable_caps_SubgroupVoteKHR, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_KHR_subgroup_vote, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAllEqualKHR", spv::Op::OpSubgroupAllEqualKHR, 0, nullptr, 1, pygen_variable_caps_SubgroupVoteKHR, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_KHR_subgroup_vote, 0xffffffffu, 0xffffffffu},
|
||||
{"GroupNonUniformRotateKHR", spv::Op::OpGroupNonUniformRotateKHR, 0, nullptr, 1, pygen_variable_caps_GroupNonUniformRotateKHR, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupReadInvocationKHR", spv::Op::OpSubgroupReadInvocationKHR, 0, nullptr, 1, pygen_variable_caps_SubgroupBallotKHR, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_KHR_shader_ballot, 0xffffffffu, 0xffffffffu},
|
||||
{"ExtInstWithForwardRefsKHR", spv::Op::OpExtInstWithForwardRefsKHR, 0, nullptr, 0, nullptr, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_EXTENSION_INSTRUCTION_NUMBER, SPV_OPERAND_TYPE_VARIABLE_ID}, 1, 1, 1, pygen_variable_exts_SPV_KHR_relaxed_extended_instruction, 0xffffffffu, 0xffffffffu},
|
||||
{"TraceRayKHR", spv::Op::OpTraceRayKHR, 0, nullptr, 1, pygen_variable_caps_RayTracingKHR, 11, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 0, 0, 1, pygen_variable_exts_SPV_KHR_ray_tracing, 0xffffffffu, 0xffffffffu},
|
||||
{"ExecuteCallableKHR", spv::Op::OpExecuteCallableKHR, 0, nullptr, 1, pygen_variable_caps_RayTracingKHR, 2, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 0, 0, 1, pygen_variable_exts_SPV_KHR_ray_tracing, 0xffffffffu, 0xffffffffu},
|
||||
{"ConvertUToAccelerationStructureKHR", spv::Op::OpConvertUToAccelerationStructureKHR, 0, nullptr, 2, pygen_variable_caps_RayTracingKHRRayQueryKHR, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 2, pygen_variable_exts_SPV_KHR_ray_tracingSPV_KHR_ray_query, 0xffffffffu, 0xffffffffu},
|
||||
{"IgnoreIntersectionKHR", spv::Op::OpIgnoreIntersectionKHR, 0, nullptr, 1, pygen_variable_caps_RayTracingKHR, 0, {}, 0, 0, 1, pygen_variable_exts_SPV_KHR_ray_tracing, 0xffffffffu, 0xffffffffu},
|
||||
{"TerminateRayKHR", spv::Op::OpTerminateRayKHR, 0, nullptr, 1, pygen_variable_caps_RayTracingKHR, 0, {}, 0, 0, 1, pygen_variable_exts_SPV_KHR_ray_tracing, 0xffffffffu, 0xffffffffu},
|
||||
{"SDot", spv::Op::OpSDot, 1, pygen_variable_aliases_OpSDotKHR, 1, pygen_variable_caps_DotProduct, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_PACKED_VECTOR_FORMAT}, 1, 1, 1, pygen_variable_exts_SPV_KHR_integer_dot_product, SPV_SPIRV_VERSION_WORD(1,6), 0xffffffffu},
|
||||
{"UDot", spv::Op::OpUDot, 1, pygen_variable_aliases_OpUDotKHR, 1, pygen_variable_caps_DotProduct, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_PACKED_VECTOR_FORMAT}, 1, 1, 1, pygen_variable_exts_SPV_KHR_integer_dot_product, SPV_SPIRV_VERSION_WORD(1,6), 0xffffffffu},
|
||||
{"SUDot", spv::Op::OpSUDot, 1, pygen_variable_aliases_OpSUDotKHR, 1, pygen_variable_caps_DotProduct, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_PACKED_VECTOR_FORMAT}, 1, 1, 1, pygen_variable_exts_SPV_KHR_integer_dot_product, SPV_SPIRV_VERSION_WORD(1,6), 0xffffffffu},
|
||||
{"SDotAccSat", spv::Op::OpSDotAccSat, 1, pygen_variable_aliases_OpSDotAccSatKHR, 1, pygen_variable_caps_DotProduct, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_PACKED_VECTOR_FORMAT}, 1, 1, 1, pygen_variable_exts_SPV_KHR_integer_dot_product, SPV_SPIRV_VERSION_WORD(1,6), 0xffffffffu},
|
||||
{"UDotAccSat", spv::Op::OpUDotAccSat, 1, pygen_variable_aliases_OpUDotAccSatKHR, 1, pygen_variable_caps_DotProduct, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_PACKED_VECTOR_FORMAT}, 1, 1, 1, pygen_variable_exts_SPV_KHR_integer_dot_product, SPV_SPIRV_VERSION_WORD(1,6), 0xffffffffu},
|
||||
{"SUDotAccSat", spv::Op::OpSUDotAccSat, 1, pygen_variable_aliases_OpSUDotAccSatKHR, 1, pygen_variable_caps_DotProduct, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_PACKED_VECTOR_FORMAT}, 1, 1, 1, pygen_variable_exts_SPV_KHR_integer_dot_product, SPV_SPIRV_VERSION_WORD(1,6), 0xffffffffu},
|
||||
{"TypeCooperativeMatrixKHR", spv::Op::OpTypeCooperativeMatrixKHR, 0, nullptr, 1, pygen_variable_caps_CooperativeMatrixKHR, 6, {SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"CooperativeMatrixLoadKHR", spv::Op::OpCooperativeMatrixLoadKHR, 0, nullptr, 1, pygen_variable_caps_CooperativeMatrixKHR, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID, SPV_OPERAND_TYPE_OPTIONAL_MEMORY_ACCESS}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"CooperativeMatrixStoreKHR", spv::Op::OpCooperativeMatrixStoreKHR, 0, nullptr, 1, pygen_variable_caps_CooperativeMatrixKHR, 5, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID, SPV_OPERAND_TYPE_OPTIONAL_MEMORY_ACCESS}, 0, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"CooperativeMatrixMulAddKHR", spv::Op::OpCooperativeMatrixMulAddKHR, 0, nullptr, 1, pygen_variable_caps_CooperativeMatrixKHR, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_COOPERATIVE_MATRIX_OPERANDS}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"CooperativeMatrixLengthKHR", spv::Op::OpCooperativeMatrixLengthKHR, 0, nullptr, 1, pygen_variable_caps_CooperativeMatrixKHR, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ConstantCompositeReplicateEXT", spv::Op::OpConstantCompositeReplicateEXT, 0, nullptr, 1, pygen_variable_caps_ReplicatedCompositesEXT, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SpecConstantCompositeReplicateEXT", spv::Op::OpSpecConstantCompositeReplicateEXT, 0, nullptr, 1, pygen_variable_caps_ReplicatedCompositesEXT, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"CompositeConstructReplicateEXT", spv::Op::OpCompositeConstructReplicateEXT, 0, nullptr, 1, pygen_variable_caps_ReplicatedCompositesEXT, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"TypeRayQueryKHR", spv::Op::OpTypeRayQueryKHR, 0, nullptr, 1, pygen_variable_caps_RayQueryKHR, 1, {SPV_OPERAND_TYPE_RESULT_ID}, 1, 0, 1, pygen_variable_exts_SPV_KHR_ray_query, 0xffffffffu, 0xffffffffu},
|
||||
{"RayQueryInitializeKHR", spv::Op::OpRayQueryInitializeKHR, 0, nullptr, 1, pygen_variable_caps_RayQueryKHR, 8, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 0, 0, 1, pygen_variable_exts_SPV_KHR_ray_query, 0xffffffffu, 0xffffffffu},
|
||||
{"RayQueryTerminateKHR", spv::Op::OpRayQueryTerminateKHR, 0, nullptr, 1, pygen_variable_caps_RayQueryKHR, 1, {SPV_OPERAND_TYPE_ID}, 0, 0, 1, pygen_variable_exts_SPV_KHR_ray_query, 0xffffffffu, 0xffffffffu},
|
||||
{"RayQueryGenerateIntersectionKHR", spv::Op::OpRayQueryGenerateIntersectionKHR, 0, nullptr, 1, pygen_variable_caps_RayQueryKHR, 2, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 0, 0, 1, pygen_variable_exts_SPV_KHR_ray_query, 0xffffffffu, 0xffffffffu},
|
||||
{"RayQueryConfirmIntersectionKHR", spv::Op::OpRayQueryConfirmIntersectionKHR, 0, nullptr, 1, pygen_variable_caps_RayQueryKHR, 1, {SPV_OPERAND_TYPE_ID}, 0, 0, 1, pygen_variable_exts_SPV_KHR_ray_query, 0xffffffffu, 0xffffffffu},
|
||||
{"RayQueryProceedKHR", spv::Op::OpRayQueryProceedKHR, 0, nullptr, 1, pygen_variable_caps_RayQueryKHR, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_KHR_ray_query, 0xffffffffu, 0xffffffffu},
|
||||
{"RayQueryGetIntersectionTypeKHR", spv::Op::OpRayQueryGetIntersectionTypeKHR, 0, nullptr, 1, pygen_variable_caps_RayQueryKHR, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_KHR_ray_query, 0xffffffffu, 0xffffffffu},
|
||||
{"ImageSampleWeightedQCOM", spv::Op::OpImageSampleWeightedQCOM, 0, nullptr, 1, pygen_variable_caps_TextureSampleWeightedQCOM, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ImageBoxFilterQCOM", spv::Op::OpImageBoxFilterQCOM, 0, nullptr, 1, pygen_variable_caps_TextureBoxFilterQCOM, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ImageBlockMatchSSDQCOM", spv::Op::OpImageBlockMatchSSDQCOM, 0, nullptr, 1, pygen_variable_caps_TextureBlockMatchQCOM, 7, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ImageBlockMatchSADQCOM", spv::Op::OpImageBlockMatchSADQCOM, 0, nullptr, 1, pygen_variable_caps_TextureBlockMatchQCOM, 7, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ImageBlockMatchWindowSSDQCOM", spv::Op::OpImageBlockMatchWindowSSDQCOM, 0, nullptr, 1, pygen_variable_caps_TextureBlockMatch2QCOM, 7, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ImageBlockMatchWindowSADQCOM", spv::Op::OpImageBlockMatchWindowSADQCOM, 0, nullptr, 1, pygen_variable_caps_TextureBlockMatch2QCOM, 7, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ImageBlockMatchGatherSSDQCOM", spv::Op::OpImageBlockMatchGatherSSDQCOM, 0, nullptr, 1, pygen_variable_caps_TextureBlockMatch2QCOM, 7, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ImageBlockMatchGatherSADQCOM", spv::Op::OpImageBlockMatchGatherSADQCOM, 0, nullptr, 1, pygen_variable_caps_TextureBlockMatch2QCOM, 7, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"GroupIAddNonUniformAMD", spv::Op::OpGroupIAddNonUniformAMD, 0, nullptr, 1, pygen_variable_caps_Groups, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_AMD_shader_ballot, 0xffffffffu, 0xffffffffu},
|
||||
{"GroupFAddNonUniformAMD", spv::Op::OpGroupFAddNonUniformAMD, 0, nullptr, 1, pygen_variable_caps_Groups, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_AMD_shader_ballot, 0xffffffffu, 0xffffffffu},
|
||||
{"GroupFMinNonUniformAMD", spv::Op::OpGroupFMinNonUniformAMD, 0, nullptr, 1, pygen_variable_caps_Groups, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_AMD_shader_ballot, 0xffffffffu, 0xffffffffu},
|
||||
{"GroupUMinNonUniformAMD", spv::Op::OpGroupUMinNonUniformAMD, 0, nullptr, 1, pygen_variable_caps_Groups, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_AMD_shader_ballot, 0xffffffffu, 0xffffffffu},
|
||||
{"GroupSMinNonUniformAMD", spv::Op::OpGroupSMinNonUniformAMD, 0, nullptr, 1, pygen_variable_caps_Groups, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_AMD_shader_ballot, 0xffffffffu, 0xffffffffu},
|
||||
{"GroupFMaxNonUniformAMD", spv::Op::OpGroupFMaxNonUniformAMD, 0, nullptr, 1, pygen_variable_caps_Groups, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_AMD_shader_ballot, 0xffffffffu, 0xffffffffu},
|
||||
{"GroupUMaxNonUniformAMD", spv::Op::OpGroupUMaxNonUniformAMD, 0, nullptr, 1, pygen_variable_caps_Groups, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_AMD_shader_ballot, 0xffffffffu, 0xffffffffu},
|
||||
{"GroupSMaxNonUniformAMD", spv::Op::OpGroupSMaxNonUniformAMD, 0, nullptr, 1, pygen_variable_caps_Groups, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_AMD_shader_ballot, 0xffffffffu, 0xffffffffu},
|
||||
{"FragmentMaskFetchAMD", spv::Op::OpFragmentMaskFetchAMD, 0, nullptr, 1, pygen_variable_caps_FragmentMaskAMD, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_AMD_shader_fragment_mask, 0xffffffffu, 0xffffffffu},
|
||||
{"FragmentFetchAMD", spv::Op::OpFragmentFetchAMD, 0, nullptr, 1, pygen_variable_caps_FragmentMaskAMD, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_AMD_shader_fragment_mask, 0xffffffffu, 0xffffffffu},
|
||||
{"ReadClockKHR", spv::Op::OpReadClockKHR, 0, nullptr, 1, pygen_variable_caps_ShaderClockKHR, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"AllocateNodePayloadsAMDX", spv::Op::OpAllocateNodePayloadsAMDX, 0, nullptr, 1, pygen_variable_caps_ShaderEnqueueAMDX, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"EnqueueNodePayloadsAMDX", spv::Op::OpEnqueueNodePayloadsAMDX, 0, nullptr, 1, pygen_variable_caps_ShaderEnqueueAMDX, 1, {SPV_OPERAND_TYPE_ID}, 0, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"TypeNodePayloadArrayAMDX", spv::Op::OpTypeNodePayloadArrayAMDX, 0, nullptr, 1, pygen_variable_caps_ShaderEnqueueAMDX, 2, {SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"FinishWritingNodePayloadAMDX", spv::Op::OpFinishWritingNodePayloadAMDX, 0, nullptr, 1, pygen_variable_caps_ShaderEnqueueAMDX, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"NodePayloadArrayLengthAMDX", spv::Op::OpNodePayloadArrayLengthAMDX, 0, nullptr, 1, pygen_variable_caps_ShaderEnqueueAMDX, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"IsNodePayloadValidAMDX", spv::Op::OpIsNodePayloadValidAMDX, 0, nullptr, 1, pygen_variable_caps_ShaderEnqueueAMDX, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ConstantStringAMDX", spv::Op::OpConstantStringAMDX, 0, nullptr, 1, pygen_variable_caps_ShaderEnqueueAMDX, 2, {SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_LITERAL_STRING}, 1, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SpecConstantStringAMDX", spv::Op::OpSpecConstantStringAMDX, 0, nullptr, 1, pygen_variable_caps_ShaderEnqueueAMDX, 2, {SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_LITERAL_STRING}, 1, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"GroupNonUniformQuadAllKHR", spv::Op::OpGroupNonUniformQuadAllKHR, 0, nullptr, 1, pygen_variable_caps_QuadControlKHR, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"GroupNonUniformQuadAnyKHR", spv::Op::OpGroupNonUniformQuadAnyKHR, 0, nullptr, 1, pygen_variable_caps_QuadControlKHR, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"HitObjectRecordHitMotionNV", spv::Op::OpHitObjectRecordHitMotionNV, 0, nullptr, 2, pygen_variable_caps_ShaderInvocationReorderNVRayTracingMotionBlurNV, 14, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 0, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"HitObjectRecordHitWithIndexMotionNV", spv::Op::OpHitObjectRecordHitWithIndexMotionNV, 0, nullptr, 2, pygen_variable_caps_ShaderInvocationReorderNVRayTracingMotionBlurNV, 13, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 0, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"HitObjectRecordMissMotionNV", spv::Op::OpHitObjectRecordMissMotionNV, 0, nullptr, 2, pygen_variable_caps_ShaderInvocationReorderNVRayTracingMotionBlurNV, 7, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 0, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"HitObjectGetWorldToObjectNV", spv::Op::OpHitObjectGetWorldToObjectNV, 0, nullptr, 1, pygen_variable_caps_ShaderInvocationReorderNV, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"HitObjectGetObjectToWorldNV", spv::Op::OpHitObjectGetObjectToWorldNV, 0, nullptr, 1, pygen_variable_caps_ShaderInvocationReorderNV, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"HitObjectGetObjectRayDirectionNV", spv::Op::OpHitObjectGetObjectRayDirectionNV, 0, nullptr, 1, pygen_variable_caps_ShaderInvocationReorderNV, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"HitObjectGetObjectRayOriginNV", spv::Op::OpHitObjectGetObjectRayOriginNV, 0, nullptr, 1, pygen_variable_caps_ShaderInvocationReorderNV, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"HitObjectTraceRayMotionNV", spv::Op::OpHitObjectTraceRayMotionNV, 0, nullptr, 2, pygen_variable_caps_ShaderInvocationReorderNVRayTracingMotionBlurNV, 13, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 0, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"HitObjectGetShaderRecordBufferHandleNV", spv::Op::OpHitObjectGetShaderRecordBufferHandleNV, 0, nullptr, 1, pygen_variable_caps_ShaderInvocationReorderNV, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"HitObjectGetShaderBindingTableRecordIndexNV", spv::Op::OpHitObjectGetShaderBindingTableRecordIndexNV, 0, nullptr, 1, pygen_variable_caps_ShaderInvocationReorderNV, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"HitObjectRecordEmptyNV", spv::Op::OpHitObjectRecordEmptyNV, 0, nullptr, 1, pygen_variable_caps_ShaderInvocationReorderNV, 1, {SPV_OPERAND_TYPE_ID}, 0, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"HitObjectTraceRayNV", spv::Op::OpHitObjectTraceRayNV, 0, nullptr, 1, pygen_variable_caps_ShaderInvocationReorderNV, 12, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 0, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"HitObjectRecordHitNV", spv::Op::OpHitObjectRecordHitNV, 0, nullptr, 1, pygen_variable_caps_ShaderInvocationReorderNV, 13, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 0, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"HitObjectRecordHitWithIndexNV", spv::Op::OpHitObjectRecordHitWithIndexNV, 0, nullptr, 1, pygen_variable_caps_ShaderInvocationReorderNV, 12, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 0, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"HitObjectRecordMissNV", spv::Op::OpHitObjectRecordMissNV, 0, nullptr, 1, pygen_variable_caps_ShaderInvocationReorderNV, 6, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 0, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"HitObjectExecuteShaderNV", spv::Op::OpHitObjectExecuteShaderNV, 0, nullptr, 1, pygen_variable_caps_ShaderInvocationReorderNV, 2, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 0, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"HitObjectGetCurrentTimeNV", spv::Op::OpHitObjectGetCurrentTimeNV, 0, nullptr, 1, pygen_variable_caps_ShaderInvocationReorderNV, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"HitObjectGetAttributesNV", spv::Op::OpHitObjectGetAttributesNV, 0, nullptr, 1, pygen_variable_caps_ShaderInvocationReorderNV, 2, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 0, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"HitObjectGetHitKindNV", spv::Op::OpHitObjectGetHitKindNV, 0, nullptr, 1, pygen_variable_caps_ShaderInvocationReorderNV, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"HitObjectGetPrimitiveIndexNV", spv::Op::OpHitObjectGetPrimitiveIndexNV, 0, nullptr, 1, pygen_variable_caps_ShaderInvocationReorderNV, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"HitObjectGetGeometryIndexNV", spv::Op::OpHitObjectGetGeometryIndexNV, 0, nullptr, 1, pygen_variable_caps_ShaderInvocationReorderNV, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"HitObjectGetInstanceIdNV", spv::Op::OpHitObjectGetInstanceIdNV, 0, nullptr, 1, pygen_variable_caps_ShaderInvocationReorderNV, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"HitObjectGetInstanceCustomIndexNV", spv::Op::OpHitObjectGetInstanceCustomIndexNV, 0, nullptr, 1, pygen_variable_caps_ShaderInvocationReorderNV, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"HitObjectGetWorldRayDirectionNV", spv::Op::OpHitObjectGetWorldRayDirectionNV, 0, nullptr, 1, pygen_variable_caps_ShaderInvocationReorderNV, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"HitObjectGetWorldRayOriginNV", spv::Op::OpHitObjectGetWorldRayOriginNV, 0, nullptr, 1, pygen_variable_caps_ShaderInvocationReorderNV, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"HitObjectGetRayTMaxNV", spv::Op::OpHitObjectGetRayTMaxNV, 0, nullptr, 1, pygen_variable_caps_ShaderInvocationReorderNV, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"HitObjectGetRayTMinNV", spv::Op::OpHitObjectGetRayTMinNV, 0, nullptr, 1, pygen_variable_caps_ShaderInvocationReorderNV, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"HitObjectIsEmptyNV", spv::Op::OpHitObjectIsEmptyNV, 0, nullptr, 1, pygen_variable_caps_ShaderInvocationReorderNV, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"HitObjectIsHitNV", spv::Op::OpHitObjectIsHitNV, 0, nullptr, 1, pygen_variable_caps_ShaderInvocationReorderNV, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"HitObjectIsMissNV", spv::Op::OpHitObjectIsMissNV, 0, nullptr, 1, pygen_variable_caps_ShaderInvocationReorderNV, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ReorderThreadWithHitObjectNV", spv::Op::OpReorderThreadWithHitObjectNV, 0, nullptr, 1, pygen_variable_caps_ShaderInvocationReorderNV, 3, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID, SPV_OPERAND_TYPE_OPTIONAL_ID}, 0, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ReorderThreadWithHintNV", spv::Op::OpReorderThreadWithHintNV, 0, nullptr, 1, pygen_variable_caps_ShaderInvocationReorderNV, 2, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 0, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"TypeHitObjectNV", spv::Op::OpTypeHitObjectNV, 0, nullptr, 1, pygen_variable_caps_ShaderInvocationReorderNV, 1, {SPV_OPERAND_TYPE_RESULT_ID}, 1, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ImageSampleFootprintNV", spv::Op::OpImageSampleFootprintNV, 0, nullptr, 1, pygen_variable_caps_ImageFootprintNV, 7, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_IMAGE}, 1, 1, 1, pygen_variable_exts_SPV_NV_shader_image_footprint, 0xffffffffu, 0xffffffffu},
|
||||
{"TypeCooperativeVectorNV", spv::Op::OpTypeCooperativeVectorNV, 0, nullptr, 1, pygen_variable_caps_CooperativeVectorNV, 3, {SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"CooperativeVectorMatrixMulNV", spv::Op::OpCooperativeVectorMatrixMulNV, 0, nullptr, 1, pygen_variable_caps_CooperativeVectorNV, 13, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID, SPV_OPERAND_TYPE_OPTIONAL_COOPERATIVE_MATRIX_OPERANDS}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"CooperativeVectorOuterProductAccumulateNV", spv::Op::OpCooperativeVectorOuterProductAccumulateNV, 0, nullptr, 1, pygen_variable_caps_CooperativeVectorTrainingNV, 7, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID}, 0, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"CooperativeVectorReduceSumAccumulateNV", spv::Op::OpCooperativeVectorReduceSumAccumulateNV, 0, nullptr, 1, pygen_variable_caps_CooperativeVectorTrainingNV, 3, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 0, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"CooperativeVectorMatrixMulAddNV", spv::Op::OpCooperativeVectorMatrixMulAddNV, 0, nullptr, 1, pygen_variable_caps_CooperativeVectorNV, 16, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID, SPV_OPERAND_TYPE_OPTIONAL_COOPERATIVE_MATRIX_OPERANDS}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"CooperativeMatrixConvertNV", spv::Op::OpCooperativeMatrixConvertNV, 0, nullptr, 1, pygen_variable_caps_CooperativeMatrixConversionsNV, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"EmitMeshTasksEXT", spv::Op::OpEmitMeshTasksEXT, 0, nullptr, 1, pygen_variable_caps_MeshShadingEXT, 4, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID}, 0, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SetMeshOutputsEXT", spv::Op::OpSetMeshOutputsEXT, 0, nullptr, 1, pygen_variable_caps_MeshShadingEXT, 2, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 0, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"GroupNonUniformPartitionNV", spv::Op::OpGroupNonUniformPartitionNV, 0, nullptr, 1, pygen_variable_caps_GroupNonUniformPartitionedNV, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_NV_shader_subgroup_partitioned, 0xffffffffu, 0xffffffffu},
|
||||
{"WritePackedPrimitiveIndices4x8NV", spv::Op::OpWritePackedPrimitiveIndices4x8NV, 0, nullptr, 1, pygen_variable_caps_MeshShadingNV, 2, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 0, 0, 1, pygen_variable_exts_SPV_NV_mesh_shader, 0xffffffffu, 0xffffffffu},
|
||||
{"FetchMicroTriangleVertexPositionNV", spv::Op::OpFetchMicroTriangleVertexPositionNV, 0, nullptr, 1, pygen_variable_caps_DisplacementMicromapNV, 7, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"FetchMicroTriangleVertexBarycentricNV", spv::Op::OpFetchMicroTriangleVertexBarycentricNV, 0, nullptr, 1, pygen_variable_caps_DisplacementMicromapNV, 7, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"CooperativeVectorLoadNV", spv::Op::OpCooperativeVectorLoadNV, 0, nullptr, 1, pygen_variable_caps_CooperativeVectorNV, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_MEMORY_ACCESS}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"CooperativeVectorStoreNV", spv::Op::OpCooperativeVectorStoreNV, 0, nullptr, 1, pygen_variable_caps_CooperativeVectorNV, 4, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_MEMORY_ACCESS}, 0, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ReportIntersectionKHR", spv::Op::OpReportIntersectionKHR, 1, pygen_variable_aliases_OpReportIntersectionNV, 2, pygen_variable_caps_RayTracingNVRayTracingKHR, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 2, pygen_variable_exts_SPV_NV_ray_tracingSPV_KHR_ray_tracing, 0xffffffffu, 0xffffffffu},
|
||||
{"IgnoreIntersectionNV", spv::Op::OpIgnoreIntersectionNV, 0, nullptr, 1, pygen_variable_caps_RayTracingNV, 0, {}, 0, 0, 1, pygen_variable_exts_SPV_NV_ray_tracing, 0xffffffffu, 0xffffffffu},
|
||||
{"TerminateRayNV", spv::Op::OpTerminateRayNV, 0, nullptr, 1, pygen_variable_caps_RayTracingNV, 0, {}, 0, 0, 1, pygen_variable_exts_SPV_NV_ray_tracing, 0xffffffffu, 0xffffffffu},
|
||||
{"TraceNV", spv::Op::OpTraceNV, 0, nullptr, 1, pygen_variable_caps_RayTracingNV, 11, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 0, 0, 1, pygen_variable_exts_SPV_NV_ray_tracing, 0xffffffffu, 0xffffffffu},
|
||||
{"TraceMotionNV", spv::Op::OpTraceMotionNV, 0, nullptr, 1, pygen_variable_caps_RayTracingMotionBlurNV, 12, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 0, 0, 1, pygen_variable_exts_SPV_NV_ray_tracing_motion_blur, 0xffffffffu, 0xffffffffu},
|
||||
{"TraceRayMotionNV", spv::Op::OpTraceRayMotionNV, 0, nullptr, 1, pygen_variable_caps_RayTracingMotionBlurNV, 12, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 0, 0, 1, pygen_variable_exts_SPV_NV_ray_tracing_motion_blur, 0xffffffffu, 0xffffffffu},
|
||||
{"RayQueryGetIntersectionTriangleVertexPositionsKHR", spv::Op::OpRayQueryGetIntersectionTriangleVertexPositionsKHR, 0, nullptr, 1, pygen_variable_caps_RayQueryPositionFetchKHR, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"TypeAccelerationStructureKHR", spv::Op::OpTypeAccelerationStructureKHR, 1, pygen_variable_aliases_OpTypeAccelerationStructureNV, 3, pygen_variable_caps_RayTracingNVRayTracingKHRRayQueryKHR, 1, {SPV_OPERAND_TYPE_RESULT_ID}, 1, 0, 3, pygen_variable_exts_SPV_NV_ray_tracingSPV_KHR_ray_tracingSPV_KHR_ray_query, 0xffffffffu, 0xffffffffu},
|
||||
{"ExecuteCallableNV", spv::Op::OpExecuteCallableNV, 0, nullptr, 1, pygen_variable_caps_RayTracingNV, 2, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 0, 0, 1, pygen_variable_exts_SPV_NV_ray_tracing, 0xffffffffu, 0xffffffffu},
|
||||
{"RayQueryGetClusterIdNV", spv::Op::OpRayQueryGetClusterIdNV, 0, nullptr, 1, pygen_variable_caps_RayTracingClusterAccelerationStructureNV, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"HitObjectGetClusterIdNV", spv::Op::OpHitObjectGetClusterIdNV, 0, nullptr, 1, pygen_variable_caps_RayTracingClusterAccelerationStructureNV, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"TypeCooperativeMatrixNV", spv::Op::OpTypeCooperativeMatrixNV, 0, nullptr, 1, pygen_variable_caps_CooperativeMatrixNV, 5, {SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 0, 1, pygen_variable_exts_SPV_NV_cooperative_matrix, 0xffffffffu, 0xffffffffu},
|
||||
{"CooperativeMatrixLoadNV", spv::Op::OpCooperativeMatrixLoadNV, 0, nullptr, 1, pygen_variable_caps_CooperativeMatrixNV, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_MEMORY_ACCESS}, 1, 1, 1, pygen_variable_exts_SPV_NV_cooperative_matrix, 0xffffffffu, 0xffffffffu},
|
||||
{"CooperativeMatrixStoreNV", spv::Op::OpCooperativeMatrixStoreNV, 0, nullptr, 1, pygen_variable_caps_CooperativeMatrixNV, 5, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_MEMORY_ACCESS}, 0, 0, 1, pygen_variable_exts_SPV_NV_cooperative_matrix, 0xffffffffu, 0xffffffffu},
|
||||
{"CooperativeMatrixMulAddNV", spv::Op::OpCooperativeMatrixMulAddNV, 0, nullptr, 1, pygen_variable_caps_CooperativeMatrixNV, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_NV_cooperative_matrix, 0xffffffffu, 0xffffffffu},
|
||||
{"CooperativeMatrixLengthNV", spv::Op::OpCooperativeMatrixLengthNV, 0, nullptr, 1, pygen_variable_caps_CooperativeMatrixNV, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_NV_cooperative_matrix, 0xffffffffu, 0xffffffffu},
|
||||
{"BeginInvocationInterlockEXT", spv::Op::OpBeginInvocationInterlockEXT, 0, nullptr, 3, pygen_variable_caps_FragmentShaderSampleInterlockEXTFragmentShaderPixelInterlockEXTFragmentShaderShadingRateInterlockEXT, 0, {}, 0, 0, 1, pygen_variable_exts_SPV_EXT_fragment_shader_interlock, 0xffffffffu, 0xffffffffu},
|
||||
{"EndInvocationInterlockEXT", spv::Op::OpEndInvocationInterlockEXT, 0, nullptr, 3, pygen_variable_caps_FragmentShaderSampleInterlockEXTFragmentShaderPixelInterlockEXTFragmentShaderShadingRateInterlockEXT, 0, {}, 0, 0, 1, pygen_variable_exts_SPV_EXT_fragment_shader_interlock, 0xffffffffu, 0xffffffffu},
|
||||
{"CooperativeMatrixReduceNV", spv::Op::OpCooperativeMatrixReduceNV, 0, nullptr, 1, pygen_variable_caps_CooperativeMatrixReductionsNV, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_COOPERATIVE_MATRIX_REDUCE, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"CooperativeMatrixLoadTensorNV", spv::Op::OpCooperativeMatrixLoadTensorNV, 0, nullptr, 1, pygen_variable_caps_CooperativeMatrixTensorAddressingNV, 7, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_MEMORY_ACCESS, SPV_OPERAND_TYPE_TENSOR_ADDRESSING_OPERANDS}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"CooperativeMatrixStoreTensorNV", spv::Op::OpCooperativeMatrixStoreTensorNV, 0, nullptr, 1, pygen_variable_caps_CooperativeMatrixTensorAddressingNV, 5, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_MEMORY_ACCESS, SPV_OPERAND_TYPE_TENSOR_ADDRESSING_OPERANDS}, 0, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"CooperativeMatrixPerElementOpNV", spv::Op::OpCooperativeMatrixPerElementOpNV, 0, nullptr, 1, pygen_variable_caps_CooperativeMatrixPerElementOperationsNV, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"TypeTensorLayoutNV", spv::Op::OpTypeTensorLayoutNV, 0, nullptr, 1, pygen_variable_caps_TensorAddressingNV, 3, {SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"TypeTensorViewNV", spv::Op::OpTypeTensorViewNV, 0, nullptr, 1, pygen_variable_caps_TensorAddressingNV, 4, {SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_ID}, 1, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"CreateTensorLayoutNV", spv::Op::OpCreateTensorLayoutNV, 0, nullptr, 1, pygen_variable_caps_TensorAddressingNV, 2, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"TensorLayoutSetDimensionNV", spv::Op::OpTensorLayoutSetDimensionNV, 0, nullptr, 1, pygen_variable_caps_TensorAddressingNV, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"TensorLayoutSetStrideNV", spv::Op::OpTensorLayoutSetStrideNV, 0, nullptr, 1, pygen_variable_caps_TensorAddressingNV, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"TensorLayoutSliceNV", spv::Op::OpTensorLayoutSliceNV, 0, nullptr, 1, pygen_variable_caps_TensorAddressingNV, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"TensorLayoutSetClampValueNV", spv::Op::OpTensorLayoutSetClampValueNV, 0, nullptr, 1, pygen_variable_caps_TensorAddressingNV, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"CreateTensorViewNV", spv::Op::OpCreateTensorViewNV, 0, nullptr, 1, pygen_variable_caps_TensorAddressingNV, 2, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"TensorViewSetDimensionNV", spv::Op::OpTensorViewSetDimensionNV, 0, nullptr, 1, pygen_variable_caps_TensorAddressingNV, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"TensorViewSetStrideNV", spv::Op::OpTensorViewSetStrideNV, 0, nullptr, 1, pygen_variable_caps_TensorAddressingNV, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"DemoteToHelperInvocation", spv::Op::OpDemoteToHelperInvocation, 1, pygen_variable_aliases_OpDemoteToHelperInvocationEXT, 1, pygen_variable_caps_DemoteToHelperInvocation, 0, {}, 0, 0, 0, nullptr, SPV_SPIRV_VERSION_WORD(1,6), 0xffffffffu},
|
||||
{"IsHelperInvocationEXT", spv::Op::OpIsHelperInvocationEXT, 0, nullptr, 1, pygen_variable_caps_DemoteToHelperInvocation, 2, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID}, 1, 1, 1, pygen_variable_exts_SPV_EXT_demote_to_helper_invocation, 0xffffffffu, 0xffffffffu},
|
||||
{"TensorViewSetClipNV", spv::Op::OpTensorViewSetClipNV, 0, nullptr, 1, pygen_variable_caps_TensorAddressingNV, 7, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"TensorLayoutSetBlockSizeNV", spv::Op::OpTensorLayoutSetBlockSizeNV, 0, nullptr, 1, pygen_variable_caps_TensorAddressingNV, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"CooperativeMatrixTransposeNV", spv::Op::OpCooperativeMatrixTransposeNV, 0, nullptr, 1, pygen_variable_caps_CooperativeMatrixConversionsNV, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ConvertUToImageNV", spv::Op::OpConvertUToImageNV, 0, nullptr, 1, pygen_variable_caps_BindlessTextureNV, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ConvertUToSamplerNV", spv::Op::OpConvertUToSamplerNV, 0, nullptr, 1, pygen_variable_caps_BindlessTextureNV, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ConvertImageToUNV", spv::Op::OpConvertImageToUNV, 0, nullptr, 1, pygen_variable_caps_BindlessTextureNV, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ConvertSamplerToUNV", spv::Op::OpConvertSamplerToUNV, 0, nullptr, 1, pygen_variable_caps_BindlessTextureNV, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ConvertUToSampledImageNV", spv::Op::OpConvertUToSampledImageNV, 0, nullptr, 1, pygen_variable_caps_BindlessTextureNV, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ConvertSampledImageToUNV", spv::Op::OpConvertSampledImageToUNV, 0, nullptr, 1, pygen_variable_caps_BindlessTextureNV, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SamplerImageAddressingModeNV", spv::Op::OpSamplerImageAddressingModeNV, 0, nullptr, 1, pygen_variable_caps_BindlessTextureNV, 1, {SPV_OPERAND_TYPE_LITERAL_INTEGER}, 0, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"RawAccessChainNV", spv::Op::OpRawAccessChainNV, 0, nullptr, 1, pygen_variable_caps_RawAccessChainsNV, 7, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_RAW_ACCESS_CHAIN_OPERANDS}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"RayQueryGetIntersectionSpherePositionNV", spv::Op::OpRayQueryGetIntersectionSpherePositionNV, 0, nullptr, 1, pygen_variable_caps_RayTracingSpheresGeometryNV, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"RayQueryGetIntersectionSphereRadiusNV", spv::Op::OpRayQueryGetIntersectionSphereRadiusNV, 0, nullptr, 1, pygen_variable_caps_RayTracingSpheresGeometryNV, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"RayQueryGetIntersectionLSSPositionsNV", spv::Op::OpRayQueryGetIntersectionLSSPositionsNV, 0, nullptr, 1, pygen_variable_caps_RayTracingLinearSweptSpheresGeometryNV, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"RayQueryGetIntersectionLSSRadiiNV", spv::Op::OpRayQueryGetIntersectionLSSRadiiNV, 0, nullptr, 1, pygen_variable_caps_RayTracingLinearSweptSpheresGeometryNV, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"RayQueryGetIntersectionLSSHitValueNV", spv::Op::OpRayQueryGetIntersectionLSSHitValueNV, 0, nullptr, 1, pygen_variable_caps_RayTracingLinearSweptSpheresGeometryNV, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"HitObjectGetSpherePositionNV", spv::Op::OpHitObjectGetSpherePositionNV, 0, nullptr, 1, pygen_variable_caps_RayTracingSpheresGeometryNV, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"HitObjectGetSphereRadiusNV", spv::Op::OpHitObjectGetSphereRadiusNV, 0, nullptr, 1, pygen_variable_caps_RayTracingSpheresGeometryNV, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"HitObjectGetLSSPositionsNV", spv::Op::OpHitObjectGetLSSPositionsNV, 0, nullptr, 1, pygen_variable_caps_RayTracingLinearSweptSpheresGeometryNV, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"HitObjectGetLSSRadiiNV", spv::Op::OpHitObjectGetLSSRadiiNV, 0, nullptr, 1, pygen_variable_caps_RayTracingLinearSweptSpheresGeometryNV, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"HitObjectIsSphereHitNV", spv::Op::OpHitObjectIsSphereHitNV, 0, nullptr, 1, pygen_variable_caps_RayTracingSpheresGeometryNV, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"HitObjectIsLSSHitNV", spv::Op::OpHitObjectIsLSSHitNV, 0, nullptr, 1, pygen_variable_caps_RayTracingLinearSweptSpheresGeometryNV, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"RayQueryIsSphereHitNV", spv::Op::OpRayQueryIsSphereHitNV, 0, nullptr, 1, pygen_variable_caps_RayTracingSpheresGeometryNV, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"RayQueryIsLSSHitNV", spv::Op::OpRayQueryIsLSSHitNV, 0, nullptr, 1, pygen_variable_caps_RayTracingLinearSweptSpheresGeometryNV, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupShuffleINTEL", spv::Op::OpSubgroupShuffleINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupShuffleINTEL, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupShuffleDownINTEL", spv::Op::OpSubgroupShuffleDownINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupShuffleINTEL, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupShuffleUpINTEL", spv::Op::OpSubgroupShuffleUpINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupShuffleINTEL, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupShuffleXorINTEL", spv::Op::OpSubgroupShuffleXorINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupShuffleINTEL, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupBlockReadINTEL", spv::Op::OpSubgroupBlockReadINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupBufferBlockIOINTEL, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupBlockWriteINTEL", spv::Op::OpSubgroupBlockWriteINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupBufferBlockIOINTEL, 2, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 0, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupImageBlockReadINTEL", spv::Op::OpSubgroupImageBlockReadINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupImageBlockIOINTEL, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupImageBlockWriteINTEL", spv::Op::OpSubgroupImageBlockWriteINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupImageBlockIOINTEL, 3, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 0, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupImageMediaBlockReadINTEL", spv::Op::OpSubgroupImageMediaBlockReadINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupImageMediaBlockIOINTEL, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupImageMediaBlockWriteINTEL", spv::Op::OpSubgroupImageMediaBlockWriteINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupImageMediaBlockIOINTEL, 5, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 0, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"UCountLeadingZerosINTEL", spv::Op::OpUCountLeadingZerosINTEL, 0, nullptr, 1, pygen_variable_caps_IntegerFunctions2INTEL, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"UCountTrailingZerosINTEL", spv::Op::OpUCountTrailingZerosINTEL, 0, nullptr, 1, pygen_variable_caps_IntegerFunctions2INTEL, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"AbsISubINTEL", spv::Op::OpAbsISubINTEL, 0, nullptr, 1, pygen_variable_caps_IntegerFunctions2INTEL, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"AbsUSubINTEL", spv::Op::OpAbsUSubINTEL, 0, nullptr, 1, pygen_variable_caps_IntegerFunctions2INTEL, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"IAddSatINTEL", spv::Op::OpIAddSatINTEL, 0, nullptr, 1, pygen_variable_caps_IntegerFunctions2INTEL, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"UAddSatINTEL", spv::Op::OpUAddSatINTEL, 0, nullptr, 1, pygen_variable_caps_IntegerFunctions2INTEL, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"IAverageINTEL", spv::Op::OpIAverageINTEL, 0, nullptr, 1, pygen_variable_caps_IntegerFunctions2INTEL, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"UAverageINTEL", spv::Op::OpUAverageINTEL, 0, nullptr, 1, pygen_variable_caps_IntegerFunctions2INTEL, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"IAverageRoundedINTEL", spv::Op::OpIAverageRoundedINTEL, 0, nullptr, 1, pygen_variable_caps_IntegerFunctions2INTEL, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"UAverageRoundedINTEL", spv::Op::OpUAverageRoundedINTEL, 0, nullptr, 1, pygen_variable_caps_IntegerFunctions2INTEL, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ISubSatINTEL", spv::Op::OpISubSatINTEL, 0, nullptr, 1, pygen_variable_caps_IntegerFunctions2INTEL, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"USubSatINTEL", spv::Op::OpUSubSatINTEL, 0, nullptr, 1, pygen_variable_caps_IntegerFunctions2INTEL, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"IMul32x16INTEL", spv::Op::OpIMul32x16INTEL, 0, nullptr, 1, pygen_variable_caps_IntegerFunctions2INTEL, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"UMul32x16INTEL", spv::Op::OpUMul32x16INTEL, 0, nullptr, 1, pygen_variable_caps_IntegerFunctions2INTEL, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ConstantFunctionPointerINTEL", spv::Op::OpConstantFunctionPointerINTEL, 0, nullptr, 1, pygen_variable_caps_FunctionPointersINTEL, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_INTEL_function_pointers, 0xffffffffu, 0xffffffffu},
|
||||
{"FunctionPointerCallINTEL", spv::Op::OpFunctionPointerCallINTEL, 0, nullptr, 1, pygen_variable_caps_FunctionPointersINTEL, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_VARIABLE_ID}, 1, 1, 1, pygen_variable_exts_SPV_INTEL_function_pointers, 0xffffffffu, 0xffffffffu},
|
||||
{"AsmTargetINTEL", spv::Op::OpAsmTargetINTEL, 0, nullptr, 1, pygen_variable_caps_AsmINTEL, 2, {SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_LITERAL_STRING}, 1, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"AsmINTEL", spv::Op::OpAsmINTEL, 0, nullptr, 1, pygen_variable_caps_AsmINTEL, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_STRING, SPV_OPERAND_TYPE_LITERAL_STRING}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"AsmCallINTEL", spv::Op::OpAsmCallINTEL, 0, nullptr, 1, pygen_variable_caps_AsmINTEL, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"AtomicFMinEXT", spv::Op::OpAtomicFMinEXT, 0, nullptr, 4, pygen_variable_caps_AtomicFloat16MinMaxEXTAtomicFloat32MinMaxEXTAtomicFloat64MinMaxEXTAtomicFloat16VectorNV, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"AtomicFMaxEXT", spv::Op::OpAtomicFMaxEXT, 0, nullptr, 4, pygen_variable_caps_AtomicFloat16MinMaxEXTAtomicFloat32MinMaxEXTAtomicFloat64MinMaxEXTAtomicFloat16VectorNV, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"AssumeTrueKHR", spv::Op::OpAssumeTrueKHR, 0, nullptr, 1, pygen_variable_caps_ExpectAssumeKHR, 1, {SPV_OPERAND_TYPE_ID}, 0, 0, 1, pygen_variable_exts_SPV_KHR_expect_assume, 0xffffffffu, 0xffffffffu},
|
||||
{"ExpectKHR", spv::Op::OpExpectKHR, 0, nullptr, 1, pygen_variable_caps_ExpectAssumeKHR, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_KHR_expect_assume, 0xffffffffu, 0xffffffffu},
|
||||
{"DecorateString", spv::Op::OpDecorateString, 1, pygen_variable_aliases_OpDecorateStringGOOGLE, 0, nullptr, 2, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_DECORATION}, 0, 0, 2, pygen_variable_exts_SPV_GOOGLE_decorate_stringSPV_GOOGLE_hlsl_functionality1, SPV_SPIRV_VERSION_WORD(1,4), 0xffffffffu},
|
||||
{"MemberDecorateString", spv::Op::OpMemberDecorateString, 1, pygen_variable_aliases_OpMemberDecorateStringGOOGLE, 0, nullptr, 3, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_DECORATION}, 0, 0, 2, pygen_variable_exts_SPV_GOOGLE_decorate_stringSPV_GOOGLE_hlsl_functionality1, SPV_SPIRV_VERSION_WORD(1,4), 0xffffffffu},
|
||||
{"VmeImageINTEL", spv::Op::OpVmeImageINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"TypeVmeImageINTEL", spv::Op::OpTypeVmeImageINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 2, {SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"TypeAvcImePayloadINTEL", spv::Op::OpTypeAvcImePayloadINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 1, {SPV_OPERAND_TYPE_RESULT_ID}, 1, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"TypeAvcRefPayloadINTEL", spv::Op::OpTypeAvcRefPayloadINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 1, {SPV_OPERAND_TYPE_RESULT_ID}, 1, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"TypeAvcSicPayloadINTEL", spv::Op::OpTypeAvcSicPayloadINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 1, {SPV_OPERAND_TYPE_RESULT_ID}, 1, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"TypeAvcMcePayloadINTEL", spv::Op::OpTypeAvcMcePayloadINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 1, {SPV_OPERAND_TYPE_RESULT_ID}, 1, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"TypeAvcMceResultINTEL", spv::Op::OpTypeAvcMceResultINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 1, {SPV_OPERAND_TYPE_RESULT_ID}, 1, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"TypeAvcImeResultINTEL", spv::Op::OpTypeAvcImeResultINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 1, {SPV_OPERAND_TYPE_RESULT_ID}, 1, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"TypeAvcImeResultSingleReferenceStreamoutINTEL", spv::Op::OpTypeAvcImeResultSingleReferenceStreamoutINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 1, {SPV_OPERAND_TYPE_RESULT_ID}, 1, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"TypeAvcImeResultDualReferenceStreamoutINTEL", spv::Op::OpTypeAvcImeResultDualReferenceStreamoutINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 1, {SPV_OPERAND_TYPE_RESULT_ID}, 1, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"TypeAvcImeSingleReferenceStreaminINTEL", spv::Op::OpTypeAvcImeSingleReferenceStreaminINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 1, {SPV_OPERAND_TYPE_RESULT_ID}, 1, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"TypeAvcImeDualReferenceStreaminINTEL", spv::Op::OpTypeAvcImeDualReferenceStreaminINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 1, {SPV_OPERAND_TYPE_RESULT_ID}, 1, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"TypeAvcRefResultINTEL", spv::Op::OpTypeAvcRefResultINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 1, {SPV_OPERAND_TYPE_RESULT_ID}, 1, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"TypeAvcSicResultINTEL", spv::Op::OpTypeAvcSicResultINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 1, {SPV_OPERAND_TYPE_RESULT_ID}, 1, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL", spv::Op::OpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL", spv::Op::OpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcMceGetDefaultInterShapePenaltyINTEL", spv::Op::OpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcMceSetInterShapePenaltyINTEL", spv::Op::OpSubgroupAvcMceSetInterShapePenaltyINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL", spv::Op::OpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcMceSetInterDirectionPenaltyINTEL", spv::Op::OpSubgroupAvcMceSetInterDirectionPenaltyINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL", spv::Op::OpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL, 0, nullptr, 2, pygen_variable_caps_SubgroupAvcMotionEstimationINTELSubgroupAvcMotionEstimationIntraINTEL, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL", spv::Op::OpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL", spv::Op::OpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 2, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL", spv::Op::OpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 2, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL", spv::Op::OpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 2, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcMceSetMotionVectorCostFunctionINTEL", spv::Op::OpSubgroupAvcMceSetMotionVectorCostFunctionINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL", spv::Op::OpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL, 0, nullptr, 2, pygen_variable_caps_SubgroupAvcMotionEstimationINTELSubgroupAvcMotionEstimationIntraINTEL, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL", spv::Op::OpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL, 0, nullptr, 2, pygen_variable_caps_SubgroupAvcMotionEstimationINTELSubgroupAvcMotionEstimationIntraINTEL, 2, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL", spv::Op::OpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL, 0, nullptr, 2, pygen_variable_caps_SubgroupAvcMotionEstimationINTELSubgroupAvcMotionEstimationChromaINTEL, 2, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcMceSetAcOnlyHaarINTEL", spv::Op::OpSubgroupAvcMceSetAcOnlyHaarINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL", spv::Op::OpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL", spv::Op::OpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL", spv::Op::OpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcMceConvertToImePayloadINTEL", spv::Op::OpSubgroupAvcMceConvertToImePayloadINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcMceConvertToImeResultINTEL", spv::Op::OpSubgroupAvcMceConvertToImeResultINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcMceConvertToRefPayloadINTEL", spv::Op::OpSubgroupAvcMceConvertToRefPayloadINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcMceConvertToRefResultINTEL", spv::Op::OpSubgroupAvcMceConvertToRefResultINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcMceConvertToSicPayloadINTEL", spv::Op::OpSubgroupAvcMceConvertToSicPayloadINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcMceConvertToSicResultINTEL", spv::Op::OpSubgroupAvcMceConvertToSicResultINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcMceGetMotionVectorsINTEL", spv::Op::OpSubgroupAvcMceGetMotionVectorsINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcMceGetInterDistortionsINTEL", spv::Op::OpSubgroupAvcMceGetInterDistortionsINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcMceGetBestInterDistortionsINTEL", spv::Op::OpSubgroupAvcMceGetBestInterDistortionsINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcMceGetInterMajorShapeINTEL", spv::Op::OpSubgroupAvcMceGetInterMajorShapeINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcMceGetInterMinorShapeINTEL", spv::Op::OpSubgroupAvcMceGetInterMinorShapeINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcMceGetInterDirectionsINTEL", spv::Op::OpSubgroupAvcMceGetInterDirectionsINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcMceGetInterMotionVectorCountINTEL", spv::Op::OpSubgroupAvcMceGetInterMotionVectorCountINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcMceGetInterReferenceIdsINTEL", spv::Op::OpSubgroupAvcMceGetInterReferenceIdsINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL", spv::Op::OpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcImeInitializeINTEL", spv::Op::OpSubgroupAvcImeInitializeINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcImeSetSingleReferenceINTEL", spv::Op::OpSubgroupAvcImeSetSingleReferenceINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcImeSetDualReferenceINTEL", spv::Op::OpSubgroupAvcImeSetDualReferenceINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcImeRefWindowSizeINTEL", spv::Op::OpSubgroupAvcImeRefWindowSizeINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcImeAdjustRefOffsetINTEL", spv::Op::OpSubgroupAvcImeAdjustRefOffsetINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcImeConvertToMcePayloadINTEL", spv::Op::OpSubgroupAvcImeConvertToMcePayloadINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcImeSetMaxMotionVectorCountINTEL", spv::Op::OpSubgroupAvcImeSetMaxMotionVectorCountINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcImeSetUnidirectionalMixDisableINTEL", spv::Op::OpSubgroupAvcImeSetUnidirectionalMixDisableINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcImeSetEarlySearchTerminationThresholdINTEL", spv::Op::OpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcImeSetWeightedSadINTEL", spv::Op::OpSubgroupAvcImeSetWeightedSadINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcImeEvaluateWithSingleReferenceINTEL", spv::Op::OpSubgroupAvcImeEvaluateWithSingleReferenceINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcImeEvaluateWithDualReferenceINTEL", spv::Op::OpSubgroupAvcImeEvaluateWithDualReferenceINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL", spv::Op::OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL", spv::Op::OpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 7, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL", spv::Op::OpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL", spv::Op::OpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL", spv::Op::OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL", spv::Op::OpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 7, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcImeConvertToMceResultINTEL", spv::Op::OpSubgroupAvcImeConvertToMceResultINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcImeGetSingleReferenceStreaminINTEL", spv::Op::OpSubgroupAvcImeGetSingleReferenceStreaminINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcImeGetDualReferenceStreaminINTEL", spv::Op::OpSubgroupAvcImeGetDualReferenceStreaminINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcImeStripSingleReferenceStreamoutINTEL", spv::Op::OpSubgroupAvcImeStripSingleReferenceStreamoutINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcImeStripDualReferenceStreamoutINTEL", spv::Op::OpSubgroupAvcImeStripDualReferenceStreamoutINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL", spv::Op::OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL", spv::Op::OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL", spv::Op::OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL", spv::Op::OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL", spv::Op::OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL", spv::Op::OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcImeGetBorderReachedINTEL", spv::Op::OpSubgroupAvcImeGetBorderReachedINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcImeGetTruncatedSearchIndicationINTEL", spv::Op::OpSubgroupAvcImeGetTruncatedSearchIndicationINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL", spv::Op::OpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL", spv::Op::OpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL", spv::Op::OpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcFmeInitializeINTEL", spv::Op::OpSubgroupAvcFmeInitializeINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 9, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcBmeInitializeINTEL", spv::Op::OpSubgroupAvcBmeInitializeINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 10, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcRefConvertToMcePayloadINTEL", spv::Op::OpSubgroupAvcRefConvertToMcePayloadINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcRefSetBidirectionalMixDisableINTEL", spv::Op::OpSubgroupAvcRefSetBidirectionalMixDisableINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcRefSetBilinearFilterEnableINTEL", spv::Op::OpSubgroupAvcRefSetBilinearFilterEnableINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcRefEvaluateWithSingleReferenceINTEL", spv::Op::OpSubgroupAvcRefEvaluateWithSingleReferenceINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcRefEvaluateWithDualReferenceINTEL", spv::Op::OpSubgroupAvcRefEvaluateWithDualReferenceINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcRefEvaluateWithMultiReferenceINTEL", spv::Op::OpSubgroupAvcRefEvaluateWithMultiReferenceINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL", spv::Op::OpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcRefConvertToMceResultINTEL", spv::Op::OpSubgroupAvcRefConvertToMceResultINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcSicInitializeINTEL", spv::Op::OpSubgroupAvcSicInitializeINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcSicConfigureSkcINTEL", spv::Op::OpSubgroupAvcSicConfigureSkcINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcSicConfigureIpeLumaINTEL", spv::Op::OpSubgroupAvcSicConfigureIpeLumaINTEL, 0, nullptr, 2, pygen_variable_caps_SubgroupAvcMotionEstimationINTELSubgroupAvcMotionEstimationIntraINTEL, 10, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcSicConfigureIpeLumaChromaINTEL", spv::Op::OpSubgroupAvcSicConfigureIpeLumaChromaINTEL, 0, nullptr, 2, pygen_variable_caps_SubgroupAvcMotionEstimationINTELSubgroupAvcMotionEstimationChromaINTEL, 13, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcSicGetMotionVectorMaskINTEL", spv::Op::OpSubgroupAvcSicGetMotionVectorMaskINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcSicConvertToMcePayloadINTEL", spv::Op::OpSubgroupAvcSicConvertToMcePayloadINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcSicSetIntraLumaShapePenaltyINTEL", spv::Op::OpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcSicSetIntraLumaModeCostFunctionINTEL", spv::Op::OpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL, 0, nullptr, 2, pygen_variable_caps_SubgroupAvcMotionEstimationINTELSubgroupAvcMotionEstimationIntraINTEL, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcSicSetIntraChromaModeCostFunctionINTEL", spv::Op::OpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL, 0, nullptr, 2, pygen_variable_caps_SubgroupAvcMotionEstimationINTELSubgroupAvcMotionEstimationChromaINTEL, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcSicSetBilinearFilterEnableINTEL", spv::Op::OpSubgroupAvcSicSetBilinearFilterEnableINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcSicSetSkcForwardTransformEnableINTEL", spv::Op::OpSubgroupAvcSicSetSkcForwardTransformEnableINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcSicSetBlockBasedRawSkipSadINTEL", spv::Op::OpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcSicEvaluateIpeINTEL", spv::Op::OpSubgroupAvcSicEvaluateIpeINTEL, 0, nullptr, 2, pygen_variable_caps_SubgroupAvcMotionEstimationINTELSubgroupAvcMotionEstimationIntraINTEL, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcSicEvaluateWithSingleReferenceINTEL", spv::Op::OpSubgroupAvcSicEvaluateWithSingleReferenceINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcSicEvaluateWithDualReferenceINTEL", spv::Op::OpSubgroupAvcSicEvaluateWithDualReferenceINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcSicEvaluateWithMultiReferenceINTEL", spv::Op::OpSubgroupAvcSicEvaluateWithMultiReferenceINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL", spv::Op::OpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcSicConvertToMceResultINTEL", spv::Op::OpSubgroupAvcSicConvertToMceResultINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcSicGetIpeLumaShapeINTEL", spv::Op::OpSubgroupAvcSicGetIpeLumaShapeINTEL, 0, nullptr, 2, pygen_variable_caps_SubgroupAvcMotionEstimationINTELSubgroupAvcMotionEstimationIntraINTEL, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcSicGetBestIpeLumaDistortionINTEL", spv::Op::OpSubgroupAvcSicGetBestIpeLumaDistortionINTEL, 0, nullptr, 2, pygen_variable_caps_SubgroupAvcMotionEstimationINTELSubgroupAvcMotionEstimationIntraINTEL, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcSicGetBestIpeChromaDistortionINTEL", spv::Op::OpSubgroupAvcSicGetBestIpeChromaDistortionINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcSicGetPackedIpeLumaModesINTEL", spv::Op::OpSubgroupAvcSicGetPackedIpeLumaModesINTEL, 0, nullptr, 2, pygen_variable_caps_SubgroupAvcMotionEstimationINTELSubgroupAvcMotionEstimationIntraINTEL, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcSicGetIpeChromaModeINTEL", spv::Op::OpSubgroupAvcSicGetIpeChromaModeINTEL, 0, nullptr, 2, pygen_variable_caps_SubgroupAvcMotionEstimationINTELSubgroupAvcMotionEstimationChromaINTEL, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL", spv::Op::OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL, 0, nullptr, 2, pygen_variable_caps_SubgroupAvcMotionEstimationINTELSubgroupAvcMotionEstimationIntraINTEL, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL", spv::Op::OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL, 0, nullptr, 2, pygen_variable_caps_SubgroupAvcMotionEstimationINTELSubgroupAvcMotionEstimationIntraINTEL, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupAvcSicGetInterRawSadsINTEL", spv::Op::OpSubgroupAvcSicGetInterRawSadsINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupAvcMotionEstimationINTEL, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"VariableLengthArrayINTEL", spv::Op::OpVariableLengthArrayINTEL, 0, nullptr, 1, pygen_variable_caps_VariableLengthArrayINTEL, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SaveMemoryINTEL", spv::Op::OpSaveMemoryINTEL, 0, nullptr, 1, pygen_variable_caps_VariableLengthArrayINTEL, 2, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"RestoreMemoryINTEL", spv::Op::OpRestoreMemoryINTEL, 0, nullptr, 1, pygen_variable_caps_VariableLengthArrayINTEL, 1, {SPV_OPERAND_TYPE_ID}, 0, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ArbitraryFloatSinCosPiINTEL", spv::Op::OpArbitraryFloatSinCosPiINTEL, 0, nullptr, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 9, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ArbitraryFloatCastINTEL", spv::Op::OpArbitraryFloatCastINTEL, 0, nullptr, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ArbitraryFloatCastFromIntINTEL", spv::Op::OpArbitraryFloatCastFromIntINTEL, 0, nullptr, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ArbitraryFloatCastToIntINTEL", spv::Op::OpArbitraryFloatCastToIntINTEL, 0, nullptr, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 7, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ArbitraryFloatAddINTEL", spv::Op::OpArbitraryFloatAddINTEL, 0, nullptr, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 10, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ArbitraryFloatSubINTEL", spv::Op::OpArbitraryFloatSubINTEL, 0, nullptr, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 10, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ArbitraryFloatMulINTEL", spv::Op::OpArbitraryFloatMulINTEL, 0, nullptr, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 10, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ArbitraryFloatDivINTEL", spv::Op::OpArbitraryFloatDivINTEL, 0, nullptr, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 10, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ArbitraryFloatGTINTEL", spv::Op::OpArbitraryFloatGTINTEL, 0, nullptr, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ArbitraryFloatGEINTEL", spv::Op::OpArbitraryFloatGEINTEL, 0, nullptr, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ArbitraryFloatLTINTEL", spv::Op::OpArbitraryFloatLTINTEL, 0, nullptr, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ArbitraryFloatLEINTEL", spv::Op::OpArbitraryFloatLEINTEL, 0, nullptr, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ArbitraryFloatEQINTEL", spv::Op::OpArbitraryFloatEQINTEL, 0, nullptr, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ArbitraryFloatRecipINTEL", spv::Op::OpArbitraryFloatRecipINTEL, 0, nullptr, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ArbitraryFloatRSqrtINTEL", spv::Op::OpArbitraryFloatRSqrtINTEL, 0, nullptr, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ArbitraryFloatCbrtINTEL", spv::Op::OpArbitraryFloatCbrtINTEL, 0, nullptr, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ArbitraryFloatHypotINTEL", spv::Op::OpArbitraryFloatHypotINTEL, 0, nullptr, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 10, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ArbitraryFloatSqrtINTEL", spv::Op::OpArbitraryFloatSqrtINTEL, 0, nullptr, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ArbitraryFloatLogINTEL", spv::Op::OpArbitraryFloatLogINTEL, 0, nullptr, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ArbitraryFloatLog2INTEL", spv::Op::OpArbitraryFloatLog2INTEL, 0, nullptr, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ArbitraryFloatLog10INTEL", spv::Op::OpArbitraryFloatLog10INTEL, 0, nullptr, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ArbitraryFloatLog1pINTEL", spv::Op::OpArbitraryFloatLog1pINTEL, 0, nullptr, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ArbitraryFloatExpINTEL", spv::Op::OpArbitraryFloatExpINTEL, 0, nullptr, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ArbitraryFloatExp2INTEL", spv::Op::OpArbitraryFloatExp2INTEL, 0, nullptr, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ArbitraryFloatExp10INTEL", spv::Op::OpArbitraryFloatExp10INTEL, 0, nullptr, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ArbitraryFloatExpm1INTEL", spv::Op::OpArbitraryFloatExpm1INTEL, 0, nullptr, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ArbitraryFloatSinINTEL", spv::Op::OpArbitraryFloatSinINTEL, 0, nullptr, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ArbitraryFloatCosINTEL", spv::Op::OpArbitraryFloatCosINTEL, 0, nullptr, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ArbitraryFloatSinCosINTEL", spv::Op::OpArbitraryFloatSinCosINTEL, 0, nullptr, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ArbitraryFloatSinPiINTEL", spv::Op::OpArbitraryFloatSinPiINTEL, 0, nullptr, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ArbitraryFloatCosPiINTEL", spv::Op::OpArbitraryFloatCosPiINTEL, 0, nullptr, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ArbitraryFloatASinINTEL", spv::Op::OpArbitraryFloatASinINTEL, 0, nullptr, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ArbitraryFloatASinPiINTEL", spv::Op::OpArbitraryFloatASinPiINTEL, 0, nullptr, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ArbitraryFloatACosINTEL", spv::Op::OpArbitraryFloatACosINTEL, 0, nullptr, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ArbitraryFloatACosPiINTEL", spv::Op::OpArbitraryFloatACosPiINTEL, 0, nullptr, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ArbitraryFloatATanINTEL", spv::Op::OpArbitraryFloatATanINTEL, 0, nullptr, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ArbitraryFloatATanPiINTEL", spv::Op::OpArbitraryFloatATanPiINTEL, 0, nullptr, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ArbitraryFloatATan2INTEL", spv::Op::OpArbitraryFloatATan2INTEL, 0, nullptr, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 10, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ArbitraryFloatPowINTEL", spv::Op::OpArbitraryFloatPowINTEL, 0, nullptr, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 10, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ArbitraryFloatPowRINTEL", spv::Op::OpArbitraryFloatPowRINTEL, 0, nullptr, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 10, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ArbitraryFloatPowNINTEL", spv::Op::OpArbitraryFloatPowNINTEL, 0, nullptr, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 9, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"LoopControlINTEL", spv::Op::OpLoopControlINTEL, 0, nullptr, 1, pygen_variable_caps_UnstructuredLoopControlsINTEL, 1, {SPV_OPERAND_TYPE_VARIABLE_LITERAL_INTEGER}, 0, 0, 1, pygen_variable_exts_SPV_INTEL_unstructured_loop_controls, 0xffffffffu, 0xffffffffu},
|
||||
{"AliasDomainDeclINTEL", spv::Op::OpAliasDomainDeclINTEL, 0, nullptr, 1, pygen_variable_caps_MemoryAccessAliasingINTEL, 2, {SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_OPTIONAL_ID}, 1, 0, 1, pygen_variable_exts_SPV_INTEL_memory_access_aliasing, 0xffffffffu, 0xffffffffu},
|
||||
{"AliasScopeDeclINTEL", spv::Op::OpAliasScopeDeclINTEL, 0, nullptr, 1, pygen_variable_caps_MemoryAccessAliasingINTEL, 3, {SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID}, 1, 0, 1, pygen_variable_exts_SPV_INTEL_memory_access_aliasing, 0xffffffffu, 0xffffffffu},
|
||||
{"AliasScopeListDeclINTEL", spv::Op::OpAliasScopeListDeclINTEL, 0, nullptr, 1, pygen_variable_caps_MemoryAccessAliasingINTEL, 2, {SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_VARIABLE_ID}, 1, 0, 1, pygen_variable_exts_SPV_INTEL_memory_access_aliasing, 0xffffffffu, 0xffffffffu},
|
||||
{"FixedSqrtINTEL", spv::Op::OpFixedSqrtINTEL, 0, nullptr, 1, pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"FixedRecipINTEL", spv::Op::OpFixedRecipINTEL, 0, nullptr, 1, pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"FixedRsqrtINTEL", spv::Op::OpFixedRsqrtINTEL, 0, nullptr, 1, pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"FixedSinINTEL", spv::Op::OpFixedSinINTEL, 0, nullptr, 1, pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"FixedCosINTEL", spv::Op::OpFixedCosINTEL, 0, nullptr, 1, pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"FixedSinCosINTEL", spv::Op::OpFixedSinCosINTEL, 0, nullptr, 1, pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"FixedSinPiINTEL", spv::Op::OpFixedSinPiINTEL, 0, nullptr, 1, pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"FixedCosPiINTEL", spv::Op::OpFixedCosPiINTEL, 0, nullptr, 1, pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"FixedSinCosPiINTEL", spv::Op::OpFixedSinCosPiINTEL, 0, nullptr, 1, pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"FixedLogINTEL", spv::Op::OpFixedLogINTEL, 0, nullptr, 1, pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"FixedExpINTEL", spv::Op::OpFixedExpINTEL, 0, nullptr, 1, pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"PtrCastToCrossWorkgroupINTEL", spv::Op::OpPtrCastToCrossWorkgroupINTEL, 0, nullptr, 1, pygen_variable_caps_USMStorageClassesINTEL, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"CrossWorkgroupCastToPtrINTEL", spv::Op::OpCrossWorkgroupCastToPtrINTEL, 0, nullptr, 1, pygen_variable_caps_USMStorageClassesINTEL, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ReadPipeBlockingINTEL", spv::Op::OpReadPipeBlockingINTEL, 0, nullptr, 1, pygen_variable_caps_BlockingPipesINTEL, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_INTEL_blocking_pipes, 0xffffffffu, 0xffffffffu},
|
||||
{"WritePipeBlockingINTEL", spv::Op::OpWritePipeBlockingINTEL, 0, nullptr, 1, pygen_variable_caps_BlockingPipesINTEL, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_INTEL_blocking_pipes, 0xffffffffu, 0xffffffffu},
|
||||
{"FPGARegINTEL", spv::Op::OpFPGARegINTEL, 0, nullptr, 1, pygen_variable_caps_FPGARegINTEL, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_INTEL_fpga_reg, 0xffffffffu, 0xffffffffu},
|
||||
{"RayQueryGetRayTMinKHR", spv::Op::OpRayQueryGetRayTMinKHR, 0, nullptr, 1, pygen_variable_caps_RayQueryKHR, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_KHR_ray_query, 0xffffffffu, 0xffffffffu},
|
||||
{"RayQueryGetRayFlagsKHR", spv::Op::OpRayQueryGetRayFlagsKHR, 0, nullptr, 1, pygen_variable_caps_RayQueryKHR, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_KHR_ray_query, 0xffffffffu, 0xffffffffu},
|
||||
{"RayQueryGetIntersectionTKHR", spv::Op::OpRayQueryGetIntersectionTKHR, 0, nullptr, 1, pygen_variable_caps_RayQueryKHR, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_KHR_ray_query, 0xffffffffu, 0xffffffffu},
|
||||
{"RayQueryGetIntersectionInstanceCustomIndexKHR", spv::Op::OpRayQueryGetIntersectionInstanceCustomIndexKHR, 0, nullptr, 1, pygen_variable_caps_RayQueryKHR, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_KHR_ray_query, 0xffffffffu, 0xffffffffu},
|
||||
{"RayQueryGetIntersectionInstanceIdKHR", spv::Op::OpRayQueryGetIntersectionInstanceIdKHR, 0, nullptr, 1, pygen_variable_caps_RayQueryKHR, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_KHR_ray_query, 0xffffffffu, 0xffffffffu},
|
||||
{"RayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR", spv::Op::OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR, 0, nullptr, 1, pygen_variable_caps_RayQueryKHR, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_KHR_ray_query, 0xffffffffu, 0xffffffffu},
|
||||
{"RayQueryGetIntersectionGeometryIndexKHR", spv::Op::OpRayQueryGetIntersectionGeometryIndexKHR, 0, nullptr, 1, pygen_variable_caps_RayQueryKHR, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_KHR_ray_query, 0xffffffffu, 0xffffffffu},
|
||||
{"RayQueryGetIntersectionPrimitiveIndexKHR", spv::Op::OpRayQueryGetIntersectionPrimitiveIndexKHR, 0, nullptr, 1, pygen_variable_caps_RayQueryKHR, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_KHR_ray_query, 0xffffffffu, 0xffffffffu},
|
||||
{"RayQueryGetIntersectionBarycentricsKHR", spv::Op::OpRayQueryGetIntersectionBarycentricsKHR, 0, nullptr, 1, pygen_variable_caps_RayQueryKHR, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_KHR_ray_query, 0xffffffffu, 0xffffffffu},
|
||||
{"RayQueryGetIntersectionFrontFaceKHR", spv::Op::OpRayQueryGetIntersectionFrontFaceKHR, 0, nullptr, 1, pygen_variable_caps_RayQueryKHR, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_KHR_ray_query, 0xffffffffu, 0xffffffffu},
|
||||
{"RayQueryGetIntersectionCandidateAABBOpaqueKHR", spv::Op::OpRayQueryGetIntersectionCandidateAABBOpaqueKHR, 0, nullptr, 1, pygen_variable_caps_RayQueryKHR, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_KHR_ray_query, 0xffffffffu, 0xffffffffu},
|
||||
{"RayQueryGetIntersectionObjectRayDirectionKHR", spv::Op::OpRayQueryGetIntersectionObjectRayDirectionKHR, 0, nullptr, 1, pygen_variable_caps_RayQueryKHR, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_KHR_ray_query, 0xffffffffu, 0xffffffffu},
|
||||
{"RayQueryGetIntersectionObjectRayOriginKHR", spv::Op::OpRayQueryGetIntersectionObjectRayOriginKHR, 0, nullptr, 1, pygen_variable_caps_RayQueryKHR, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_KHR_ray_query, 0xffffffffu, 0xffffffffu},
|
||||
{"RayQueryGetWorldRayDirectionKHR", spv::Op::OpRayQueryGetWorldRayDirectionKHR, 0, nullptr, 1, pygen_variable_caps_RayQueryKHR, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_KHR_ray_query, 0xffffffffu, 0xffffffffu},
|
||||
{"RayQueryGetWorldRayOriginKHR", spv::Op::OpRayQueryGetWorldRayOriginKHR, 0, nullptr, 1, pygen_variable_caps_RayQueryKHR, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_KHR_ray_query, 0xffffffffu, 0xffffffffu},
|
||||
{"RayQueryGetIntersectionObjectToWorldKHR", spv::Op::OpRayQueryGetIntersectionObjectToWorldKHR, 0, nullptr, 1, pygen_variable_caps_RayQueryKHR, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_KHR_ray_query, 0xffffffffu, 0xffffffffu},
|
||||
{"RayQueryGetIntersectionWorldToObjectKHR", spv::Op::OpRayQueryGetIntersectionWorldToObjectKHR, 0, nullptr, 1, pygen_variable_caps_RayQueryKHR, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_KHR_ray_query, 0xffffffffu, 0xffffffffu},
|
||||
{"AtomicFAddEXT", spv::Op::OpAtomicFAddEXT, 0, nullptr, 4, pygen_variable_caps_AtomicFloat16AddEXTAtomicFloat32AddEXTAtomicFloat64AddEXTAtomicFloat16VectorNV, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_EXT_shader_atomic_float_add, 0xffffffffu, 0xffffffffu},
|
||||
{"TypeBufferSurfaceINTEL", spv::Op::OpTypeBufferSurfaceINTEL, 0, nullptr, 1, pygen_variable_caps_VectorComputeINTEL, 2, {SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ACCESS_QUALIFIER}, 1, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"TypeStructContinuedINTEL", spv::Op::OpTypeStructContinuedINTEL, 0, nullptr, 1, pygen_variable_caps_LongCompositesINTEL, 1, {SPV_OPERAND_TYPE_VARIABLE_ID}, 0, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ConstantCompositeContinuedINTEL", spv::Op::OpConstantCompositeContinuedINTEL, 0, nullptr, 1, pygen_variable_caps_LongCompositesINTEL, 1, {SPV_OPERAND_TYPE_VARIABLE_ID}, 0, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SpecConstantCompositeContinuedINTEL", spv::Op::OpSpecConstantCompositeContinuedINTEL, 0, nullptr, 1, pygen_variable_caps_LongCompositesINTEL, 1, {SPV_OPERAND_TYPE_VARIABLE_ID}, 0, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"CompositeConstructContinuedINTEL", spv::Op::OpCompositeConstructContinuedINTEL, 0, nullptr, 1, pygen_variable_caps_LongCompositesINTEL, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_VARIABLE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ConvertFToBF16INTEL", spv::Op::OpConvertFToBF16INTEL, 0, nullptr, 1, pygen_variable_caps_BFloat16ConversionINTEL, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ConvertBF16ToFINTEL", spv::Op::OpConvertBF16ToFINTEL, 0, nullptr, 1, pygen_variable_caps_BFloat16ConversionINTEL, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ControlBarrierArriveINTEL", spv::Op::OpControlBarrierArriveINTEL, 0, nullptr, 1, pygen_variable_caps_SplitBarrierINTEL, 3, {SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID}, 0, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ControlBarrierWaitINTEL", spv::Op::OpControlBarrierWaitINTEL, 0, nullptr, 1, pygen_variable_caps_SplitBarrierINTEL, 3, {SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID}, 0, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ArithmeticFenceEXT", spv::Op::OpArithmeticFenceEXT, 0, nullptr, 1, pygen_variable_caps_ArithmeticFenceEXT, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupBlockPrefetchINTEL", spv::Op::OpSubgroupBlockPrefetchINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupBufferPrefetchINTEL, 3, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_MEMORY_ACCESS}, 0, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"Subgroup2DBlockLoadINTEL", spv::Op::OpSubgroup2DBlockLoadINTEL, 0, nullptr, 1, pygen_variable_caps_Subgroup2DBlockIOINTEL, 10, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 0, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"Subgroup2DBlockLoadTransformINTEL", spv::Op::OpSubgroup2DBlockLoadTransformINTEL, 0, nullptr, 1, pygen_variable_caps_Subgroup2DBlockTransformINTEL, 10, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 0, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"Subgroup2DBlockLoadTransposeINTEL", spv::Op::OpSubgroup2DBlockLoadTransposeINTEL, 0, nullptr, 1, pygen_variable_caps_Subgroup2DBlockTransposeINTEL, 10, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 0, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"Subgroup2DBlockPrefetchINTEL", spv::Op::OpSubgroup2DBlockPrefetchINTEL, 0, nullptr, 1, pygen_variable_caps_Subgroup2DBlockIOINTEL, 9, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 0, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"Subgroup2DBlockStoreINTEL", spv::Op::OpSubgroup2DBlockStoreINTEL, 0, nullptr, 1, pygen_variable_caps_Subgroup2DBlockIOINTEL, 10, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 0, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SubgroupMatrixMultiplyAccumulateINTEL", spv::Op::OpSubgroupMatrixMultiplyAccumulateINTEL, 0, nullptr, 1, pygen_variable_caps_SubgroupMatrixMultiplyAccumulateINTEL, 7, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_MATRIX_MULTIPLY_ACCUMULATE_OPERANDS}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"GroupIMulKHR", spv::Op::OpGroupIMulKHR, 0, nullptr, 1, pygen_variable_caps_GroupUniformArithmeticKHR, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"GroupFMulKHR", spv::Op::OpGroupFMulKHR, 0, nullptr, 1, pygen_variable_caps_GroupUniformArithmeticKHR, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"GroupBitwiseAndKHR", spv::Op::OpGroupBitwiseAndKHR, 0, nullptr, 1, pygen_variable_caps_GroupUniformArithmeticKHR, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"GroupBitwiseOrKHR", spv::Op::OpGroupBitwiseOrKHR, 0, nullptr, 1, pygen_variable_caps_GroupUniformArithmeticKHR, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"GroupBitwiseXorKHR", spv::Op::OpGroupBitwiseXorKHR, 0, nullptr, 1, pygen_variable_caps_GroupUniformArithmeticKHR, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"GroupLogicalAndKHR", spv::Op::OpGroupLogicalAndKHR, 0, nullptr, 1, pygen_variable_caps_GroupUniformArithmeticKHR, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"GroupLogicalOrKHR", spv::Op::OpGroupLogicalOrKHR, 0, nullptr, 1, pygen_variable_caps_GroupUniformArithmeticKHR, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"GroupLogicalXorKHR", spv::Op::OpGroupLogicalXorKHR, 0, nullptr, 1, pygen_variable_caps_GroupUniformArithmeticKHR, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_GROUP_OPERATION, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"MaskedGatherINTEL", spv::Op::OpMaskedGatherINTEL, 0, nullptr, 1, pygen_variable_caps_MaskedGatherScatterINTEL, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"MaskedScatterINTEL", spv::Op::OpMaskedScatterINTEL, 0, nullptr, 1, pygen_variable_caps_MaskedGatherScatterINTEL, 4, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_ID}, 0, 0, 0, nullptr, 0xffffffffu, 0xffffffffu}
|
||||
};
|
||||
9639
3rdparty/spirv-tools/include/generated/core_tables_body.inc
vendored
Normal file
9639
3rdparty/spirv-tools/include/generated/core_tables_body.inc
vendored
Normal file
File diff suppressed because it is too large
Load Diff
185
3rdparty/spirv-tools/include/generated/core_tables_header.inc
vendored
Normal file
185
3rdparty/spirv-tools/include/generated/core_tables_header.inc
vendored
Normal file
@@ -0,0 +1,185 @@
|
||||
enum class PrintingClass : uint32_t {
|
||||
kAnnotation,
|
||||
kArithmetic,
|
||||
kAtomic,
|
||||
kBarrier,
|
||||
kBit,
|
||||
kComposite,
|
||||
kConstant_Creation,
|
||||
kControl_Flow,
|
||||
kConversion,
|
||||
kDebug,
|
||||
kDerivative,
|
||||
kDevice_Side_Enqueue,
|
||||
kExtension,
|
||||
kFunction,
|
||||
kGroup,
|
||||
kImage,
|
||||
kMemory,
|
||||
kMiscellaneous,
|
||||
kMode_Setting,
|
||||
kNon_Uniform,
|
||||
kPipe,
|
||||
kPrimitive,
|
||||
kRelational_and_Logical,
|
||||
kReserved,
|
||||
kType_Declaration,
|
||||
k_exclude,
|
||||
};
|
||||
|
||||
enum Extension : uint32_t {
|
||||
kSPV_AMDX_shader_enqueue,
|
||||
kSPV_AMD_gcn_shader,
|
||||
kSPV_AMD_gpu_shader_half_float,
|
||||
kSPV_AMD_gpu_shader_half_float_fetch,
|
||||
kSPV_AMD_gpu_shader_int16,
|
||||
kSPV_AMD_shader_ballot,
|
||||
kSPV_AMD_shader_early_and_late_fragment_tests,
|
||||
kSPV_AMD_shader_explicit_vertex_parameter,
|
||||
kSPV_AMD_shader_fragment_mask,
|
||||
kSPV_AMD_shader_image_load_store_lod,
|
||||
kSPV_AMD_shader_trinary_minmax,
|
||||
kSPV_AMD_texture_gather_bias_lod,
|
||||
kSPV_ARM_cooperative_matrix_layouts,
|
||||
kSPV_ARM_core_builtins,
|
||||
kSPV_EXT_arithmetic_fence,
|
||||
kSPV_EXT_demote_to_helper_invocation,
|
||||
kSPV_EXT_descriptor_indexing,
|
||||
kSPV_EXT_fragment_fully_covered,
|
||||
kSPV_EXT_fragment_invocation_density,
|
||||
kSPV_EXT_fragment_shader_interlock,
|
||||
kSPV_EXT_mesh_shader,
|
||||
kSPV_EXT_opacity_micromap,
|
||||
kSPV_EXT_optnone,
|
||||
kSPV_EXT_physical_storage_buffer,
|
||||
kSPV_EXT_relaxed_printf_string_address_space,
|
||||
kSPV_EXT_replicated_composites,
|
||||
kSPV_EXT_shader_atomic_float16_add,
|
||||
kSPV_EXT_shader_atomic_float_add,
|
||||
kSPV_EXT_shader_atomic_float_min_max,
|
||||
kSPV_EXT_shader_image_int64,
|
||||
kSPV_EXT_shader_stencil_export,
|
||||
kSPV_EXT_shader_tile_image,
|
||||
kSPV_EXT_shader_viewport_index_layer,
|
||||
kSPV_GOOGLE_decorate_string,
|
||||
kSPV_GOOGLE_hlsl_functionality1,
|
||||
kSPV_GOOGLE_user_type,
|
||||
kSPV_INTEL_2d_block_io,
|
||||
kSPV_INTEL_arbitrary_precision_fixed_point,
|
||||
kSPV_INTEL_arbitrary_precision_floating_point,
|
||||
kSPV_INTEL_arbitrary_precision_integers,
|
||||
kSPV_INTEL_bfloat16_conversion,
|
||||
kSPV_INTEL_blocking_pipes,
|
||||
kSPV_INTEL_cache_controls,
|
||||
kSPV_INTEL_debug_module,
|
||||
kSPV_INTEL_device_side_avc_motion_estimation,
|
||||
kSPV_INTEL_float_controls2,
|
||||
kSPV_INTEL_fp_fast_math_mode,
|
||||
kSPV_INTEL_fp_max_error,
|
||||
kSPV_INTEL_fpga_argument_interfaces,
|
||||
kSPV_INTEL_fpga_buffer_location,
|
||||
kSPV_INTEL_fpga_cluster_attributes,
|
||||
kSPV_INTEL_fpga_dsp_control,
|
||||
kSPV_INTEL_fpga_invocation_pipelining_attributes,
|
||||
kSPV_INTEL_fpga_latency_control,
|
||||
kSPV_INTEL_fpga_loop_controls,
|
||||
kSPV_INTEL_fpga_memory_accesses,
|
||||
kSPV_INTEL_fpga_memory_attributes,
|
||||
kSPV_INTEL_fpga_reg,
|
||||
kSPV_INTEL_function_pointers,
|
||||
kSPV_INTEL_global_variable_fpga_decorations,
|
||||
kSPV_INTEL_global_variable_host_access,
|
||||
kSPV_INTEL_inline_assembly,
|
||||
kSPV_INTEL_int4,
|
||||
kSPV_INTEL_io_pipes,
|
||||
kSPV_INTEL_kernel_attributes,
|
||||
kSPV_INTEL_long_composites,
|
||||
kSPV_INTEL_loop_fuse,
|
||||
kSPV_INTEL_masked_gather_scatter,
|
||||
kSPV_INTEL_maximum_registers,
|
||||
kSPV_INTEL_media_block_io,
|
||||
kSPV_INTEL_memory_access_aliasing,
|
||||
kSPV_INTEL_optnone,
|
||||
kSPV_INTEL_runtime_aligned,
|
||||
kSPV_INTEL_shader_integer_functions2,
|
||||
kSPV_INTEL_split_barrier,
|
||||
kSPV_INTEL_subgroup_buffer_prefetch,
|
||||
kSPV_INTEL_subgroup_matrix_multiply_accumulate,
|
||||
kSPV_INTEL_subgroups,
|
||||
kSPV_INTEL_task_sequence,
|
||||
kSPV_INTEL_tensor_float32_conversion,
|
||||
kSPV_INTEL_ternary_bitwise_function,
|
||||
kSPV_INTEL_unstructured_loop_controls,
|
||||
kSPV_INTEL_usm_storage_classes,
|
||||
kSPV_INTEL_variable_length_array,
|
||||
kSPV_INTEL_vector_compute,
|
||||
kSPV_KHR_16bit_storage,
|
||||
kSPV_KHR_8bit_storage,
|
||||
kSPV_KHR_bfloat16,
|
||||
kSPV_KHR_bit_instructions,
|
||||
kSPV_KHR_compute_shader_derivatives,
|
||||
kSPV_KHR_cooperative_matrix,
|
||||
kSPV_KHR_device_group,
|
||||
kSPV_KHR_expect_assume,
|
||||
kSPV_KHR_float_controls,
|
||||
kSPV_KHR_float_controls2,
|
||||
kSPV_KHR_fragment_shader_barycentric,
|
||||
kSPV_KHR_fragment_shading_rate,
|
||||
kSPV_KHR_integer_dot_product,
|
||||
kSPV_KHR_linkonce_odr,
|
||||
kSPV_KHR_maximal_reconvergence,
|
||||
kSPV_KHR_multiview,
|
||||
kSPV_KHR_no_integer_wrap_decoration,
|
||||
kSPV_KHR_non_semantic_info,
|
||||
kSPV_KHR_physical_storage_buffer,
|
||||
kSPV_KHR_post_depth_coverage,
|
||||
kSPV_KHR_quad_control,
|
||||
kSPV_KHR_ray_cull_mask,
|
||||
kSPV_KHR_ray_query,
|
||||
kSPV_KHR_ray_tracing,
|
||||
kSPV_KHR_ray_tracing_position_fetch,
|
||||
kSPV_KHR_relaxed_extended_instruction,
|
||||
kSPV_KHR_shader_atomic_counter_ops,
|
||||
kSPV_KHR_shader_ballot,
|
||||
kSPV_KHR_shader_clock,
|
||||
kSPV_KHR_shader_draw_parameters,
|
||||
kSPV_KHR_storage_buffer_storage_class,
|
||||
kSPV_KHR_subgroup_rotate,
|
||||
kSPV_KHR_subgroup_uniform_control_flow,
|
||||
kSPV_KHR_subgroup_vote,
|
||||
kSPV_KHR_terminate_invocation,
|
||||
kSPV_KHR_uniform_group_instructions,
|
||||
kSPV_KHR_untyped_pointers,
|
||||
kSPV_KHR_variable_pointers,
|
||||
kSPV_KHR_vulkan_memory_model,
|
||||
kSPV_KHR_workgroup_memory_explicit_layout,
|
||||
kSPV_NVX_multiview_per_view_attributes,
|
||||
kSPV_NV_bindless_texture,
|
||||
kSPV_NV_cluster_acceleration_structure,
|
||||
kSPV_NV_compute_shader_derivatives,
|
||||
kSPV_NV_cooperative_matrix,
|
||||
kSPV_NV_cooperative_matrix2,
|
||||
kSPV_NV_cooperative_vector,
|
||||
kSPV_NV_displacement_micromap,
|
||||
kSPV_NV_fragment_shader_barycentric,
|
||||
kSPV_NV_geometry_shader_passthrough,
|
||||
kSPV_NV_linear_swept_spheres,
|
||||
kSPV_NV_mesh_shader,
|
||||
kSPV_NV_raw_access_chains,
|
||||
kSPV_NV_ray_tracing,
|
||||
kSPV_NV_ray_tracing_motion_blur,
|
||||
kSPV_NV_sample_mask_override_coverage,
|
||||
kSPV_NV_shader_atomic_fp16_vector,
|
||||
kSPV_NV_shader_image_footprint,
|
||||
kSPV_NV_shader_invocation_reorder,
|
||||
kSPV_NV_shader_sm_builtins,
|
||||
kSPV_NV_shader_subgroup_partitioned,
|
||||
kSPV_NV_shading_rate,
|
||||
kSPV_NV_stereo_view_rendering,
|
||||
kSPV_NV_tensor_addressing,
|
||||
kSPV_NV_viewport_array2,
|
||||
kSPV_QCOM_image_processing,
|
||||
kSPV_QCOM_image_processing2,
|
||||
kSPV_QCOM_tile_shading,
|
||||
kSPV_VALIDATOR_ignore_type_decl_unique,
|
||||
};
|
||||
File diff suppressed because one or more lines are too long
@@ -60,6 +60,7 @@ kSPV_INTEL_function_pointers,
|
||||
kSPV_INTEL_global_variable_fpga_decorations,
|
||||
kSPV_INTEL_global_variable_host_access,
|
||||
kSPV_INTEL_inline_assembly,
|
||||
kSPV_INTEL_int4,
|
||||
kSPV_INTEL_io_pipes,
|
||||
kSPV_INTEL_kernel_attributes,
|
||||
kSPV_INTEL_long_composites,
|
||||
@@ -75,12 +76,16 @@ kSPV_INTEL_split_barrier,
|
||||
kSPV_INTEL_subgroup_buffer_prefetch,
|
||||
kSPV_INTEL_subgroup_matrix_multiply_accumulate,
|
||||
kSPV_INTEL_subgroups,
|
||||
kSPV_INTEL_task_sequence,
|
||||
kSPV_INTEL_tensor_float32_conversion,
|
||||
kSPV_INTEL_ternary_bitwise_function,
|
||||
kSPV_INTEL_unstructured_loop_controls,
|
||||
kSPV_INTEL_usm_storage_classes,
|
||||
kSPV_INTEL_variable_length_array,
|
||||
kSPV_INTEL_vector_compute,
|
||||
kSPV_KHR_16bit_storage,
|
||||
kSPV_KHR_8bit_storage,
|
||||
kSPV_KHR_bfloat16,
|
||||
kSPV_KHR_bit_instructions,
|
||||
kSPV_KHR_compute_shader_derivatives,
|
||||
kSPV_KHR_cooperative_matrix,
|
||||
@@ -145,4 +150,5 @@ kSPV_NV_tensor_addressing,
|
||||
kSPV_NV_viewport_array2,
|
||||
kSPV_QCOM_image_processing,
|
||||
kSPV_QCOM_image_processing2,
|
||||
kSPV_QCOM_tile_shading,
|
||||
kSPV_VALIDATOR_ignore_type_decl_unique
|
||||
@@ -45,4 +45,5 @@
|
||||
{44, "Robert Konrad", "Kongruent", "Robert Konrad Kongruent"},
|
||||
{45, "Kitsunebi Games", "Nuvk SPIR-V Emitter and DLSL compiler", "Kitsunebi Games Nuvk SPIR-V Emitter and DLSL compiler"},
|
||||
{46, "Nintendo", "", "Nintendo"},
|
||||
{47, "ARM", "", "ARM"},
|
||||
{47, "ARM", "", "ARM"},
|
||||
{48, "Goopax", "", "Goopax"},
|
||||
@@ -1,86 +0,0 @@
|
||||
static const spv::Capability pygen_variable_caps_Float64[] = {spv::Capability::Float64};
|
||||
static const spv::Capability pygen_variable_caps_InterpolationFunction[] = {spv::Capability::InterpolationFunction};
|
||||
|
||||
static const spv_ext_inst_desc_t glsl_entries[] = {
|
||||
{"Round", 1, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"RoundEven", 2, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"Trunc", 3, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"FAbs", 4, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"SAbs", 5, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"FSign", 6, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"SSign", 7, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"Floor", 8, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"Ceil", 9, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"Fract", 10, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"Radians", 11, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"Degrees", 12, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"Sin", 13, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"Cos", 14, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"Tan", 15, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"Asin", 16, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"Acos", 17, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"Atan", 18, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"Sinh", 19, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"Cosh", 20, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"Tanh", 21, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"Asinh", 22, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"Acosh", 23, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"Atanh", 24, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"Atan2", 25, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"Pow", 26, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"Exp", 27, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"Log", 28, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"Exp2", 29, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"Log2", 30, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"Sqrt", 31, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"InverseSqrt", 32, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"Determinant", 33, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"MatrixInverse", 34, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"Modf", 35, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"ModfStruct", 36, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"FMin", 37, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"UMin", 38, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"SMin", 39, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"FMax", 40, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"UMax", 41, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"SMax", 42, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"FClamp", 43, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"UClamp", 44, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"SClamp", 45, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"FMix", 46, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"IMix", 47, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"Step", 48, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"SmoothStep", 49, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"Fma", 50, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"Frexp", 51, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"FrexpStruct", 52, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"Ldexp", 53, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"PackSnorm4x8", 54, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"PackUnorm4x8", 55, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"PackSnorm2x16", 56, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"PackUnorm2x16", 57, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"PackHalf2x16", 58, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"PackDouble2x32", 59, 1, pygen_variable_caps_Float64, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"UnpackSnorm2x16", 60, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"UnpackUnorm2x16", 61, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"UnpackHalf2x16", 62, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"UnpackSnorm4x8", 63, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"UnpackUnorm4x8", 64, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"UnpackDouble2x32", 65, 1, pygen_variable_caps_Float64, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"Length", 66, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"Distance", 67, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"Cross", 68, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"Normalize", 69, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"FaceForward", 70, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"Reflect", 71, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"Refract", 72, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"FindILsb", 73, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"FindSMsb", 74, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"FindUMsb", 75, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"InterpolateAtCentroid", 76, 1, pygen_variable_caps_InterpolationFunction, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"InterpolateAtSample", 77, 1, pygen_variable_caps_InterpolationFunction, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"InterpolateAtOffset", 78, 1, pygen_variable_caps_InterpolationFunction, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"NMin", 79, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"NMax", 80, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"NClamp", 81, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}
|
||||
};
|
||||
@@ -1,166 +0,0 @@
|
||||
|
||||
|
||||
static const spv_ext_inst_desc_t opencl_entries[] = {
|
||||
{"acos", 0, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"acosh", 1, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"acospi", 2, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"asin", 3, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"asinh", 4, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"asinpi", 5, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"atan", 6, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"atan2", 7, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"atanh", 8, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"atanpi", 9, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"atan2pi", 10, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"cbrt", 11, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"ceil", 12, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"copysign", 13, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"cos", 14, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"cosh", 15, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"cospi", 16, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"erfc", 17, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"erf", 18, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"exp", 19, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"exp2", 20, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"exp10", 21, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"expm1", 22, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"fabs", 23, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"fdim", 24, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"floor", 25, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"fma", 26, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"fmax", 27, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"fmin", 28, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"fmod", 29, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"fract", 30, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"frexp", 31, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"hypot", 32, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"ilogb", 33, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"ldexp", 34, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"lgamma", 35, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"lgamma_r", 36, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"log", 37, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"log2", 38, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"log10", 39, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"log1p", 40, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"logb", 41, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"mad", 42, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"maxmag", 43, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"minmag", 44, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"modf", 45, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"nan", 46, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"nextafter", 47, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"pow", 48, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"pown", 49, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"powr", 50, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"remainder", 51, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"remquo", 52, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"rint", 53, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"rootn", 54, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"round", 55, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"rsqrt", 56, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"sin", 57, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"sincos", 58, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"sinh", 59, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"sinpi", 60, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"sqrt", 61, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"tan", 62, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"tanh", 63, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"tanpi", 64, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"tgamma", 65, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"trunc", 66, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"half_cos", 67, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"half_divide", 68, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"half_exp", 69, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"half_exp2", 70, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"half_exp10", 71, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"half_log", 72, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"half_log2", 73, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"half_log10", 74, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"half_powr", 75, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"half_recip", 76, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"half_rsqrt", 77, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"half_sin", 78, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"half_sqrt", 79, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"half_tan", 80, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"native_cos", 81, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"native_divide", 82, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"native_exp", 83, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"native_exp2", 84, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"native_exp10", 85, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"native_log", 86, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"native_log2", 87, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"native_log10", 88, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"native_powr", 89, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"native_recip", 90, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"native_rsqrt", 91, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"native_sin", 92, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"native_sqrt", 93, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"native_tan", 94, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"fclamp", 95, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"degrees", 96, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"fmax_common", 97, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"fmin_common", 98, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"mix", 99, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"radians", 100, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"step", 101, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"smoothstep", 102, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"sign", 103, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"cross", 104, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"distance", 105, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"length", 106, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"normalize", 107, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"fast_distance", 108, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"fast_length", 109, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"fast_normalize", 110, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"s_abs", 141, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"s_abs_diff", 142, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"s_add_sat", 143, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"u_add_sat", 144, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"s_hadd", 145, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"u_hadd", 146, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"s_rhadd", 147, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"u_rhadd", 148, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"s_clamp", 149, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"u_clamp", 150, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"clz", 151, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"ctz", 152, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"s_mad_hi", 153, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"u_mad_sat", 154, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"s_mad_sat", 155, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"s_max", 156, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"u_max", 157, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"s_min", 158, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"u_min", 159, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"s_mul_hi", 160, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"rotate", 161, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"s_sub_sat", 162, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"u_sub_sat", 163, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"u_upsample", 164, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"s_upsample", 165, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"popcount", 166, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"s_mad24", 167, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"u_mad24", 168, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"s_mul24", 169, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"u_mul24", 170, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"vloadn", 171, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_NONE}},
|
||||
{"vstoren", 172, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"vload_half", 173, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"vload_halfn", 174, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_NONE}},
|
||||
{"vstore_half", 175, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"vstore_half_r", 176, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_FP_ROUNDING_MODE, SPV_OPERAND_TYPE_NONE}},
|
||||
{"vstore_halfn", 177, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"vstore_halfn_r", 178, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_FP_ROUNDING_MODE, SPV_OPERAND_TYPE_NONE}},
|
||||
{"vloada_halfn", 179, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_NONE}},
|
||||
{"vstorea_halfn", 180, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"vstorea_halfn_r", 181, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_FP_ROUNDING_MODE, SPV_OPERAND_TYPE_NONE}},
|
||||
{"shuffle", 182, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"shuffle2", 183, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"printf", 184, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"prefetch", 185, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"bitselect", 186, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"select", 187, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"u_abs", 201, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"u_abs_diff", 202, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"u_mul_hi", 203, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"u_mad_hi", 204, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}
|
||||
};
|
||||
File diff suppressed because it is too large
Load Diff
@@ -328,6 +328,18 @@ typedef enum spv_operand_type_t {
|
||||
SPV_OPERAND_TYPE_COOPERATIVE_VECTOR_MATRIX_LAYOUT,
|
||||
SPV_OPERAND_TYPE_COMPONENT_TYPE,
|
||||
|
||||
// From nonesmantic.clspvreflection
|
||||
SPV_OPERAND_TYPE_KERNEL_PROPERTY_FLAGS,
|
||||
|
||||
// From nonesmantic.shader.debuginfo.100
|
||||
SPV_OPERAND_TYPE_SHDEBUG100_BUILD_IDENTIFIER_FLAGS,
|
||||
SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING,
|
||||
SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_COMPOSITE_TYPE,
|
||||
SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_IMPORTED_ENTITY,
|
||||
SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_INFO_FLAGS,
|
||||
SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_OPERATION,
|
||||
SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_TYPE_QUALIFIER,
|
||||
|
||||
// This is a sentinel value, and does not represent an operand type.
|
||||
// It should come last.
|
||||
SPV_OPERAND_TYPE_NUM_OPERAND_TYPES,
|
||||
|
||||
@@ -973,6 +973,55 @@ Optimizer::PassToken CreateModifyMaximalReconvergencePass(bool add);
|
||||
// parameters into separate image and sampler parts. Binding numbers and
|
||||
// other decorations are copied.
|
||||
Optimizer::PassToken CreateSplitCombinedImageSamplerPass();
|
||||
|
||||
// Creates a pass to remap bindings to avoid conflicts, assuming the module
|
||||
// is valid for Vulkan. A conflict exits when an entry point uses two distinct
|
||||
// variables with the same descriptor set and binding. Vulkan allows one kind
|
||||
// of conflict: when one varible is an image (or array of images), and the
|
||||
// other is a sampler (or an array of samplers).
|
||||
|
||||
// Conflicts are eliminated by incrementing the binding number of the sampler
|
||||
// part, and then propagating that increment through variables with
|
||||
// higher-numbered bindings until no conflict remains. This handles the case
|
||||
// when multiple shaders may share the same resource variables; this can
|
||||
// introduce holes in binding slots.
|
||||
//
|
||||
// Here's an example where shaders Alpha, Beta, Gamma, Delta collectively use
|
||||
// resource variables %100, %101, %102, %103, %104 all with the same
|
||||
// DescriptorSet and with Bindings as in the following table:
|
||||
//
|
||||
// Before:
|
||||
//
|
||||
// Binding: 0 1 2 3
|
||||
// Alpha: %100,%101
|
||||
// Beta: %100 %102
|
||||
// Gamma: %102 %103
|
||||
// Delta: %103 %104
|
||||
//
|
||||
// The Alpha shader has a conflict where variables %100, %101 have the same
|
||||
// descriptor set and binding. If %100 is a sampler resource variable, then
|
||||
// the conflict is resolved by incrementing the binding number on %100 from 0
|
||||
// to 1. But this causes a new confict for shader Beta because it now uses
|
||||
// both %100 and %102 with binding number 1. That conflict is resolved by
|
||||
// incrementing the binding number on its variable that originally appeared
|
||||
// second (i.e. %102), so %102 gets binding 2. This now produces a conflict
|
||||
// for Gamma between %102 and %103 using binding number 2. Since %103 originally
|
||||
// appeared second (in the view from Gamma), the algorithm bumps %103 to binding
|
||||
// number %103. Now Delta has a conflict between %103 and %104, resulting in
|
||||
// %104 getting the next binding number, 4. The picture afterward is:
|
||||
//
|
||||
// After:
|
||||
//
|
||||
// Binding: 0 1 2 3 4
|
||||
// Alpha: %101 %100
|
||||
// Beta: %100 %102
|
||||
// Gamma: %102 %103
|
||||
// Delta: %103 %104
|
||||
//
|
||||
//
|
||||
// This pass assumes binding numbers are not applid via decoration groups
|
||||
// (OpDecorationGroup).
|
||||
Optimizer::PassToken CreateResolveBindingConflictsPass();
|
||||
} // namespace spvtools
|
||||
|
||||
#endif // INCLUDE_SPIRV_TOOLS_OPTIMIZER_HPP_
|
||||
|
||||
72
3rdparty/spirv-tools/source/assembly_grammar.cpp
vendored
72
3rdparty/spirv-tools/source/assembly_grammar.cpp
vendored
@@ -23,6 +23,7 @@
|
||||
#include "source/operand.h"
|
||||
#include "source/spirv_target_env.h"
|
||||
#include "source/table.h"
|
||||
#include "source/table2.h"
|
||||
|
||||
namespace spvtools {
|
||||
namespace {
|
||||
@@ -35,15 +36,12 @@ namespace {
|
||||
///
|
||||
/// On success, the value is written to pValue.
|
||||
///
|
||||
/// @param[in] operandTable operand lookup table
|
||||
/// @param[in] type of the operand
|
||||
/// @param[in] textValue word of text to be parsed
|
||||
/// @param[out] pValue where the resulting value is written
|
||||
///
|
||||
/// @return result code
|
||||
spv_result_t spvTextParseMaskOperand(spv_target_env env,
|
||||
const spv_operand_table operandTable,
|
||||
const spv_operand_type_t type,
|
||||
spv_result_t spvTextParseMaskOperand(const spv_operand_type_t type,
|
||||
const char* textValue, uint32_t* pValue) {
|
||||
if (textValue == nullptr) return SPV_ERROR_INVALID_TEXT;
|
||||
size_t text_length = strlen(textValue);
|
||||
@@ -62,9 +60,9 @@ spv_result_t spvTextParseMaskOperand(spv_target_env env,
|
||||
do {
|
||||
end = std::find(begin, text_end, separator);
|
||||
|
||||
spv_operand_desc entry = nullptr;
|
||||
if (auto error = spvOperandTableNameLookup(env, operandTable, type, begin,
|
||||
end - begin, &entry)) {
|
||||
const spvtools::OperandDesc* entry = nullptr;
|
||||
if (auto error =
|
||||
spvtools::LookupOperand(type, begin, end - begin, &entry)) {
|
||||
return error;
|
||||
}
|
||||
value |= entry->value;
|
||||
@@ -170,23 +168,20 @@ const size_t kNumOpSpecConstantOpcodes =
|
||||
|
||||
} // namespace
|
||||
|
||||
bool AssemblyGrammar::isValid() const {
|
||||
return operandTable_ && opcodeTable_ && extInstTable_;
|
||||
}
|
||||
|
||||
CapabilitySet AssemblyGrammar::filterCapsAgainstTargetEnv(
|
||||
const spv::Capability* cap_array, uint32_t count) const {
|
||||
CapabilitySet cap_set;
|
||||
const auto version = spvVersionForTargetEnv(target_env_);
|
||||
for (uint32_t i = 0; i < count; ++i) {
|
||||
spv_operand_desc entry = {};
|
||||
if (SPV_SUCCESS == lookupOperand(SPV_OPERAND_TYPE_CAPABILITY,
|
||||
static_cast<uint32_t>(cap_array[i]),
|
||||
&entry)) {
|
||||
const spvtools::OperandDesc* entry = nullptr;
|
||||
if (SPV_SUCCESS ==
|
||||
spvtools::LookupOperand(SPV_OPERAND_TYPE_CAPABILITY,
|
||||
static_cast<uint32_t>(cap_array[i]), &entry)) {
|
||||
// This token is visible in this environment if it's in an appropriate
|
||||
// core version, or it is enabled by a capability or an extension.
|
||||
if ((version >= entry->minVersion && version <= entry->lastVersion) ||
|
||||
entry->numExtensions > 0u || entry->numCapabilities > 0u) {
|
||||
entry->extensions_range.count() > 0u ||
|
||||
entry->capabilities_range.count() > 0u) {
|
||||
cap_set.insert(cap_array[i]);
|
||||
}
|
||||
}
|
||||
@@ -194,28 +189,13 @@ CapabilitySet AssemblyGrammar::filterCapsAgainstTargetEnv(
|
||||
return cap_set;
|
||||
}
|
||||
|
||||
spv_result_t AssemblyGrammar::lookupOpcode(const char* name,
|
||||
spv_opcode_desc* desc) const {
|
||||
return spvOpcodeTableNameLookup(target_env_, opcodeTable_, name, desc);
|
||||
}
|
||||
|
||||
spv_result_t AssemblyGrammar::lookupOpcode(spv::Op opcode,
|
||||
spv_opcode_desc* desc) const {
|
||||
return spvOpcodeTableValueLookup(target_env_, opcodeTable_, opcode, desc);
|
||||
}
|
||||
|
||||
spv_result_t AssemblyGrammar::lookupOperand(spv_operand_type_t type,
|
||||
const char* name, size_t name_len,
|
||||
spv_operand_desc* desc) const {
|
||||
return spvOperandTableNameLookup(target_env_, operandTable_, type, name,
|
||||
name_len, desc);
|
||||
}
|
||||
|
||||
spv_result_t AssemblyGrammar::lookupOperand(spv_operand_type_t type,
|
||||
uint32_t operand,
|
||||
spv_operand_desc* desc) const {
|
||||
return spvOperandTableValueLookup(target_env_, operandTable_, type, operand,
|
||||
desc);
|
||||
const char* AssemblyGrammar::lookupOperandName(spv_operand_type_t type,
|
||||
uint32_t operand) const {
|
||||
const spvtools::OperandDesc* desc = nullptr;
|
||||
if (spvtools::LookupOperand(type, operand, &desc) != SPV_SUCCESS || !desc) {
|
||||
return "Unknown";
|
||||
}
|
||||
return desc->name().data();
|
||||
}
|
||||
|
||||
spv_result_t AssemblyGrammar::lookupSpecConstantOpcode(const char* name,
|
||||
@@ -245,25 +225,13 @@ spv_result_t AssemblyGrammar::lookupSpecConstantOpcode(spv::Op opcode) const {
|
||||
spv_result_t AssemblyGrammar::parseMaskOperand(const spv_operand_type_t type,
|
||||
const char* textValue,
|
||||
uint32_t* pValue) const {
|
||||
return spvTextParseMaskOperand(target_env_, operandTable_, type, textValue,
|
||||
pValue);
|
||||
}
|
||||
spv_result_t AssemblyGrammar::lookupExtInst(spv_ext_inst_type_t type,
|
||||
const char* textValue,
|
||||
spv_ext_inst_desc* extInst) const {
|
||||
return spvExtInstTableNameLookup(extInstTable_, type, textValue, extInst);
|
||||
}
|
||||
|
||||
spv_result_t AssemblyGrammar::lookupExtInst(spv_ext_inst_type_t type,
|
||||
uint32_t firstWord,
|
||||
spv_ext_inst_desc* extInst) const {
|
||||
return spvExtInstTableValueLookup(extInstTable_, type, firstWord, extInst);
|
||||
return spvTextParseMaskOperand(type, textValue, pValue);
|
||||
}
|
||||
|
||||
void AssemblyGrammar::pushOperandTypesForMask(
|
||||
const spv_operand_type_t type, const uint32_t mask,
|
||||
spv_operand_pattern_t* pattern) const {
|
||||
spvPushOperandTypesForMask(target_env_, operandTable_, type, mask, pattern);
|
||||
spvPushOperandTypesForMask(type, mask, pattern);
|
||||
}
|
||||
|
||||
} // namespace spvtools
|
||||
|
||||
62
3rdparty/spirv-tools/source/assembly_grammar.h
vendored
62
3rdparty/spirv-tools/source/assembly_grammar.h
vendored
@@ -19,6 +19,7 @@
|
||||
#include "source/latest_version_spirv_header.h"
|
||||
#include "source/operand.h"
|
||||
#include "source/table.h"
|
||||
#include "source/util/span.h"
|
||||
#include "spirv-tools/libspirv.h"
|
||||
|
||||
namespace spvtools {
|
||||
@@ -28,54 +29,28 @@ namespace spvtools {
|
||||
class AssemblyGrammar {
|
||||
public:
|
||||
explicit AssemblyGrammar(const spv_const_context context)
|
||||
: target_env_(context->target_env),
|
||||
operandTable_(context->operand_table),
|
||||
opcodeTable_(context->opcode_table),
|
||||
extInstTable_(context->ext_inst_table) {}
|
||||
|
||||
// Returns true if the internal tables have been initialized with valid data.
|
||||
bool isValid() const;
|
||||
: target_env_(context->target_env) {}
|
||||
|
||||
// Returns the SPIR-V target environment.
|
||||
spv_target_env target_env() const { return target_env_; }
|
||||
|
||||
// Removes capabilities not available in the current target environment and
|
||||
// returns the rest.
|
||||
// TODO(crbug.com/266223071) Remove this.
|
||||
CapabilitySet filterCapsAgainstTargetEnv(const spv::Capability* cap_array,
|
||||
uint32_t count) const;
|
||||
|
||||
// Fills in the desc parameter with the information about the opcode
|
||||
// of the given name. Returns SPV_SUCCESS if the opcode was found, and
|
||||
// SPV_ERROR_INVALID_LOOKUP if the opcode does not exist.
|
||||
spv_result_t lookupOpcode(const char* name, spv_opcode_desc* desc) const;
|
||||
|
||||
// Fills in the desc parameter with the information about the opcode
|
||||
// of the valid. Returns SPV_SUCCESS if the opcode was found, and
|
||||
// SPV_ERROR_INVALID_LOOKUP if the opcode does not exist.
|
||||
spv_result_t lookupOpcode(spv::Op opcode, spv_opcode_desc* desc) const;
|
||||
|
||||
// Fills in the desc parameter with the information about the given
|
||||
// operand. Returns SPV_SUCCESS if the operand was found, and
|
||||
// SPV_ERROR_INVALID_LOOKUP otherwise.
|
||||
spv_result_t lookupOperand(spv_operand_type_t type, const char* name,
|
||||
size_t name_len, spv_operand_desc* desc) const;
|
||||
|
||||
// Fills in the desc parameter with the information about the given
|
||||
// operand. Returns SPV_SUCCESS if the operand was found, and
|
||||
// SPV_ERROR_INVALID_LOOKUP otherwise.
|
||||
spv_result_t lookupOperand(spv_operand_type_t type, uint32_t operand,
|
||||
spv_operand_desc* desc) const;
|
||||
// Removes capabilities not available in the current target environment and
|
||||
// returns the rest.
|
||||
CapabilitySet filterCapsAgainstTargetEnv(
|
||||
const spvtools::utils::Span<const spv::Capability>& caps) const {
|
||||
return filterCapsAgainstTargetEnv(caps.begin(),
|
||||
static_cast<uint32_t>(caps.size()));
|
||||
}
|
||||
|
||||
// Finds operand entry in the grammar table and returns its name.
|
||||
// Returns "Unknown" if not found.
|
||||
const char* lookupOperandName(spv_operand_type_t type,
|
||||
uint32_t operand) const {
|
||||
spv_operand_desc desc = nullptr;
|
||||
if (lookupOperand(type, operand, &desc) != SPV_SUCCESS || !desc) {
|
||||
return "Unknown";
|
||||
}
|
||||
return desc->name;
|
||||
}
|
||||
uint32_t operand) const;
|
||||
|
||||
// Finds the opcode for the given OpSpecConstantOp opcode name. The name
|
||||
// should not have the "Op" prefix. For example, "IAdd" corresponds to
|
||||
@@ -101,18 +76,6 @@ class AssemblyGrammar {
|
||||
spv_result_t parseMaskOperand(const spv_operand_type_t type,
|
||||
const char* textValue, uint32_t* pValue) const;
|
||||
|
||||
// Writes the extended operand with the given type and text to the *extInst
|
||||
// parameter.
|
||||
// Returns SPV_SUCCESS if the value could be found.
|
||||
spv_result_t lookupExtInst(spv_ext_inst_type_t type, const char* textValue,
|
||||
spv_ext_inst_desc* extInst) const;
|
||||
|
||||
// Writes the extended operand with the given type and first encoded word
|
||||
// to the *extInst parameter.
|
||||
// Returns SPV_SUCCESS if the value could be found.
|
||||
spv_result_t lookupExtInst(spv_ext_inst_type_t type, uint32_t firstWord,
|
||||
spv_ext_inst_desc* extInst) const;
|
||||
|
||||
// Inserts the operands expected after the given typed mask onto the end
|
||||
// of the given pattern.
|
||||
//
|
||||
@@ -129,9 +92,6 @@ class AssemblyGrammar {
|
||||
|
||||
private:
|
||||
const spv_target_env target_env_;
|
||||
const spv_operand_table operandTable_;
|
||||
const spv_opcode_table opcodeTable_;
|
||||
const spv_ext_inst_table extInstTable_;
|
||||
};
|
||||
|
||||
} // namespace spvtools
|
||||
|
||||
64
3rdparty/spirv-tools/source/binary.cpp
vendored
64
3rdparty/spirv-tools/source/binary.cpp
vendored
@@ -33,6 +33,7 @@
|
||||
#include "source/operand.h"
|
||||
#include "source/spirv_constant.h"
|
||||
#include "source/spirv_endian.h"
|
||||
#include "source/table2.h"
|
||||
#include "source/util/string_utils.h"
|
||||
|
||||
spv_result_t spvBinaryHeaderGet(const spv_const_binary binary,
|
||||
@@ -317,8 +318,8 @@ spv_result_t Parser::parseInstruction() {
|
||||
return diagnostic() << "Invalid instruction word count: "
|
||||
<< inst_word_count;
|
||||
}
|
||||
spv_opcode_desc opcode_desc;
|
||||
if (grammar_.lookupOpcode(static_cast<spv::Op>(inst.opcode), &opcode_desc))
|
||||
const spvtools::InstructionDesc* opcode_desc = nullptr;
|
||||
if (spvtools::LookupOpcode(static_cast<spv::Op>(inst.opcode), &opcode_desc))
|
||||
return diagnostic() << "Invalid opcode: " << inst.opcode;
|
||||
|
||||
// Advance past the opcode word. But remember the of the start
|
||||
@@ -334,16 +335,15 @@ spv_result_t Parser::parseInstruction() {
|
||||
// ExecutionMode), or for extended instructions that may have their
|
||||
// own operands depending on the selected extended instruction.
|
||||
_.expected_operands.clear();
|
||||
for (auto i = 0; i < opcode_desc->numTypes; i++)
|
||||
_.expected_operands.push_back(
|
||||
opcode_desc->operandTypes[opcode_desc->numTypes - i - 1]);
|
||||
|
||||
spvPushOperandTypes(opcode_desc->operands(), &_.expected_operands);
|
||||
|
||||
while (_.word_index < inst_offset + inst_word_count) {
|
||||
const uint16_t inst_word_index = uint16_t(_.word_index - inst_offset);
|
||||
if (_.expected_operands.empty()) {
|
||||
return diagnostic() << "Invalid instruction Op" << opcode_desc->name
|
||||
<< " starting at word " << inst_offset
|
||||
<< ": expected no more operands after "
|
||||
return diagnostic() << "Invalid instruction Op"
|
||||
<< opcode_desc->name().data() << " starting at word "
|
||||
<< inst_offset << ": expected no more operands after "
|
||||
<< inst_word_index
|
||||
<< " words, but stated word count is "
|
||||
<< inst_word_count << ".";
|
||||
@@ -362,15 +362,15 @@ spv_result_t Parser::parseInstruction() {
|
||||
if (!_.expected_operands.empty() &&
|
||||
!spvOperandIsOptional(_.expected_operands.back())) {
|
||||
return diagnostic() << "End of input reached while decoding Op"
|
||||
<< opcode_desc->name << " starting at word "
|
||||
<< opcode_desc->name().data() << " starting at word "
|
||||
<< inst_offset << ": expected more operands after "
|
||||
<< inst_word_count << " words.";
|
||||
}
|
||||
|
||||
if ((inst_offset + inst_word_count) != _.word_index) {
|
||||
return diagnostic() << "Invalid word count: Op" << opcode_desc->name
|
||||
<< " starting at word " << inst_offset
|
||||
<< " says it has " << inst_word_count
|
||||
return diagnostic() << "Invalid word count: Op"
|
||||
<< opcode_desc->name().data() << " starting at word "
|
||||
<< inst_offset << " says it has " << inst_word_count
|
||||
<< " words, but found " << _.word_index - inst_offset
|
||||
<< " words instead.";
|
||||
}
|
||||
@@ -496,11 +496,12 @@ spv_result_t Parser::parseOperand(size_t inst_offset,
|
||||
case SPV_OPERAND_TYPE_EXTENSION_INSTRUCTION_NUMBER: {
|
||||
assert(spvIsExtendedInstruction(opcode));
|
||||
assert(inst->ext_inst_type != SPV_EXT_INST_TYPE_NONE);
|
||||
spv_ext_inst_desc ext_inst;
|
||||
if (grammar_.lookupExtInst(inst->ext_inst_type, word, &ext_inst) ==
|
||||
|
||||
const spvtools::ExtInstDesc* desc = nullptr;
|
||||
if (spvtools::LookupExtInst(inst->ext_inst_type, word, &desc) ==
|
||||
SPV_SUCCESS) {
|
||||
// if we know about this ext inst, push the expected operands
|
||||
spvPushOperandTypes(ext_inst->operandTypes, expected_operands);
|
||||
spvPushOperandTypes(desc->operands(), expected_operands);
|
||||
} else {
|
||||
// if we don't know this extended instruction and the set isn't
|
||||
// non-semantic, we cannot process further
|
||||
@@ -522,8 +523,8 @@ spv_result_t Parser::parseOperand(size_t inst_offset,
|
||||
return diagnostic()
|
||||
<< "Invalid " << spvOperandTypeStr(type) << ": " << word;
|
||||
}
|
||||
spv_opcode_desc opcode_entry = nullptr;
|
||||
if (grammar_.lookupOpcode(spv::Op(word), &opcode_entry)) {
|
||||
const spvtools::InstructionDesc* opcode_entry = nullptr;
|
||||
if (spvtools::LookupOpcode(spv::Op(word), &opcode_entry)) {
|
||||
return diagnostic(SPV_ERROR_INTERNAL)
|
||||
<< "OpSpecConstant opcode table out of sync";
|
||||
}
|
||||
@@ -532,8 +533,9 @@ spv_result_t Parser::parseOperand(size_t inst_offset,
|
||||
// operants for the opcode.
|
||||
assert(opcode_entry->hasType);
|
||||
assert(opcode_entry->hasResult);
|
||||
assert(opcode_entry->numTypes >= 2);
|
||||
spvPushOperandTypes(opcode_entry->operandTypes + 2, expected_operands);
|
||||
assert(opcode_entry->operands().size() >= 2);
|
||||
spvPushOperandTypes(opcode_entry->operands().subspan(2),
|
||||
expected_operands);
|
||||
} break;
|
||||
|
||||
case SPV_OPERAND_TYPE_LITERAL_INTEGER:
|
||||
@@ -687,19 +689,19 @@ spv_result_t Parser::parseOperand(size_t inst_offset,
|
||||
if (type == SPV_OPERAND_TYPE_OPTIONAL_FPENCODING)
|
||||
parsed_operand.type = SPV_OPERAND_TYPE_FPENCODING;
|
||||
|
||||
spv_operand_desc entry;
|
||||
if (grammar_.lookupOperand(type, word, &entry)) {
|
||||
const spvtools::OperandDesc* entry = nullptr;
|
||||
if (spvtools::LookupOperand(type, word, &entry)) {
|
||||
return diagnostic()
|
||||
<< "Invalid " << spvOperandTypeStr(parsed_operand.type)
|
||||
<< " operand: " << word;
|
||||
}
|
||||
// Prepare to accept operands to this operand, if needed.
|
||||
spvPushOperandTypes(entry->operandTypes, expected_operands);
|
||||
spvPushOperandTypes(entry->operands(), expected_operands);
|
||||
} break;
|
||||
|
||||
case SPV_OPERAND_TYPE_SOURCE_LANGUAGE: {
|
||||
spv_operand_desc entry;
|
||||
if (grammar_.lookupOperand(type, word, &entry)) {
|
||||
const spvtools::OperandDesc* entry = nullptr;
|
||||
if (spvtools::LookupOperand(type, word, &entry)) {
|
||||
return diagnostic()
|
||||
<< "Invalid " << spvOperandTypeStr(parsed_operand.type)
|
||||
<< " operand: " << word
|
||||
@@ -709,7 +711,7 @@ spv_result_t Parser::parseOperand(size_t inst_offset,
|
||||
"SPIRV-Headers";
|
||||
}
|
||||
// Prepare to accept operands to this operand, if needed.
|
||||
spvPushOperandTypes(entry->operandTypes, expected_operands);
|
||||
spvPushOperandTypes(entry->operands(), expected_operands);
|
||||
} break;
|
||||
|
||||
case SPV_OPERAND_TYPE_FP_FAST_MATH_MODE:
|
||||
@@ -753,23 +755,23 @@ spv_result_t Parser::parseOperand(size_t inst_offset,
|
||||
uint32_t remaining_word = word;
|
||||
for (uint32_t mask = (1u << 31); remaining_word; mask >>= 1) {
|
||||
if (remaining_word & mask) {
|
||||
spv_operand_desc entry;
|
||||
if (grammar_.lookupOperand(type, mask, &entry)) {
|
||||
const spvtools::OperandDesc* entry = nullptr;
|
||||
if (spvtools::LookupOperand(type, mask, &entry)) {
|
||||
return diagnostic()
|
||||
<< "Invalid " << spvOperandTypeStr(parsed_operand.type)
|
||||
<< " operand: " << word << " has invalid mask component "
|
||||
<< mask;
|
||||
}
|
||||
remaining_word ^= mask;
|
||||
spvPushOperandTypes(entry->operandTypes, expected_operands);
|
||||
spvPushOperandTypes(entry->operands(), expected_operands);
|
||||
}
|
||||
}
|
||||
if (word == 0) {
|
||||
// An all-zeroes mask *might* also be valid.
|
||||
spv_operand_desc entry;
|
||||
if (SPV_SUCCESS == grammar_.lookupOperand(type, 0, &entry)) {
|
||||
const spvtools::OperandDesc* entry = nullptr;
|
||||
if (SPV_SUCCESS == spvtools::LookupOperand(type, 0, &entry)) {
|
||||
// Prepare for its operands, if any.
|
||||
spvPushOperandTypes(entry->operandTypes, expected_operands);
|
||||
spvPushOperandTypes(entry->operands(), expected_operands);
|
||||
}
|
||||
}
|
||||
} break;
|
||||
|
||||
27
3rdparty/spirv-tools/source/diff/diff.cpp
vendored
27
3rdparty/spirv-tools/source/diff/diff.cpp
vendored
@@ -2798,30 +2798,7 @@ spv_result_t Differ::Output() {
|
||||
src_id_to_.inst_map_.resize(id_map_.SrcToDstMap().IdBound(), nullptr);
|
||||
dst_id_to_.inst_map_.resize(id_map_.DstToSrcMap().IdBound(), nullptr);
|
||||
|
||||
const spv_target_env target_env = SPV_ENV_UNIVERSAL_1_6;
|
||||
spv_opcode_table opcode_table;
|
||||
spv_operand_table operand_table;
|
||||
spv_ext_inst_table ext_inst_table;
|
||||
spv_result_t result;
|
||||
|
||||
result = spvOpcodeTableGet(&opcode_table, target_env);
|
||||
if (result != SPV_SUCCESS) return result;
|
||||
|
||||
result = spvOperandTableGet(&operand_table, target_env);
|
||||
if (result != SPV_SUCCESS) return result;
|
||||
|
||||
result = spvExtInstTableGet(&ext_inst_table, target_env);
|
||||
if (result != SPV_SUCCESS) return result;
|
||||
|
||||
spv_context_t context{
|
||||
target_env,
|
||||
opcode_table,
|
||||
operand_table,
|
||||
ext_inst_table,
|
||||
};
|
||||
|
||||
const AssemblyGrammar grammar(&context);
|
||||
if (!grammar.isValid()) return SPV_ERROR_INVALID_TABLE;
|
||||
spv_context_t context{SPV_ENV_UNIVERSAL_1_6, nullptr};
|
||||
|
||||
uint32_t disassembly_options = SPV_BINARY_TO_TEXT_OPTION_PRINT;
|
||||
if (options_.indent) {
|
||||
@@ -2829,7 +2806,7 @@ spv_result_t Differ::Output() {
|
||||
}
|
||||
|
||||
NameMapper name_mapper = GetTrivialNameMapper();
|
||||
disassemble::InstructionDisassembler dis(grammar, out_, disassembly_options,
|
||||
disassemble::InstructionDisassembler dis(out_, disassembly_options,
|
||||
name_mapper);
|
||||
|
||||
if (!options_.no_header) {
|
||||
|
||||
62
3rdparty/spirv-tools/source/disassemble.cpp
vendored
62
3rdparty/spirv-tools/source/disassemble.cpp
vendored
@@ -31,7 +31,6 @@
|
||||
#include <unordered_map>
|
||||
#include <utility>
|
||||
|
||||
#include "source/assembly_grammar.h"
|
||||
#include "source/binary.h"
|
||||
#include "source/diagnostic.h"
|
||||
#include "source/ext_inst.h"
|
||||
@@ -40,6 +39,7 @@
|
||||
#include "source/print.h"
|
||||
#include "source/spirv_constant.h"
|
||||
#include "source/spirv_endian.h"
|
||||
#include "source/table2.h"
|
||||
#include "source/util/hex_float.h"
|
||||
#include "source/util/make_unique.h"
|
||||
#include "spirv-tools/libspirv.h"
|
||||
@@ -115,8 +115,7 @@ struct ControlFlowGraph {
|
||||
// representation.
|
||||
class Disassembler {
|
||||
public:
|
||||
Disassembler(const AssemblyGrammar& grammar, uint32_t options,
|
||||
NameMapper name_mapper)
|
||||
Disassembler(uint32_t options, NameMapper name_mapper)
|
||||
: print_(spvIsInBitfield(SPV_BINARY_TO_TEXT_OPTION_PRINT, options)),
|
||||
nested_indent_(
|
||||
spvIsInBitfield(SPV_BINARY_TO_TEXT_OPTION_NESTED_INDENT, options)),
|
||||
@@ -124,7 +123,7 @@ class Disassembler {
|
||||
spvIsInBitfield(SPV_BINARY_TO_TEXT_OPTION_REORDER_BLOCKS, options)),
|
||||
text_(),
|
||||
out_(print_ ? out_stream() : out_stream(text_)),
|
||||
instruction_disassembler_(grammar, out_.get(), options, name_mapper),
|
||||
instruction_disassembler_(out_.get(), options, name_mapper),
|
||||
header_(!spvIsInBitfield(SPV_BINARY_TO_TEXT_OPTION_NO_HEADER, options)),
|
||||
byte_offset_(0) {}
|
||||
|
||||
@@ -624,12 +623,10 @@ constexpr uint32_t kCommentColumn = 50;
|
||||
} // namespace
|
||||
|
||||
namespace disassemble {
|
||||
InstructionDisassembler::InstructionDisassembler(const AssemblyGrammar& grammar,
|
||||
std::ostream& stream,
|
||||
InstructionDisassembler::InstructionDisassembler(std::ostream& stream,
|
||||
uint32_t options,
|
||||
NameMapper name_mapper)
|
||||
: grammar_(grammar),
|
||||
stream_(stream),
|
||||
: stream_(stream),
|
||||
print_(spvIsInBitfield(SPV_BINARY_TO_TEXT_OPTION_PRINT, options)),
|
||||
color_(spvIsInBitfield(SPV_BINARY_TO_TEXT_OPTION_COLOR, options)),
|
||||
indent_(spvIsInBitfield(SPV_BINARY_TO_TEXT_OPTION_INDENT, options)
|
||||
@@ -870,11 +867,10 @@ void InstructionDisassembler::EmitOperand(std::ostream& stream,
|
||||
stream << "%" << name_mapper_(word);
|
||||
break;
|
||||
case SPV_OPERAND_TYPE_EXTENSION_INSTRUCTION_NUMBER: {
|
||||
spv_ext_inst_desc ext_inst;
|
||||
SetRed(stream);
|
||||
if (grammar_.lookupExtInst(inst.ext_inst_type, word, &ext_inst) ==
|
||||
SPV_SUCCESS) {
|
||||
stream << ext_inst->name;
|
||||
const ExtInstDesc* desc = nullptr;
|
||||
if (LookupExtInst(inst.ext_inst_type, word, &desc) == SPV_SUCCESS) {
|
||||
stream << desc->name().data();
|
||||
} else {
|
||||
if (!spvExtInstIsNonSemantic(inst.ext_inst_type)) {
|
||||
assert(false && "should have caught this earlier");
|
||||
@@ -885,11 +881,11 @@ void InstructionDisassembler::EmitOperand(std::ostream& stream,
|
||||
}
|
||||
} break;
|
||||
case SPV_OPERAND_TYPE_SPEC_CONSTANT_OP_NUMBER: {
|
||||
spv_opcode_desc opcode_desc;
|
||||
if (grammar_.lookupOpcode(spv::Op(word), &opcode_desc))
|
||||
const spvtools::InstructionDesc* opcodeEntry = nullptr;
|
||||
if (LookupOpcode(spv::Op(word), &opcodeEntry))
|
||||
assert(false && "should have caught this earlier");
|
||||
SetRed(stream);
|
||||
stream << opcode_desc->name;
|
||||
stream << opcodeEntry->name().data();
|
||||
} break;
|
||||
case SPV_OPERAND_TYPE_LITERAL_INTEGER:
|
||||
case SPV_OPERAND_TYPE_TYPED_LITERAL_NUMBER:
|
||||
@@ -948,10 +944,10 @@ void InstructionDisassembler::EmitOperand(std::ostream& stream,
|
||||
case SPV_OPERAND_TYPE_QUANTIZATION_MODES:
|
||||
case SPV_OPERAND_TYPE_FPENCODING:
|
||||
case SPV_OPERAND_TYPE_OVERFLOW_MODES: {
|
||||
spv_operand_desc entry;
|
||||
if (grammar_.lookupOperand(operand.type, word, &entry))
|
||||
const spvtools::OperandDesc* entry = nullptr;
|
||||
if (spvtools::LookupOperand(operand.type, word, &entry))
|
||||
assert(false && "should have caught this earlier");
|
||||
stream << entry->name;
|
||||
stream << entry->name().data();
|
||||
} break;
|
||||
case SPV_OPERAND_TYPE_FP_FAST_MATH_MODE:
|
||||
case SPV_OPERAND_TYPE_FUNCTION_CONTROL:
|
||||
@@ -968,10 +964,10 @@ void InstructionDisassembler::EmitOperand(std::ostream& stream,
|
||||
if (spvOperandIsConcreteMask(operand.type)) {
|
||||
EmitMaskOperand(stream, operand.type, word);
|
||||
} else if (spvOperandIsConcrete(operand.type)) {
|
||||
spv_operand_desc entry;
|
||||
if (grammar_.lookupOperand(operand.type, word, &entry))
|
||||
const spvtools::OperandDesc* entry = nullptr;
|
||||
if (spvtools::LookupOperand(operand.type, word, &entry))
|
||||
assert(false && "should have caught this earlier");
|
||||
stream << entry->name;
|
||||
stream << entry->name().data();
|
||||
} else {
|
||||
assert(false && "unhandled or invalid case");
|
||||
}
|
||||
@@ -991,20 +987,20 @@ void InstructionDisassembler::EmitMaskOperand(std::ostream& stream,
|
||||
for (mask = 1; remaining_word; mask <<= 1) {
|
||||
if (remaining_word & mask) {
|
||||
remaining_word ^= mask;
|
||||
spv_operand_desc entry;
|
||||
if (grammar_.lookupOperand(type, mask, &entry))
|
||||
const spvtools::OperandDesc* entry = nullptr;
|
||||
if (spvtools::LookupOperand(type, mask, &entry))
|
||||
assert(false && "should have caught this earlier");
|
||||
if (num_emitted) stream << "|";
|
||||
stream << entry->name;
|
||||
stream << entry->name().data();
|
||||
num_emitted++;
|
||||
}
|
||||
}
|
||||
if (!num_emitted) {
|
||||
// An operand value of 0 was provided, so represent it by the name
|
||||
// of the 0 value. In many cases, that's "None".
|
||||
spv_operand_desc entry;
|
||||
if (SPV_SUCCESS == grammar_.lookupOperand(type, 0, &entry))
|
||||
stream << entry->name;
|
||||
const spvtools::OperandDesc* entry = nullptr;
|
||||
if (SPV_SUCCESS == spvtools::LookupOperand(type, 0, &entry))
|
||||
stream << entry->name().data();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1042,11 +1038,6 @@ std::string spvInstructionBinaryToText(const spv_target_env env,
|
||||
const size_t wordCount,
|
||||
const uint32_t options) {
|
||||
spv_context context = spvContextCreate(env);
|
||||
const AssemblyGrammar grammar(context);
|
||||
if (!grammar.isValid()) {
|
||||
spvContextDestroy(context);
|
||||
return "";
|
||||
}
|
||||
|
||||
// Generate friendly names for Ids if requested.
|
||||
std::unique_ptr<FriendlyNameMapper> friendly_mapper;
|
||||
@@ -1057,7 +1048,7 @@ std::string spvInstructionBinaryToText(const spv_target_env env,
|
||||
}
|
||||
|
||||
// Now disassemble!
|
||||
Disassembler disassembler(grammar, options, name_mapper);
|
||||
Disassembler disassembler(options, name_mapper);
|
||||
WrappedDisassembler wrapped(&disassembler, instCode, instWordCount);
|
||||
spvBinaryParse(context, &wrapped, code, wordCount, DisassembleTargetHeader,
|
||||
DisassembleTargetInstruction, nullptr);
|
||||
@@ -1086,9 +1077,6 @@ spv_result_t spvBinaryToText(const spv_const_context context,
|
||||
spvtools::UseDiagnosticAsMessageConsumer(&hijack_context, pDiagnostic);
|
||||
}
|
||||
|
||||
const spvtools::AssemblyGrammar grammar(&hijack_context);
|
||||
if (!grammar.isValid()) return SPV_ERROR_INVALID_TABLE;
|
||||
|
||||
// Generate friendly names for Ids if requested.
|
||||
std::unique_ptr<spvtools::FriendlyNameMapper> friendly_mapper;
|
||||
spvtools::NameMapper name_mapper = spvtools::GetTrivialNameMapper();
|
||||
@@ -1099,7 +1087,7 @@ spv_result_t spvBinaryToText(const spv_const_context context,
|
||||
}
|
||||
|
||||
// Now disassemble!
|
||||
spvtools::Disassembler disassembler(grammar, options, name_mapper);
|
||||
spvtools::Disassembler disassembler(options, name_mapper);
|
||||
if (auto error =
|
||||
spvBinaryParse(&hijack_context, &disassembler, code, wordCount,
|
||||
spvtools::DisassembleHeader,
|
||||
|
||||
6
3rdparty/spirv-tools/source/disassemble.h
vendored
6
3rdparty/spirv-tools/source/disassemble.h
vendored
@@ -37,7 +37,6 @@ std::string spvInstructionBinaryToText(const spv_target_env env,
|
||||
const size_t word_count,
|
||||
const uint32_t options);
|
||||
|
||||
class AssemblyGrammar;
|
||||
namespace disassemble {
|
||||
|
||||
// Shared code with other tools (than the disassembler) that might need to
|
||||
@@ -45,8 +44,8 @@ namespace disassemble {
|
||||
// binary for an instruction to its assembly representation.
|
||||
class InstructionDisassembler {
|
||||
public:
|
||||
InstructionDisassembler(const AssemblyGrammar& grammar, std::ostream& stream,
|
||||
uint32_t options, NameMapper name_mapper);
|
||||
InstructionDisassembler(std::ostream& stream, uint32_t options,
|
||||
NameMapper name_mapper);
|
||||
|
||||
// Emits the assembly header for the module.
|
||||
void EmitHeaderSpirv();
|
||||
@@ -104,7 +103,6 @@ class InstructionDisassembler {
|
||||
// |id_comments_|.
|
||||
void GenerateCommentForDecoratedId(const spv_parsed_instruction_t& inst);
|
||||
|
||||
const spvtools::AssemblyGrammar& grammar_;
|
||||
std::ostream& stream_;
|
||||
const bool print_; // Should we also print to the standard output stream?
|
||||
const bool color_; // Should we print in colour?
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
// Copyright (c) 2017 Google Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#include "source/enum_string_mapping.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <cassert>
|
||||
#include <cstring>
|
||||
#include <string>
|
||||
#include <unordered_map>
|
||||
|
||||
#include "source/extensions.h"
|
||||
|
||||
namespace spvtools {
|
||||
|
||||
#include "enum_string_mapping.inc"
|
||||
|
||||
} // namespace spvtools
|
||||
@@ -1,36 +0,0 @@
|
||||
// Copyright (c) 2017 Google Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#ifndef SOURCE_ENUM_STRING_MAPPING_H_
|
||||
#define SOURCE_ENUM_STRING_MAPPING_H_
|
||||
|
||||
#include <string>
|
||||
|
||||
#include "source/extensions.h"
|
||||
#include "source/latest_version_spirv_header.h"
|
||||
|
||||
namespace spvtools {
|
||||
|
||||
// Finds Extension enum corresponding to |str|. Returns false if not found.
|
||||
bool GetExtensionFromString(const char* str, Extension* extension);
|
||||
|
||||
// Returns text string corresponding to |extension|.
|
||||
const char* ExtensionToString(Extension extension);
|
||||
|
||||
// Returns text string corresponding to |capability|.
|
||||
const char* CapabilityToString(spv::Capability capability);
|
||||
|
||||
} // namespace spvtools
|
||||
|
||||
#endif // SOURCE_ENUM_STRING_MAPPING_H_
|
||||
137
3rdparty/spirv-tools/source/ext_inst.cpp
vendored
137
3rdparty/spirv-tools/source/ext_inst.cpp
vendored
@@ -17,98 +17,7 @@
|
||||
#include <cstring>
|
||||
|
||||
// DebugInfo extended instruction set.
|
||||
// See https://www.khronos.org/registry/spir-v/specs/1.0/DebugInfo.html
|
||||
// TODO(dneto): DebugInfo.h should probably move to SPIRV-Headers.
|
||||
#include "DebugInfo.h"
|
||||
|
||||
#include "source/latest_version_glsl_std_450_header.h"
|
||||
#include "source/latest_version_opencl_std_header.h"
|
||||
#include "source/macro.h"
|
||||
#include "source/spirv_definition.h"
|
||||
|
||||
#include "debuginfo.insts.inc"
|
||||
#include "glsl.std.450.insts.inc"
|
||||
#include "nonsemantic.clspvreflection.insts.inc"
|
||||
#include "nonsemantic.shader.debuginfo.100.insts.inc"
|
||||
#include "nonsemantic.vkspreflection.insts.inc"
|
||||
#include "opencl.debuginfo.100.insts.inc"
|
||||
#include "opencl.std.insts.inc"
|
||||
|
||||
#include "spirv-tools/libspirv.h"
|
||||
#include "spv-amd-gcn-shader.insts.inc"
|
||||
#include "spv-amd-shader-ballot.insts.inc"
|
||||
#include "spv-amd-shader-explicit-vertex-parameter.insts.inc"
|
||||
#include "spv-amd-shader-trinary-minmax.insts.inc"
|
||||
|
||||
static const spv_ext_inst_group_t kGroups_1_0[] = {
|
||||
{SPV_EXT_INST_TYPE_GLSL_STD_450, ARRAY_SIZE(glsl_entries), glsl_entries},
|
||||
{SPV_EXT_INST_TYPE_OPENCL_STD, ARRAY_SIZE(opencl_entries), opencl_entries},
|
||||
{SPV_EXT_INST_TYPE_SPV_AMD_SHADER_EXPLICIT_VERTEX_PARAMETER,
|
||||
ARRAY_SIZE(spv_amd_shader_explicit_vertex_parameter_entries),
|
||||
spv_amd_shader_explicit_vertex_parameter_entries},
|
||||
{SPV_EXT_INST_TYPE_SPV_AMD_SHADER_TRINARY_MINMAX,
|
||||
ARRAY_SIZE(spv_amd_shader_trinary_minmax_entries),
|
||||
spv_amd_shader_trinary_minmax_entries},
|
||||
{SPV_EXT_INST_TYPE_SPV_AMD_GCN_SHADER,
|
||||
ARRAY_SIZE(spv_amd_gcn_shader_entries), spv_amd_gcn_shader_entries},
|
||||
{SPV_EXT_INST_TYPE_SPV_AMD_SHADER_BALLOT,
|
||||
ARRAY_SIZE(spv_amd_shader_ballot_entries), spv_amd_shader_ballot_entries},
|
||||
{SPV_EXT_INST_TYPE_DEBUGINFO, ARRAY_SIZE(debuginfo_entries),
|
||||
debuginfo_entries},
|
||||
{SPV_EXT_INST_TYPE_OPENCL_DEBUGINFO_100,
|
||||
ARRAY_SIZE(opencl_debuginfo_100_entries), opencl_debuginfo_100_entries},
|
||||
{SPV_EXT_INST_TYPE_NONSEMANTIC_SHADER_DEBUGINFO_100,
|
||||
ARRAY_SIZE(nonsemantic_shader_debuginfo_100_entries),
|
||||
nonsemantic_shader_debuginfo_100_entries},
|
||||
{SPV_EXT_INST_TYPE_NONSEMANTIC_CLSPVREFLECTION,
|
||||
ARRAY_SIZE(nonsemantic_clspvreflection_entries),
|
||||
nonsemantic_clspvreflection_entries},
|
||||
{SPV_EXT_INST_TYPE_NONSEMANTIC_VKSPREFLECTION,
|
||||
ARRAY_SIZE(nonsemantic_vkspreflection_entries),
|
||||
nonsemantic_vkspreflection_entries},
|
||||
};
|
||||
|
||||
static const spv_ext_inst_table_t kTable_1_0 = {ARRAY_SIZE(kGroups_1_0),
|
||||
kGroups_1_0};
|
||||
|
||||
spv_result_t spvExtInstTableGet(spv_ext_inst_table* pExtInstTable,
|
||||
spv_target_env env) {
|
||||
if (!pExtInstTable) return SPV_ERROR_INVALID_POINTER;
|
||||
|
||||
switch (env) {
|
||||
// The extended instruction sets are all version 1.0 so far.
|
||||
case SPV_ENV_UNIVERSAL_1_0:
|
||||
case SPV_ENV_VULKAN_1_0:
|
||||
case SPV_ENV_UNIVERSAL_1_1:
|
||||
case SPV_ENV_UNIVERSAL_1_2:
|
||||
case SPV_ENV_OPENCL_1_2:
|
||||
case SPV_ENV_OPENCL_EMBEDDED_1_2:
|
||||
case SPV_ENV_OPENCL_2_0:
|
||||
case SPV_ENV_OPENCL_EMBEDDED_2_0:
|
||||
case SPV_ENV_OPENCL_2_1:
|
||||
case SPV_ENV_OPENCL_EMBEDDED_2_1:
|
||||
case SPV_ENV_OPENCL_2_2:
|
||||
case SPV_ENV_OPENCL_EMBEDDED_2_2:
|
||||
case SPV_ENV_OPENGL_4_0:
|
||||
case SPV_ENV_OPENGL_4_1:
|
||||
case SPV_ENV_OPENGL_4_2:
|
||||
case SPV_ENV_OPENGL_4_3:
|
||||
case SPV_ENV_OPENGL_4_5:
|
||||
case SPV_ENV_UNIVERSAL_1_3:
|
||||
case SPV_ENV_VULKAN_1_1:
|
||||
case SPV_ENV_VULKAN_1_1_SPIRV_1_4:
|
||||
case SPV_ENV_UNIVERSAL_1_4:
|
||||
case SPV_ENV_UNIVERSAL_1_5:
|
||||
case SPV_ENV_VULKAN_1_2:
|
||||
case SPV_ENV_UNIVERSAL_1_6:
|
||||
case SPV_ENV_VULKAN_1_3:
|
||||
case SPV_ENV_VULKAN_1_4:
|
||||
*pExtInstTable = &kTable_1_0;
|
||||
return SPV_SUCCESS;
|
||||
default:
|
||||
return SPV_ERROR_INVALID_TABLE;
|
||||
}
|
||||
}
|
||||
// #include "DebugInfo.h"
|
||||
|
||||
spv_ext_inst_type_t spvExtInstImportTypeGet(const char* name) {
|
||||
// The names are specified by the respective extension instruction
|
||||
@@ -172,47 +81,3 @@ bool spvExtInstIsDebugInfo(const spv_ext_inst_type_t type) {
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
spv_result_t spvExtInstTableNameLookup(const spv_ext_inst_table table,
|
||||
const spv_ext_inst_type_t type,
|
||||
const char* name,
|
||||
spv_ext_inst_desc* pEntry) {
|
||||
if (!table) return SPV_ERROR_INVALID_TABLE;
|
||||
if (!pEntry) return SPV_ERROR_INVALID_POINTER;
|
||||
|
||||
for (uint32_t groupIndex = 0; groupIndex < table->count; groupIndex++) {
|
||||
const auto& group = table->groups[groupIndex];
|
||||
if (type != group.type) continue;
|
||||
for (uint32_t index = 0; index < group.count; index++) {
|
||||
const auto& entry = group.entries[index];
|
||||
if (!strcmp(name, entry.name)) {
|
||||
*pEntry = &entry;
|
||||
return SPV_SUCCESS;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return SPV_ERROR_INVALID_LOOKUP;
|
||||
}
|
||||
|
||||
spv_result_t spvExtInstTableValueLookup(const spv_ext_inst_table table,
|
||||
const spv_ext_inst_type_t type,
|
||||
const uint32_t value,
|
||||
spv_ext_inst_desc* pEntry) {
|
||||
if (!table) return SPV_ERROR_INVALID_TABLE;
|
||||
if (!pEntry) return SPV_ERROR_INVALID_POINTER;
|
||||
|
||||
for (uint32_t groupIndex = 0; groupIndex < table->count; groupIndex++) {
|
||||
const auto& group = table->groups[groupIndex];
|
||||
if (type != group.type) continue;
|
||||
for (uint32_t index = 0; index < group.count; index++) {
|
||||
const auto& entry = group.entries[index];
|
||||
if (value == entry.ext_inst) {
|
||||
*pEntry = &entry;
|
||||
return SPV_SUCCESS;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return SPV_ERROR_INVALID_LOOKUP;
|
||||
}
|
||||
|
||||
16
3rdparty/spirv-tools/source/ext_inst.h
vendored
16
3rdparty/spirv-tools/source/ext_inst.h
vendored
@@ -27,20 +27,4 @@ bool spvExtInstIsNonSemantic(const spv_ext_inst_type_t type);
|
||||
// Returns true if the extended instruction set is debug info
|
||||
bool spvExtInstIsDebugInfo(const spv_ext_inst_type_t type);
|
||||
|
||||
// Finds the named extended instruction of the given type in the given extended
|
||||
// instruction table. On success, returns SPV_SUCCESS and writes a handle of
|
||||
// the instruction entry into *entry.
|
||||
spv_result_t spvExtInstTableNameLookup(const spv_ext_inst_table table,
|
||||
const spv_ext_inst_type_t type,
|
||||
const char* name,
|
||||
spv_ext_inst_desc* entry);
|
||||
|
||||
// Finds the extended instruction of the given type in the given extended
|
||||
// instruction table by value. On success, returns SPV_SUCCESS and writes a
|
||||
// handle of the instruction entry into *entry.
|
||||
spv_result_t spvExtInstTableValueLookup(const spv_ext_inst_table table,
|
||||
const spv_ext_inst_type_t type,
|
||||
const uint32_t value,
|
||||
spv_ext_inst_desc* pEntry);
|
||||
|
||||
#endif // SOURCE_EXT_INST_H_
|
||||
|
||||
2
3rdparty/spirv-tools/source/extensions.cpp
vendored
2
3rdparty/spirv-tools/source/extensions.cpp
vendored
@@ -19,7 +19,7 @@
|
||||
#include <string>
|
||||
|
||||
#include "source/binary.h"
|
||||
#include "source/enum_string_mapping.h"
|
||||
#include "source/table2.h"
|
||||
|
||||
namespace spvtools {
|
||||
|
||||
|
||||
12
3rdparty/spirv-tools/source/extensions.h
vendored
12
3rdparty/spirv-tools/source/extensions.h
vendored
@@ -15,25 +15,19 @@
|
||||
#ifndef SOURCE_EXTENSIONS_H_
|
||||
#define SOURCE_EXTENSIONS_H_
|
||||
|
||||
#include <cstdint>
|
||||
#include <string>
|
||||
|
||||
#include "source/enum_set.h"
|
||||
#include "spirv-tools/libspirv.h"
|
||||
#include "source/table2.h"
|
||||
|
||||
namespace spvtools {
|
||||
|
||||
// The known SPIR-V extensions.
|
||||
enum Extension : uint32_t {
|
||||
#include "extension_enum.inc"
|
||||
};
|
||||
|
||||
using ExtensionSet = EnumSet<Extension>;
|
||||
|
||||
// Returns literal string operand of OpExtension instruction.
|
||||
// Returns the literal string operand of OpExtension instruction.
|
||||
std::string GetExtensionString(const spv_parsed_instruction_t* inst);
|
||||
|
||||
// Returns text string listing |extensions| separated by whitespace.
|
||||
// Returns a text string listing |extensions| separated by whitespace.
|
||||
std::string ExtensionSetToString(const ExtensionSet& extensions);
|
||||
|
||||
} // namespace spvtools
|
||||
|
||||
45
3rdparty/spirv-tools/source/link/linker.cpp
vendored
45
3rdparty/spirv-tools/source/link/linker.cpp
vendored
@@ -26,7 +26,6 @@
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
|
||||
#include "source/assembly_grammar.h"
|
||||
#include "source/diagnostic.h"
|
||||
#include "source/opt/build_module.h"
|
||||
#include "source/opt/compact_ids_pass.h"
|
||||
@@ -39,6 +38,7 @@
|
||||
#include "source/opt/type_manager.h"
|
||||
#include "source/spirv_constant.h"
|
||||
#include "source/spirv_target_env.h"
|
||||
#include "source/table2.h"
|
||||
#include "source/util/make_unique.h"
|
||||
#include "source/util/string_utils.h"
|
||||
#include "spirv-tools/libspirv.hpp"
|
||||
@@ -103,7 +103,6 @@ spv_result_t GenerateHeader(const MessageConsumer& consumer,
|
||||
// |linked_context| should not be null.
|
||||
spv_result_t MergeModules(const MessageConsumer& consumer,
|
||||
const std::vector<Module*>& in_modules,
|
||||
const AssemblyGrammar& grammar,
|
||||
IRContext* linked_context);
|
||||
|
||||
// Compute all pairs of import and export and return it in |linkings_to_do|.
|
||||
@@ -246,7 +245,6 @@ spv_result_t GenerateHeader(const MessageConsumer& consumer,
|
||||
|
||||
spv_result_t MergeModules(const MessageConsumer& consumer,
|
||||
const std::vector<Module*>& input_modules,
|
||||
const AssemblyGrammar& grammar,
|
||||
IRContext* linked_context) {
|
||||
spv_position_t position = {};
|
||||
|
||||
@@ -294,29 +292,33 @@ spv_result_t MergeModules(const MessageConsumer& consumer,
|
||||
const uint32_t module_addressing_model =
|
||||
memory_model_inst->GetSingleWordOperand(0u);
|
||||
if (module_addressing_model != linked_addressing_model) {
|
||||
spv_operand_desc linked_desc = nullptr, module_desc = nullptr;
|
||||
grammar.lookupOperand(SPV_OPERAND_TYPE_ADDRESSING_MODEL,
|
||||
linked_addressing_model, &linked_desc);
|
||||
grammar.lookupOperand(SPV_OPERAND_TYPE_ADDRESSING_MODEL,
|
||||
module_addressing_model, &module_desc);
|
||||
const spvtools::OperandDesc* linked_desc = nullptr;
|
||||
const spvtools::OperandDesc* module_desc = nullptr;
|
||||
spvtools::LookupOperand(SPV_OPERAND_TYPE_ADDRESSING_MODEL,
|
||||
linked_addressing_model, &linked_desc);
|
||||
spvtools::LookupOperand(SPV_OPERAND_TYPE_ADDRESSING_MODEL,
|
||||
module_addressing_model, &module_desc);
|
||||
return DiagnosticStream(position, consumer, "", SPV_ERROR_INTERNAL)
|
||||
<< "Conflicting addressing models: " << linked_desc->name
|
||||
<< "Conflicting addressing models: " << linked_desc->name().data()
|
||||
<< " (input modules 1 through " << i << ") vs "
|
||||
<< module_desc->name << " (input module " << (i + 1) << ").";
|
||||
<< module_desc->name().data() << " (input module " << (i + 1)
|
||||
<< ").";
|
||||
}
|
||||
|
||||
const uint32_t module_memory_model =
|
||||
memory_model_inst->GetSingleWordOperand(1u);
|
||||
if (module_memory_model != linked_memory_model) {
|
||||
spv_operand_desc linked_desc = nullptr, module_desc = nullptr;
|
||||
grammar.lookupOperand(SPV_OPERAND_TYPE_MEMORY_MODEL, linked_memory_model,
|
||||
&linked_desc);
|
||||
grammar.lookupOperand(SPV_OPERAND_TYPE_MEMORY_MODEL, module_memory_model,
|
||||
&module_desc);
|
||||
const spvtools::OperandDesc* linked_desc = nullptr;
|
||||
const spvtools::OperandDesc* module_desc = nullptr;
|
||||
spvtools::LookupOperand(SPV_OPERAND_TYPE_MEMORY_MODEL,
|
||||
linked_memory_model, &linked_desc);
|
||||
spvtools::LookupOperand(SPV_OPERAND_TYPE_MEMORY_MODEL,
|
||||
module_memory_model, &module_desc);
|
||||
return DiagnosticStream(position, consumer, "", SPV_ERROR_INTERNAL)
|
||||
<< "Conflicting memory models: " << linked_desc->name
|
||||
<< "Conflicting memory models: " << linked_desc->name().data()
|
||||
<< " (input modules 1 through " << i << ") vs "
|
||||
<< module_desc->name << " (input module " << (i + 1) << ").";
|
||||
<< module_desc->name().data() << " (input module " << (i + 1)
|
||||
<< ").";
|
||||
}
|
||||
}
|
||||
linked_module->SetMemoryModel(std::unique_ptr<Instruction>(
|
||||
@@ -333,11 +335,11 @@ spv_result_t MergeModules(const MessageConsumer& consumer,
|
||||
return v.first == model && v.second == name;
|
||||
});
|
||||
if (i != entry_points.end()) {
|
||||
spv_operand_desc desc = nullptr;
|
||||
grammar.lookupOperand(SPV_OPERAND_TYPE_EXECUTION_MODEL, model, &desc);
|
||||
const spvtools::OperandDesc* desc = nullptr;
|
||||
spvtools::LookupOperand(SPV_OPERAND_TYPE_EXECUTION_MODEL, model, &desc);
|
||||
return DiagnosticStream(position, consumer, "", SPV_ERROR_INTERNAL)
|
||||
<< "The entry point \"" << name << "\", with execution model "
|
||||
<< desc->name << ", was already defined.";
|
||||
<< desc->name().data() << ", was already defined.";
|
||||
}
|
||||
linked_module->AddEntryPoint(
|
||||
std::unique_ptr<Instruction>(inst.Clone(linked_context)));
|
||||
@@ -865,8 +867,7 @@ spv_result_t Link(const Context& context, const uint32_t* const* binaries,
|
||||
linked_context.module()->SetHeader(header);
|
||||
|
||||
// Phase 3: Merge all the binaries into a single one.
|
||||
AssemblyGrammar grammar(c_context);
|
||||
res = MergeModules(consumer, modules, grammar, &linked_context);
|
||||
res = MergeModules(consumer, modules, &linked_context);
|
||||
if (res != SPV_SUCCESS) return res;
|
||||
|
||||
if (options.GetVerifyIds()) {
|
||||
|
||||
14
3rdparty/spirv-tools/source/name_mapper.cpp
vendored
14
3rdparty/spirv-tools/source/name_mapper.cpp
vendored
@@ -27,6 +27,7 @@
|
||||
#include "source/binary.h"
|
||||
#include "source/latest_version_spirv_header.h"
|
||||
#include "source/parsed_operand.h"
|
||||
#include "source/table2.h"
|
||||
#include "source/to_string.h"
|
||||
#include "spirv-tools/libspirv.h"
|
||||
|
||||
@@ -211,7 +212,12 @@ spv_result_t FriendlyNameMapper::ParseInstruction(
|
||||
} break;
|
||||
case spv::Op::OpTypeFloat: {
|
||||
const auto bit_width = inst.words[2];
|
||||
// TODO: Handle optional fpencoding enum once actually used.
|
||||
if (inst.num_words > 3) {
|
||||
if (spv::FPEncoding(inst.words[3]) == spv::FPEncoding::BFloat16KHR) {
|
||||
SaveName(result_id, "bfloat16");
|
||||
break;
|
||||
}
|
||||
}
|
||||
switch (bit_width) {
|
||||
case 16:
|
||||
SaveName(result_id, "half");
|
||||
@@ -322,9 +328,9 @@ spv_result_t FriendlyNameMapper::ParseInstruction(
|
||||
|
||||
std::string FriendlyNameMapper::NameForEnumOperand(spv_operand_type_t type,
|
||||
uint32_t word) {
|
||||
spv_operand_desc desc = nullptr;
|
||||
if (SPV_SUCCESS == grammar_.lookupOperand(type, word, &desc)) {
|
||||
return desc->name;
|
||||
const spvtools::OperandDesc* desc = nullptr;
|
||||
if (SPV_SUCCESS == spvtools::LookupOperand(type, word, &desc)) {
|
||||
return desc->name().data();
|
||||
} else {
|
||||
// Invalid input. Just give something.
|
||||
return std::string("StorageClass") + to_string(word);
|
||||
|
||||
143
3rdparty/spirv-tools/source/opcode.cpp
vendored
143
3rdparty/spirv-tools/source/opcode.cpp
vendored
@@ -27,18 +27,10 @@
|
||||
#include "source/spirv_constant.h"
|
||||
#include "source/spirv_endian.h"
|
||||
#include "source/spirv_target_env.h"
|
||||
#include "source/table2.h"
|
||||
#include "spirv-tools/libspirv.h"
|
||||
|
||||
namespace {
|
||||
struct OpcodeDescPtrLen {
|
||||
const spv_opcode_desc_t* ptr;
|
||||
uint32_t len;
|
||||
};
|
||||
|
||||
#include "core.insts-unified1.inc"
|
||||
|
||||
static const spv_opcode_table_t kOpcodeTable = {ARRAY_SIZE(kOpcodeTableEntries),
|
||||
kOpcodeTableEntries};
|
||||
|
||||
// Represents a vendor tool entry in the SPIR-V XML Registry.
|
||||
struct VendorTool {
|
||||
@@ -78,115 +70,6 @@ void spvOpcodeSplit(const uint32_t word, uint16_t* pWordCount,
|
||||
}
|
||||
}
|
||||
|
||||
spv_result_t spvOpcodeTableGet(spv_opcode_table* pInstTable, spv_target_env) {
|
||||
if (!pInstTable) return SPV_ERROR_INVALID_POINTER;
|
||||
|
||||
// Descriptions of each opcode. Each entry describes the format of the
|
||||
// instruction that follows a particular opcode.
|
||||
|
||||
*pInstTable = &kOpcodeTable;
|
||||
return SPV_SUCCESS;
|
||||
}
|
||||
|
||||
spv_result_t spvOpcodeTableNameLookup(spv_target_env env,
|
||||
const spv_opcode_table table,
|
||||
const char* name,
|
||||
spv_opcode_desc* pEntry) {
|
||||
if (!name || !pEntry) return SPV_ERROR_INVALID_POINTER;
|
||||
if (!table) return SPV_ERROR_INVALID_TABLE;
|
||||
|
||||
// TODO: This lookup of the Opcode table is suboptimal! Binary sort would be
|
||||
// preferable but the table requires sorting on the Opcode name, but it's
|
||||
// static const initialized and matches the order of the spec.
|
||||
const size_t nameLength = strlen(name);
|
||||
const auto version = spvVersionForTargetEnv(env);
|
||||
for (uint64_t opcodeIndex = 0; opcodeIndex < table->count; ++opcodeIndex) {
|
||||
const spv_opcode_desc_t& entry = table->entries[opcodeIndex];
|
||||
// We consider the current opcode as available as long as
|
||||
// 1. The target environment satisfies the minimal requirement of the
|
||||
// opcode; or
|
||||
// 2. There is at least one extension enabling this opcode.
|
||||
//
|
||||
// Note that the second rule assumes the extension enabling this instruction
|
||||
// is indeed requested in the SPIR-V code; checking that should be
|
||||
// validator's work.
|
||||
if ((version >= entry.minVersion && version <= entry.lastVersion) ||
|
||||
entry.numExtensions > 0u || entry.numCapabilities > 0u) {
|
||||
// Exact match case.
|
||||
if (nameLength == strlen(entry.name) &&
|
||||
!strncmp(name, entry.name, nameLength)) {
|
||||
*pEntry = &entry;
|
||||
return SPV_SUCCESS;
|
||||
}
|
||||
// Lack of binary search really hurts here. There isn't an easy filter to
|
||||
// apply before checking aliases since we need to handle promotion from
|
||||
// vendor to KHR/EXT and KHR/EXT to core. It would require a sure-fire way
|
||||
// of dropping suffices. Fortunately, most lookup are based on token
|
||||
// value.
|
||||
//
|
||||
// If this was a binary search we could iterate between the lower and
|
||||
// upper bounds.
|
||||
if (entry.numAliases > 0) {
|
||||
for (uint32_t aliasIndex = 0; aliasIndex < entry.numAliases;
|
||||
aliasIndex++) {
|
||||
// Skip Op prefix. Should this be encoded in the table instead?
|
||||
const auto alias = entry.aliases[aliasIndex] + 2;
|
||||
const size_t aliasLength = strlen(alias);
|
||||
if (nameLength == aliasLength && !strncmp(name, alias, nameLength)) {
|
||||
*pEntry = &entry;
|
||||
return SPV_SUCCESS;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return SPV_ERROR_INVALID_LOOKUP;
|
||||
}
|
||||
|
||||
spv_result_t spvOpcodeTableValueLookup(spv_target_env env,
|
||||
const spv_opcode_table table,
|
||||
const spv::Op opcode,
|
||||
spv_opcode_desc* pEntry) {
|
||||
if (!table) return SPV_ERROR_INVALID_TABLE;
|
||||
if (!pEntry) return SPV_ERROR_INVALID_POINTER;
|
||||
|
||||
const auto beg = table->entries;
|
||||
const auto end = table->entries + table->count;
|
||||
|
||||
spv_opcode_desc_t needle = {"", opcode, 0, nullptr, 0, {}, 0,
|
||||
{}, false, false, 0, nullptr, ~0u, ~0u};
|
||||
|
||||
auto comp = [](const spv_opcode_desc_t& lhs, const spv_opcode_desc_t& rhs) {
|
||||
return lhs.opcode < rhs.opcode;
|
||||
};
|
||||
|
||||
// We need to loop here because there can exist multiple symbols for the same
|
||||
// opcode value, and they can be introduced in different target environments,
|
||||
// which means they can have different minimal version requirements.
|
||||
// Assumes the underlying table is already sorted ascendingly according to
|
||||
// opcode value.
|
||||
const auto version = spvVersionForTargetEnv(env);
|
||||
for (auto it = std::lower_bound(beg, end, needle, comp);
|
||||
it != end && it->opcode == opcode; ++it) {
|
||||
// We considers the current opcode as available as long as
|
||||
// 1. The target environment satisfies the minimal requirement of the
|
||||
// opcode; or
|
||||
// 2. There is at least one extension enabling this opcode.
|
||||
//
|
||||
// Note that the second rule assumes the extension enabling this instruction
|
||||
// is indeed requested in the SPIR-V code; checking that should be
|
||||
// validator's work.
|
||||
if ((version >= it->minVersion && version <= it->lastVersion) ||
|
||||
it->numExtensions > 0u || it->numCapabilities > 0u) {
|
||||
*pEntry = it;
|
||||
return SPV_SUCCESS;
|
||||
}
|
||||
}
|
||||
|
||||
return SPV_ERROR_INVALID_LOOKUP;
|
||||
}
|
||||
|
||||
void spvInstructionCopy(const uint32_t* words, const spv::Op opcode,
|
||||
const uint16_t wordCount, const spv_endianness_t endian,
|
||||
spv_instruction_t* pInst) {
|
||||
@@ -205,25 +88,13 @@ void spvInstructionCopy(const uint32_t* words, const spv::Op opcode,
|
||||
}
|
||||
|
||||
const char* spvOpcodeString(const uint32_t opcode) {
|
||||
const auto beg = kOpcodeTableEntries;
|
||||
const auto end = kOpcodeTableEntries + ARRAY_SIZE(kOpcodeTableEntries);
|
||||
spv_opcode_desc_t needle = {"", static_cast<spv::Op>(opcode),
|
||||
0, nullptr,
|
||||
0, {},
|
||||
0, {},
|
||||
false, false,
|
||||
0, nullptr,
|
||||
~0u, ~0u};
|
||||
auto comp = [](const spv_opcode_desc_t& lhs, const spv_opcode_desc_t& rhs) {
|
||||
return lhs.opcode < rhs.opcode;
|
||||
};
|
||||
auto it = std::lower_bound(beg, end, needle, comp);
|
||||
if (it != end && it->opcode == spv::Op(opcode)) {
|
||||
return it->name;
|
||||
const spvtools::InstructionDesc* desc = nullptr;
|
||||
if (SPV_SUCCESS !=
|
||||
spvtools::LookupOpcode(static_cast<spv::Op>(opcode), &desc)) {
|
||||
assert(0 && "Unreachable!");
|
||||
return "unknown";
|
||||
}
|
||||
|
||||
assert(0 && "Unreachable!");
|
||||
return "unknown";
|
||||
return desc->name().data();
|
||||
}
|
||||
|
||||
const char* spvOpcodeString(const spv::Op opcode) {
|
||||
|
||||
13
3rdparty/spirv-tools/source/opcode.h
vendored
13
3rdparty/spirv-tools/source/opcode.h
vendored
@@ -35,19 +35,6 @@ uint32_t spvOpcodeMake(uint16_t word_count, spv::Op opcode);
|
||||
void spvOpcodeSplit(const uint32_t word, uint16_t* word_count,
|
||||
uint16_t* opcode);
|
||||
|
||||
// Finds the named opcode in the given opcode table. On success, returns
|
||||
// SPV_SUCCESS and writes a handle of the table entry into *entry.
|
||||
spv_result_t spvOpcodeTableNameLookup(spv_target_env,
|
||||
const spv_opcode_table table,
|
||||
const char* name, spv_opcode_desc* entry);
|
||||
|
||||
// Finds the opcode by enumerant in the given opcode table. On success, returns
|
||||
// SPV_SUCCESS and writes a handle of the table entry into *entry.
|
||||
spv_result_t spvOpcodeTableValueLookup(spv_target_env,
|
||||
const spv_opcode_table table,
|
||||
const spv::Op opcode,
|
||||
spv_opcode_desc* entry);
|
||||
|
||||
// Copies an instruction's word and fixes the endianness to host native. The
|
||||
// source instruction's stream/opcode/endianness is in the words/opcode/endian
|
||||
// parameter. The word_count parameter specifies the number of words to copy.
|
||||
|
||||
156
3rdparty/spirv-tools/source/operand.cpp
vendored
156
3rdparty/spirv-tools/source/operand.cpp
vendored
@@ -26,110 +26,9 @@
|
||||
#include "source/macro.h"
|
||||
#include "source/opcode.h"
|
||||
#include "source/spirv_constant.h"
|
||||
|
||||
// For now, assume unified1 contains up to SPIR-V 1.3 and no later
|
||||
// SPIR-V version.
|
||||
// TODO(dneto): Make one set of tables, but with version tags on a
|
||||
// per-item basis. https://github.com/KhronosGroup/SPIRV-Tools/issues/1195
|
||||
|
||||
#include "operand.kinds-unified1.inc"
|
||||
#include "source/table2.h"
|
||||
#include "spirv-tools/libspirv.h"
|
||||
|
||||
static const spv_operand_table_t kOperandTable = {
|
||||
ARRAY_SIZE(pygen_variable_OperandInfoTable),
|
||||
pygen_variable_OperandInfoTable};
|
||||
|
||||
spv_result_t spvOperandTableGet(spv_operand_table* pOperandTable,
|
||||
spv_target_env) {
|
||||
if (!pOperandTable) return SPV_ERROR_INVALID_POINTER;
|
||||
|
||||
*pOperandTable = &kOperandTable;
|
||||
return SPV_SUCCESS;
|
||||
}
|
||||
|
||||
spv_result_t spvOperandTableNameLookup(spv_target_env,
|
||||
const spv_operand_table table,
|
||||
const spv_operand_type_t type,
|
||||
const char* name,
|
||||
const size_t nameLength,
|
||||
spv_operand_desc* pEntry) {
|
||||
if (!table) return SPV_ERROR_INVALID_TABLE;
|
||||
if (!name || !pEntry) return SPV_ERROR_INVALID_POINTER;
|
||||
|
||||
for (uint64_t typeIndex = 0; typeIndex < table->count; ++typeIndex) {
|
||||
const auto& group = table->types[typeIndex];
|
||||
if (type != group.type) continue;
|
||||
for (uint64_t index = 0; index < group.count; ++index) {
|
||||
const auto& entry = group.entries[index];
|
||||
// We consider the current operand as available as long as
|
||||
// it is in the grammar. It might not be *valid* to use,
|
||||
// but that should be checked by the validator, not by parsing.
|
||||
//
|
||||
// Exact match case
|
||||
if (nameLength == strlen(entry.name) &&
|
||||
!strncmp(entry.name, name, nameLength)) {
|
||||
*pEntry = &entry;
|
||||
return SPV_SUCCESS;
|
||||
}
|
||||
|
||||
// Check the aliases. Ideally we would have a version of the table sorted
|
||||
// by name and then we could iterate between the lower and upper bounds to
|
||||
// restrict the amount comparisons. Fortunately, name-based lookups are
|
||||
// mostly restricted to the assembler.
|
||||
if (entry.numAliases > 0) {
|
||||
for (uint32_t aliasIndex = 0; aliasIndex < entry.numAliases;
|
||||
aliasIndex++) {
|
||||
const auto alias = entry.aliases[aliasIndex];
|
||||
const size_t aliasLength = strlen(alias);
|
||||
if (nameLength == aliasLength && !strncmp(name, alias, nameLength)) {
|
||||
*pEntry = &entry;
|
||||
return SPV_SUCCESS;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return SPV_ERROR_INVALID_LOOKUP;
|
||||
}
|
||||
|
||||
spv_result_t spvOperandTableValueLookup(spv_target_env,
|
||||
const spv_operand_table table,
|
||||
const spv_operand_type_t type,
|
||||
const uint32_t value,
|
||||
spv_operand_desc* pEntry) {
|
||||
if (!table) return SPV_ERROR_INVALID_TABLE;
|
||||
if (!pEntry) return SPV_ERROR_INVALID_POINTER;
|
||||
|
||||
spv_operand_desc_t needle = {"", value, 0, nullptr, 0, nullptr,
|
||||
0, nullptr, {}, ~0u, ~0u};
|
||||
|
||||
auto comp = [](const spv_operand_desc_t& lhs, const spv_operand_desc_t& rhs) {
|
||||
return lhs.value < rhs.value;
|
||||
};
|
||||
|
||||
for (uint64_t typeIndex = 0; typeIndex < table->count; ++typeIndex) {
|
||||
const auto& group = table->types[typeIndex];
|
||||
if (type != group.type) continue;
|
||||
|
||||
const auto beg = group.entries;
|
||||
const auto end = group.entries + group.count;
|
||||
|
||||
// Assumes the underlying table is already sorted ascendingly according to
|
||||
// opcode value.
|
||||
auto it = std::lower_bound(beg, end, needle, comp);
|
||||
if (it != end && it->value == value) {
|
||||
// The current operand is considered available as long as
|
||||
// it is in the grammar. It might not be *valid* to use,
|
||||
// but that should be checked by the validator, not by parsing.
|
||||
*pEntry = it;
|
||||
return SPV_SUCCESS;
|
||||
}
|
||||
}
|
||||
|
||||
return SPV_ERROR_INVALID_LOOKUP;
|
||||
}
|
||||
|
||||
const char* spvOperandTypeStr(spv_operand_type_t type) {
|
||||
switch (type) {
|
||||
case SPV_OPERAND_TYPE_ID:
|
||||
@@ -305,6 +204,24 @@ const char* spvOperandTypeStr(spv_operand_type_t type) {
|
||||
case SPV_OPERAND_TYPE_COMPONENT_TYPE:
|
||||
return "component type";
|
||||
|
||||
case SPV_OPERAND_TYPE_KERNEL_PROPERTY_FLAGS:
|
||||
return "kernel property flags";
|
||||
case SPV_OPERAND_TYPE_SHDEBUG100_BUILD_IDENTIFIER_FLAGS:
|
||||
return "NonSemantic.Shader.DebugInfo.100 debug build identifier flags";
|
||||
case SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING:
|
||||
return "NonSemantic.Shader.DebugInfo.100 debug base type attribute "
|
||||
"encoding";
|
||||
case SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_COMPOSITE_TYPE:
|
||||
return "NonSemantic.Shader.DebugInfo.100 debug composite type";
|
||||
case SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_IMPORTED_ENTITY:
|
||||
return "NonSemantic.Shader.DebugInfo.100 debug imported entity";
|
||||
case SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_INFO_FLAGS:
|
||||
return "NonSemantic.Shader.DebugInfo.100 debug info flags";
|
||||
case SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_OPERATION:
|
||||
return "NonSemantic.Shader.DebugInfo.100 debug operation";
|
||||
case SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_TYPE_QUALIFIER:
|
||||
return "NonSemantic.Shader.DebugInfo.100 debug type qualifier";
|
||||
|
||||
case SPV_OPERAND_TYPE_NONE:
|
||||
return "NONE";
|
||||
default:
|
||||
@@ -315,6 +232,7 @@ const char* spvOperandTypeStr(spv_operand_type_t type) {
|
||||
|
||||
void spvPushOperandTypes(const spv_operand_type_t* types,
|
||||
spv_operand_pattern_t* pattern) {
|
||||
// Push them on in backward order.
|
||||
const spv_operand_type_t* endTypes;
|
||||
for (endTypes = types; *endTypes != SPV_OPERAND_TYPE_NONE; ++endTypes) {
|
||||
}
|
||||
@@ -324,9 +242,22 @@ void spvPushOperandTypes(const spv_operand_type_t* types,
|
||||
}
|
||||
}
|
||||
|
||||
void spvPushOperandTypesForMask(spv_target_env env,
|
||||
const spv_operand_table operandTable,
|
||||
const spv_operand_type_t type,
|
||||
void spvPushOperandTypes(
|
||||
const spvtools::utils::Span<const spv_operand_type_t>& types,
|
||||
spv_operand_pattern_t* pattern) {
|
||||
// Push them on in backward order.
|
||||
auto n = types.size();
|
||||
for (auto i = 0u; i < n; i++) {
|
||||
auto type = types[n - 1 - i];
|
||||
// Check against the NONE type, in case the tables have them.
|
||||
// This might be cleaned up.
|
||||
if (type != SPV_OPERAND_TYPE_NONE) {
|
||||
pattern->push_back(type);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void spvPushOperandTypesForMask(const spv_operand_type_t type,
|
||||
const uint32_t mask,
|
||||
spv_operand_pattern_t* pattern) {
|
||||
// Scan from highest bits to lowest bits because we will append in LIFO
|
||||
@@ -334,10 +265,9 @@ void spvPushOperandTypesForMask(spv_target_env env,
|
||||
for (uint32_t candidate_bit = (1u << 31u); candidate_bit;
|
||||
candidate_bit >>= 1) {
|
||||
if (candidate_bit & mask) {
|
||||
spv_operand_desc entry = nullptr;
|
||||
if (SPV_SUCCESS == spvOperandTableValueLookup(env, operandTable, type,
|
||||
candidate_bit, &entry)) {
|
||||
spvPushOperandTypes(entry->operandTypes, pattern);
|
||||
const spvtools::OperandDesc* entry = nullptr;
|
||||
if (SPV_SUCCESS == spvtools::LookupOperand(type, candidate_bit, &entry)) {
|
||||
spvPushOperandTypes(entry->operands(), pattern);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -405,6 +335,14 @@ bool spvOperandIsConcrete(spv_operand_type_t type) {
|
||||
case SPV_OPERAND_TYPE_TENSOR_CLAMP_MODE:
|
||||
case SPV_OPERAND_TYPE_COOPERATIVE_VECTOR_MATRIX_LAYOUT:
|
||||
case SPV_OPERAND_TYPE_COMPONENT_TYPE:
|
||||
case SPV_OPERAND_TYPE_KERNEL_PROPERTY_FLAGS:
|
||||
case SPV_OPERAND_TYPE_SHDEBUG100_BUILD_IDENTIFIER_FLAGS:
|
||||
case SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING:
|
||||
case SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_COMPOSITE_TYPE:
|
||||
case SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_IMPORTED_ENTITY:
|
||||
case SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_INFO_FLAGS:
|
||||
case SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_OPERATION:
|
||||
case SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_TYPE_QUALIFIER:
|
||||
return true;
|
||||
default:
|
||||
break;
|
||||
|
||||
32
3rdparty/spirv-tools/source/operand.h
vendored
32
3rdparty/spirv-tools/source/operand.h
vendored
@@ -19,6 +19,7 @@
|
||||
#include <vector>
|
||||
|
||||
#include "source/table.h"
|
||||
#include "source/util/span.h"
|
||||
#include "spirv-tools/libspirv.h"
|
||||
|
||||
// A sequence of operand types.
|
||||
@@ -35,25 +36,6 @@
|
||||
// performance.
|
||||
using spv_operand_pattern_t = std::vector<spv_operand_type_t>;
|
||||
|
||||
// Finds the named operand in the table. The type parameter specifies the
|
||||
// operand's group. A handle of the operand table entry for this operand will
|
||||
// be written into *entry.
|
||||
spv_result_t spvOperandTableNameLookup(spv_target_env,
|
||||
const spv_operand_table table,
|
||||
const spv_operand_type_t type,
|
||||
const char* name,
|
||||
const size_t name_length,
|
||||
spv_operand_desc* entry);
|
||||
|
||||
// Finds the operand with value in the table. The type parameter specifies the
|
||||
// operand's group. A handle of the operand table entry for this operand will
|
||||
// be written into *entry.
|
||||
spv_result_t spvOperandTableValueLookup(spv_target_env,
|
||||
const spv_operand_table table,
|
||||
const spv_operand_type_t type,
|
||||
const uint32_t value,
|
||||
spv_operand_desc* entry);
|
||||
|
||||
// Gets the name string of the non-variable operand type.
|
||||
const char* spvOperandTypeStr(spv_operand_type_t type);
|
||||
|
||||
@@ -68,10 +50,10 @@ bool spvOperandIsOptional(spv_operand_type_t type);
|
||||
bool spvOperandIsVariable(spv_operand_type_t type);
|
||||
|
||||
// Append a list of operand types to the end of the pattern vector.
|
||||
// The types parameter specifies the source array of types, ending with
|
||||
// SPV_OPERAND_TYPE_NONE.
|
||||
void spvPushOperandTypes(const spv_operand_type_t* types,
|
||||
spv_operand_pattern_t* pattern);
|
||||
// The types parameter specifies the source span of types.
|
||||
void spvPushOperandTypes(
|
||||
const spvtools::utils::Span<const spv_operand_type_t>& types,
|
||||
spv_operand_pattern_t* pattern);
|
||||
|
||||
// Appends the operands expected after the given typed mask onto the
|
||||
// end of the given pattern.
|
||||
@@ -81,9 +63,7 @@ void spvPushOperandTypes(const spv_operand_type_t* types,
|
||||
// appear after operands for a more significant bit.
|
||||
//
|
||||
// If a set bit is unknown, then we assume it has no operands.
|
||||
void spvPushOperandTypesForMask(spv_target_env,
|
||||
const spv_operand_table operand_table,
|
||||
const spv_operand_type_t mask_type,
|
||||
void spvPushOperandTypesForMask(const spv_operand_type_t mask_type,
|
||||
const uint32_t mask,
|
||||
spv_operand_pattern_t* pattern);
|
||||
|
||||
|
||||
@@ -1037,7 +1037,9 @@ void AggressiveDCEPass::InitExtensions() {
|
||||
"SPV_NV_cooperative_matrix",
|
||||
"SPV_KHR_cooperative_matrix",
|
||||
"SPV_KHR_ray_tracing_position_fetch",
|
||||
"SPV_KHR_fragment_shading_rate"
|
||||
"SPV_KHR_fragment_shading_rate",
|
||||
"SPV_KHR_quad_control",
|
||||
"SPV_NV_shader_invocation_reorder"
|
||||
});
|
||||
// clang-format on
|
||||
}
|
||||
|
||||
@@ -19,7 +19,6 @@
|
||||
|
||||
#include "ir_builder.h"
|
||||
#include "source/opt/ir_context.h"
|
||||
#include "spv-amd-shader-ballot.insts.inc"
|
||||
#include "type_manager.h"
|
||||
|
||||
namespace spvtools {
|
||||
|
||||
@@ -95,17 +95,19 @@ Pass::Status CopyPropagateArrays::Process() {
|
||||
std::unique_ptr<MemoryObject> source_object =
|
||||
FindSourceObjectIfPossible(&*var_inst, store_inst);
|
||||
|
||||
if (source_object != nullptr) {
|
||||
if (!IsPointerToArrayType(var_inst->type_id()) &&
|
||||
source_object->GetStorageClass() != spv::StorageClass::Input) {
|
||||
continue;
|
||||
}
|
||||
if (source_object == nullptr) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (CanUpdateUses(&*var_inst, source_object->GetPointerTypeId(this))) {
|
||||
modified = true;
|
||||
if (!IsPointerToArrayType(var_inst->type_id()) &&
|
||||
source_object->GetStorageClass() != spv::StorageClass::Input) {
|
||||
continue;
|
||||
}
|
||||
|
||||
PropagateObject(&*var_inst, source_object.get(), store_inst);
|
||||
}
|
||||
if (CanUpdateUses(&*var_inst, source_object->GetPointerTypeId(this))) {
|
||||
modified = true;
|
||||
|
||||
PropagateObject(&*var_inst, source_object.get(), store_inst);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -219,6 +221,8 @@ bool CopyPropagateArrays::HasNoStores(Instruction* ptr_inst) {
|
||||
return true;
|
||||
} else if (IsInterpolationInstruction(use)) {
|
||||
return true;
|
||||
} else if (use->IsCommonDebugInstr()) {
|
||||
return true;
|
||||
}
|
||||
// Some other instruction. Be conservative.
|
||||
return false;
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
#include <string>
|
||||
|
||||
#include "source/enum_string_mapping.h"
|
||||
#include "source/table2.h"
|
||||
|
||||
namespace spvtools {
|
||||
namespace opt {
|
||||
@@ -54,11 +54,12 @@ void FeatureManager::AddCapability(spv::Capability cap) {
|
||||
|
||||
capabilities_.insert(cap);
|
||||
|
||||
spv_operand_desc desc = {};
|
||||
if (SPV_SUCCESS == grammar_.lookupOperand(SPV_OPERAND_TYPE_CAPABILITY,
|
||||
uint32_t(cap), &desc)) {
|
||||
const spvtools::OperandDesc* desc = nullptr;
|
||||
if (SPV_SUCCESS == spvtools::LookupOperand(SPV_OPERAND_TYPE_CAPABILITY,
|
||||
uint32_t(cap), &desc)) {
|
||||
for (auto capability :
|
||||
CapabilitySet(desc->numCapabilities, desc->capabilities)) {
|
||||
CapabilitySet(static_cast<uint32_t>(desc->capabilities().size()),
|
||||
desc->capabilities().data())) {
|
||||
AddCapability(capability);
|
||||
}
|
||||
}
|
||||
|
||||
2
3rdparty/spirv-tools/source/opt/fold.cpp
vendored
2
3rdparty/spirv-tools/source/opt/fold.cpp
vendored
@@ -50,7 +50,7 @@ uint32_t InstructionFolder::UnaryOperate(spv::Op opcode,
|
||||
if (s_operand == std::numeric_limits<int32_t>::min()) {
|
||||
return s_operand;
|
||||
}
|
||||
return -s_operand;
|
||||
return static_cast<uint32_t>(-s_operand);
|
||||
}
|
||||
case spv::Op::OpNot:
|
||||
return ~operand;
|
||||
|
||||
@@ -2466,7 +2466,7 @@ FoldingRule RedundantFDiv() {
|
||||
}
|
||||
|
||||
FoldingRule RedundantFMod() {
|
||||
return [](IRContext* context, Instruction* inst,
|
||||
return [](IRContext*, Instruction* inst,
|
||||
const std::vector<const analysis::Constant*>& constants) {
|
||||
assert(inst->opcode() == spv::Op::OpFMod &&
|
||||
"Wrong opcode. Should be OpFMod.");
|
||||
@@ -2477,7 +2477,6 @@ FoldingRule RedundantFMod() {
|
||||
}
|
||||
|
||||
FloatConstantKind kind0 = getFloatConstantKind(constants[0]);
|
||||
FloatConstantKind kind1 = getFloatConstantKind(constants[1]);
|
||||
|
||||
if (kind0 == FloatConstantKind::Zero) {
|
||||
inst->SetOpcode(spv::Op::OpCopyObject);
|
||||
@@ -2486,19 +2485,6 @@ FoldingRule RedundantFMod() {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (kind1 == FloatConstantKind::One) {
|
||||
auto type = context->get_type_mgr()->GetType(inst->type_id());
|
||||
std::vector<uint32_t> zero_words;
|
||||
zero_words.resize(ElementWidth(type) / 32);
|
||||
auto const_mgr = context->get_constant_mgr();
|
||||
auto zero = const_mgr->GetConstant(type, std::move(zero_words));
|
||||
auto zero_id = const_mgr->GetDefiningInstruction(zero)->result_id();
|
||||
|
||||
inst->SetOpcode(spv::Op::OpCopyObject);
|
||||
inst->SetInOperands({{SPV_OPERAND_TYPE_ID, {zero_id}}});
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -26,10 +26,10 @@
|
||||
#include <vector>
|
||||
|
||||
#include "source/enum_set.h"
|
||||
#include "source/enum_string_mapping.h"
|
||||
#include "source/opt/ir_context.h"
|
||||
#include "source/opt/reflect.h"
|
||||
#include "source/spirv_target_env.h"
|
||||
#include "source/table2.h"
|
||||
#include "source/util/string_utils.h"
|
||||
|
||||
namespace spvtools {
|
||||
|
||||
2
3rdparty/spirv-tools/source/opt/ir_context.h
vendored
2
3rdparty/spirv-tools/source/opt/ir_context.h
vendored
@@ -27,7 +27,6 @@
|
||||
#include <vector>
|
||||
|
||||
#include "source/assembly_grammar.h"
|
||||
#include "source/enum_string_mapping.h"
|
||||
#include "source/opt/cfg.h"
|
||||
#include "source/opt/constants.h"
|
||||
#include "source/opt/debug_info_manager.h"
|
||||
@@ -44,6 +43,7 @@
|
||||
#include "source/opt/struct_cfg_analysis.h"
|
||||
#include "source/opt/type_manager.h"
|
||||
#include "source/opt/value_number_table.h"
|
||||
#include "source/table2.h"
|
||||
#include "source/util/make_unique.h"
|
||||
#include "source/util/string_utils.h"
|
||||
|
||||
|
||||
@@ -207,6 +207,7 @@ bool IrLoader::AddInstruction(const spv_parsed_instruction_t* inst) {
|
||||
} else if (IsTypeInst(opcode)) {
|
||||
module_->AddType(std::move(spv_inst));
|
||||
} else if (IsConstantInst(opcode) || opcode == spv::Op::OpVariable ||
|
||||
opcode == spv::Op::OpUntypedVariableKHR ||
|
||||
opcode == spv::Op::OpUndef) {
|
||||
module_->AddGlobalValue(std::move(spv_inst));
|
||||
} else if (spvIsExtendedInstruction(opcode) &&
|
||||
|
||||
@@ -433,7 +433,8 @@ void LocalAccessChainConvertPass::InitExtensions() {
|
||||
"SPV_EXT_fragment_shader_interlock",
|
||||
"SPV_KHR_compute_shader_derivatives", "SPV_NV_cooperative_matrix",
|
||||
"SPV_KHR_cooperative_matrix", "SPV_KHR_ray_tracing_position_fetch",
|
||||
"SPV_AMDX_shader_enqueue", "SPV_KHR_fragment_shading_rate"});
|
||||
"SPV_AMDX_shader_enqueue", "SPV_KHR_fragment_shading_rate",
|
||||
"SPV_KHR_quad_control", "SPV_NV_shader_invocation_reorder"});
|
||||
}
|
||||
|
||||
bool LocalAccessChainConvertPass::AnyIndexIsOutOfBounds(
|
||||
|
||||
@@ -298,7 +298,9 @@ void LocalSingleBlockLoadStoreElimPass::InitExtensions() {
|
||||
"SPV_NV_cooperative_matrix",
|
||||
"SPV_KHR_cooperative_matrix",
|
||||
"SPV_KHR_ray_tracing_position_fetch",
|
||||
"SPV_KHR_fragment_shading_rate"});
|
||||
"SPV_KHR_fragment_shading_rate",
|
||||
"SPV_KHR_quad_control",
|
||||
"SPV_NV_shader_invocation_reorder"});
|
||||
}
|
||||
|
||||
} // namespace opt
|
||||
|
||||
@@ -149,7 +149,10 @@ void LocalSingleStoreElimPass::InitExtensionAllowList() {
|
||||
"SPV_KHR_ray_tracing_position_fetch",
|
||||
"SPV_AMDX_shader_enqueue",
|
||||
"SPV_KHR_fragment_shading_rate",
|
||||
"SPV_KHR_ray_tracing"});
|
||||
"SPV_KHR_ray_tracing",
|
||||
"SPV_KHR_quad_control",
|
||||
"SPV_GOOGLE_user_type",
|
||||
"SPV_NV_shader_invocation_reorder"});
|
||||
}
|
||||
bool LocalSingleStoreElimPass::ProcessVariable(Instruction* var_inst) {
|
||||
std::vector<Instruction*> users;
|
||||
|
||||
@@ -560,6 +560,10 @@ void LoopUnrollerUtilsImpl::ReplaceInductionUseWithFinalValue(Loop* loop) {
|
||||
loop->GetInductionVariables(inductions);
|
||||
|
||||
for (size_t index = 0; index < inductions.size(); ++index) {
|
||||
// We don't want the decorations that applied to the induction variable
|
||||
// to be applied to the value that replace it.
|
||||
context_->KillNamesAndDecorates(state_.previous_phis_[index]);
|
||||
|
||||
uint32_t trip_step_id = GetPhiDefID(state_.previous_phis_[index],
|
||||
state_.previous_latch_block_->id());
|
||||
context_->ReplaceAllUsesWith(inductions[index]->result_id(), trip_step_id);
|
||||
|
||||
@@ -639,6 +639,8 @@ bool Optimizer::RegisterPassFromFlag(const std::string& flag,
|
||||
RegisterPass(CreateTrimCapabilitiesPass());
|
||||
} else if (pass_name == "split-combined-image-sampler") {
|
||||
RegisterPass(CreateSplitCombinedImageSamplerPass());
|
||||
} else if (pass_name == "resolve-binding-conflicts") {
|
||||
RegisterPass(CreateResolveBindingConflictsPass());
|
||||
} else {
|
||||
Errorf(consumer(), nullptr, {},
|
||||
"Unknown flag '--%s'. Use --help for a list of valid flags",
|
||||
@@ -1195,6 +1197,11 @@ Optimizer::PassToken CreateSplitCombinedImageSamplerPass() {
|
||||
MakeUnique<opt::SplitCombinedImageSamplerPass>());
|
||||
}
|
||||
|
||||
Optimizer::PassToken CreateResolveBindingConflictsPass() {
|
||||
return MakeUnique<Optimizer::PassToken::Impl>(
|
||||
MakeUnique<opt::ResolveBindingConflictsPass>());
|
||||
}
|
||||
|
||||
} // namespace spvtools
|
||||
|
||||
extern "C" {
|
||||
|
||||
1
3rdparty/spirv-tools/source/opt/passes.h
vendored
1
3rdparty/spirv-tools/source/opt/passes.h
vendored
@@ -74,6 +74,7 @@
|
||||
#include "source/opt/remove_unused_interface_variables_pass.h"
|
||||
#include "source/opt/replace_desc_array_access_using_var_index.h"
|
||||
#include "source/opt/replace_invalid_opc.h"
|
||||
#include "source/opt/resolve_binding_conflicts_pass.h"
|
||||
#include "source/opt/scalar_replacement_pass.h"
|
||||
#include "source/opt/set_spec_constant_default_value_pass.h"
|
||||
#include "source/opt/simplification_pass.h"
|
||||
|
||||
@@ -17,6 +17,8 @@
|
||||
#include <bitset>
|
||||
#include <vector>
|
||||
|
||||
#include "source/table2.h"
|
||||
|
||||
namespace spvtools {
|
||||
namespace opt {
|
||||
|
||||
@@ -207,10 +209,10 @@ uint32_t ReplaceInvalidOpcodePass::GetSpecialConstant(uint32_t type_id) {
|
||||
}
|
||||
|
||||
std::string ReplaceInvalidOpcodePass::BuildWarningMessage(spv::Op opcode) {
|
||||
spv_opcode_desc opcode_info;
|
||||
context()->grammar().lookupOpcode(opcode, &opcode_info);
|
||||
const spvtools::InstructionDesc* opcode_desc = nullptr;
|
||||
spvtools::LookupOpcode(opcode, &opcode_desc);
|
||||
std::string message = "Removing ";
|
||||
message += opcode_info->name;
|
||||
message += opcode_desc->name().data();
|
||||
message += " instruction because of incompatible execution model.";
|
||||
return message;
|
||||
}
|
||||
|
||||
328
3rdparty/spirv-tools/source/opt/resolve_binding_conflicts_pass.cpp
vendored
Normal file
328
3rdparty/spirv-tools/source/opt/resolve_binding_conflicts_pass.cpp
vendored
Normal file
@@ -0,0 +1,328 @@
|
||||
// Copyright (c) 2025 Google LLC
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#include "source/opt/resolve_binding_conflicts_pass.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <unordered_map>
|
||||
#include <unordered_set>
|
||||
#include <vector>
|
||||
|
||||
#include "source/opt/decoration_manager.h"
|
||||
#include "source/opt/def_use_manager.h"
|
||||
#include "source/opt/instruction.h"
|
||||
#include "source/opt/ir_builder.h"
|
||||
#include "source/opt/ir_context.h"
|
||||
#include "spirv/unified1/spirv.h"
|
||||
|
||||
namespace spvtools {
|
||||
namespace opt {
|
||||
|
||||
// A VarBindingInfo contains the binding information for a single resource
|
||||
// variable.
|
||||
//
|
||||
// Exactly one such object is created per resource variable in the
|
||||
// module. In particular, when a resource variable is statically used by
|
||||
// more than one entry point, those entry points share the same VarBindingInfo
|
||||
// object for that variable.
|
||||
struct VarBindingInfo {
|
||||
const Instruction* const var;
|
||||
const uint32_t descriptor_set;
|
||||
Instruction* const binding_decoration;
|
||||
|
||||
// Returns the binding number.
|
||||
uint32_t binding() const {
|
||||
return binding_decoration->GetSingleWordInOperand(2);
|
||||
}
|
||||
// Sets the binding number to 'b'.
|
||||
void updateBinding(uint32_t b) { binding_decoration->SetOperand(2, {b}); }
|
||||
};
|
||||
|
||||
// The bindings in the same descriptor set that are used by an entry point.
|
||||
using BindingList = std::vector<VarBindingInfo*>;
|
||||
// A map from descriptor set number to the list of bindings in that descriptor
|
||||
// set, as used by a particular entry point.
|
||||
using DescriptorSets = std::unordered_map<uint32_t, BindingList>;
|
||||
|
||||
IRContext::Analysis ResolveBindingConflictsPass::GetPreservedAnalyses() {
|
||||
// All analyses are kept up to date.
|
||||
// At most this modifies the Binding numbers on variables.
|
||||
return IRContext::kAnalysisDefUse | IRContext::kAnalysisInstrToBlockMapping |
|
||||
IRContext::kAnalysisDecorations | IRContext::kAnalysisCombinators |
|
||||
IRContext::kAnalysisCFG | IRContext::kAnalysisDominatorAnalysis |
|
||||
IRContext::kAnalysisLoopAnalysis | IRContext::kAnalysisNameMap |
|
||||
IRContext::kAnalysisScalarEvolution |
|
||||
IRContext::kAnalysisRegisterPressure |
|
||||
IRContext::kAnalysisValueNumberTable |
|
||||
IRContext::kAnalysisStructuredCFG | IRContext::kAnalysisBuiltinVarId |
|
||||
IRContext::kAnalysisIdToFuncMapping | IRContext::kAnalysisConstants |
|
||||
IRContext::kAnalysisTypes | IRContext::kAnalysisDebugInfo |
|
||||
IRContext::kAnalysisLiveness;
|
||||
}
|
||||
|
||||
// Orders variable binding info objects.
|
||||
// * The binding number is most signficant;
|
||||
// * Then a sampler-like object compares greater than non-sampler like object.
|
||||
// * Otherwise compare based on variable ID.
|
||||
// This provides a total order among bindings in a descriptor set for a valid
|
||||
// Vulkan module.
|
||||
bool Less(const VarBindingInfo* const lhs, const VarBindingInfo* const rhs) {
|
||||
if (lhs->binding() < rhs->binding()) return true;
|
||||
if (lhs->binding() > rhs->binding()) return false;
|
||||
|
||||
// Examine types.
|
||||
// In valid Vulkan the only conflict can occur between
|
||||
// images and samplers. We only care about a specific
|
||||
// comparison when one is a image-like thing and the other
|
||||
// is a sampler-like thing of the same shape. So unwrap
|
||||
// types until we hit one of those two.
|
||||
|
||||
auto* def_use_mgr = lhs->var->context()->get_def_use_mgr();
|
||||
|
||||
// Returns the type found by iteratively following pointer pointee type,
|
||||
// or array element type.
|
||||
auto unwrap = [&def_use_mgr](Instruction* ty) {
|
||||
bool keep_going = true;
|
||||
do {
|
||||
switch (ty->opcode()) {
|
||||
case spv::Op::OpTypePointer:
|
||||
ty = def_use_mgr->GetDef(ty->GetSingleWordInOperand(1));
|
||||
break;
|
||||
case spv::Op::OpTypeArray:
|
||||
case spv::Op::OpTypeRuntimeArray:
|
||||
ty = def_use_mgr->GetDef(ty->GetSingleWordInOperand(0));
|
||||
break;
|
||||
default:
|
||||
keep_going = false;
|
||||
break;
|
||||
}
|
||||
} while (keep_going);
|
||||
return ty;
|
||||
};
|
||||
|
||||
auto* lhs_ty = unwrap(def_use_mgr->GetDef(lhs->var->type_id()));
|
||||
auto* rhs_ty = unwrap(def_use_mgr->GetDef(rhs->var->type_id()));
|
||||
if (lhs_ty->opcode() == rhs_ty->opcode()) {
|
||||
// Pick based on variable ID.
|
||||
return lhs->var->result_id() < rhs->var->result_id();
|
||||
}
|
||||
// A sampler is always greater than an image.
|
||||
if (lhs_ty->opcode() == spv::Op::OpTypeSampler) {
|
||||
return false;
|
||||
}
|
||||
if (rhs_ty->opcode() == spv::Op::OpTypeSampler) {
|
||||
return true;
|
||||
}
|
||||
// Pick based on variable ID.
|
||||
return lhs->var->result_id() < rhs->var->result_id();
|
||||
}
|
||||
|
||||
// Summarizes the caller-callee relationships between functions in a module.
|
||||
class CallGraph {
|
||||
public:
|
||||
// Returns the list of all functions statically reachable from entry points,
|
||||
// where callees precede callers.
|
||||
const std::vector<uint32_t>& CalleesBeforeCallers() const {
|
||||
return visit_order_;
|
||||
}
|
||||
// Returns the list functions called from a given function.
|
||||
const std::unordered_set<uint32_t>& Callees(uint32_t caller) {
|
||||
return calls_[caller];
|
||||
}
|
||||
|
||||
CallGraph(IRContext& context) {
|
||||
// Populate calls_.
|
||||
std::queue<uint32_t> callee_queue;
|
||||
for (const auto& fn : *context.module()) {
|
||||
auto& callees = calls_[fn.result_id()];
|
||||
context.AddCalls(&fn, &callee_queue);
|
||||
while (!callee_queue.empty()) {
|
||||
callees.insert(callee_queue.front());
|
||||
callee_queue.pop();
|
||||
}
|
||||
}
|
||||
|
||||
// Perform depth-first search, starting from each entry point.
|
||||
// Populates visit_order_.
|
||||
for (const auto& ep : context.module()->entry_points()) {
|
||||
Visit(ep.GetSingleWordInOperand(1));
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
// Visits a function, recursively visiting its callees. Adds this ID
|
||||
// to the visit_order after all callees have been visited.
|
||||
void Visit(uint32_t func_id) {
|
||||
if (visited_.count(func_id)) {
|
||||
return;
|
||||
}
|
||||
visited_.insert(func_id);
|
||||
for (auto callee_id : calls_[func_id]) {
|
||||
Visit(callee_id);
|
||||
}
|
||||
visit_order_.push_back(func_id);
|
||||
}
|
||||
|
||||
// Maps the ID of a function to the IDs of functions it calls.
|
||||
std::unordered_map<uint32_t, std::unordered_set<uint32_t>> calls_;
|
||||
|
||||
// IDs of visited functions;
|
||||
std::unordered_set<uint32_t> visited_;
|
||||
// IDs of functions, where callees precede callers.
|
||||
std::vector<uint32_t> visit_order_;
|
||||
};
|
||||
|
||||
// Returns vector binding info for all resource variables in the module.
|
||||
auto GetVarBindings(IRContext& context) {
|
||||
std::vector<VarBindingInfo> vars;
|
||||
auto* deco_mgr = context.get_decoration_mgr();
|
||||
for (auto& inst : context.module()->types_values()) {
|
||||
if (inst.opcode() == spv::Op::OpVariable) {
|
||||
Instruction* descriptor_set_deco = nullptr;
|
||||
Instruction* binding_deco = nullptr;
|
||||
for (auto* deco : deco_mgr->GetDecorationsFor(inst.result_id(), false)) {
|
||||
switch (static_cast<spv::Decoration>(deco->GetSingleWordInOperand(1))) {
|
||||
case spv::Decoration::DescriptorSet:
|
||||
assert(!descriptor_set_deco);
|
||||
descriptor_set_deco = deco;
|
||||
break;
|
||||
case spv::Decoration::Binding:
|
||||
assert(!binding_deco);
|
||||
binding_deco = deco;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (descriptor_set_deco && binding_deco) {
|
||||
vars.push_back({&inst, descriptor_set_deco->GetSingleWordInOperand(2),
|
||||
binding_deco});
|
||||
}
|
||||
}
|
||||
}
|
||||
return vars;
|
||||
}
|
||||
|
||||
// Merges the bindings from source into sink. Maintains order and uniqueness
|
||||
// within a list of bindings.
|
||||
void Merge(DescriptorSets& sink, const DescriptorSets& source) {
|
||||
for (auto index_and_bindings : source) {
|
||||
const uint32_t index = index_and_bindings.first;
|
||||
const BindingList& src1 = index_and_bindings.second;
|
||||
const BindingList& src2 = sink[index];
|
||||
BindingList merged;
|
||||
merged.resize(src1.size() + src2.size());
|
||||
auto merged_end = std::merge(src1.begin(), src1.end(), src2.begin(),
|
||||
src2.end(), merged.begin(), Less);
|
||||
auto unique_end = std::unique(merged.begin(), merged_end);
|
||||
merged.resize(unique_end - merged.begin());
|
||||
sink[index] = std::move(merged);
|
||||
}
|
||||
}
|
||||
|
||||
// Resolves conflicts within this binding list, so the binding number on an
|
||||
// item is at least one more than the binding number on the previous item.
|
||||
// When this does not yet hold, increase the binding number on the second
|
||||
// item in the pair. Returns true if any changes were applied.
|
||||
bool ResolveConflicts(BindingList& bl) {
|
||||
bool changed = false;
|
||||
for (size_t i = 1; i < bl.size(); i++) {
|
||||
const auto prev_num = bl[i - 1]->binding();
|
||||
if (prev_num >= bl[i]->binding()) {
|
||||
bl[i]->updateBinding(prev_num + 1);
|
||||
changed = true;
|
||||
}
|
||||
}
|
||||
return changed;
|
||||
}
|
||||
|
||||
Pass::Status ResolveBindingConflictsPass::Process() {
|
||||
// Assumes the descriptor set and binding decorations are not provided
|
||||
// via decoration groups. Decoration groups were deprecated in SPIR-V 1.3
|
||||
// Revision 6. I have not seen any compiler generate them. --dneto
|
||||
|
||||
auto vars = GetVarBindings(*context());
|
||||
|
||||
// Maps a function ID to the variables used directly or indirectly by the
|
||||
// function, organized into descriptor sets. Each descriptor set
|
||||
// consists of a BindingList of distinct variables.
|
||||
std::unordered_map<uint32_t, DescriptorSets> used_vars;
|
||||
|
||||
// Determine variables directly used by functions.
|
||||
auto* def_use_mgr = context()->get_def_use_mgr();
|
||||
for (auto& var : vars) {
|
||||
std::unordered_set<uint32_t> visited_functions_for_var;
|
||||
def_use_mgr->ForEachUser(var.var, [&](Instruction* user) {
|
||||
if (auto* block = context()->get_instr_block(user)) {
|
||||
auto* fn = block->GetParent();
|
||||
assert(fn);
|
||||
const auto fn_id = fn->result_id();
|
||||
if (visited_functions_for_var.insert(fn_id).second) {
|
||||
used_vars[fn_id][var.descriptor_set].push_back(&var);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Sort within a descriptor set by binding number.
|
||||
for (auto& sets_for_fn : used_vars) {
|
||||
for (auto& ds : sets_for_fn.second) {
|
||||
BindingList& bindings = ds.second;
|
||||
std::stable_sort(bindings.begin(), bindings.end(), Less);
|
||||
}
|
||||
}
|
||||
|
||||
// Propagate from callees to callers.
|
||||
CallGraph call_graph(*context());
|
||||
for (const uint32_t caller : call_graph.CalleesBeforeCallers()) {
|
||||
DescriptorSets& caller_ds = used_vars[caller];
|
||||
for (const uint32_t callee : call_graph.Callees(caller)) {
|
||||
Merge(caller_ds, used_vars[callee]);
|
||||
}
|
||||
}
|
||||
|
||||
// At this point, the descriptor sets associated with each entry point
|
||||
// capture exactly the set of resource variables statically used
|
||||
// by the static call tree of that entry point.
|
||||
|
||||
// Resolve conflicts.
|
||||
// VarBindingInfo objects may be shared between the bindings lists.
|
||||
// Updating a binding in one list can require updating another list later.
|
||||
// So repeat updates until settling.
|
||||
|
||||
// The union of BindingLists across all entry points.
|
||||
std::vector<BindingList*> ep_bindings;
|
||||
|
||||
for (auto& ep : context()->module()->entry_points()) {
|
||||
for (auto& ds : used_vars[ep.GetSingleWordInOperand(1)]) {
|
||||
BindingList& bindings = ds.second;
|
||||
ep_bindings.push_back(&bindings);
|
||||
}
|
||||
}
|
||||
bool modified = false;
|
||||
bool found_conflict;
|
||||
do {
|
||||
found_conflict = false;
|
||||
for (BindingList* bl : ep_bindings) {
|
||||
found_conflict |= ResolveConflicts(*bl);
|
||||
}
|
||||
modified |= found_conflict;
|
||||
} while (found_conflict);
|
||||
|
||||
return modified ? Pass::Status::SuccessWithChange
|
||||
: Pass::Status::SuccessWithoutChange;
|
||||
}
|
||||
|
||||
} // namespace opt
|
||||
} // namespace spvtools
|
||||
38
3rdparty/spirv-tools/source/opt/resolve_binding_conflicts_pass.h
vendored
Normal file
38
3rdparty/spirv-tools/source/opt/resolve_binding_conflicts_pass.h
vendored
Normal file
@@ -0,0 +1,38 @@
|
||||
// Copyright (c) 2025 Google LLC
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#ifndef LIBSPIRV_OPT_RESOLVE_BINDING_CONFLICTS_PASS_H_
|
||||
#define LIBSPIRV_OPT_RESOLVE_BINDING_CONFLICTS_PASS_H_
|
||||
|
||||
#include <unordered_map>
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
|
||||
#include "source/diagnostic.h"
|
||||
#include "source/opt/pass.h"
|
||||
#include "source/util/small_vector.h"
|
||||
|
||||
namespace spvtools {
|
||||
namespace opt {
|
||||
class ResolveBindingConflictsPass : public Pass {
|
||||
public:
|
||||
virtual ~ResolveBindingConflictsPass() override = default;
|
||||
const char* name() const override { return "resolve-binding-conflicts"; }
|
||||
IRContext::Analysis GetPreservedAnalyses() override;
|
||||
Status Process() override;
|
||||
};
|
||||
} // namespace opt
|
||||
} // namespace spvtools
|
||||
|
||||
#endif // LIBSPIRV_OPT_RESOLVE_BINDING_CONFLICTS_PASS_H_
|
||||
@@ -24,6 +24,7 @@
|
||||
#include "source/opt/type_manager.h"
|
||||
#include "source/opt/types.h"
|
||||
#include "source/util/make_unique.h"
|
||||
#include "source/util/string_utils.h"
|
||||
#include "spirv/unified1/spirv.h"
|
||||
|
||||
namespace spvtools {
|
||||
@@ -357,6 +358,13 @@ spv_result_t SplitCombinedImageSamplerPass::RemapUses(
|
||||
use.image_part->result_id());
|
||||
auto* sampler = builder.AddLoad(PointeeTypeId(use.sampler_part),
|
||||
use.sampler_part->result_id());
|
||||
|
||||
// Move decorations, such as RelaxedPrecision.
|
||||
auto* deco_mgr = context()->get_decoration_mgr();
|
||||
deco_mgr->CloneDecorations(load->result_id(), image->result_id());
|
||||
deco_mgr->CloneDecorations(load->result_id(), sampler->result_id());
|
||||
deco_mgr->RemoveDecorationsFrom(load->result_id());
|
||||
|
||||
// Create a sampled image from the loads of the two parts.
|
||||
auto* sampled_image = builder.AddSampledImage(
|
||||
load->type_id(), image->result_id(), sampler->result_id());
|
||||
@@ -404,12 +412,16 @@ spv_result_t SplitCombinedImageSamplerPass::RemapUses(
|
||||
def_use_mgr_->AnalyzeInstUse(use.user);
|
||||
break;
|
||||
}
|
||||
case spv::Op::OpName:
|
||||
// TODO(dneto): Maybe we should synthesize names for the remapped vars.
|
||||
case spv::Op::OpName: {
|
||||
// Synthesize new names from the old.
|
||||
const auto name = use.user->GetOperand(1).AsString();
|
||||
AddOpName(use.image_part->result_id(), name + "_image");
|
||||
AddOpName(use.sampler_part->result_id(), name + "_sampler");
|
||||
|
||||
// KillInst will delete names and decorations, so don't schedule a
|
||||
// deletion of this instruction.
|
||||
break;
|
||||
}
|
||||
case spv::Op::OpFunctionCall: {
|
||||
// Replace each combined arg with two args: the image part, then the
|
||||
// sampler part.
|
||||
@@ -597,6 +609,20 @@ Instruction* SplitCombinedImageSamplerPass::MakeUniformConstantPointer(
|
||||
return ptr;
|
||||
}
|
||||
|
||||
void SplitCombinedImageSamplerPass::AddOpName(uint32_t id,
|
||||
const std::string& name) {
|
||||
std::unique_ptr<Instruction> opname{new Instruction{
|
||||
context(),
|
||||
spv::Op::OpName,
|
||||
0u,
|
||||
0u,
|
||||
{{SPV_OPERAND_TYPE_ID, {id}},
|
||||
{SPV_OPERAND_TYPE_LITERAL_STRING,
|
||||
utils::MakeVector<spvtools::opt::Operand::OperandData>(name)}}}};
|
||||
|
||||
context()->AddDebug2Inst(std::move(opname));
|
||||
}
|
||||
|
||||
spv_result_t SplitCombinedImageSamplerPass::RemoveDeadTypes() {
|
||||
for (auto dead_type_id : combined_types_to_remove_) {
|
||||
if (auto* ty = def_use_mgr_->GetDef(dead_type_id)) {
|
||||
|
||||
@@ -87,6 +87,11 @@ class SplitCombinedImageSamplerPass : public Pass {
|
||||
return ptr_ty->GetSingleWordInOperand(1);
|
||||
}
|
||||
|
||||
// Creates a new OpName instruction mapping the given name to the given
|
||||
// string, and adds it to the module at the end of the OpName and OpMemberName
|
||||
// section.
|
||||
void AddOpName(uint32_t id, const std::string& name);
|
||||
|
||||
// Cached from the IRContext. Valid while Process() is running.
|
||||
analysis::DefUseManager* def_use_mgr_ = nullptr;
|
||||
// Cached from the IRContext. Valid while Process() is running.
|
||||
|
||||
@@ -26,11 +26,11 @@
|
||||
#include <vector>
|
||||
|
||||
#include "source/enum_set.h"
|
||||
#include "source/enum_string_mapping.h"
|
||||
#include "source/ext_inst.h"
|
||||
#include "source/opt/ir_context.h"
|
||||
#include "source/opt/reflect.h"
|
||||
#include "source/spirv_target_env.h"
|
||||
#include "source/table2.h"
|
||||
#include "source/util/string_utils.h"
|
||||
|
||||
namespace spvtools {
|
||||
@@ -61,6 +61,7 @@ constexpr uint32_t kOpExtInstImportNameInIndex = 0;
|
||||
template <class UnaryPredicate>
|
||||
static void DFSWhile(const Instruction* instruction, UnaryPredicate condition) {
|
||||
std::stack<uint32_t> instructions_to_visit;
|
||||
std::unordered_set<uint32_t> visited_instructions;
|
||||
instructions_to_visit.push(instruction->result_id());
|
||||
const auto* def_use_mgr = instruction->context()->get_def_use_mgr();
|
||||
|
||||
@@ -68,6 +69,11 @@ static void DFSWhile(const Instruction* instruction, UnaryPredicate condition) {
|
||||
const Instruction* item = def_use_mgr->GetDef(instructions_to_visit.top());
|
||||
instructions_to_visit.pop();
|
||||
|
||||
// Forward references can be allowed, meaning we can have cycles
|
||||
// between ID uses. Need to keep track of this.
|
||||
if (visited_instructions.count(item->result_id())) continue;
|
||||
visited_instructions.insert(item->result_id());
|
||||
|
||||
if (!condition(item)) {
|
||||
continue;
|
||||
}
|
||||
@@ -441,19 +447,18 @@ constexpr std::array<std::pair<spv::Op, OpcodeHandler>, 14> kOpcodeHandlers{{
|
||||
// ============== End opcode handler implementations. =======================
|
||||
|
||||
namespace {
|
||||
ExtensionSet getExtensionsRelatedTo(const CapabilitySet& capabilities,
|
||||
const AssemblyGrammar& grammar) {
|
||||
ExtensionSet getExtensionsRelatedTo(const CapabilitySet& capabilities) {
|
||||
ExtensionSet output;
|
||||
const spv_operand_desc_t* desc = nullptr;
|
||||
const spvtools::OperandDesc* desc = nullptr;
|
||||
for (auto capability : capabilities) {
|
||||
if (SPV_SUCCESS != grammar.lookupOperand(SPV_OPERAND_TYPE_CAPABILITY,
|
||||
static_cast<uint32_t>(capability),
|
||||
&desc)) {
|
||||
if (SPV_SUCCESS !=
|
||||
spvtools::LookupOperand(SPV_OPERAND_TYPE_CAPABILITY,
|
||||
static_cast<uint32_t>(capability), &desc)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
for (uint32_t i = 0; i < desc->numExtensions; ++i) {
|
||||
output.insert(desc->extensions[i]);
|
||||
for (auto extension : desc->extensions()) {
|
||||
output.insert(extension);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -507,8 +512,8 @@ void TrimCapabilitiesPass::addInstructionRequirementsForOpcode(
|
||||
return;
|
||||
}
|
||||
|
||||
const spv_opcode_desc_t* desc = {};
|
||||
auto result = context()->grammar().lookupOpcode(opcode, &desc);
|
||||
const spvtools::InstructionDesc* desc;
|
||||
auto result = spvtools::LookupOpcode(opcode, &desc);
|
||||
if (result != SPV_SUCCESS) {
|
||||
return;
|
||||
}
|
||||
@@ -545,9 +550,9 @@ void TrimCapabilitiesPass::addInstructionRequirementsForOperand(
|
||||
|
||||
// case 1: Operand is a single value, can directly lookup.
|
||||
if (!spvOperandIsConcreteMask(operand.type)) {
|
||||
const spv_operand_desc_t* desc = {};
|
||||
auto result = context()->grammar().lookupOperand(operand.type,
|
||||
operand.words[0], &desc);
|
||||
const spvtools::OperandDesc* desc = nullptr;
|
||||
auto result =
|
||||
spvtools::LookupOperand(operand.type, operand.words[0], &desc);
|
||||
if (result != SPV_SUCCESS) {
|
||||
return;
|
||||
}
|
||||
@@ -563,8 +568,8 @@ void TrimCapabilitiesPass::addInstructionRequirementsForOperand(
|
||||
continue;
|
||||
}
|
||||
|
||||
const spv_operand_desc_t* desc = {};
|
||||
auto result = context()->grammar().lookupOperand(operand.type, mask, &desc);
|
||||
const spvtools::OperandDesc* desc = nullptr;
|
||||
auto result = spvtools::LookupOperand(operand.type, mask, &desc);
|
||||
if (result != SPV_SUCCESS) {
|
||||
continue;
|
||||
}
|
||||
@@ -593,9 +598,8 @@ void TrimCapabilitiesPass::addInstructionRequirementsForExtInst(
|
||||
spv_ext_inst_type_t instructionSet =
|
||||
spvExtInstImportTypeGet(extInstSet.AsString().c_str());
|
||||
|
||||
spv_ext_inst_desc desc = {};
|
||||
auto result =
|
||||
context()->grammar().lookupExtInst(instructionSet, extInstruction, &desc);
|
||||
const ExtInstDesc* desc = nullptr;
|
||||
auto result = LookupExtInst(instructionSet, extInstruction, &desc);
|
||||
if (result != SPV_SUCCESS) {
|
||||
return;
|
||||
}
|
||||
@@ -642,8 +646,8 @@ void TrimCapabilitiesPass::addInstructionRequirements(
|
||||
void TrimCapabilitiesPass::AddExtensionsForOperand(
|
||||
const spv_operand_type_t type, const uint32_t value,
|
||||
ExtensionSet* extensions) const {
|
||||
const spv_operand_desc_t* desc = nullptr;
|
||||
spv_result_t result = context()->grammar().lookupOperand(type, value, &desc);
|
||||
const spvtools::OperandDesc* desc = nullptr;
|
||||
spv_result_t result = spvtools::LookupOperand(type, value, &desc);
|
||||
if (result != SPV_SUCCESS) {
|
||||
return;
|
||||
}
|
||||
@@ -718,7 +722,7 @@ Pass::Status TrimCapabilitiesPass::TrimUnrequiredCapabilities(
|
||||
Pass::Status TrimCapabilitiesPass::TrimUnrequiredExtensions(
|
||||
const ExtensionSet& required_extensions) const {
|
||||
const auto supported_extensions =
|
||||
getExtensionsRelatedTo(supportedCapabilities_, context()->grammar());
|
||||
getExtensionsRelatedTo(supportedCapabilities_);
|
||||
|
||||
bool modified_module = false;
|
||||
for (auto extension : supported_extensions) {
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
#include "source/opt/module.h"
|
||||
#include "source/opt/pass.h"
|
||||
#include "source/spirv_target_env.h"
|
||||
#include "source/table2.h"
|
||||
|
||||
namespace spvtools {
|
||||
namespace opt {
|
||||
@@ -107,6 +108,7 @@ class TrimCapabilitiesPass : public Pass {
|
||||
spv::Capability::StorageUniform16,
|
||||
spv::Capability::StorageUniformBufferBlock16,
|
||||
spv::Capability::VulkanMemoryModelDeviceScope,
|
||||
spv::Capability::QuadControlKHR,
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
@@ -128,14 +130,11 @@ class TrimCapabilitiesPass : public Pass {
|
||||
|
||||
private:
|
||||
// Inserts every capability listed by `descriptor` this pass supports into
|
||||
// `output`. Expects a Descriptor like `spv_opcode_desc_t` or
|
||||
// `spv_operand_desc_t`.
|
||||
template <class Descriptor>
|
||||
inline void addSupportedCapabilitiesToSet(const Descriptor* const descriptor,
|
||||
CapabilitySet* output) const {
|
||||
const uint32_t capabilityCount = descriptor->numCapabilities;
|
||||
for (uint32_t i = 0; i < capabilityCount; ++i) {
|
||||
const auto capability = descriptor->capabilities[i];
|
||||
// `output`.
|
||||
template <typename Descriptor>
|
||||
void addSupportedCapabilitiesToSet(const Descriptor* const descriptor,
|
||||
CapabilitySet* output) const {
|
||||
for (auto capability : descriptor->capabilities()) {
|
||||
if (supportedCapabilities_.contains(capability)) {
|
||||
output->insert(capability);
|
||||
}
|
||||
@@ -143,8 +142,8 @@ class TrimCapabilitiesPass : public Pass {
|
||||
}
|
||||
|
||||
// Inserts every extension listed by `descriptor` required by the module into
|
||||
// `output`. Expects a Descriptor like `spv_opcode_desc_t` or
|
||||
// `spv_operand_desc_t`.
|
||||
// `output`. Expects a Descriptor like spvtools::OperandDesc or
|
||||
// spvtools::InstructionDesc.
|
||||
template <class Descriptor>
|
||||
inline void addSupportedExtensionsToSet(const Descriptor* const descriptor,
|
||||
ExtensionSet* output) const {
|
||||
@@ -152,8 +151,8 @@ class TrimCapabilitiesPass : public Pass {
|
||||
spvVersionForTargetEnv(context()->GetTargetEnv())) {
|
||||
return;
|
||||
}
|
||||
output->insert(descriptor->extensions,
|
||||
descriptor->extensions + descriptor->numExtensions);
|
||||
output->insert(descriptor->extensions().begin(),
|
||||
descriptor->extensions().end());
|
||||
}
|
||||
|
||||
void addInstructionRequirementsForOpcode(spv::Op opcode,
|
||||
|
||||
48
3rdparty/spirv-tools/source/opt/type_manager.cpp
vendored
48
3rdparty/spirv-tools/source/opt/type_manager.cpp
vendored
@@ -374,16 +374,21 @@ uint32_t TypeManager::GetTypeInstruction(const Type* type) {
|
||||
}
|
||||
case Type::kPointer: {
|
||||
const Pointer* pointer = type->AsPointer();
|
||||
uint32_t subtype = GetTypeInstruction(pointer->pointee_type());
|
||||
if (subtype == 0) {
|
||||
return 0;
|
||||
if (pointer->is_untyped()) {
|
||||
typeInst = MakeUnique<Instruction>(
|
||||
context(), spv::Op::OpTypeUntypedPointerKHR, 0, id,
|
||||
std::initializer_list<Operand>{
|
||||
{SPV_OPERAND_TYPE_STORAGE_CLASS,
|
||||
{static_cast<uint32_t>(pointer->storage_class())}}});
|
||||
} else {
|
||||
uint32_t subtype = GetTypeInstruction(pointer->pointee_type());
|
||||
typeInst = MakeUnique<Instruction>(
|
||||
context(), spv::Op::OpTypePointer, 0, id,
|
||||
std::initializer_list<Operand>{
|
||||
{SPV_OPERAND_TYPE_STORAGE_CLASS,
|
||||
{static_cast<uint32_t>(pointer->storage_class())}},
|
||||
{SPV_OPERAND_TYPE_ID, {subtype}}});
|
||||
}
|
||||
typeInst = MakeUnique<Instruction>(
|
||||
context(), spv::Op::OpTypePointer, 0, id,
|
||||
std::initializer_list<Operand>{
|
||||
{SPV_OPERAND_TYPE_STORAGE_CLASS,
|
||||
{static_cast<uint32_t>(pointer->storage_class())}},
|
||||
{SPV_OPERAND_TYPE_ID, {subtype}}});
|
||||
break;
|
||||
}
|
||||
case Type::kFunction: {
|
||||
@@ -680,9 +685,13 @@ Type* TypeManager::RebuildType(uint32_t type_id, const Type& type) {
|
||||
}
|
||||
case Type::kPointer: {
|
||||
const Pointer* pointer_ty = type.AsPointer();
|
||||
const Type* ele_ty = pointer_ty->pointee_type();
|
||||
rebuilt_ty = MakeUnique<Pointer>(RebuildType(GetId(ele_ty), *ele_ty),
|
||||
pointer_ty->storage_class());
|
||||
if (pointer_ty->pointee_type()) {
|
||||
const Type* ele_ty = pointer_ty->pointee_type();
|
||||
rebuilt_ty = MakeUnique<Pointer>(RebuildType(GetId(ele_ty), *ele_ty),
|
||||
pointer_ty->storage_class());
|
||||
} else {
|
||||
rebuilt_ty = MakeUnique<Pointer>(nullptr, pointer_ty->storage_class());
|
||||
}
|
||||
break;
|
||||
}
|
||||
case Type::kFunction: {
|
||||
@@ -792,9 +801,13 @@ Type* TypeManager::RecordIfTypeDefinition(const Instruction& inst) {
|
||||
type = new Integer(inst.GetSingleWordInOperand(0),
|
||||
inst.GetSingleWordInOperand(1));
|
||||
break;
|
||||
case spv::Op::OpTypeFloat:
|
||||
type = new Float(inst.GetSingleWordInOperand(0));
|
||||
break;
|
||||
case spv::Op::OpTypeFloat: {
|
||||
const spv::FPEncoding encoding =
|
||||
inst.NumInOperands() > 1
|
||||
? static_cast<spv::FPEncoding>(inst.GetSingleWordInOperand(1))
|
||||
: spv::FPEncoding::Max;
|
||||
type = new Float(inst.GetSingleWordInOperand(0), encoding);
|
||||
} break;
|
||||
case spv::Op::OpTypeVector:
|
||||
type = new Vector(GetType(inst.GetSingleWordInOperand(0)),
|
||||
inst.GetSingleWordInOperand(1));
|
||||
@@ -924,6 +937,11 @@ Type* TypeManager::RecordIfTypeDefinition(const Instruction& inst) {
|
||||
id_to_incomplete_type_.erase(inst.result_id());
|
||||
|
||||
} break;
|
||||
case spv::Op::OpTypeUntypedPointerKHR: {
|
||||
type = new Pointer(nullptr, static_cast<spv::StorageClass>(
|
||||
inst.GetSingleWordInOperand(0)));
|
||||
id_to_incomplete_type_.erase(inst.result_id());
|
||||
} break;
|
||||
case spv::Op::OpTypeFunction: {
|
||||
bool incomplete_type = false;
|
||||
uint32_t return_type_id = inst.GetSingleWordInOperand(0);
|
||||
|
||||
@@ -34,7 +34,7 @@ namespace analysis {
|
||||
|
||||
// Hashing functor.
|
||||
//
|
||||
// All type pointers must be non-null.
|
||||
// All type pointers must be non-null to reach here.
|
||||
struct HashTypePointer {
|
||||
size_t operator()(const Type* type) const {
|
||||
assert(type);
|
||||
|
||||
44
3rdparty/spirv-tools/source/opt/types.cpp
vendored
44
3rdparty/spirv-tools/source/opt/types.cpp
vendored
@@ -309,17 +309,26 @@ size_t Integer::ComputeExtraStateHash(size_t hash, SeenTypes*) const {
|
||||
|
||||
bool Float::IsSameImpl(const Type* that, IsSameCache*) const {
|
||||
const Float* ft = that->AsFloat();
|
||||
return ft && width_ == ft->width_ && HasSameDecorations(that);
|
||||
return ft && width_ == ft->width_ && encoding_ == ft->encoding_ &&
|
||||
HasSameDecorations(that);
|
||||
}
|
||||
|
||||
std::string Float::str() const {
|
||||
std::ostringstream oss;
|
||||
oss << "float" << width_;
|
||||
switch (encoding_) {
|
||||
case spv::FPEncoding::BFloat16KHR:
|
||||
assert(width_ == 16);
|
||||
oss << "bfloat16";
|
||||
break;
|
||||
default:
|
||||
oss << "float" << width_;
|
||||
break;
|
||||
}
|
||||
return oss.str();
|
||||
}
|
||||
|
||||
size_t Float::ComputeExtraStateHash(size_t hash, SeenTypes*) const {
|
||||
return hash_combine(hash, width_);
|
||||
return hash_combine(hash, width_, encoding_);
|
||||
}
|
||||
|
||||
Vector::Vector(const Type* type, uint32_t count)
|
||||
@@ -612,24 +621,39 @@ bool Pointer::IsSameImpl(const Type* that, IsSameCache* seen) const {
|
||||
if (!p.second) {
|
||||
return true;
|
||||
}
|
||||
bool same_pointee = pointee_type_->IsSameImpl(pt->pointee_type_, seen);
|
||||
seen->erase(p.first);
|
||||
if (!same_pointee) {
|
||||
return false;
|
||||
if (pointee_type_ != nullptr && pt->pointee_type_ != nullptr) {
|
||||
bool same_pointee = pointee_type_->IsSameImpl(pt->pointee_type_, seen);
|
||||
seen->erase(p.first);
|
||||
if (!same_pointee) {
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
seen->erase(p.first);
|
||||
// Either both are untyped or it is mixed typed and untyped.
|
||||
if (pointee_type_ != pt->pointee_type_) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return HasSameDecorations(that);
|
||||
}
|
||||
|
||||
std::string Pointer::str() const {
|
||||
std::ostringstream os;
|
||||
os << pointee_type_->str() << " " << static_cast<uint32_t>(storage_class_)
|
||||
<< "*";
|
||||
if (pointee_type_) {
|
||||
os << pointee_type_->str();
|
||||
} else {
|
||||
os << "untyped_ptr";
|
||||
}
|
||||
os << " " << static_cast<uint32_t>(storage_class_) << "*";
|
||||
return os.str();
|
||||
}
|
||||
|
||||
size_t Pointer::ComputeExtraStateHash(size_t hash, SeenTypes* seen) const {
|
||||
hash = hash_combine(hash, uint32_t(storage_class_));
|
||||
return pointee_type_->ComputeHashValue(hash, seen);
|
||||
if (pointee_type_) {
|
||||
hash = pointee_type_->ComputeHashValue(hash, seen);
|
||||
}
|
||||
return hash;
|
||||
}
|
||||
|
||||
void Pointer::SetPointeeType(const Type* type) { pointee_type_ = type; }
|
||||
|
||||
15
3rdparty/spirv-tools/source/opt/types.h
vendored
15
3rdparty/spirv-tools/source/opt/types.h
vendored
@@ -182,9 +182,9 @@ class Type {
|
||||
// non-composite type.
|
||||
uint64_t NumberOfComponents() const;
|
||||
|
||||
// A bunch of methods for casting this type to a given type. Returns this if the
|
||||
// cast can be done, nullptr otherwise.
|
||||
// clang-format off
|
||||
// A bunch of methods for casting this type to a given type. Returns this if
|
||||
// the cast can be done, nullptr otherwise.
|
||||
// clang-format off
|
||||
#define DeclareCastMethod(target) \
|
||||
virtual target* As##target() { return nullptr; } \
|
||||
virtual const target* As##target() const { return nullptr; }
|
||||
@@ -267,7 +267,8 @@ class Integer : public Type {
|
||||
|
||||
class Float : public Type {
|
||||
public:
|
||||
Float(uint32_t w) : Type(kFloat), width_(w) {}
|
||||
Float(uint32_t w, spv::FPEncoding encoding = spv::FPEncoding::Max)
|
||||
: Type(kFloat), width_(w), encoding_(encoding) {}
|
||||
Float(const Float&) = default;
|
||||
|
||||
std::string str() const override;
|
||||
@@ -275,13 +276,15 @@ class Float : public Type {
|
||||
Float* AsFloat() override { return this; }
|
||||
const Float* AsFloat() const override { return this; }
|
||||
uint32_t width() const { return width_; }
|
||||
spv::FPEncoding encoding() const { return encoding_; }
|
||||
|
||||
size_t ComputeExtraStateHash(size_t hash, SeenTypes* seen) const override;
|
||||
|
||||
private:
|
||||
bool IsSameImpl(const Type* that, IsSameCache*) const override;
|
||||
|
||||
uint32_t width_; // bit width
|
||||
uint32_t width_; // bit width
|
||||
spv::FPEncoding encoding_; // FPEncoding
|
||||
};
|
||||
|
||||
class Vector : public Type {
|
||||
@@ -547,6 +550,8 @@ class Pointer : public Type {
|
||||
const Type* pointee_type() const { return pointee_type_; }
|
||||
spv::StorageClass storage_class() const { return storage_class_; }
|
||||
|
||||
bool is_untyped() const { return pointee_type_ == nullptr; }
|
||||
|
||||
Pointer* AsPointer() override { return this; }
|
||||
const Pointer* AsPointer() const override { return this; }
|
||||
|
||||
|
||||
@@ -45,28 +45,43 @@ uint32_t ValueNumberTable::AssignValueNumber(Instruction* inst) {
|
||||
return value;
|
||||
}
|
||||
|
||||
auto assign_new_number = [this](Instruction* i) {
|
||||
const auto new_value = TakeNextValueNumber();
|
||||
id_to_value_[i->result_id()] = new_value;
|
||||
return new_value;
|
||||
};
|
||||
|
||||
// If the instruction has other side effects, then it must
|
||||
// have its own value number.
|
||||
// OpSampledImage and OpImage must remain in the same basic block in which
|
||||
// they are used, because of this we will assign each one it own value number.
|
||||
if (!context()->IsCombinatorInstruction(inst) &&
|
||||
!inst->IsCommonDebugInstr()) {
|
||||
value = TakeNextValueNumber();
|
||||
id_to_value_[inst->result_id()] = value;
|
||||
return value;
|
||||
return assign_new_number(inst);
|
||||
}
|
||||
|
||||
// OpSampledImage and OpImage must remain in the same basic block in which
|
||||
// they are used, because of this we will assign each one it own value number.
|
||||
switch (inst->opcode()) {
|
||||
case spv::Op::OpSampledImage:
|
||||
case spv::Op::OpImage:
|
||||
case spv::Op::OpVariable:
|
||||
value = TakeNextValueNumber();
|
||||
id_to_value_[inst->result_id()] = value;
|
||||
return value;
|
||||
return assign_new_number(inst);
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
// A load that yields an image, sampler, or sampled image must remain in
|
||||
// the same basic block. So assign it its own value number.
|
||||
if (inst->IsLoad()) {
|
||||
switch (context()->get_def_use_mgr()->GetDef(inst->type_id())->opcode()) {
|
||||
case spv::Op::OpTypeSampledImage:
|
||||
case spv::Op::OpTypeImage:
|
||||
case spv::Op::OpTypeSampler:
|
||||
return assign_new_number(inst);
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// If it is a load from memory that can be modified, we have to assume the
|
||||
// memory has been modified, so we give it a new value number.
|
||||
//
|
||||
@@ -74,9 +89,7 @@ uint32_t ValueNumberTable::AssignValueNumber(Instruction* inst) {
|
||||
// read only. However, if this is ever relaxed because we analyze stores, we
|
||||
// will have to add a new case for volatile loads.
|
||||
if (inst->IsLoad() && !inst->IsReadOnlyLoad()) {
|
||||
value = TakeNextValueNumber();
|
||||
id_to_value_[inst->result_id()] = value;
|
||||
return value;
|
||||
return assign_new_number(inst);
|
||||
}
|
||||
|
||||
analysis::DecorationManager* dec_mgr = context()->get_decoration_mgr();
|
||||
|
||||
11
3rdparty/spirv-tools/source/table.cpp
vendored
11
3rdparty/spirv-tools/source/table.cpp
vendored
@@ -49,16 +49,7 @@ spv_context spvContextCreate(spv_target_env env) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
spv_opcode_table opcode_table;
|
||||
spv_operand_table operand_table;
|
||||
spv_ext_inst_table ext_inst_table;
|
||||
|
||||
spvOpcodeTableGet(&opcode_table, env);
|
||||
spvOperandTableGet(&operand_table, env);
|
||||
spvExtInstTableGet(&ext_inst_table, env);
|
||||
|
||||
return new spv_context_t{env, opcode_table, operand_table, ext_inst_table,
|
||||
nullptr /* a null default consumer */};
|
||||
return new spv_context_t{env, nullptr /* a null default consumer */};
|
||||
}
|
||||
|
||||
void spvContextDestroy(spv_context context) { delete context; }
|
||||
|
||||
105
3rdparty/spirv-tools/source/table.h
vendored
105
3rdparty/spirv-tools/source/table.h
vendored
@@ -17,104 +17,14 @@
|
||||
|
||||
#include "source/extensions.h"
|
||||
#include "source/latest_version_spirv_header.h"
|
||||
#include "source/util/index_range.h"
|
||||
#include "spirv-tools/libspirv.hpp"
|
||||
|
||||
typedef struct spv_opcode_desc_t {
|
||||
const char* name;
|
||||
const spv::Op opcode;
|
||||
const uint32_t numAliases;
|
||||
const char** aliases;
|
||||
const uint32_t numCapabilities;
|
||||
const spv::Capability* capabilities;
|
||||
// operandTypes[0..numTypes-1] describe logical operands for the instruction.
|
||||
// The operand types include result id and result-type id, followed by
|
||||
// the types of arguments.
|
||||
const uint16_t numTypes;
|
||||
spv_operand_type_t operandTypes[16]; // TODO: Smaller/larger?
|
||||
const bool hasResult; // Does the instruction have a result ID operand?
|
||||
const bool hasType; // Does the instruction have a type ID operand?
|
||||
// A set of extensions that enable this feature. If empty then this operand
|
||||
// value is in core and its availability is subject to minVersion. The
|
||||
// assembler, binary parser, and disassembler ignore this rule, so you can
|
||||
// freely process invalid modules.
|
||||
const uint32_t numExtensions;
|
||||
const spvtools::Extension* extensions;
|
||||
// Minimal core SPIR-V version required for this feature, if without
|
||||
// extensions. ~0u means reserved for future use. ~0u and non-empty extension
|
||||
// lists means only available in extensions.
|
||||
const uint32_t minVersion;
|
||||
const uint32_t lastVersion;
|
||||
} spv_opcode_desc_t;
|
||||
|
||||
typedef struct spv_operand_desc_t {
|
||||
const char* name;
|
||||
const uint32_t value;
|
||||
const uint32_t numAliases;
|
||||
const char** aliases;
|
||||
const uint32_t numCapabilities;
|
||||
const spv::Capability* capabilities;
|
||||
// A set of extensions that enable this feature. If empty then this operand
|
||||
// value is in core and its availability is subject to minVersion. The
|
||||
// assembler, binary parser, and disassembler ignore this rule, so you can
|
||||
// freely process invalid modules.
|
||||
const uint32_t numExtensions;
|
||||
const spvtools::Extension* extensions;
|
||||
const spv_operand_type_t operandTypes[16]; // TODO: Smaller/larger?
|
||||
// Minimal core SPIR-V version required for this feature, if without
|
||||
// extensions. ~0u means reserved for future use. ~0u and non-empty extension
|
||||
// lists means only available in extensions.
|
||||
const uint32_t minVersion;
|
||||
const uint32_t lastVersion;
|
||||
} spv_operand_desc_t;
|
||||
|
||||
typedef struct spv_operand_desc_group_t {
|
||||
const spv_operand_type_t type;
|
||||
const uint32_t count;
|
||||
const spv_operand_desc_t* entries;
|
||||
} spv_operand_desc_group_t;
|
||||
|
||||
typedef struct spv_ext_inst_desc_t {
|
||||
const char* name;
|
||||
const uint32_t ext_inst;
|
||||
const uint32_t numCapabilities;
|
||||
const spv::Capability* capabilities;
|
||||
const spv_operand_type_t operandTypes[40]; // vksp needs at least 40
|
||||
} spv_ext_inst_desc_t;
|
||||
|
||||
typedef struct spv_ext_inst_group_t {
|
||||
const spv_ext_inst_type_t type;
|
||||
const uint32_t count;
|
||||
const spv_ext_inst_desc_t* entries;
|
||||
} spv_ext_inst_group_t;
|
||||
|
||||
typedef struct spv_opcode_table_t {
|
||||
const uint32_t count;
|
||||
const spv_opcode_desc_t* entries;
|
||||
} spv_opcode_table_t;
|
||||
|
||||
typedef struct spv_operand_table_t {
|
||||
const uint32_t count;
|
||||
const spv_operand_desc_group_t* types;
|
||||
} spv_operand_table_t;
|
||||
|
||||
typedef struct spv_ext_inst_table_t {
|
||||
const uint32_t count;
|
||||
const spv_ext_inst_group_t* groups;
|
||||
} spv_ext_inst_table_t;
|
||||
|
||||
typedef const spv_opcode_desc_t* spv_opcode_desc;
|
||||
typedef const spv_operand_desc_t* spv_operand_desc;
|
||||
typedef const spv_ext_inst_desc_t* spv_ext_inst_desc;
|
||||
|
||||
typedef const spv_opcode_table_t* spv_opcode_table;
|
||||
typedef const spv_operand_table_t* spv_operand_table;
|
||||
typedef const spv_ext_inst_table_t* spv_ext_inst_table;
|
||||
// NOTE: Instruction and operand tables have moved to table2.{h|cpp},
|
||||
// where they are represented more compactly.
|
||||
|
||||
struct spv_context_t {
|
||||
const spv_target_env target_env;
|
||||
const spv_opcode_table opcode_table;
|
||||
const spv_operand_table operand_table;
|
||||
const spv_ext_inst_table ext_inst_table;
|
||||
spvtools::MessageConsumer consumer;
|
||||
};
|
||||
|
||||
@@ -125,13 +35,4 @@ namespace spvtools {
|
||||
void SetContextMessageConsumer(spv_context context, MessageConsumer consumer);
|
||||
} // namespace spvtools
|
||||
|
||||
// Populates *table with entries for env.
|
||||
spv_result_t spvOpcodeTableGet(spv_opcode_table* table, spv_target_env env);
|
||||
|
||||
// Populates *table with entries for env.
|
||||
spv_result_t spvOperandTableGet(spv_operand_table* table, spv_target_env env);
|
||||
|
||||
// Populates *table with entries for env.
|
||||
spv_result_t spvExtInstTableGet(spv_ext_inst_table* table, spv_target_env env);
|
||||
|
||||
#endif // SOURCE_TABLE_H_
|
||||
|
||||
375
3rdparty/spirv-tools/source/table2.cpp
vendored
Normal file
375
3rdparty/spirv-tools/source/table2.cpp
vendored
Normal file
@@ -0,0 +1,375 @@
|
||||
// Copyright (c) 2025 Google LLC
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
// Compressed grammar tables.
|
||||
|
||||
#include "source/table2.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <array>
|
||||
#include <cstring>
|
||||
|
||||
#include "source/extensions.h"
|
||||
#include "source/latest_version_spirv_header.h"
|
||||
#include "source/spirv_constant.h"
|
||||
#include "source/spirv_target_env.h"
|
||||
#include "spirv-tools/libspirv.hpp"
|
||||
|
||||
namespace spvtools {
|
||||
namespace {
|
||||
|
||||
// This is used in the source for the generated tables.
|
||||
constexpr inline IndexRange IR(uint32_t first, uint32_t count) {
|
||||
return IndexRange{first, count};
|
||||
}
|
||||
|
||||
struct NameIndex {
|
||||
// Location of the null-terminated name in the global string table kStrings.
|
||||
IndexRange name;
|
||||
// Index of this name's entry in the corresponding by-value table.
|
||||
uint32_t index;
|
||||
};
|
||||
|
||||
struct NameValue {
|
||||
// Location of the null-terminated name in the global string table kStrings.
|
||||
IndexRange name;
|
||||
// Enum value in the binary format.
|
||||
uint32_t value;
|
||||
};
|
||||
|
||||
// The generated include file contains variables:
|
||||
//
|
||||
// std::array<NameIndex,...> kOperandNames:
|
||||
// Operand names and index, ordered by (operand kind, name)
|
||||
// The index part is the named entry's index in kOperandsByValue array.
|
||||
// Aliases are included as their own entries.
|
||||
//
|
||||
// std::array<OperandDesc, ...> kOperandsByValue:
|
||||
// Operand descriptions, ordered by (operand kind, operand enum value).
|
||||
//
|
||||
// std::array<NameIndex,...> kInstructionNames:
|
||||
// Instruction names and index, ordered by (name, value)
|
||||
// The index part is the named entry's index in kInstructionDesc array.
|
||||
// Aliases are included as their own entries.
|
||||
//
|
||||
// std::array<InstructionDesc, ...> kInstructionDesc
|
||||
// Instruction descriptions, ordered by opcode.
|
||||
//
|
||||
// const char kStrings[]
|
||||
// Array of characters, referenced by IndexRanges elsewhere.
|
||||
// Each IndexRange denotes a string.
|
||||
//
|
||||
// const IndexRange kAliasSpans[]
|
||||
// Array of IndexRanges, where each represents a string by referencing
|
||||
// the kStrings table.
|
||||
// This array contains all sequences of alias strings used in the grammar.
|
||||
// This table is referenced by an IndexRange elsewhere, i.e. by the
|
||||
// 'aliases' field of an instruction or operand description.
|
||||
//
|
||||
// const spv::Capability kCapabilitySpans[]
|
||||
// Array of capabilities, referenced by IndexRanges elsewhere.
|
||||
// Contains all sequences of capabilities used in the grammar.
|
||||
//
|
||||
// const spvtools::Extension kExtensionSpans[] = {
|
||||
// Array of extensions, referenced by IndexRanges elsewhere.
|
||||
// Contains all sequences of extensions used in the grammar.
|
||||
//
|
||||
// const spv_operand_type_t kOperandSpans[] = {
|
||||
// Array of operand types, referenced by IndexRanges elsewhere.
|
||||
// Contains all sequences of operand types used in the grammar.
|
||||
|
||||
// Maps an operand kind to NameValue entries for that kind.
|
||||
// The result is an IndexRange into kOperandNames, and are sorted
|
||||
// by string name within that span.
|
||||
IndexRange OperandNameRangeForKind(spv_operand_type_t type);
|
||||
|
||||
// Maps an operand kind to possible operands for that kind.
|
||||
// The result is an IndexRange into kOperandsByValue, and the operands
|
||||
// are sorted by value within that span.
|
||||
IndexRange OperandByValueRangeForKind(spv_operand_type_t type);
|
||||
|
||||
// Maps an extended instruction set kind to NameValue entries for that kind.
|
||||
// The result is an IndexRange into kExtIntNames, and are sorted
|
||||
// by string name within that span.
|
||||
IndexRange ExtInstNameRangeForKind(spv_ext_inst_type_t type);
|
||||
|
||||
// Maps an extended instruction set kind to possible operands for that kind.
|
||||
// The result is an IndexRange into kExtInstByValue, and the instructions
|
||||
// are sorted by opcode value within that span.
|
||||
IndexRange ExtInstByValueRangeForKind(spv_ext_inst_type_t type);
|
||||
|
||||
// Returns the name of an extension, as an index into kStrings
|
||||
IndexRange ExtensionToIndexRange(Extension extension);
|
||||
|
||||
#include "core_tables_body.inc"
|
||||
|
||||
// Returns a pointer to the null-terminated C-style string in the global
|
||||
// strings table, as referenced by 'ir'. Assumes the given range is valid.
|
||||
const char* getChars(IndexRange ir) {
|
||||
assert(ir.first() < sizeof(kStrings));
|
||||
return ir.apply(kStrings).data();
|
||||
}
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
utils::Span<const spv_operand_type_t> OperandDesc::operands() const {
|
||||
return operands_range.apply(kOperandSpans);
|
||||
}
|
||||
utils::Span<const char> OperandDesc::name() const {
|
||||
return name_range.apply(kStrings);
|
||||
}
|
||||
utils::Span<const IndexRange> OperandDesc::aliases() const {
|
||||
return name_range.apply(kAliasSpans);
|
||||
}
|
||||
utils::Span<const spv::Capability> OperandDesc::capabilities() const {
|
||||
return capabilities_range.apply(kCapabilitySpans);
|
||||
}
|
||||
utils::Span<const spvtools::Extension> OperandDesc::extensions() const {
|
||||
return extensions_range.apply(kExtensionSpans);
|
||||
}
|
||||
|
||||
utils::Span<const spv_operand_type_t> InstructionDesc::operands() const {
|
||||
return operands_range.apply(kOperandSpans);
|
||||
}
|
||||
utils::Span<const char> InstructionDesc::name() const {
|
||||
return name_range.apply(kStrings);
|
||||
}
|
||||
utils::Span<const IndexRange> InstructionDesc::aliases() const {
|
||||
return name_range.apply(kAliasSpans);
|
||||
}
|
||||
utils::Span<const spv::Capability> InstructionDesc::capabilities() const {
|
||||
return capabilities_range.apply(kCapabilitySpans);
|
||||
}
|
||||
utils::Span<const spvtools::Extension> InstructionDesc::extensions() const {
|
||||
return extensions_range.apply(kExtensionSpans);
|
||||
}
|
||||
|
||||
utils::Span<const spv_operand_type_t> ExtInstDesc::operands() const {
|
||||
return operands_range.apply(kOperandSpans);
|
||||
}
|
||||
utils::Span<const char> ExtInstDesc::name() const {
|
||||
return name_range.apply(kStrings);
|
||||
}
|
||||
utils::Span<const spv::Capability> ExtInstDesc::capabilities() const {
|
||||
return capabilities_range.apply(kCapabilitySpans);
|
||||
}
|
||||
|
||||
spv_result_t LookupOpcode(spv::Op opcode, const InstructionDesc** desc) {
|
||||
// Metaphor: Look for the needle in the haystack.
|
||||
const InstructionDesc needle(opcode);
|
||||
auto where = std::lower_bound(
|
||||
kInstructionDesc.begin(), kInstructionDesc.end(), needle,
|
||||
[&](const InstructionDesc& lhs, const InstructionDesc& rhs) {
|
||||
return uint32_t(lhs.opcode) < uint32_t(rhs.opcode);
|
||||
});
|
||||
if (where != kInstructionDesc.end() && where->opcode == opcode) {
|
||||
*desc = &*where;
|
||||
return SPV_SUCCESS;
|
||||
}
|
||||
return SPV_ERROR_INVALID_LOOKUP;
|
||||
}
|
||||
|
||||
spv_result_t LookupOpcode(const char* name, const InstructionDesc** desc) {
|
||||
// The comparison function knows to use 'name' string to compare against
|
||||
// when the value is kSentinel.
|
||||
const auto kSentinel = uint32_t(-1);
|
||||
const NameIndex needle{{}, kSentinel};
|
||||
auto less = [&](const NameIndex& lhs, const NameIndex& rhs) {
|
||||
const char* lhs_chars = lhs.index == kSentinel ? name : getChars(lhs.name);
|
||||
const char* rhs_chars = rhs.index == kSentinel ? name : getChars(rhs.name);
|
||||
return std::strcmp(lhs_chars, rhs_chars) < 0;
|
||||
};
|
||||
|
||||
auto where = std::lower_bound(kInstructionNames.begin(),
|
||||
kInstructionNames.end(), needle, less);
|
||||
if (where != kInstructionNames.end() &&
|
||||
std::strcmp(getChars(where->name), name) == 0) {
|
||||
*desc = &kInstructionDesc[where->index];
|
||||
return SPV_SUCCESS;
|
||||
}
|
||||
return SPV_ERROR_INVALID_LOOKUP;
|
||||
}
|
||||
|
||||
namespace {
|
||||
template <typename KEY_TYPE>
|
||||
spv_result_t LookupOpcodeForEnvInternal(spv_target_env env, KEY_TYPE key,
|
||||
const InstructionDesc** desc) {
|
||||
const InstructionDesc* desc_proxy;
|
||||
auto status = LookupOpcode(key, &desc_proxy);
|
||||
if (status != SPV_SUCCESS) {
|
||||
return status;
|
||||
}
|
||||
const auto& entry = *desc_proxy;
|
||||
const auto version = spvVersionForTargetEnv(env);
|
||||
if ((version >= entry.minVersion && version <= entry.lastVersion) ||
|
||||
entry.extensions_range.count() > 0 ||
|
||||
entry.capabilities_range.count() > 0) {
|
||||
*desc = desc_proxy;
|
||||
return SPV_SUCCESS;
|
||||
}
|
||||
return SPV_ERROR_INVALID_LOOKUP;
|
||||
}
|
||||
} // namespace
|
||||
|
||||
spv_result_t LookupOpcodeForEnv(spv_target_env env, const char* name,
|
||||
const InstructionDesc** desc) {
|
||||
return LookupOpcodeForEnvInternal(env, name, desc);
|
||||
}
|
||||
|
||||
spv_result_t LookupOpcodeForEnv(spv_target_env env, spv::Op opcode,
|
||||
const InstructionDesc** desc) {
|
||||
return LookupOpcodeForEnvInternal(env, opcode, desc);
|
||||
}
|
||||
|
||||
spv_result_t LookupOperand(spv_operand_type_t type, uint32_t value,
|
||||
const OperandDesc** desc) {
|
||||
auto ir = OperandByValueRangeForKind(type);
|
||||
if (ir.empty()) {
|
||||
return SPV_ERROR_INVALID_LOOKUP;
|
||||
}
|
||||
|
||||
auto span = ir.apply(kOperandsByValue.data());
|
||||
|
||||
// Metaphor: Look for the needle in the haystack.
|
||||
// The operand value is the first member.
|
||||
const OperandDesc needle{value};
|
||||
auto where =
|
||||
std::lower_bound(span.begin(), span.end(), needle,
|
||||
[&](const OperandDesc& lhs, const OperandDesc& rhs) {
|
||||
return lhs.value < rhs.value;
|
||||
});
|
||||
if (where != span.end() && where->value == value) {
|
||||
*desc = &*where;
|
||||
return SPV_SUCCESS;
|
||||
}
|
||||
return SPV_ERROR_INVALID_LOOKUP;
|
||||
}
|
||||
|
||||
spv_result_t LookupOperand(spv_operand_type_t type, const char* name,
|
||||
size_t name_len, const OperandDesc** desc) {
|
||||
auto ir = OperandNameRangeForKind(type);
|
||||
if (ir.empty()) {
|
||||
return SPV_ERROR_INVALID_LOOKUP;
|
||||
}
|
||||
|
||||
auto span = ir.apply(kOperandNames.data());
|
||||
|
||||
// The comparison function knows to use (name, name_len) as the
|
||||
// string to compare against when the value is kSentinel.
|
||||
const auto kSentinel = uint32_t(-1);
|
||||
const NameIndex needle{{}, kSentinel};
|
||||
// The strings in the global string table are null-terminated, and the count
|
||||
// reflects that. So always deduct 1 from its length.
|
||||
auto less = [&](const NameIndex& lhs, const NameIndex& rhs) {
|
||||
const char* lhs_chars = lhs.index == kSentinel ? name : getChars(lhs.name);
|
||||
const char* rhs_chars = rhs.index == kSentinel ? name : getChars(rhs.name);
|
||||
const auto content_cmp = std::strncmp(lhs_chars, rhs_chars, name_len);
|
||||
if (content_cmp != 0) {
|
||||
return content_cmp < 0;
|
||||
}
|
||||
const auto lhs_len =
|
||||
lhs.index == kSentinel ? name_len : lhs.name.count() - 1;
|
||||
const auto rhs_len =
|
||||
rhs.index == kSentinel ? name_len : rhs.name.count() - 1;
|
||||
return lhs_len < rhs_len;
|
||||
};
|
||||
|
||||
auto where = std::lower_bound(span.begin(), span.end(), needle, less);
|
||||
if (where != span.end() && where->name.count() - 1 == name_len &&
|
||||
std::strncmp(getChars(where->name), name, name_len) == 0) {
|
||||
*desc = &kOperandsByValue[where->index];
|
||||
return SPV_SUCCESS;
|
||||
}
|
||||
return SPV_ERROR_INVALID_LOOKUP;
|
||||
}
|
||||
|
||||
spv_result_t LookupExtInst(spv_ext_inst_type_t type, const char* name,
|
||||
const ExtInstDesc** desc) {
|
||||
auto ir = ExtInstNameRangeForKind(type);
|
||||
if (ir.empty()) {
|
||||
return SPV_ERROR_INVALID_LOOKUP;
|
||||
}
|
||||
|
||||
auto span = ir.apply(kExtInstNames.data());
|
||||
|
||||
// The comparison function knows to use 'name' string to compare against
|
||||
// when the value is kSentinel.
|
||||
const auto kSentinel = uint32_t(-1);
|
||||
const NameIndex needle{{}, kSentinel};
|
||||
auto less = [&](const NameIndex& lhs, const NameIndex& rhs) {
|
||||
const char* lhs_chars = lhs.index == kSentinel ? name : getChars(lhs.name);
|
||||
const char* rhs_chars = rhs.index == kSentinel ? name : getChars(rhs.name);
|
||||
return std::strcmp(lhs_chars, rhs_chars) < 0;
|
||||
};
|
||||
|
||||
auto where = std::lower_bound(span.begin(), span.end(), needle, less);
|
||||
if (where != span.end() && std::strcmp(getChars(where->name), name) == 0) {
|
||||
*desc = &kExtInstByValue[where->index];
|
||||
return SPV_SUCCESS;
|
||||
}
|
||||
return SPV_ERROR_INVALID_LOOKUP;
|
||||
}
|
||||
|
||||
// Finds the extended instruction description by opcode value.
|
||||
// On success, returns SPV_SUCCESS and updates *desc.
|
||||
spv_result_t LookupExtInst(spv_ext_inst_type_t type, uint32_t value,
|
||||
const ExtInstDesc** desc) {
|
||||
auto ir = ExtInstByValueRangeForKind(type);
|
||||
if (ir.empty()) {
|
||||
return SPV_ERROR_INVALID_LOOKUP;
|
||||
}
|
||||
|
||||
auto span = ir.apply(kExtInstByValue.data());
|
||||
|
||||
// Metaphor: Look for the needle in the haystack.
|
||||
// The operand value is the first member.
|
||||
const ExtInstDesc needle(value);
|
||||
auto where =
|
||||
std::lower_bound(span.begin(), span.end(), needle,
|
||||
[&](const ExtInstDesc& lhs, const ExtInstDesc& rhs) {
|
||||
return lhs.value < rhs.value;
|
||||
});
|
||||
if (where != span.end() && where->value == value) {
|
||||
*desc = &*where;
|
||||
return SPV_SUCCESS;
|
||||
}
|
||||
return SPV_ERROR_INVALID_LOOKUP;
|
||||
}
|
||||
|
||||
const char* ExtensionToString(Extension extension) {
|
||||
return getChars(ExtensionToIndexRange(extension));
|
||||
}
|
||||
|
||||
bool GetExtensionFromString(const char* name, Extension* extension) {
|
||||
// The comparison function knows to use 'name' string to compare against
|
||||
// when the value is kSentinel.
|
||||
const auto kSentinel = uint32_t(-1);
|
||||
const NameValue needle{{}, kSentinel};
|
||||
auto less = [&](const NameValue& lhs, const NameValue& rhs) {
|
||||
const char* lhs_chars = lhs.value == kSentinel ? name : getChars(lhs.name);
|
||||
const char* rhs_chars = rhs.value == kSentinel ? name : getChars(rhs.name);
|
||||
return std::strcmp(lhs_chars, rhs_chars) < 0;
|
||||
};
|
||||
|
||||
auto where = std::lower_bound(kExtensionNames.begin(), kExtensionNames.end(),
|
||||
needle, less);
|
||||
if (where != kExtensionNames.end() &&
|
||||
std::strcmp(getChars(where->name), name) == 0) {
|
||||
*extension = static_cast<Extension>(where->value);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
} // namespace spvtools
|
||||
260
3rdparty/spirv-tools/source/table2.h
vendored
Normal file
260
3rdparty/spirv-tools/source/table2.h
vendored
Normal file
@@ -0,0 +1,260 @@
|
||||
// Copyright (c) 2025 The Khronos Group Inc.
|
||||
// Copyright (c) 2025 Google LLC
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#ifndef SOURCE_TABLE2_H_
|
||||
#define SOURCE_TABLE2_H_
|
||||
|
||||
#include "source/latest_version_spirv_header.h"
|
||||
#include "source/util/index_range.h"
|
||||
#include "spirv-tools/libspirv.hpp"
|
||||
|
||||
// Define the objects that describe the grammatical structure of SPIR-V
|
||||
// instructions and their operands. The objects are owned by static
|
||||
// tables populated at C++ build time from the grammar files from SPIRV-Headers.
|
||||
//
|
||||
// Clients use freestanding methods to lookup an opcode or an operand, either
|
||||
// by numeric value (in the binary), or by name.
|
||||
//
|
||||
// For historical reasons, the opcode lookup can also use a target enviroment
|
||||
// enum to filter for opcodes supported in that environment.
|
||||
//
|
||||
// It should be very fast for the system loader to load (and possibly relocate)
|
||||
// the static tables. In particular, there should be very few global symbols
|
||||
// with independent addresses. Prefer a very few large tables of items rather
|
||||
// than dozens or hundreds of global symbols.
|
||||
//
|
||||
// The overall structure among containers (i.e. skipping scalar data members)
|
||||
// is as follows:
|
||||
//
|
||||
// An OperandDesc describes an operand.
|
||||
// An InstructionDesc desribes an instruction.
|
||||
// An ExtInstDesc describes an extended intruction.
|
||||
//
|
||||
// Both OperandDesc and InstructionDesc have members:
|
||||
// - a name string
|
||||
// - array of alias strings
|
||||
// - array of spv::Capability (as an enum)
|
||||
// - array of spv_operand_type_t (as an enum)
|
||||
// - array of spvtools::Extension (as an enum)
|
||||
// - a minVersion
|
||||
// - a lastVersion
|
||||
//
|
||||
// An OperandDesc also has:
|
||||
// - a uint32_t value.
|
||||
//
|
||||
// An InstructionDesc also has:
|
||||
// - a spv::Op opcode
|
||||
// - a bool hasResult
|
||||
// - a bool hasType
|
||||
// - a printing class
|
||||
//
|
||||
// An ExtInstDesc has:
|
||||
// - a name
|
||||
// - array of spv::Capability (as an enum)
|
||||
// - array of spv_operand_type_t (as an enum)
|
||||
//
|
||||
// The arrays are represented by spans into a global static array, with one
|
||||
// array for each of:
|
||||
// - null-terminated strings, for names
|
||||
// - arrays of null-terminated strings, for alias lists
|
||||
// - spv_operand_type_t
|
||||
// - spv::Capability
|
||||
// - spvtools::Extension
|
||||
//
|
||||
// Note: Currently alias lists never have more than one element.
|
||||
// The data structures and code do not assume this.
|
||||
|
||||
// TODO(dneto): convert the tables for extended instructions
|
||||
// Currently (as defined in table.h):
|
||||
// An spv_ext_inst_group_t has:
|
||||
// - array of spv_ext_inst_desc_t
|
||||
//
|
||||
// An spv_ext_inst_desc_t has:
|
||||
// - a name string
|
||||
// - array of spv::Capability
|
||||
// - array of spv_operand_type_t
|
||||
|
||||
namespace spvtools {
|
||||
|
||||
#include "core_tables_header.inc"
|
||||
|
||||
using IndexRange = utils::IndexRange<uint32_t, uint32_t>;
|
||||
|
||||
// Describes a SPIR-V operand.
|
||||
struct OperandDesc {
|
||||
const uint32_t value;
|
||||
|
||||
const IndexRange operands_range; // Indexes kOperandSpans
|
||||
const IndexRange name_range; // Indexes kStrings
|
||||
const IndexRange aliases_range; // Indexes kAliasSpans
|
||||
const IndexRange capabilities_range; // Indexes kCapabilitySpans
|
||||
// A set of extensions that enable this feature. If empty then this operand
|
||||
// value is in core and its availability is subject to minVersion. The
|
||||
// assembler, binary parser, and disassembler ignore this rule, so you can
|
||||
// freely process invalid modules.
|
||||
const IndexRange extensions_range; // Indexes kExtensionSpans
|
||||
// Minimal core SPIR-V version required for this feature, if without
|
||||
// extensions. ~0u means reserved for future use. ~0u and non-empty
|
||||
// extension lists means only available in extensions.
|
||||
const uint32_t minVersion = 0xFFFFFFFFu;
|
||||
const uint32_t lastVersion = 0xFFFFFFFFu;
|
||||
utils::Span<const spv_operand_type_t> operands() const;
|
||||
utils::Span<const char> name() const;
|
||||
utils::Span<const IndexRange> aliases() const;
|
||||
utils::Span<const spv::Capability> capabilities() const;
|
||||
utils::Span<const spvtools::Extension> extensions() const;
|
||||
|
||||
constexpr OperandDesc(uint32_t v, IndexRange o, IndexRange n, IndexRange a,
|
||||
IndexRange c, IndexRange e, uint32_t mv, uint32_t lv)
|
||||
: value(v),
|
||||
operands_range(o),
|
||||
name_range(n),
|
||||
aliases_range(a),
|
||||
capabilities_range(c),
|
||||
extensions_range(e),
|
||||
minVersion(mv),
|
||||
lastVersion(lv) {}
|
||||
|
||||
constexpr OperandDesc(uint32_t v) : value(v) {}
|
||||
|
||||
OperandDesc(const OperandDesc&) = delete;
|
||||
OperandDesc(OperandDesc&&) = delete;
|
||||
};
|
||||
|
||||
// Describes an Instruction
|
||||
struct InstructionDesc {
|
||||
const spv::Op opcode;
|
||||
const bool hasResult = false;
|
||||
const bool hasType = false;
|
||||
|
||||
const IndexRange operands_range; // Indexes kOperandSpans
|
||||
const IndexRange name_range; // Indexes kStrings
|
||||
const IndexRange aliases_range; // Indexes kAliasSpans
|
||||
const IndexRange capabilities_range; // Indexes kCapbilitySpans
|
||||
// A set of extensions that enable this feature. If empty then this operand
|
||||
// value is in core and its availability is subject to minVersion. The
|
||||
// assembler, binary parser, and disassembler ignore this rule, so you can
|
||||
// freely process invalid modules.
|
||||
const IndexRange extensions_range; // Indexes kExtensionSpans
|
||||
// Minimal core SPIR-V version required for this feature, if without
|
||||
// extensions. ~0u means reserved for future use. ~0u and non-empty
|
||||
// extension lists means only available in extensions.
|
||||
const uint32_t minVersion = 0xFFFFFFFFu;
|
||||
const uint32_t lastVersion = 0xFFFFFFFFu;
|
||||
// The printing class specifies what kind of instruction it is, e.g. what
|
||||
// section of the SPIR-V spec. E.g. kImage, kComposite
|
||||
const PrintingClass printingClass = PrintingClass::kReserved;
|
||||
// Returns the span of elements in the global grammar tables corresponding
|
||||
// to the privately-stored index ranges
|
||||
utils::Span<const spv_operand_type_t> operands() const;
|
||||
utils::Span<const char> name() const;
|
||||
utils::Span<const IndexRange> aliases() const;
|
||||
utils::Span<const spv::Capability> capabilities() const;
|
||||
utils::Span<const spvtools::Extension> extensions() const;
|
||||
|
||||
constexpr InstructionDesc(spv::Op oc, bool hr, bool ht, IndexRange o,
|
||||
IndexRange n, IndexRange a, IndexRange c,
|
||||
IndexRange e, uint32_t mv, uint32_t lv,
|
||||
PrintingClass pc)
|
||||
: opcode(oc),
|
||||
hasResult(hr),
|
||||
hasType(ht),
|
||||
operands_range(o),
|
||||
name_range(n),
|
||||
aliases_range(a),
|
||||
capabilities_range(c),
|
||||
extensions_range(e),
|
||||
minVersion(mv),
|
||||
lastVersion(lv),
|
||||
printingClass(pc) {}
|
||||
|
||||
constexpr InstructionDesc(spv::Op oc) : opcode(oc) {}
|
||||
|
||||
InstructionDesc(const InstructionDesc&) = delete;
|
||||
InstructionDesc(InstructionDesc&&) = delete;
|
||||
};
|
||||
|
||||
// Describes an extended instruction
|
||||
struct ExtInstDesc {
|
||||
const uint32_t value;
|
||||
const IndexRange operands_range; // Indexes kOperandSpans
|
||||
const IndexRange name_range; // Indexes kStrings
|
||||
const IndexRange capabilities_range; // Indexes kCapbilitySpans
|
||||
// Returns the span of elements in the global grammar tables corresponding
|
||||
// to the privately-stored index ranges
|
||||
utils::Span<const spv_operand_type_t> operands() const;
|
||||
utils::Span<const char> name() const;
|
||||
utils::Span<const spv::Capability> capabilities() const;
|
||||
|
||||
constexpr ExtInstDesc(uint32_t v, IndexRange o, IndexRange n, IndexRange c)
|
||||
: value(v), operands_range(o), name_range(n), capabilities_range(c) {}
|
||||
|
||||
constexpr ExtInstDesc(uint32_t v) : value(v) {}
|
||||
|
||||
ExtInstDesc(const ExtInstDesc&) = delete;
|
||||
ExtInstDesc(ExtInstDesc&&) = delete;
|
||||
};
|
||||
|
||||
// Finds the instruction description by opcode name. The name should not
|
||||
// have the "Op" prefix. On success, returns SPV_SUCCESS and updates *desc.
|
||||
spv_result_t LookupOpcode(const char* name, const InstructionDesc** desc);
|
||||
// Finds the instruction description by opcode value.
|
||||
// On success, returns SPV_SUCCESS and updates *desc.
|
||||
spv_result_t LookupOpcode(spv::Op opcode, const InstructionDesc** desc);
|
||||
|
||||
// Finds the instruction description by opcode name, without the "Op" prefix.
|
||||
// A lookup will succeed if:
|
||||
// - The instruction exists, and
|
||||
// - Either the target environment supports the SPIR-V version of the
|
||||
// instruction,
|
||||
// or the instruction is enabled by at least one extension,
|
||||
// or the instruction is enabled by at least one capability.,
|
||||
// On success, returns SPV_SUCCESS and updates *desc.
|
||||
spv_result_t LookupOpcodeForEnv(spv_target_env env, const char* name,
|
||||
const InstructionDesc** desc);
|
||||
|
||||
// Finds the instruction description by opcode value.
|
||||
// A lookup will succeed if:
|
||||
// - The instruction exists, and
|
||||
// - Either the target environment supports the SPIR-V version of the
|
||||
// instruction,
|
||||
// or the instruction is enabled by at least one extension,
|
||||
// or the instruction is enabled by at least one capability.,
|
||||
// On success, returns SPV_SUCCESS and updates *desc.
|
||||
spv_result_t LookupOpcodeForEnv(spv_target_env env, spv::Op,
|
||||
const InstructionDesc** desc);
|
||||
|
||||
spv_result_t LookupOperand(spv_operand_type_t type, const char* name,
|
||||
size_t name_len, const OperandDesc** desc);
|
||||
spv_result_t LookupOperand(spv_operand_type_t type, uint32_t operand,
|
||||
const OperandDesc** desc);
|
||||
|
||||
// Finds the extended instruction description by opcode name.
|
||||
// On success, returns SPV_SUCCESS and updates *desc.
|
||||
spv_result_t LookupExtInst(spv_ext_inst_type_t type, const char* name,
|
||||
const ExtInstDesc** desc);
|
||||
// Finds the extended instruction description by opcode value.
|
||||
// On success, returns SPV_SUCCESS and updates *desc.
|
||||
spv_result_t LookupExtInst(spv_ext_inst_type_t type, uint32_t value,
|
||||
const ExtInstDesc** desc);
|
||||
|
||||
// Finds Extension enum corresponding to |str|. Returns false if not found.
|
||||
bool GetExtensionFromString(const char* str, Extension* extension);
|
||||
|
||||
// Returns text string corresponding to |extension|.
|
||||
const char* ExtensionToString(Extension extension);
|
||||
|
||||
} // namespace spvtools
|
||||
#endif // SOURCE_TABLE2_H_
|
||||
60
3rdparty/spirv-tools/source/text.cpp
vendored
60
3rdparty/spirv-tools/source/text.cpp
vendored
@@ -38,6 +38,7 @@
|
||||
#include "source/spirv_constant.h"
|
||||
#include "source/spirv_target_env.h"
|
||||
#include "source/table.h"
|
||||
#include "source/table2.h"
|
||||
#include "source/text_handler.h"
|
||||
#include "source/util/bitutils.h"
|
||||
#include "source/util/parse_number.h"
|
||||
@@ -241,14 +242,14 @@ spv_result_t spvTextEncodeOperand(const spvtools::AssemblyGrammar& grammar,
|
||||
case SPV_OPERAND_TYPE_EXTENSION_INSTRUCTION_NUMBER: {
|
||||
// The assembler accepts the symbolic name for an extended instruction,
|
||||
// and emits its corresponding number.
|
||||
spv_ext_inst_desc extInst;
|
||||
if (grammar.lookupExtInst(pInst->extInstType, textValue, &extInst) ==
|
||||
const spvtools::ExtInstDesc* desc = nullptr;
|
||||
if (spvtools::LookupExtInst(pInst->extInstType, textValue, &desc) ==
|
||||
SPV_SUCCESS) {
|
||||
// if we know about this extended instruction, push the numeric value
|
||||
spvInstructionAddWord(pInst, extInst->ext_inst);
|
||||
spvInstructionAddWord(pInst, desc->value);
|
||||
|
||||
// Prepare to parse the operands for the extended instructions.
|
||||
spvPushOperandTypes(extInst->operandTypes, pExpectedOperands);
|
||||
spvPushOperandTypes(desc->operands(), pExpectedOperands);
|
||||
} else {
|
||||
// if we don't know this extended instruction and the set isn't
|
||||
// non-semantic, we cannot process further
|
||||
@@ -284,8 +285,8 @@ spv_result_t spvTextEncodeOperand(const spvtools::AssemblyGrammar& grammar,
|
||||
return context->diagnostic() << "Invalid " << spvOperandTypeStr(type)
|
||||
<< " '" << textValue << "'.";
|
||||
}
|
||||
spv_opcode_desc opcodeEntry = nullptr;
|
||||
if (grammar.lookupOpcode(opcode, &opcodeEntry)) {
|
||||
const spvtools::InstructionDesc* opcodeEntry = nullptr;
|
||||
if (LookupOpcodeForEnv(grammar.target_env(), opcode, &opcodeEntry)) {
|
||||
return context->diagnostic(SPV_ERROR_INTERNAL)
|
||||
<< "OpSpecConstant opcode table out of sync";
|
||||
}
|
||||
@@ -295,8 +296,9 @@ spv_result_t spvTextEncodeOperand(const spvtools::AssemblyGrammar& grammar,
|
||||
// type Id and result Id, since they've already been processed.
|
||||
assert(opcodeEntry->hasType);
|
||||
assert(opcodeEntry->hasResult);
|
||||
assert(opcodeEntry->numTypes >= 2);
|
||||
spvPushOperandTypes(opcodeEntry->operandTypes + 2, pExpectedOperands);
|
||||
assert(opcodeEntry->operands().size() >= 2);
|
||||
spvPushOperandTypes(opcodeEntry->operands().subspan(2),
|
||||
pExpectedOperands);
|
||||
} break;
|
||||
|
||||
case SPV_OPERAND_TYPE_LITERAL_INTEGER:
|
||||
@@ -346,10 +348,11 @@ spv_result_t spvTextEncodeOperand(const spvtools::AssemblyGrammar& grammar,
|
||||
context->getTypeOfTypeGeneratingValue(pInst->resultTypeId);
|
||||
if (!spvtools::isScalarFloating(expected_type) &&
|
||||
!spvtools::isScalarIntegral(expected_type)) {
|
||||
spv_opcode_desc d;
|
||||
const spvtools::InstructionDesc* opcodeEntry = nullptr;
|
||||
const char* opcode_name = "opcode";
|
||||
if (SPV_SUCCESS == grammar.lookupOpcode(pInst->opcode, &d)) {
|
||||
opcode_name = d->name;
|
||||
if (SPV_SUCCESS == LookupOpcode(pInst->opcode, &opcodeEntry)) {
|
||||
opcode_name =
|
||||
opcodeEntry->name().data(); // assumes it's null-terminated
|
||||
}
|
||||
return context->diagnostic()
|
||||
<< "Type for " << opcode_name
|
||||
@@ -455,8 +458,8 @@ spv_result_t spvTextEncodeOperand(const spvtools::AssemblyGrammar& grammar,
|
||||
default: {
|
||||
// NOTE: All non literal operands are handled here using the operand
|
||||
// table.
|
||||
spv_operand_desc entry;
|
||||
if (grammar.lookupOperand(type, textValue, strlen(textValue), &entry)) {
|
||||
const spvtools::OperandDesc* entry = nullptr;
|
||||
if (spvtools::LookupOperand(type, textValue, strlen(textValue), &entry)) {
|
||||
return context->diagnostic() << "Invalid " << spvOperandTypeStr(type)
|
||||
<< " '" << textValue << "'.";
|
||||
}
|
||||
@@ -466,7 +469,7 @@ spv_result_t spvTextEncodeOperand(const spvtools::AssemblyGrammar& grammar,
|
||||
}
|
||||
|
||||
// Prepare to parse the operands for this logical operand.
|
||||
spvPushOperandTypes(entry->operandTypes, pExpectedOperands);
|
||||
spvPushOperandTypes(entry->operands(), pExpectedOperands);
|
||||
} break;
|
||||
}
|
||||
return SPV_SUCCESS;
|
||||
@@ -503,7 +506,7 @@ spv_result_t encodeInstructionStartingWithImmediate(
|
||||
if (operandValue == "=")
|
||||
return context->diagnostic() << firstWord << " not allowed before =.";
|
||||
|
||||
// Needed to pass to spvTextEncodeOpcode(), but it shouldn't ever be
|
||||
// Needed to pass to spvTextEncodeOperand(), but it shouldn't ever be
|
||||
// expanded.
|
||||
spv_operand_pattern_t dummyExpectedOperands;
|
||||
error = spvTextEncodeOperand(
|
||||
@@ -620,7 +623,7 @@ spv_result_t encodeInstructionStartingWithOpUnknown(
|
||||
if (operandValue == "=")
|
||||
return context->diagnostic() << "OpUnknown not allowed before =.";
|
||||
|
||||
// Needed to pass to spvTextEncodeOpcode(), but it shouldn't ever be
|
||||
// Needed to pass to spvTextEncodeOperand(), but it shouldn't ever be
|
||||
// expanded.
|
||||
spv_operand_pattern_t dummyExpectedOperands;
|
||||
error = spvTextEncodeOperand(
|
||||
@@ -705,8 +708,8 @@ spv_result_t spvTextEncodeOpcode(const spvtools::AssemblyGrammar& grammar,
|
||||
// NOTE: The table contains Opcode names without the "Op" prefix.
|
||||
const char* pInstName = opcodeName.data() + 2;
|
||||
|
||||
spv_opcode_desc opcodeEntry;
|
||||
error = grammar.lookupOpcode(pInstName, &opcodeEntry);
|
||||
const spvtools::InstructionDesc* opcodeEntry = nullptr;
|
||||
error = LookupOpcodeForEnv(grammar.target_env(), pInstName, &opcodeEntry);
|
||||
if (error) {
|
||||
return context->diagnostic(error)
|
||||
<< "Invalid Opcode name '" << opcodeName << "'";
|
||||
@@ -734,10 +737,15 @@ spv_result_t spvTextEncodeOpcode(const spvtools::AssemblyGrammar& grammar,
|
||||
// ExecutionMode), or for extended instructions that may have their
|
||||
// own operands depending on the selected extended instruction.
|
||||
spv_operand_pattern_t expectedOperands;
|
||||
expectedOperands.reserve(opcodeEntry->numTypes);
|
||||
for (auto i = 0; i < opcodeEntry->numTypes; i++)
|
||||
expectedOperands.push_back(
|
||||
opcodeEntry->operandTypes[opcodeEntry->numTypes - i - 1]);
|
||||
{
|
||||
const auto operands = opcodeEntry->operands();
|
||||
const auto n = operands.size();
|
||||
expectedOperands.reserve(n);
|
||||
for (auto i = 0u; i < n; i++) {
|
||||
auto ty = operands[n - i - 1];
|
||||
expectedOperands.push_back(ty);
|
||||
}
|
||||
}
|
||||
|
||||
while (!expectedOperands.empty()) {
|
||||
const spv_operand_type_t type = expectedOperands.back();
|
||||
@@ -853,10 +861,6 @@ spv_result_t GetNumericIds(const spvtools::AssemblyGrammar& grammar,
|
||||
|
||||
if (!text->str) return context.diagnostic() << "Missing assembly text.";
|
||||
|
||||
if (!grammar.isValid()) {
|
||||
return SPV_ERROR_INVALID_TABLE;
|
||||
}
|
||||
|
||||
// Skip past whitespace and comments.
|
||||
context.advance();
|
||||
|
||||
@@ -902,10 +906,6 @@ spv_result_t spvTextToBinaryInternal(const spvtools::AssemblyGrammar& grammar,
|
||||
spvtools::AssemblyContext context(text, consumer, std::move(ids_to_preserve));
|
||||
|
||||
if (!text->str) return context.diagnostic() << "Missing assembly text.";
|
||||
|
||||
if (!grammar.isValid()) {
|
||||
return SPV_ERROR_INVALID_TABLE;
|
||||
}
|
||||
if (!pBinary) return SPV_ERROR_INVALID_POINTER;
|
||||
|
||||
std::vector<spv_instruction_t> instructions;
|
||||
|
||||
9
3rdparty/spirv-tools/source/text_handler.h
vendored
9
3rdparty/spirv-tools/source/text_handler.h
vendored
@@ -141,7 +141,14 @@ class AssemblyContext {
|
||||
spv_result_t advance();
|
||||
|
||||
// Sets word to the next word in the input text. Fills next_position with
|
||||
// the next location past the end of the word.
|
||||
// the next location past the end of the word. Returns an error if the
|
||||
// context is invalid or has no more text. Otherwise returns SPV_SUCCESS.
|
||||
// Assumes the next part of the input is not whitespace.
|
||||
//
|
||||
// A word ends at the next comment or whitespace. However, double-quoted
|
||||
// strings remain intact, and a backslash always escapes the next character.
|
||||
// The input stream may end before a matching double-quote, or immediately
|
||||
// after a backslash. Both such cases still count as success.
|
||||
spv_result_t getWord(std::string* word, spv_position next_position);
|
||||
|
||||
// Returns true if the next word in the input is the start of a new Opcode.
|
||||
|
||||
71
3rdparty/spirv-tools/source/util/index_range.h
vendored
Normal file
71
3rdparty/spirv-tools/source/util/index_range.h
vendored
Normal file
@@ -0,0 +1,71 @@
|
||||
// Copyright 2025 Google LLC
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#ifndef SOURCE_UTIL_INDEX_RANGE_H_
|
||||
#define SOURCE_UTIL_INDEX_RANGE_H_
|
||||
|
||||
#include <cassert>
|
||||
#include <cstddef>
|
||||
#include <cstdint>
|
||||
|
||||
#include "source/util/span.h"
|
||||
|
||||
namespace spvtools {
|
||||
namespace utils {
|
||||
|
||||
// Implement a range of indicies, to index over an array of values of type T,
|
||||
// but whose base pointer is supplied externally. Think of this as a span
|
||||
// but without the base pointer, which is to be applied later. Parameterization
|
||||
// by T makes usage more readable and less error-prone.
|
||||
template <typename T, class IndexType = uint32_t, class CountType = IndexType>
|
||||
class IndexRange {
|
||||
public:
|
||||
static_assert(std::is_integral<IndexType>::value);
|
||||
static_assert(std::is_unsigned<IndexType>::value);
|
||||
static_assert(std::is_integral<CountType>::value);
|
||||
static_assert(std::is_unsigned<CountType>::value);
|
||||
using value_type = T;
|
||||
using index_type = IndexType;
|
||||
using size_type = CountType;
|
||||
|
||||
constexpr IndexRange() {}
|
||||
constexpr IndexRange(index_type first, size_type count)
|
||||
: first_(first), count_(count) {}
|
||||
|
||||
size_type count() const { return count_; }
|
||||
bool empty() const { return count() == size_type(0); }
|
||||
|
||||
IndexType first() const { return first_; }
|
||||
|
||||
// Returns the span of indexed elements using the given base pointer.
|
||||
template <typename E>
|
||||
spvtools::utils::Span<E> apply(E* base) const {
|
||||
using span_type = spvtools::utils::Span<E>;
|
||||
return base ? span_type(base + first_, count_) : span_type();
|
||||
}
|
||||
template <typename E = int>
|
||||
spvtools::utils::Span<E> apply(std::nullptr_t) const {
|
||||
using span_type = spvtools::utils::Span<E>;
|
||||
return span_type();
|
||||
}
|
||||
|
||||
private:
|
||||
index_type first_ = 0;
|
||||
size_type count_ = 0;
|
||||
};
|
||||
|
||||
} // namespace utils
|
||||
} // namespace spvtools
|
||||
|
||||
#endif // SOURCE_UTIL_INDEX_RANGE_H_
|
||||
@@ -43,6 +43,7 @@ namespace utils {
|
||||
template <class T, size_t small_size>
|
||||
class SmallVector {
|
||||
public:
|
||||
using value_type = T;
|
||||
using iterator = T*;
|
||||
using const_iterator = const T*;
|
||||
|
||||
|
||||
72
3rdparty/spirv-tools/source/util/span.h
vendored
Normal file
72
3rdparty/spirv-tools/source/util/span.h
vendored
Normal file
@@ -0,0 +1,72 @@
|
||||
// Copyright 2025 Google LLC
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#ifndef SOURCE_UTIL_SPAN_H_
|
||||
#define SOURCE_UTIL_SPAN_H_
|
||||
|
||||
#include <cstddef>
|
||||
#include <iterator>
|
||||
#include <type_traits>
|
||||
|
||||
namespace spvtools {
|
||||
namespace utils {
|
||||
|
||||
// Implement a subset of the C++20 std::span, using at most C++17 functionality.
|
||||
// Replace this when SPIRV-Tools can use C++20.
|
||||
template <class T>
|
||||
class Span {
|
||||
public:
|
||||
using element_type = T;
|
||||
using value_type = std::remove_cv_t<T>;
|
||||
using size_type = std::size_t;
|
||||
using difference_type = std::ptrdiff_t;
|
||||
using pointer = T*;
|
||||
using const_pointer = const T*;
|
||||
using reference = T&;
|
||||
using const_reference = const T&;
|
||||
using iterator = T*;
|
||||
using const_iterator = const T*;
|
||||
|
||||
Span() {}
|
||||
Span(iterator first, size_type count) : first_(first), count_(count) {}
|
||||
|
||||
iterator begin() const { return first_; }
|
||||
iterator end() const { return first_ ? first_ + count_ : nullptr; }
|
||||
const_iterator cbegin() const { return first_; }
|
||||
const_iterator cend() const { return first_ ? first_ + count_ : nullptr; }
|
||||
|
||||
size_type size() const { return count_; }
|
||||
size_type size_bytes() const { return count_ * sizeof(T); }
|
||||
bool empty() const { return first_ == nullptr || count_ == 0; }
|
||||
|
||||
reference front() const { return *first_; }
|
||||
reference back() const { return *(first_ + count_ - 1); }
|
||||
pointer data() const { return first_; }
|
||||
reference operator[](size_type idx) const { return first_[idx]; }
|
||||
Span<T> subspan(size_type offset) const {
|
||||
if (count_ > offset) {
|
||||
return Span(first_ + offset, count_ - offset);
|
||||
}
|
||||
return Span<T>();
|
||||
}
|
||||
|
||||
private:
|
||||
T* first_ = nullptr;
|
||||
size_type count_ = 0;
|
||||
};
|
||||
|
||||
} // namespace utils
|
||||
} // namespace spvtools
|
||||
|
||||
#endif // SOURCE_UTIL_SPAN_H_
|
||||
14
3rdparty/spirv-tools/source/util/string_utils.h
vendored
14
3rdparty/spirv-tools/source/util/string_utils.h
vendored
@@ -17,13 +17,12 @@
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
#include <cstdint>
|
||||
#include <cstring>
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "source/util/string_utils.h"
|
||||
|
||||
namespace spvtools {
|
||||
namespace utils {
|
||||
|
||||
@@ -48,8 +47,9 @@ std::pair<std::string, std::string> SplitFlagArgs(const std::string& flag);
|
||||
|
||||
// Encodes a string as a sequence of words, using the SPIR-V encoding, appending
|
||||
// to an existing vector.
|
||||
inline void AppendToVector(const std::string& input,
|
||||
std::vector<uint32_t>* result) {
|
||||
template <class VectorType = std::vector<uint32_t>>
|
||||
inline void AppendToVector(const std::string& input, VectorType* result) {
|
||||
static_assert(std::is_same<uint32_t, typename VectorType::value_type>::value);
|
||||
uint32_t word = 0;
|
||||
size_t num_bytes = input.size();
|
||||
// SPIR-V strings are null-terminated. The byte_index == num_bytes
|
||||
@@ -70,8 +70,10 @@ inline void AppendToVector(const std::string& input,
|
||||
}
|
||||
|
||||
// Encodes a string as a sequence of words, using the SPIR-V encoding.
|
||||
inline std::vector<uint32_t> MakeVector(const std::string& input) {
|
||||
std::vector<uint32_t> result;
|
||||
template <class VectorType = std::vector<uint32_t>>
|
||||
inline VectorType MakeVector(const std::string& input) {
|
||||
static_assert(std::is_same<uint32_t, typename VectorType::value_type>::value);
|
||||
VectorType result;
|
||||
AppendToVector(input, &result);
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
#include "source/ext_inst.h"
|
||||
#include "source/opcode.h"
|
||||
#include "source/table.h"
|
||||
#include "source/table2.h"
|
||||
#include "spirv-tools/libspirv.h"
|
||||
|
||||
namespace spvtools {
|
||||
@@ -83,9 +84,7 @@ class Instruction {
|
||||
const spv_parsed_instruction_t& c_inst() const { return inst_; }
|
||||
|
||||
/// Provides direct access to instructions spv_ext_inst_type_t object.
|
||||
const spv_ext_inst_type_t& ext_inst_type() const {
|
||||
return inst_.ext_inst_type;
|
||||
}
|
||||
spv_ext_inst_type_t ext_inst_type() const { return inst_.ext_inst_type; }
|
||||
|
||||
bool IsNonSemantic() const {
|
||||
return spvIsExtendedInstruction(opcode()) &&
|
||||
@@ -113,7 +112,7 @@ class Instruction {
|
||||
private:
|
||||
const std::vector<uint32_t> words_;
|
||||
const std::vector<spv_parsed_operand_t> operands_;
|
||||
spv_parsed_instruction_t inst_;
|
||||
const spv_parsed_instruction_t inst_;
|
||||
size_t line_num_ = 0;
|
||||
|
||||
/// The function in which this instruction was declared
|
||||
|
||||
3
3rdparty/spirv-tools/source/val/validate.cpp
vendored
3
3rdparty/spirv-tools/source/val/validate.cpp
vendored
@@ -22,12 +22,12 @@
|
||||
|
||||
#include "source/binary.h"
|
||||
#include "source/diagnostic.h"
|
||||
#include "source/enum_string_mapping.h"
|
||||
#include "source/extensions.h"
|
||||
#include "source/opcode.h"
|
||||
#include "source/spirv_constant.h"
|
||||
#include "source/spirv_endian.h"
|
||||
#include "source/spirv_target_env.h"
|
||||
#include "source/table2.h"
|
||||
#include "source/val/construct.h"
|
||||
#include "source/val/instruction.h"
|
||||
#include "source/val/validation_state.h"
|
||||
@@ -367,6 +367,7 @@ spv_result_t ValidateBinaryUsingContextAndValidationState(
|
||||
if (auto error = RayReorderNVPass(*vstate, &instruction)) return error;
|
||||
if (auto error = MeshShadingPass(*vstate, &instruction)) return error;
|
||||
if (auto error = TensorLayoutPass(*vstate, &instruction)) return error;
|
||||
if (auto error = InvalidTypePass(*vstate, &instruction)) return error;
|
||||
}
|
||||
|
||||
// Validate the preconditions involving adjacent instructions. e.g.
|
||||
|
||||
3
3rdparty/spirv-tools/source/val/validate.h
vendored
3
3rdparty/spirv-tools/source/val/validate.h
vendored
@@ -223,6 +223,9 @@ spv_result_t RayReorderNVPass(ValidationState_t& _, const Instruction* inst);
|
||||
/// Validates correctness of mesh shading instructions.
|
||||
spv_result_t MeshShadingPass(ValidationState_t& _, const Instruction* inst);
|
||||
|
||||
/// Validates correctness of certain special type instructions.
|
||||
spv_result_t InvalidTypePass(ValidationState_t& _, const Instruction* inst);
|
||||
|
||||
/// Calculates the reachability of basic blocks.
|
||||
void ReachabilityPass(ValidationState_t& _);
|
||||
|
||||
|
||||
@@ -224,6 +224,14 @@ spv_result_t ArithmeticsPass(ValidationState_t& _, const Instruction* inst) {
|
||||
<< "Expected float scalar type as Result Type: "
|
||||
<< spvOpcodeString(opcode);
|
||||
|
||||
if (_.IsBfloat16ScalarType(result_type)) {
|
||||
if (!_.HasCapability(spv::Capability::BFloat16DotProductKHR)) {
|
||||
return _.diag(SPV_ERROR_INVALID_DATA, inst)
|
||||
<< "OpDot Result Type <id> " << _.getIdName(result_type)
|
||||
<< "requires BFloat16DotProductKHR be declared.";
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t first_vector_num_components = 0;
|
||||
|
||||
for (size_t operand_index = 2; operand_index < inst->operands().size();
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
#include <string>
|
||||
|
||||
#include "source/opcode.h"
|
||||
#include "source/table2.h"
|
||||
#include "source/val/instruction.h"
|
||||
#include "source/val/validate.h"
|
||||
#include "source/val/validation_state.h"
|
||||
@@ -67,6 +68,50 @@ bool IsSupportGuaranteedVulkan_1_2(uint32_t capability) {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool IsSupportGuaranteedVulkan_1_3(uint32_t capability) {
|
||||
if (IsSupportGuaranteedVulkan_1_2(capability)) return true;
|
||||
switch (spv::Capability(capability)) {
|
||||
case spv::Capability::DotProduct:
|
||||
case spv::Capability::DotProductInputAll:
|
||||
case spv::Capability::DotProductInput4x8Bit:
|
||||
case spv::Capability::DotProductInput4x8BitPacked:
|
||||
case spv::Capability::VulkanMemoryModel:
|
||||
case spv::Capability::VulkanMemoryModelDeviceScope:
|
||||
case spv::Capability::PhysicalStorageBufferAddresses:
|
||||
case spv::Capability::DemoteToHelperInvocation:
|
||||
return true;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool IsSupportGuaranteedVulkan_1_4(uint32_t capability) {
|
||||
if (IsSupportGuaranteedVulkan_1_3(capability)) return true;
|
||||
switch (spv::Capability(capability)) {
|
||||
case spv::Capability::UniformBufferArrayDynamicIndexing:
|
||||
case spv::Capability::SampledImageArrayDynamicIndexing:
|
||||
case spv::Capability::StorageBufferArrayDynamicIndexing:
|
||||
case spv::Capability::StorageImageArrayDynamicIndexing:
|
||||
case spv::Capability::Int16:
|
||||
case spv::Capability::StorageBuffer16BitAccess:
|
||||
case spv::Capability::VariablePointers:
|
||||
case spv::Capability::VariablePointersStorageBuffer:
|
||||
case spv::Capability::UniformTexelBufferArrayDynamicIndexing:
|
||||
case spv::Capability::StorageTexelBufferArrayDynamicIndexing:
|
||||
case spv::Capability::Int8:
|
||||
case spv::Capability::StorageBuffer8BitAccess:
|
||||
case spv::Capability::FloatControls2:
|
||||
case spv::Capability::SampleRateShading:
|
||||
case spv::Capability::StorageImageExtendedFormats:
|
||||
case spv::Capability::ImageGatherExtended:
|
||||
return true;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool IsSupportOptionalVulkan_1_0(uint32_t capability) {
|
||||
switch (spv::Capability(capability)) {
|
||||
case spv::Capability::Geometry:
|
||||
@@ -100,6 +145,7 @@ bool IsSupportOptionalVulkan_1_0(uint32_t capability) {
|
||||
case spv::Capability::GeometryStreams:
|
||||
case spv::Capability::Float16:
|
||||
case spv::Capability::Int8:
|
||||
case spv::Capability::BFloat16TypeKHR:
|
||||
return true;
|
||||
default:
|
||||
break;
|
||||
@@ -171,6 +217,16 @@ bool IsSupportOptionalVulkan_1_2(uint32_t capability) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Vulkan 1.3 only added required features.
|
||||
bool IsSupportOptionalVulkan_1_3(uint32_t capability) {
|
||||
return IsSupportOptionalVulkan_1_2(capability);
|
||||
}
|
||||
|
||||
// Vulkan 1.4 only added required features.
|
||||
bool IsSupportOptionalVulkan_1_4(uint32_t capability) {
|
||||
return IsSupportOptionalVulkan_1_3(capability);
|
||||
}
|
||||
|
||||
bool IsSupportGuaranteedOpenCL_1_2(uint32_t capability, bool embedded_profile) {
|
||||
switch (spv::Capability(capability)) {
|
||||
case spv::Capability::Addresses:
|
||||
@@ -221,6 +277,7 @@ bool IsSupportOptionalOpenCL_1_2(uint32_t capability) {
|
||||
switch (spv::Capability(capability)) {
|
||||
case spv::Capability::ImageBasic:
|
||||
case spv::Capability::Float64:
|
||||
case spv::Capability::Float16:
|
||||
return true;
|
||||
default:
|
||||
break;
|
||||
@@ -230,16 +287,16 @@ bool IsSupportOptionalOpenCL_1_2(uint32_t capability) {
|
||||
|
||||
// Checks if |capability| was enabled by extension.
|
||||
bool IsEnabledByExtension(ValidationState_t& _, uint32_t capability) {
|
||||
spv_operand_desc operand_desc = nullptr;
|
||||
_.grammar().lookupOperand(SPV_OPERAND_TYPE_CAPABILITY, capability,
|
||||
&operand_desc);
|
||||
const spvtools::OperandDesc* operand_desc = nullptr;
|
||||
spvtools::LookupOperand(SPV_OPERAND_TYPE_CAPABILITY, capability,
|
||||
&operand_desc);
|
||||
|
||||
// operand_desc is expected to be not null, otherwise validator would have
|
||||
// failed at an earlier stage. This 'assert' is 'just in case'.
|
||||
assert(operand_desc);
|
||||
|
||||
ExtensionSet operand_exts(operand_desc->numExtensions,
|
||||
operand_desc->extensions);
|
||||
ExtensionSet operand_exts(operand_desc->extensions_range.count(),
|
||||
operand_desc->extensions().data());
|
||||
if (operand_exts.empty()) return false;
|
||||
|
||||
return _.HasAnyOfExtensions(operand_exts);
|
||||
@@ -297,14 +354,14 @@ spv_result_t CapabilityPass(ValidationState_t& _, const Instruction* inst) {
|
||||
assert(operand.offset < inst->words().size());
|
||||
|
||||
const uint32_t capability = inst->word(operand.offset);
|
||||
const auto capability_str = [&_, capability]() {
|
||||
spv_operand_desc desc = nullptr;
|
||||
if (_.grammar().lookupOperand(SPV_OPERAND_TYPE_CAPABILITY, capability,
|
||||
&desc) != SPV_SUCCESS ||
|
||||
const auto capability_str = [capability]() {
|
||||
const spvtools::OperandDesc* desc = nullptr;
|
||||
if (spvtools::LookupOperand(SPV_OPERAND_TYPE_CAPABILITY, capability,
|
||||
&desc) != SPV_SUCCESS ||
|
||||
!desc) {
|
||||
return std::string("Unknown");
|
||||
}
|
||||
return std::string(desc->name);
|
||||
return std::string(desc->name().data());
|
||||
};
|
||||
|
||||
const auto env = _.context()->target_env;
|
||||
@@ -340,6 +397,24 @@ spv_result_t CapabilityPass(ValidationState_t& _, const Instruction* inst) {
|
||||
<< " is not allowed by Vulkan 1.2 specification"
|
||||
<< " (or requires extension)";
|
||||
}
|
||||
} else if (env == SPV_ENV_VULKAN_1_3) {
|
||||
if (!IsSupportGuaranteedVulkan_1_3(capability) &&
|
||||
!IsSupportOptionalVulkan_1_3(capability) &&
|
||||
!IsEnabledByExtension(_, capability)) {
|
||||
return _.diag(SPV_ERROR_INVALID_CAPABILITY, inst)
|
||||
<< "Capability " << capability_str()
|
||||
<< " is not allowed by Vulkan 1.3 specification"
|
||||
<< " (or requires extension)";
|
||||
}
|
||||
} else if (env == SPV_ENV_VULKAN_1_4) {
|
||||
if (!IsSupportGuaranteedVulkan_1_4(capability) &&
|
||||
!IsSupportOptionalVulkan_1_4(capability) &&
|
||||
!IsEnabledByExtension(_, capability)) {
|
||||
return _.diag(SPV_ERROR_INVALID_CAPABILITY, inst)
|
||||
<< "Capability " << capability_str()
|
||||
<< " is not allowed by Vulkan 1.4 specification"
|
||||
<< " (or requires extension)";
|
||||
}
|
||||
} else if (env == SPV_ENV_OPENCL_1_2 || env == SPV_ENV_OPENCL_EMBEDDED_1_2) {
|
||||
if (!IsSupportGuaranteedOpenCL_1_2(capability, opencl_embedded) &&
|
||||
!IsSupportOptionalOpenCL_1_2(capability) &&
|
||||
|
||||
@@ -264,11 +264,18 @@ spv_result_t ConversionPass(ValidationState_t& _, const Instruction* inst) {
|
||||
<< spvOpcodeString(opcode);
|
||||
}
|
||||
|
||||
if (_.GetBitWidth(result_type) == _.GetBitWidth(input_type))
|
||||
return _.diag(SPV_ERROR_INVALID_DATA, inst)
|
||||
<< "Expected input to have different bit width from Result "
|
||||
"Type: "
|
||||
<< spvOpcodeString(opcode);
|
||||
// Scalar type
|
||||
const uint32_t resScalarType = _.GetComponentType(result_type);
|
||||
const uint32_t inputScalartype = _.GetComponentType(input_type);
|
||||
if (_.GetBitWidth(resScalarType) == _.GetBitWidth(inputScalartype))
|
||||
if ((_.IsBfloat16ScalarType(resScalarType) &&
|
||||
_.IsBfloat16ScalarType(inputScalartype)) ||
|
||||
(!_.IsBfloat16ScalarType(inputScalartype) &&
|
||||
!_.IsBfloat16ScalarType(resScalarType)))
|
||||
return _.diag(SPV_ERROR_INVALID_DATA, inst)
|
||||
<< "Expected input to have different bit width from Result "
|
||||
"Type: "
|
||||
<< spvOpcodeString(opcode);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -509,6 +509,15 @@ spv_result_t checkLayout(uint32_t struct_id, const char* storage_class_str,
|
||||
// Check offset.
|
||||
if (offset == 0xffffffff)
|
||||
return fail(memberIdx) << "is missing an Offset decoration";
|
||||
|
||||
if (opcode == spv::Op::OpTypeRuntimeArray &&
|
||||
ordered_member_idx != member_offsets.size() - 1) {
|
||||
return vstate.diag(SPV_ERROR_INVALID_ID, vstate.FindDef(struct_id))
|
||||
<< vstate.VkErrorID(4680) << "Structure id " << struct_id
|
||||
<< " has a runtime array at offset " << offset
|
||||
<< ", but other members at larger offsets";
|
||||
}
|
||||
|
||||
if (!scalar_block_layout && relaxed_block_layout &&
|
||||
opcode == spv::Op::OpTypeVector) {
|
||||
// In relaxed block layout, the vector offset must be aligned to the
|
||||
@@ -2273,6 +2282,7 @@ spv_result_t CheckInvalidVulkanExplicitLayout(ValidationState_t& vstate) {
|
||||
}
|
||||
if (fail_id != 0) {
|
||||
return vstate.diag(SPV_ERROR_INVALID_ID, &inst)
|
||||
<< vstate.VkErrorID(10684)
|
||||
<< "Invalid explicit layout decorations on type for operand "
|
||||
<< vstate.getIdName(fail_id);
|
||||
}
|
||||
|
||||
@@ -21,11 +21,11 @@
|
||||
#include "NonSemanticShaderDebugInfo100.h"
|
||||
#include "OpenCLDebugInfo100.h"
|
||||
#include "source/common_debug_info.h"
|
||||
#include "source/enum_string_mapping.h"
|
||||
#include "source/extensions.h"
|
||||
#include "source/latest_version_glsl_std_450_header.h"
|
||||
#include "source/latest_version_opencl_std_header.h"
|
||||
#include "source/spirv_constant.h"
|
||||
#include "source/table2.h"
|
||||
#include "source/val/instruction.h"
|
||||
#include "source/val/validate.h"
|
||||
#include "source/val/validation_state.h"
|
||||
@@ -35,16 +35,15 @@ namespace spvtools {
|
||||
namespace val {
|
||||
namespace {
|
||||
|
||||
std::string ReflectionInstructionName(ValidationState_t& _,
|
||||
const Instruction* inst) {
|
||||
spv_ext_inst_desc desc = nullptr;
|
||||
if (_.grammar().lookupExtInst(SPV_EXT_INST_TYPE_NONSEMANTIC_CLSPVREFLECTION,
|
||||
inst->word(4), &desc) != SPV_SUCCESS ||
|
||||
std::string ReflectionInstructionName(const Instruction* inst) {
|
||||
const ExtInstDesc* desc = nullptr;
|
||||
if (LookupExtInst(SPV_EXT_INST_TYPE_NONSEMANTIC_CLSPVREFLECTION,
|
||||
inst->word(4), &desc) != SPV_SUCCESS ||
|
||||
!desc) {
|
||||
return std::string("Unknown ExtInst");
|
||||
}
|
||||
std::ostringstream ss;
|
||||
ss << desc->name;
|
||||
ss << desc->name().data();
|
||||
|
||||
return ss.str();
|
||||
}
|
||||
@@ -93,17 +92,17 @@ spv_result_t ValidateOperandForDebugInfo(
|
||||
const std::function<std::string()>& ext_inst_name) {
|
||||
auto* operand = _.FindDef(inst->word(word_index));
|
||||
if (operand->opcode() != expected_opcode) {
|
||||
spv_opcode_desc desc = nullptr;
|
||||
if (_.grammar().lookupOpcode(expected_opcode, &desc) != SPV_SUCCESS ||
|
||||
const spvtools::InstructionDesc* desc = nullptr;
|
||||
if (spvtools::LookupOpcodeForEnv(_.context()->target_env, expected_opcode,
|
||||
&desc) != SPV_SUCCESS ||
|
||||
!desc) {
|
||||
return _.diag(SPV_ERROR_INVALID_DATA, inst)
|
||||
<< ext_inst_name() << ": "
|
||||
<< "expected operand " << operand_name << " is invalid";
|
||||
}
|
||||
return _.diag(SPV_ERROR_INVALID_DATA, inst)
|
||||
<< ext_inst_name() << ": "
|
||||
<< "expected operand " << operand_name << " must be a result id of "
|
||||
<< "Op" << desc->name;
|
||||
<< ext_inst_name() << ": " << "expected operand " << operand_name
|
||||
<< " must be a result id of " << "Op" << desc->name().data();
|
||||
}
|
||||
return SPV_SUCCESS;
|
||||
}
|
||||
@@ -189,18 +188,17 @@ spv_result_t ValidateDebugInfoOperand(
|
||||
if (DoesDebugInfoOperandMatchExpectation(_, expectation, inst, word_index))
|
||||
return SPV_SUCCESS;
|
||||
|
||||
spv_ext_inst_desc desc = nullptr;
|
||||
if (_.grammar().lookupExtInst(inst->ext_inst_type(), expected_debug_inst,
|
||||
&desc) != SPV_SUCCESS ||
|
||||
const ExtInstDesc* desc = nullptr;
|
||||
if (LookupExtInst(inst->ext_inst_type(), expected_debug_inst, &desc) !=
|
||||
SPV_SUCCESS ||
|
||||
!desc) {
|
||||
return _.diag(SPV_ERROR_INVALID_DATA, inst)
|
||||
<< ext_inst_name() << ": "
|
||||
<< "expected operand " << debug_inst_name << " is invalid";
|
||||
}
|
||||
return _.diag(SPV_ERROR_INVALID_DATA, inst)
|
||||
<< ext_inst_name() << ": "
|
||||
<< "expected operand " << debug_inst_name << " must be a result id of "
|
||||
<< desc->name;
|
||||
<< ext_inst_name() << ": " << "expected operand " << debug_inst_name
|
||||
<< " must be a result id of " << desc->name().data();
|
||||
}
|
||||
|
||||
#define CHECK_DEBUG_OPERAND(NAME, debug_opcode, index) \
|
||||
@@ -285,7 +283,7 @@ spv_result_t ValidateOperandDebugType(
|
||||
spv_result_t ValidateClspvReflectionKernel(ValidationState_t& _,
|
||||
const Instruction* inst,
|
||||
uint32_t version) {
|
||||
const auto inst_name = ReflectionInstructionName(_, inst);
|
||||
const auto inst_name = ReflectionInstructionName(inst);
|
||||
const auto kernel_id = inst->GetOperandAs<uint32_t>(4);
|
||||
const auto kernel = _.FindDef(kernel_id);
|
||||
if (kernel->opcode() != spv::Op::OpFunction) {
|
||||
@@ -930,7 +928,7 @@ spv_result_t ValidateClspvReflectionInstruction(ValidationState_t& _,
|
||||
}
|
||||
if (version < required_version) {
|
||||
return _.diag(SPV_ERROR_INVALID_ID, inst)
|
||||
<< ReflectionInstructionName(_, inst) << " requires version "
|
||||
<< ReflectionInstructionName(inst) << " requires version "
|
||||
<< required_version << ", but parsed version is " << version;
|
||||
}
|
||||
|
||||
@@ -1052,8 +1050,14 @@ bool IsDebugVariableWithIntScalarType(ValidationState_t& _,
|
||||
} // anonymous namespace
|
||||
|
||||
spv_result_t ValidateExtension(ValidationState_t& _, const Instruction* inst) {
|
||||
std::string extension = GetExtensionString(&(inst->c_inst()));
|
||||
if (_.version() < SPV_SPIRV_VERSION_WORD(1, 3)) {
|
||||
if (extension == ExtensionToString(kSPV_KHR_vulkan_memory_model)) {
|
||||
return _.diag(SPV_ERROR_WRONG_VERSION, inst)
|
||||
<< extension << " extension requires SPIR-V version 1.3 or later.";
|
||||
}
|
||||
}
|
||||
if (_.version() < SPV_SPIRV_VERSION_WORD(1, 4)) {
|
||||
std::string extension = GetExtensionString(&(inst->c_inst()));
|
||||
if (extension ==
|
||||
ExtensionToString(kSPV_KHR_workgroup_memory_explicit_layout) ||
|
||||
extension == ExtensionToString(kSPV_EXT_mesh_shader) ||
|
||||
@@ -1095,9 +1099,8 @@ spv_result_t ValidateExtInst(ValidationState_t& _, const Instruction* inst) {
|
||||
spv_ext_inst_type_t(inst->ext_inst_type());
|
||||
|
||||
auto ext_inst_name = [&_, ext_inst_set, ext_inst_type, ext_inst_index]() {
|
||||
spv_ext_inst_desc desc = nullptr;
|
||||
if (_.grammar().lookupExtInst(ext_inst_type, ext_inst_index, &desc) !=
|
||||
SPV_SUCCESS ||
|
||||
const ExtInstDesc* desc = nullptr;
|
||||
if (LookupExtInst(ext_inst_type, ext_inst_index, &desc) != SPV_SUCCESS ||
|
||||
!desc) {
|
||||
return std::string("Unknown ExtInst");
|
||||
}
|
||||
@@ -1108,7 +1111,7 @@ spv_result_t ValidateExtInst(ValidationState_t& _, const Instruction* inst) {
|
||||
std::ostringstream ss;
|
||||
ss << import_inst->GetOperandAs<std::string>(1);
|
||||
ss << " ";
|
||||
ss << desc->name;
|
||||
ss << desc->name().data();
|
||||
|
||||
return ss.str();
|
||||
};
|
||||
|
||||
@@ -14,8 +14,8 @@
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
#include "source/enum_string_mapping.h"
|
||||
#include "source/opcode.h"
|
||||
#include "source/table2.h"
|
||||
#include "source/val/instruction.h"
|
||||
#include "source/val/validate.h"
|
||||
#include "source/val/validation_state.h"
|
||||
|
||||
@@ -20,13 +20,13 @@
|
||||
#include <vector>
|
||||
|
||||
#include "source/enum_set.h"
|
||||
#include "source/enum_string_mapping.h"
|
||||
#include "source/extensions.h"
|
||||
#include "source/opcode.h"
|
||||
#include "source/operand.h"
|
||||
#include "source/spirv_constant.h"
|
||||
#include "source/spirv_target_env.h"
|
||||
#include "source/spirv_validator_options.h"
|
||||
#include "source/table2.h"
|
||||
#include "source/util/string_utils.h"
|
||||
#include "source/val/validate.h"
|
||||
#include "source/val/validation_state.h"
|
||||
@@ -35,14 +35,13 @@ namespace spvtools {
|
||||
namespace val {
|
||||
namespace {
|
||||
|
||||
std::string ToString(const CapabilitySet& capabilities,
|
||||
const AssemblyGrammar& grammar) {
|
||||
std::string ToString(const CapabilitySet& capabilities) {
|
||||
std::stringstream ss;
|
||||
for (auto capability : capabilities) {
|
||||
spv_operand_desc desc;
|
||||
if (SPV_SUCCESS == grammar.lookupOperand(SPV_OPERAND_TYPE_CAPABILITY,
|
||||
uint32_t(capability), &desc))
|
||||
ss << desc->name << " ";
|
||||
const spvtools::OperandDesc* desc = nullptr;
|
||||
if (SPV_SUCCESS == spvtools::LookupOperand(SPV_OPERAND_TYPE_CAPABILITY,
|
||||
uint32_t(capability), &desc))
|
||||
ss << desc->name().data() << " ";
|
||||
else
|
||||
ss << uint32_t(capability) << " ";
|
||||
}
|
||||
@@ -72,10 +71,11 @@ CapabilitySet EnablingCapabilitiesForOp(const ValidationState_t& state,
|
||||
break;
|
||||
}
|
||||
// Look it up in the grammar
|
||||
spv_opcode_desc opcode_desc = {};
|
||||
if (SPV_SUCCESS == state.grammar().lookupOpcode(opcode, &opcode_desc)) {
|
||||
const spvtools::InstructionDesc* opcode_desc = nullptr;
|
||||
if (SPV_SUCCESS ==
|
||||
LookupOpcodeForEnv(state.context()->target_env, opcode, &opcode_desc)) {
|
||||
return state.grammar().filterCapsAgainstTargetEnv(
|
||||
opcode_desc->capabilities, opcode_desc->numCapabilities);
|
||||
opcode_desc->capabilities());
|
||||
}
|
||||
return CapabilitySet();
|
||||
}
|
||||
@@ -86,7 +86,7 @@ CapabilitySet EnablingCapabilitiesForOp(const ValidationState_t& state,
|
||||
// return an error code.
|
||||
spv_result_t OperandVersionExtensionCheck(
|
||||
ValidationState_t& _, const Instruction* inst, size_t which_operand,
|
||||
const spv_operand_desc_t& operand_desc, uint32_t word) {
|
||||
const spvtools::OperandDesc& operand_desc, uint32_t word) {
|
||||
const uint32_t module_version = _.version();
|
||||
const uint32_t operand_min_version = operand_desc.minVersion;
|
||||
const uint32_t operand_last_version = operand_desc.lastVersion;
|
||||
@@ -103,27 +103,29 @@ spv_result_t OperandVersionExtensionCheck(
|
||||
return _.diag(SPV_ERROR_WRONG_VERSION, inst)
|
||||
<< spvtools::utils::CardinalToOrdinal(which_operand)
|
||||
<< " operand of " << spvOpcodeString(inst->opcode()) << ": operand "
|
||||
<< operand_desc.name << "(" << word << ") requires SPIR-V version "
|
||||
<< operand_desc.name().data() << "(" << word
|
||||
<< ") requires SPIR-V version "
|
||||
<< SPV_SPIRV_VERSION_MAJOR_PART(operand_last_version) << "."
|
||||
<< SPV_SPIRV_VERSION_MINOR_PART(operand_last_version)
|
||||
<< " or earlier";
|
||||
}
|
||||
|
||||
if (!reserved && operand_desc.numExtensions == 0) {
|
||||
if (!reserved && operand_desc.extensions_range.empty()) {
|
||||
return _.diag(SPV_ERROR_WRONG_VERSION, inst)
|
||||
<< spvtools::utils::CardinalToOrdinal(which_operand)
|
||||
<< " operand of " << spvOpcodeString(inst->opcode()) << ": operand "
|
||||
<< operand_desc.name << "(" << word << ") requires SPIR-V version "
|
||||
<< operand_desc.name().data() << "(" << word
|
||||
<< ") requires SPIR-V version "
|
||||
<< SPV_SPIRV_VERSION_MAJOR_PART(operand_min_version) << "."
|
||||
<< SPV_SPIRV_VERSION_MINOR_PART(operand_min_version) << " or later";
|
||||
} else {
|
||||
ExtensionSet required_extensions(operand_desc.numExtensions,
|
||||
operand_desc.extensions);
|
||||
ExtensionSet required_extensions(operand_desc.extensions_range.count(),
|
||||
operand_desc.extensions().data());
|
||||
if (!_.HasAnyOfExtensions(required_extensions)) {
|
||||
return _.diag(SPV_ERROR_MISSING_EXTENSION, inst)
|
||||
<< spvtools::utils::CardinalToOrdinal(which_operand)
|
||||
<< " operand of " << spvOpcodeString(inst->opcode())
|
||||
<< ": operand " << operand_desc.name << "(" << word
|
||||
<< ": operand " << operand_desc.name().data() << "(" << word
|
||||
<< ") requires one of these extensions: "
|
||||
<< ExtensionSetToString(required_extensions);
|
||||
}
|
||||
@@ -166,9 +168,9 @@ spv_result_t CheckRequiredCapabilities(ValidationState_t& state,
|
||||
}
|
||||
|
||||
CapabilitySet enabling_capabilities;
|
||||
spv_operand_desc operand_desc = nullptr;
|
||||
const spvtools::OperandDesc* operand_desc = nullptr;
|
||||
const auto lookup_result =
|
||||
state.grammar().lookupOperand(operand.type, word, &operand_desc);
|
||||
spvtools::LookupOperand(operand.type, word, &operand_desc);
|
||||
if (lookup_result == SPV_SUCCESS) {
|
||||
// Allow FPRoundingMode decoration if requested.
|
||||
if (operand.type == SPV_OPERAND_TYPE_DECORATION &&
|
||||
@@ -186,7 +188,7 @@ spv_result_t CheckRequiredCapabilities(ValidationState_t& state,
|
||||
}
|
||||
} else {
|
||||
enabling_capabilities = state.grammar().filterCapsAgainstTargetEnv(
|
||||
operand_desc->capabilities, operand_desc->numCapabilities);
|
||||
operand_desc->capabilities());
|
||||
}
|
||||
|
||||
// When encountering an OpCapability instruction, the instruction pass
|
||||
@@ -201,7 +203,7 @@ spv_result_t CheckRequiredCapabilities(ValidationState_t& state,
|
||||
<< "Operand " << which_operand << " of "
|
||||
<< spvOpcodeString(inst->opcode())
|
||||
<< " requires one of these capabilities: "
|
||||
<< ToString(enabling_capabilities, state.grammar());
|
||||
<< ToString(enabling_capabilities);
|
||||
}
|
||||
}
|
||||
return OperandVersionExtensionCheck(state, inst, which_operand,
|
||||
@@ -222,10 +224,10 @@ spv_result_t ReservedCheck(ValidationState_t& _, const Instruction* inst) {
|
||||
case spv::Op::OpImageSparseSampleProjExplicitLod:
|
||||
case spv::Op::OpImageSparseSampleProjDrefImplicitLod:
|
||||
case spv::Op::OpImageSparseSampleProjDrefExplicitLod: {
|
||||
spv_opcode_desc inst_desc;
|
||||
_.grammar().lookupOpcode(opcode, &inst_desc);
|
||||
const spvtools::InstructionDesc* inst_desc = nullptr;
|
||||
spvtools::LookupOpcode(opcode, &inst_desc);
|
||||
return _.diag(SPV_ERROR_INVALID_BINARY, inst)
|
||||
<< "Invalid Opcode name 'Op" << inst_desc->name << "'";
|
||||
<< "Invalid Opcode name 'Op" << inst_desc->name().data() << "'";
|
||||
}
|
||||
default:
|
||||
break;
|
||||
@@ -242,8 +244,7 @@ spv_result_t CapabilityCheck(ValidationState_t& _, const Instruction* inst) {
|
||||
if (!_.HasAnyOfCapabilities(opcode_caps)) {
|
||||
return _.diag(SPV_ERROR_INVALID_CAPABILITY, inst)
|
||||
<< "Opcode " << spvOpcodeString(opcode)
|
||||
<< " requires one of these capabilities: "
|
||||
<< ToString(opcode_caps, _.grammar());
|
||||
<< " requires one of these capabilities: " << ToString(opcode_caps);
|
||||
}
|
||||
for (size_t i = 0; i < inst->operands().size(); ++i) {
|
||||
const auto& operand = inst->operand(i);
|
||||
@@ -276,8 +277,8 @@ spv_result_t CapabilityCheck(ValidationState_t& _, const Instruction* inst) {
|
||||
// dependencies for the opcode.
|
||||
spv_result_t VersionCheck(ValidationState_t& _, const Instruction* inst) {
|
||||
const auto opcode = inst->opcode();
|
||||
spv_opcode_desc inst_desc;
|
||||
const spv_result_t r = _.grammar().lookupOpcode(opcode, &inst_desc);
|
||||
const spvtools::InstructionDesc* inst_desc = nullptr;
|
||||
const spv_result_t r = spvtools::LookupOpcode(opcode, &inst_desc);
|
||||
assert(r == SPV_SUCCESS);
|
||||
(void)r;
|
||||
|
||||
@@ -297,13 +298,14 @@ spv_result_t VersionCheck(ValidationState_t& _, const Instruction* inst) {
|
||||
const bool capability_check_is_sufficient =
|
||||
inst->opcode() != spv::Op::OpTerminateInvocation;
|
||||
|
||||
if (capability_check_is_sufficient && (inst_desc->numCapabilities > 0u)) {
|
||||
if (capability_check_is_sufficient && !inst_desc->capabilities().empty()) {
|
||||
// We already checked that the direct capability dependency has been
|
||||
// satisfied. We don't need to check any further.
|
||||
return SPV_SUCCESS;
|
||||
}
|
||||
|
||||
ExtensionSet exts(inst_desc->numExtensions, inst_desc->extensions);
|
||||
ExtensionSet exts(inst_desc->extensions().begin(),
|
||||
inst_desc->extensions().end());
|
||||
if (exts.empty()) {
|
||||
// If no extensions can enable this instruction, then emit error
|
||||
// messages only concerning core SPIR-V versions if errors happen.
|
||||
|
||||
@@ -130,10 +130,12 @@ spv_result_t check_interface_variable(ValidationState_t& _,
|
||||
}
|
||||
}
|
||||
|
||||
if (var->GetOperandAs<spv::StorageClass>(2) == spv::StorageClass::Input ||
|
||||
var->GetOperandAs<spv::StorageClass>(2) == spv::StorageClass::Output) {
|
||||
if (auto error = ValidateInputOutputInterfaceVariables(_, var))
|
||||
return error;
|
||||
if (spvIsVulkanEnv(_.context()->target_env)) {
|
||||
if (var->GetOperandAs<spv::StorageClass>(2) == spv::StorageClass::Input ||
|
||||
var->GetOperandAs<spv::StorageClass>(2) == spv::StorageClass::Output) {
|
||||
if (auto error = ValidateInputOutputInterfaceVariables(_, var))
|
||||
return error;
|
||||
}
|
||||
}
|
||||
|
||||
return SPV_SUCCESS;
|
||||
@@ -164,12 +166,10 @@ spv_result_t NumConsumedLocations(ValidationState_t& _, const Instruction* type,
|
||||
}
|
||||
break;
|
||||
case spv::Op::OpTypeMatrix:
|
||||
// Matrices consume locations equivalent to arrays of 4-component vectors.
|
||||
if (_.ContainsSizedIntOrFloatType(type->id(), spv::Op::OpTypeInt, 64) ||
|
||||
_.ContainsSizedIntOrFloatType(type->id(), spv::Op::OpTypeFloat, 64)) {
|
||||
*num_locations = 2;
|
||||
} else {
|
||||
*num_locations = 1;
|
||||
// Matrices consume locations equivalent to arrays.
|
||||
if (auto error = NumConsumedLocations(
|
||||
_, _.FindDef(type->GetOperandAs<uint32_t>(1)), num_locations)) {
|
||||
return error;
|
||||
}
|
||||
*num_locations *= type->GetOperandAs<uint32_t>(2);
|
||||
break;
|
||||
@@ -642,6 +642,28 @@ spv_result_t ValidateStorageClass(ValidationState_t& _,
|
||||
has_callable_data = true;
|
||||
break;
|
||||
}
|
||||
case spv::StorageClass::Input:
|
||||
case spv::StorageClass::Output: {
|
||||
auto result_type = _.FindDef(interface_var->type_id());
|
||||
if (_.ContainsType(result_type->GetOperandAs<uint32_t>(2),
|
||||
[](const Instruction* inst) {
|
||||
if (inst &&
|
||||
inst->opcode() == spv::Op::OpTypeFloat) {
|
||||
if (inst->words().size() > 3) {
|
||||
if (inst->GetOperandAs<spv::FPEncoding>(2) ==
|
||||
spv::FPEncoding::BFloat16KHR) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
})) {
|
||||
return _.diag(SPV_ERROR_INVALID_ID, interface_var)
|
||||
<< _.VkErrorID(10370) << "Bfloat16 OpVariable <id> "
|
||||
<< _.getIdName(interface_var->id()) << " must not be declared "
|
||||
<< "with a Storage Class of Input or Output.";
|
||||
}
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
139
3rdparty/spirv-tools/source/val/validate_invalid_type.cpp
vendored
Normal file
139
3rdparty/spirv-tools/source/val/validate_invalid_type.cpp
vendored
Normal file
@@ -0,0 +1,139 @@
|
||||
// Copyright (c) 2025 Google Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
// Performs validation of invalid type instructions.
|
||||
|
||||
#include <vector>
|
||||
|
||||
#include "source/opcode.h"
|
||||
#include "source/val/instruction.h"
|
||||
#include "source/val/validate.h"
|
||||
#include "source/val/validation_state.h"
|
||||
|
||||
namespace spvtools {
|
||||
namespace val {
|
||||
|
||||
// Validates correctness of certain special type instructions.
|
||||
spv_result_t InvalidTypePass(ValidationState_t& _, const Instruction* inst) {
|
||||
const spv::Op opcode = inst->opcode();
|
||||
|
||||
switch (opcode) {
|
||||
// OpExtInst
|
||||
case spv::Op::OpExtInst:
|
||||
// Arithmetic Instructions
|
||||
case spv::Op::OpFAdd:
|
||||
case spv::Op::OpFSub:
|
||||
case spv::Op::OpFMul:
|
||||
case spv::Op::OpFDiv:
|
||||
case spv::Op::OpFRem:
|
||||
case spv::Op::OpFMod:
|
||||
case spv::Op::OpFNegate:
|
||||
// Derivative Instructions
|
||||
case spv::Op::OpDPdx:
|
||||
case spv::Op::OpDPdy:
|
||||
case spv::Op::OpFwidth:
|
||||
case spv::Op::OpDPdxFine:
|
||||
case spv::Op::OpDPdyFine:
|
||||
case spv::Op::OpFwidthFine:
|
||||
case spv::Op::OpDPdxCoarse:
|
||||
case spv::Op::OpDPdyCoarse:
|
||||
case spv::Op::OpFwidthCoarse:
|
||||
// Atomic Instructions
|
||||
case spv::Op::OpAtomicFAddEXT:
|
||||
case spv::Op::OpAtomicFMinEXT:
|
||||
case spv::Op::OpAtomicFMaxEXT:
|
||||
case spv::Op::OpAtomicLoad:
|
||||
case spv::Op::OpAtomicExchange:
|
||||
// Group and Subgroup Instructions
|
||||
case spv::Op::OpGroupNonUniformRotateKHR:
|
||||
case spv::Op::OpGroupNonUniformBroadcast:
|
||||
case spv::Op::OpGroupNonUniformShuffle:
|
||||
case spv::Op::OpGroupNonUniformShuffleXor:
|
||||
case spv::Op::OpGroupNonUniformShuffleUp:
|
||||
case spv::Op::OpGroupNonUniformShuffleDown:
|
||||
case spv::Op::OpGroupNonUniformQuadBroadcast:
|
||||
case spv::Op::OpGroupNonUniformQuadSwap:
|
||||
case spv::Op::OpGroupNonUniformBroadcastFirst:
|
||||
case spv::Op::OpGroupNonUniformFAdd:
|
||||
case spv::Op::OpGroupNonUniformFMul:
|
||||
case spv::Op::OpGroupNonUniformFMin: {
|
||||
const uint32_t result_type = inst->type_id();
|
||||
if (_.IsBfloat16ScalarType(result_type) ||
|
||||
_.IsBfloat16VectorType(result_type)) {
|
||||
return _.diag(SPV_ERROR_INVALID_DATA, inst)
|
||||
<< spvOpcodeString(opcode) << " doesn't support BFloat16 type.";
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case spv::Op::OpAtomicStore: {
|
||||
uint32_t data_type =
|
||||
_.FindDef(inst->GetOperandAs<uint32_t>(3))->type_id();
|
||||
if (_.IsBfloat16VectorType(data_type)) {
|
||||
return _.diag(SPV_ERROR_INVALID_DATA, inst)
|
||||
<< spvOpcodeString(opcode) << " doesn't support BFloat16 type.";
|
||||
}
|
||||
break;
|
||||
}
|
||||
// Relational and Logical Instructions
|
||||
case spv::Op::OpIsNan:
|
||||
case spv::Op::OpIsInf:
|
||||
case spv::Op::OpIsFinite:
|
||||
case spv::Op::OpIsNormal:
|
||||
case spv::Op::OpSignBitSet: {
|
||||
const uint32_t operand_type = _.GetOperandTypeId(inst, 2);
|
||||
if (_.IsBfloat16ScalarType(operand_type) ||
|
||||
_.IsBfloat16VectorType(operand_type)) {
|
||||
return _.diag(SPV_ERROR_INVALID_DATA, inst)
|
||||
<< spvOpcodeString(opcode) << " doesn't support BFloat16 type.";
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case spv::Op::OpGroupNonUniformAllEqual: {
|
||||
const auto value_type = _.GetOperandTypeId(inst, 3);
|
||||
if (_.IsBfloat16ScalarType(value_type) ||
|
||||
_.IsBfloat16VectorType(value_type)) {
|
||||
return _.diag(SPV_ERROR_INVALID_DATA, inst)
|
||||
<< spvOpcodeString(opcode) << " doesn't support BFloat16 type.";
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case spv::Op::OpMatrixTimesMatrix: {
|
||||
const uint32_t result_type = inst->type_id();
|
||||
uint32_t res_num_rows = 0;
|
||||
uint32_t res_num_cols = 0;
|
||||
uint32_t res_col_type = 0;
|
||||
uint32_t res_component_type = 0;
|
||||
if (_.GetMatrixTypeInfo(result_type, &res_num_rows, &res_num_cols,
|
||||
&res_col_type, &res_component_type)) {
|
||||
if (_.IsBfloat16ScalarType(res_component_type)) {
|
||||
return _.diag(SPV_ERROR_INVALID_DATA, inst)
|
||||
<< spvOpcodeString(opcode)
|
||||
<< " doesn't support BFloat16 type.";
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return SPV_SUCCESS;
|
||||
}
|
||||
|
||||
} // namespace val
|
||||
} // namespace spvtools
|
||||
@@ -66,8 +66,7 @@ spv_result_t ValidateMemorySemantics(ValidationState_t& _,
|
||||
return _.diag(SPV_ERROR_INVALID_DATA, inst)
|
||||
<< spvOpcodeString(opcode)
|
||||
<< ": Memory Semantics can have at most one of the following "
|
||||
"bits "
|
||||
"set: Acquire, Release, AcquireRelease or "
|
||||
"bits set: Acquire, Release, AcquireRelease or "
|
||||
"SequentiallyConsistent";
|
||||
}
|
||||
|
||||
@@ -176,10 +175,8 @@ spv_result_t ValidateMemorySemantics(ValidationState_t& _,
|
||||
return _.diag(SPV_ERROR_INVALID_DATA, inst)
|
||||
<< _.VkErrorID(4732) << spvOpcodeString(opcode)
|
||||
<< ": Vulkan specification requires Memory Semantics to have "
|
||||
"one "
|
||||
"of the following bits set: Acquire, Release, "
|
||||
"AcquireRelease "
|
||||
"or SequentiallyConsistent";
|
||||
"one of the following bits set: Acquire, Release, "
|
||||
"AcquireRelease or SequentiallyConsistent";
|
||||
} else if (opcode != spv::Op::OpMemoryBarrier &&
|
||||
num_memory_order_set_bits) {
|
||||
// should leave only atomics and control barriers for Vulkan env
|
||||
@@ -203,11 +200,20 @@ spv_result_t ValidateMemorySemantics(ValidationState_t& _,
|
||||
"storage class";
|
||||
}
|
||||
|
||||
if (opcode == spv::Op::OpControlBarrier && value && !includes_storage_class) {
|
||||
return _.diag(SPV_ERROR_INVALID_DATA, inst)
|
||||
<< _.VkErrorID(4650) << spvOpcodeString(opcode)
|
||||
<< ": expected Memory Semantics to include a Vulkan-supported "
|
||||
"storage class if Memory Semantics is not None";
|
||||
if (opcode == spv::Op::OpControlBarrier && value) {
|
||||
if (!num_memory_order_set_bits) {
|
||||
return _.diag(SPV_ERROR_INVALID_DATA, inst)
|
||||
<< _.VkErrorID(10609) << spvOpcodeString(opcode)
|
||||
<< ": Vulkan specification requires non-zero Memory Semantics "
|
||||
"to have one of the following bits set: Acquire, Release, "
|
||||
"AcquireRelease or SequentiallyConsistent";
|
||||
}
|
||||
if (!includes_storage_class) {
|
||||
return _.diag(SPV_ERROR_INVALID_DATA, inst)
|
||||
<< _.VkErrorID(4650) << spvOpcodeString(opcode)
|
||||
<< ": expected Memory Semantics to include a Vulkan-supported "
|
||||
"storage class if Memory Semantics is not None";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
|
||||
#include "source/opcode.h"
|
||||
#include "source/spirv_target_env.h"
|
||||
#include "source/table2.h"
|
||||
#include "source/val/instruction.h"
|
||||
#include "source/val/validate.h"
|
||||
#include "source/val/validation_state.h"
|
||||
@@ -818,6 +819,20 @@ bool PerEntryExecutionMode(spv::ExecutionMode mode) {
|
||||
}
|
||||
}
|
||||
|
||||
spv_result_t ValidateCapability(ValidationState_t& _, const Instruction* inst) {
|
||||
auto cap = inst->GetOperandAs<spv::Capability>(0);
|
||||
if (cap == spv::Capability::CooperativeMatrixKHR) {
|
||||
if (_.HasCapability(spv::Capability::Shader) &&
|
||||
!_.HasCapability(spv::Capability::VulkanMemoryModel)) {
|
||||
return _.diag(SPV_ERROR_INVALID_CAPABILITY, inst)
|
||||
<< "If the Shader and CooperativeMatrixKHR capabilities are "
|
||||
"declared, the VulkanMemoryModel capability must also be "
|
||||
"declared";
|
||||
}
|
||||
}
|
||||
return SPV_SUCCESS;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
spv_result_t ValidateFloatControls2(ValidationState_t& _) {
|
||||
@@ -896,6 +911,9 @@ spv_result_t ModeSettingPass(ValidationState_t& _, const Instruction* inst) {
|
||||
case spv::Op::OpMemoryModel:
|
||||
if (auto error = ValidateMemoryModel(_, inst)) return error;
|
||||
break;
|
||||
case spv::Op::OpCapability:
|
||||
if (auto error = ValidateCapability(_, inst)) return error;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -908,12 +926,12 @@ spv_result_t ValidateDuplicateExecutionModes(ValidationState_t& _) {
|
||||
std::set<PerEntryKey> seen_per_entry;
|
||||
std::set<PerOperandKey> seen_per_operand;
|
||||
|
||||
const auto lookupMode = [&_](spv::ExecutionMode mode) -> std::string {
|
||||
spv_operand_desc desc = nullptr;
|
||||
if (_.grammar().lookupOperand(SPV_OPERAND_TYPE_EXECUTION_MODE,
|
||||
static_cast<uint32_t>(mode),
|
||||
&desc) == SPV_SUCCESS) {
|
||||
return std::string(desc->name);
|
||||
const auto lookupMode = [](spv::ExecutionMode mode) -> std::string {
|
||||
const spvtools::OperandDesc* desc = nullptr;
|
||||
if (spvtools::LookupOperand(SPV_OPERAND_TYPE_EXECUTION_MODE,
|
||||
static_cast<uint32_t>(mode),
|
||||
&desc) == SPV_SUCCESS) {
|
||||
return std::string(desc->name().data());
|
||||
}
|
||||
return "Unknown";
|
||||
};
|
||||
|
||||
@@ -112,11 +112,23 @@ spv_result_t ValidateTypeFloat(ValidationState_t& _, const Instruction* inst) {
|
||||
// Int8, Int16, and Int64 capabilities allow using 8-bit, 16-bit, and 64-bit
|
||||
// integers, respectively.
|
||||
auto num_bits = inst->GetOperandAs<const uint32_t>(1);
|
||||
const bool has_encoding = inst->operands().size() > 2;
|
||||
if (num_bits == 32) {
|
||||
return SPV_SUCCESS;
|
||||
}
|
||||
auto operands = inst->words();
|
||||
if (operands.size() > 3) {
|
||||
if (operands[3] != 0) {
|
||||
return _.diag(SPV_ERROR_INVALID_DATA, inst)
|
||||
<< "Current FPEncoding only supports BFloat16KHR.";
|
||||
}
|
||||
return SPV_SUCCESS;
|
||||
}
|
||||
|
||||
if (num_bits == 16) {
|
||||
if (_.features().declare_float16_type) {
|
||||
// An absence of FP encoding implies IEEE 754. The Float16 and Float16Buffer
|
||||
// capabilities only enable IEEE 754 binary 16
|
||||
if (has_encoding || _.features().declare_float16_type) {
|
||||
return SPV_SUCCESS;
|
||||
}
|
||||
return _.diag(SPV_ERROR_INVALID_DATA, inst)
|
||||
@@ -140,7 +152,24 @@ spv_result_t ValidateTypeVector(ValidationState_t& _, const Instruction* inst) {
|
||||
const auto component_index = 1;
|
||||
const auto component_id = inst->GetOperandAs<uint32_t>(component_index);
|
||||
const auto component_type = _.FindDef(component_id);
|
||||
if (!component_type || !spvOpcodeIsScalarType(component_type->opcode())) {
|
||||
if (component_type) {
|
||||
bool isPointer = component_type->opcode() == spv::Op::OpTypePointer;
|
||||
bool isScalar = spvOpcodeIsScalarType(component_type->opcode());
|
||||
|
||||
if (_.HasCapability(spv::Capability::MaskedGatherScatterINTEL) &&
|
||||
!isPointer && !isScalar) {
|
||||
return _.diag(SPV_ERROR_INVALID_ID, inst)
|
||||
<< "Invalid OpTypeVector Component Type<id> "
|
||||
<< _.getIdName(component_id)
|
||||
<< ": Expected a scalar or pointer type when using the "
|
||||
"SPV_INTEL_masked_gather_scatter extension.";
|
||||
} else if (!_.HasCapability(spv::Capability::MaskedGatherScatterINTEL) &&
|
||||
!isScalar) {
|
||||
return _.diag(SPV_ERROR_INVALID_ID, inst)
|
||||
<< "OpTypeVector Component Type <id> " << _.getIdName(component_id)
|
||||
<< " is not a scalar type.";
|
||||
}
|
||||
} else {
|
||||
return _.diag(SPV_ERROR_INVALID_ID, inst)
|
||||
<< "OpTypeVector Component Type <id> " << _.getIdName(component_id)
|
||||
<< " is not a scalar type.";
|
||||
@@ -626,6 +655,15 @@ spv_result_t ValidateTypeCooperativeMatrix(ValidationState_t& _,
|
||||
<< " is not a scalar numerical type.";
|
||||
}
|
||||
|
||||
if (_.IsBfloat16ScalarType(component_type_id)) {
|
||||
if (!_.HasCapability(spv::Capability::BFloat16CooperativeMatrixKHR)) {
|
||||
return _.diag(SPV_ERROR_INVALID_ID, inst)
|
||||
<< "OpTypeCooperativeMatrix Component Type <id> "
|
||||
<< _.getIdName(component_type_id)
|
||||
<< "require BFloat16CooperativeMatrixKHR be declared.";
|
||||
}
|
||||
}
|
||||
|
||||
const auto scope_index = 2;
|
||||
const auto scope_id = inst->GetOperandAs<uint32_t>(scope_index);
|
||||
const auto scope = _.FindDef(scope_id);
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include "source/opcode.h"
|
||||
#include "source/spirv_constant.h"
|
||||
#include "source/spirv_target_env.h"
|
||||
#include "source/table2.h"
|
||||
#include "source/util/make_unique.h"
|
||||
#include "source/val/basic_block.h"
|
||||
#include "source/val/construct.h"
|
||||
@@ -367,11 +368,11 @@ void ValidationState_t::RegisterCapability(spv::Capability cap) {
|
||||
if (module_capabilities_.contains(cap)) return;
|
||||
|
||||
module_capabilities_.insert(cap);
|
||||
spv_operand_desc desc;
|
||||
if (SPV_SUCCESS == grammar_.lookupOperand(SPV_OPERAND_TYPE_CAPABILITY,
|
||||
uint32_t(cap), &desc)) {
|
||||
for (auto capability :
|
||||
CapabilitySet(desc->numCapabilities, desc->capabilities)) {
|
||||
const spvtools::OperandDesc* desc = nullptr;
|
||||
if (SPV_SUCCESS == spvtools::LookupOperand(SPV_OPERAND_TYPE_CAPABILITY,
|
||||
uint32_t(cap), &desc)) {
|
||||
for (auto capability : CapabilitySet(desc->capabilities_range.count(),
|
||||
desc->capabilities().data())) {
|
||||
RegisterCapability(capability);
|
||||
}
|
||||
}
|
||||
@@ -946,6 +947,32 @@ bool ValidationState_t::IsVoidType(uint32_t id) const {
|
||||
return inst && inst->opcode() == spv::Op::OpTypeVoid;
|
||||
}
|
||||
|
||||
bool ValidationState_t::IsBfloat16ScalarType(uint32_t id) const {
|
||||
const Instruction* inst = FindDef(id);
|
||||
if (inst && inst->opcode() == spv::Op::OpTypeFloat) {
|
||||
if (inst->words().size() > 3) {
|
||||
if (inst->GetOperandAs<spv::FPEncoding>(2) ==
|
||||
spv::FPEncoding::BFloat16KHR) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool ValidationState_t::IsBfloat16VectorType(uint32_t id) const {
|
||||
const Instruction* inst = FindDef(id);
|
||||
if (!inst) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (inst->opcode() == spv::Op::OpTypeVector) {
|
||||
return IsBfloat16ScalarType(GetComponentType(id));
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool ValidationState_t::IsFloatScalarType(uint32_t id) const {
|
||||
const Instruction* inst = FindDef(id);
|
||||
return inst && inst->opcode() == spv::Op::OpTypeFloat;
|
||||
@@ -1768,6 +1795,10 @@ bool ValidationState_t::ContainsSizedIntOrFloatType(uint32_t id, spv::Op type,
|
||||
|
||||
const auto f = [type, width](const Instruction* inst) {
|
||||
if (inst->opcode() == type) {
|
||||
// Bfloat16 is a special type.
|
||||
if (type == spv::Op::OpTypeFloat && inst->words().size() > 3)
|
||||
return false;
|
||||
|
||||
return inst->GetOperandAs<uint32_t>(1u) == width;
|
||||
}
|
||||
return false;
|
||||
@@ -2311,6 +2342,8 @@ std::string ValidationState_t::VkErrorID(uint32_t id,
|
||||
return VUID_WRAP(VUID-StandaloneSpirv-None-04644);
|
||||
case 4645:
|
||||
return VUID_WRAP(VUID-StandaloneSpirv-None-04645);
|
||||
case 10609:
|
||||
return VUID_WRAP(VUID-StandaloneSpirv-OpControlBarrier-10609);
|
||||
case 4650:
|
||||
return VUID_WRAP(VUID-StandaloneSpirv-OpControlBarrier-04650);
|
||||
case 4651:
|
||||
@@ -2534,8 +2567,12 @@ std::string ValidationState_t::VkErrorID(uint32_t id,
|
||||
case 10213:
|
||||
// This use to be a standalone, but maintenance8 will set allow_offset_texture_operand now
|
||||
return VUID_WRAP(VUID-RuntimeSpirv-Offset-10213);
|
||||
case 10370:
|
||||
return VUID_WRAP(VUID-StandaloneSpirv-OpTypeFloat-10370);
|
||||
case 10583:
|
||||
return VUID_WRAP(VUID-StandaloneSpirv-Component-10583);
|
||||
case 10684:
|
||||
return VUID_WRAP(VUID-StandaloneSpirv-None-10684);
|
||||
default:
|
||||
return ""; // unknown id
|
||||
}
|
||||
|
||||
@@ -32,6 +32,7 @@
|
||||
#include "source/name_mapper.h"
|
||||
#include "source/spirv_definition.h"
|
||||
#include "source/spirv_validator_options.h"
|
||||
#include "source/table2.h"
|
||||
#include "source/val/decoration.h"
|
||||
#include "source/val/function.h"
|
||||
#include "source/val/instruction.h"
|
||||
@@ -633,6 +634,8 @@ class ValidationState_t {
|
||||
// Returns true iff |id| is a type corresponding to the name of the function.
|
||||
// Only works for types not for objects.
|
||||
bool IsVoidType(uint32_t id) const;
|
||||
bool IsBfloat16ScalarType(uint32_t id) const;
|
||||
bool IsBfloat16VectorType(uint32_t id) const;
|
||||
bool IsFloatScalarType(uint32_t id) const;
|
||||
bool IsFloatArrayType(uint32_t id) const;
|
||||
bool IsFloatVectorType(uint32_t id) const;
|
||||
@@ -786,12 +789,12 @@ class ValidationState_t {
|
||||
|
||||
// Returns the string name for |decoration|.
|
||||
std::string SpvDecorationString(uint32_t decoration) {
|
||||
spv_operand_desc desc = nullptr;
|
||||
if (grammar_.lookupOperand(SPV_OPERAND_TYPE_DECORATION, decoration,
|
||||
&desc) != SPV_SUCCESS) {
|
||||
const spvtools::OperandDesc* desc = nullptr;
|
||||
if (spvtools::LookupOperand(SPV_OPERAND_TYPE_DECORATION, decoration,
|
||||
&desc) != SPV_SUCCESS) {
|
||||
return std::string("Unknown");
|
||||
}
|
||||
return std::string(desc->name);
|
||||
return std::string(desc->name().data());
|
||||
}
|
||||
std::string SpvDecorationString(spv::Decoration decoration) {
|
||||
return SpvDecorationString(uint32_t(decoration));
|
||||
|
||||
Reference in New Issue
Block a user