mirror of
https://github.com/bkaradzic/bgfx.git
synced 2026-02-17 20:52:36 +01:00
Updated spirv-tools.
This commit is contained in:
165
3rdparty/spirv-tools/include/generated/NonSemanticVulkanDebugInfo100.h
vendored
Normal file
165
3rdparty/spirv-tools/include/generated/NonSemanticVulkanDebugInfo100.h
vendored
Normal file
@@ -0,0 +1,165 @@
|
||||
// Copyright (c) 2018 The Khronos Group Inc.
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and/or associated documentation files (the "Materials"),
|
||||
// to deal in the Materials without restriction, including without limitation
|
||||
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
// and/or sell copies of the Materials, and to permit persons to whom the
|
||||
// Materials are furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Materials.
|
||||
//
|
||||
// MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS
|
||||
// STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND
|
||||
// HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/
|
||||
//
|
||||
// THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
// FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS
|
||||
// IN THE MATERIALS.
|
||||
|
||||
#ifndef SPIRV_EXTINST_NonSemanticVulkanDebugInfo100_H_
|
||||
#define SPIRV_EXTINST_NonSemanticVulkanDebugInfo100_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
enum { NonSemanticVulkanDebugInfo100Version = 100, NonSemanticVulkanDebugInfo100Version_BitWidthPadding = 0x7fffffff };
|
||||
enum { NonSemanticVulkanDebugInfo100Revision = 6, NonSemanticVulkanDebugInfo100Revision_BitWidthPadding = 0x7fffffff };
|
||||
|
||||
enum NonSemanticVulkanDebugInfo100Instructions {
|
||||
NonSemanticVulkanDebugInfo100DebugInfoNone = 0,
|
||||
NonSemanticVulkanDebugInfo100DebugCompilationUnit = 1,
|
||||
NonSemanticVulkanDebugInfo100DebugTypeBasic = 2,
|
||||
NonSemanticVulkanDebugInfo100DebugTypePointer = 3,
|
||||
NonSemanticVulkanDebugInfo100DebugTypeQualifier = 4,
|
||||
NonSemanticVulkanDebugInfo100DebugTypeArray = 5,
|
||||
NonSemanticVulkanDebugInfo100DebugTypeVector = 6,
|
||||
NonSemanticVulkanDebugInfo100DebugTypedef = 7,
|
||||
NonSemanticVulkanDebugInfo100DebugTypeFunction = 8,
|
||||
NonSemanticVulkanDebugInfo100DebugTypeEnum = 9,
|
||||
NonSemanticVulkanDebugInfo100DebugTypeComposite = 10,
|
||||
NonSemanticVulkanDebugInfo100DebugTypeMember = 11,
|
||||
NonSemanticVulkanDebugInfo100DebugTypeInheritance = 12,
|
||||
NonSemanticVulkanDebugInfo100DebugTypePtrToMember = 13,
|
||||
NonSemanticVulkanDebugInfo100DebugTypeTemplate = 14,
|
||||
NonSemanticVulkanDebugInfo100DebugTypeTemplateParameter = 15,
|
||||
NonSemanticVulkanDebugInfo100DebugTypeTemplateTemplateParameter = 16,
|
||||
NonSemanticVulkanDebugInfo100DebugTypeTemplateParameterPack = 17,
|
||||
NonSemanticVulkanDebugInfo100DebugGlobalVariable = 18,
|
||||
NonSemanticVulkanDebugInfo100DebugFunctionDeclaration = 19,
|
||||
NonSemanticVulkanDebugInfo100DebugFunction = 20,
|
||||
NonSemanticVulkanDebugInfo100DebugLexicalBlock = 21,
|
||||
NonSemanticVulkanDebugInfo100DebugLexicalBlockDiscriminator = 22,
|
||||
NonSemanticVulkanDebugInfo100DebugScope = 23,
|
||||
NonSemanticVulkanDebugInfo100DebugNoScope = 24,
|
||||
NonSemanticVulkanDebugInfo100DebugInlinedAt = 25,
|
||||
NonSemanticVulkanDebugInfo100DebugLocalVariable = 26,
|
||||
NonSemanticVulkanDebugInfo100DebugInlinedVariable = 27,
|
||||
NonSemanticVulkanDebugInfo100DebugDeclare = 28,
|
||||
NonSemanticVulkanDebugInfo100DebugValue = 29,
|
||||
NonSemanticVulkanDebugInfo100DebugOperation = 30,
|
||||
NonSemanticVulkanDebugInfo100DebugExpression = 31,
|
||||
NonSemanticVulkanDebugInfo100DebugMacroDef = 32,
|
||||
NonSemanticVulkanDebugInfo100DebugMacroUndef = 33,
|
||||
NonSemanticVulkanDebugInfo100DebugImportedEntity = 34,
|
||||
NonSemanticVulkanDebugInfo100DebugSource = 35,
|
||||
NonSemanticVulkanDebugInfo100DebugFunctionDefinition = 101,
|
||||
NonSemanticVulkanDebugInfo100DebugSourceContinued = 102,
|
||||
NonSemanticVulkanDebugInfo100DebugLine = 103,
|
||||
NonSemanticVulkanDebugInfo100DebugNoLine = 104,
|
||||
NonSemanticVulkanDebugInfo100DebugBuildIdentifier = 105,
|
||||
NonSemanticVulkanDebugInfo100DebugStoragePath = 106,
|
||||
NonSemanticVulkanDebugInfo100DebugEntryPoint = 107,
|
||||
NonSemanticVulkanDebugInfo100DebugTypeMatrix = 108,
|
||||
NonSemanticVulkanDebugInfo100InstructionsMax = 0x7ffffff
|
||||
};
|
||||
|
||||
|
||||
enum NonSemanticVulkanDebugInfo100DebugInfoFlags {
|
||||
NonSemanticVulkanDebugInfo100None = 0x0000,
|
||||
NonSemanticVulkanDebugInfo100FlagIsProtected = 0x01,
|
||||
NonSemanticVulkanDebugInfo100FlagIsPrivate = 0x02,
|
||||
NonSemanticVulkanDebugInfo100FlagIsPublic = 0x03,
|
||||
NonSemanticVulkanDebugInfo100FlagIsLocal = 0x04,
|
||||
NonSemanticVulkanDebugInfo100FlagIsDefinition = 0x08,
|
||||
NonSemanticVulkanDebugInfo100FlagFwdDecl = 0x10,
|
||||
NonSemanticVulkanDebugInfo100FlagArtificial = 0x20,
|
||||
NonSemanticVulkanDebugInfo100FlagExplicit = 0x40,
|
||||
NonSemanticVulkanDebugInfo100FlagPrototyped = 0x80,
|
||||
NonSemanticVulkanDebugInfo100FlagObjectPointer = 0x100,
|
||||
NonSemanticVulkanDebugInfo100FlagStaticMember = 0x200,
|
||||
NonSemanticVulkanDebugInfo100FlagIndirectVariable = 0x400,
|
||||
NonSemanticVulkanDebugInfo100FlagLValueReference = 0x800,
|
||||
NonSemanticVulkanDebugInfo100FlagRValueReference = 0x1000,
|
||||
NonSemanticVulkanDebugInfo100FlagIsOptimized = 0x2000,
|
||||
NonSemanticVulkanDebugInfo100FlagIsEnumClass = 0x4000,
|
||||
NonSemanticVulkanDebugInfo100FlagTypePassByValue = 0x8000,
|
||||
NonSemanticVulkanDebugInfo100FlagTypePassByReference = 0x10000,
|
||||
NonSemanticVulkanDebugInfo100FlagUnknownPhysicalLayout = 0x20000,
|
||||
NonSemanticVulkanDebugInfo100DebugInfoFlagsMax = 0x7ffffff
|
||||
};
|
||||
|
||||
enum NonSemanticVulkanDebugInfo100BuildIdentifierFlags {
|
||||
NonSemanticVulkanDebugInfo100IdentifierPossibleDuplicates = 0x01,
|
||||
NonSemanticVulkanDebugInfo100BuildIdentifierFlagsMax = 0x7ffffff
|
||||
};
|
||||
|
||||
enum NonSemanticVulkanDebugInfo100DebugBaseTypeAttributeEncoding {
|
||||
NonSemanticVulkanDebugInfo100Unspecified = 0,
|
||||
NonSemanticVulkanDebugInfo100Address = 1,
|
||||
NonSemanticVulkanDebugInfo100Boolean = 2,
|
||||
NonSemanticVulkanDebugInfo100Float = 3,
|
||||
NonSemanticVulkanDebugInfo100Signed = 4,
|
||||
NonSemanticVulkanDebugInfo100SignedChar = 5,
|
||||
NonSemanticVulkanDebugInfo100Unsigned = 6,
|
||||
NonSemanticVulkanDebugInfo100UnsignedChar = 7,
|
||||
NonSemanticVulkanDebugInfo100DebugBaseTypeAttributeEncodingMax = 0x7ffffff
|
||||
};
|
||||
|
||||
enum NonSemanticVulkanDebugInfo100DebugCompositeType {
|
||||
NonSemanticVulkanDebugInfo100Class = 0,
|
||||
NonSemanticVulkanDebugInfo100Structure = 1,
|
||||
NonSemanticVulkanDebugInfo100Union = 2,
|
||||
NonSemanticVulkanDebugInfo100DebugCompositeTypeMax = 0x7ffffff
|
||||
};
|
||||
|
||||
enum NonSemanticVulkanDebugInfo100DebugTypeQualifier {
|
||||
NonSemanticVulkanDebugInfo100ConstType = 0,
|
||||
NonSemanticVulkanDebugInfo100VolatileType = 1,
|
||||
NonSemanticVulkanDebugInfo100RestrictType = 2,
|
||||
NonSemanticVulkanDebugInfo100AtomicType = 3,
|
||||
NonSemanticVulkanDebugInfo100DebugTypeQualifierMax = 0x7ffffff
|
||||
};
|
||||
|
||||
enum NonSemanticVulkanDebugInfo100DebugOperation {
|
||||
NonSemanticVulkanDebugInfo100Deref = 0,
|
||||
NonSemanticVulkanDebugInfo100Plus = 1,
|
||||
NonSemanticVulkanDebugInfo100Minus = 2,
|
||||
NonSemanticVulkanDebugInfo100PlusUconst = 3,
|
||||
NonSemanticVulkanDebugInfo100BitPiece = 4,
|
||||
NonSemanticVulkanDebugInfo100Swap = 5,
|
||||
NonSemanticVulkanDebugInfo100Xderef = 6,
|
||||
NonSemanticVulkanDebugInfo100StackValue = 7,
|
||||
NonSemanticVulkanDebugInfo100Constu = 8,
|
||||
NonSemanticVulkanDebugInfo100Fragment = 9,
|
||||
NonSemanticVulkanDebugInfo100DebugOperationMax = 0x7ffffff
|
||||
};
|
||||
|
||||
enum NonSemanticVulkanDebugInfo100DebugImportedEntity {
|
||||
NonSemanticVulkanDebugInfo100ImportedModule = 0,
|
||||
NonSemanticVulkanDebugInfo100ImportedDeclaration = 1,
|
||||
NonSemanticVulkanDebugInfo100DebugImportedEntityMax = 0x7ffffff
|
||||
};
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // SPIRV_EXTINST_NonSemanticVulkanDebugInfo100_H_
|
||||
@@ -69,6 +69,7 @@ enum OpenCLDebugInfo100Instructions {
|
||||
OpenCLDebugInfo100DebugMacroUndef = 33,
|
||||
OpenCLDebugInfo100DebugImportedEntity = 34,
|
||||
OpenCLDebugInfo100DebugSource = 35,
|
||||
OpenCLDebugInfo100DebugModuleINTEL = 36,
|
||||
OpenCLDebugInfo100InstructionsMax = 0x7ffffff
|
||||
};
|
||||
|
||||
|
||||
@@ -1 +1 @@
|
||||
"v2021.2-dev", "SPIRV-Tools v2021.2-dev d75e1d772441c7e8fef5a4667e8a03b5ec191014"
|
||||
"v2021.3-dev", "SPIRV-Tools v2021.3-dev 13e61006818199bd11c1f6f0148d1258d8200375"
|
||||
|
||||
@@ -2,14 +2,17 @@ static const SpvCapability pygen_variable_caps_Addresses[] = {SpvCapabilityAddre
|
||||
static const SpvCapability pygen_variable_caps_AddressesPhysicalStorageBufferAddresses[] = {SpvCapabilityAddresses, SpvCapabilityPhysicalStorageBufferAddresses};
|
||||
static const SpvCapability pygen_variable_caps_AddressesVariablePointersVariablePointersStorageBuffer[] = {SpvCapabilityAddresses, SpvCapabilityVariablePointers, SpvCapabilityVariablePointersStorageBuffer};
|
||||
static const SpvCapability pygen_variable_caps_AddressesVariablePointersVariablePointersStorageBufferPhysicalStorageBufferAddresses[] = {SpvCapabilityAddresses, SpvCapabilityVariablePointers, SpvCapabilityVariablePointersStorageBuffer, SpvCapabilityPhysicalStorageBufferAddresses};
|
||||
static const SpvCapability pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL[] = {SpvCapabilityArbitraryPrecisionFixedPointINTEL};
|
||||
static const SpvCapability pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL[] = {SpvCapabilityArbitraryPrecisionFloatingPointINTEL};
|
||||
static const SpvCapability pygen_variable_caps_AsmINTEL[] = {SpvCapabilityAsmINTEL};
|
||||
static const SpvCapability pygen_variable_caps_AtomicFloat16AddEXTAtomicFloat32AddEXTAtomicFloat64AddEXT[] = {SpvCapabilityAtomicFloat16AddEXT, SpvCapabilityAtomicFloat32AddEXT, SpvCapabilityAtomicFloat64AddEXT};
|
||||
static const SpvCapability pygen_variable_caps_AtomicFloat16MinMaxEXTAtomicFloat32MinMaxEXTAtomicFloat64MinMaxEXT[] = {SpvCapabilityAtomicFloat16MinMaxEXT, SpvCapabilityAtomicFloat32MinMaxEXT, SpvCapabilityAtomicFloat64MinMaxEXT};
|
||||
static const SpvCapability pygen_variable_caps_AtomicFloat32AddEXTAtomicFloat64AddEXT[] = {SpvCapabilityAtomicFloat32AddEXT, SpvCapabilityAtomicFloat64AddEXT};
|
||||
static const SpvCapability pygen_variable_caps_BlockingPipesINTEL[] = {SpvCapabilityBlockingPipesINTEL};
|
||||
static const SpvCapability pygen_variable_caps_CooperativeMatrixNV[] = {SpvCapabilityCooperativeMatrixNV};
|
||||
static const SpvCapability pygen_variable_caps_DemoteToHelperInvocationEXT[] = {SpvCapabilityDemoteToHelperInvocationEXT};
|
||||
static const SpvCapability pygen_variable_caps_DerivativeControl[] = {SpvCapabilityDerivativeControl};
|
||||
static const SpvCapability pygen_variable_caps_DeviceEnqueue[] = {SpvCapabilityDeviceEnqueue};
|
||||
static const SpvCapability pygen_variable_caps_DotProductKHR[] = {SpvCapabilityDotProductKHR};
|
||||
static const SpvCapability pygen_variable_caps_ExpectAssumeKHR[] = {SpvCapabilityExpectAssumeKHR};
|
||||
static const SpvCapability pygen_variable_caps_FPGARegINTEL[] = {SpvCapabilityFPGARegINTEL};
|
||||
static const SpvCapability pygen_variable_caps_FragmentMaskAMD[] = {SpvCapabilityFragmentMaskAMD};
|
||||
@@ -45,6 +48,7 @@ static const SpvCapability pygen_variable_caps_RayTracingNV[] = {SpvCapabilityRa
|
||||
static const SpvCapability pygen_variable_caps_RayTracingNVRayTracingKHR[] = {SpvCapabilityRayTracingNV, SpvCapabilityRayTracingKHR};
|
||||
static const SpvCapability pygen_variable_caps_RayTracingNVRayTracingKHRRayQueryKHR[] = {SpvCapabilityRayTracingNV, SpvCapabilityRayTracingKHR, SpvCapabilityRayQueryKHR};
|
||||
static const SpvCapability pygen_variable_caps_Shader[] = {SpvCapabilityShader};
|
||||
static const SpvCapability pygen_variable_caps_ShaderBitInstructions[] = {SpvCapabilityShader, SpvCapabilityBitInstructions};
|
||||
static const SpvCapability pygen_variable_caps_ShaderClockKHR[] = {SpvCapabilityShaderClockKHR};
|
||||
static const SpvCapability pygen_variable_caps_SparseResidency[] = {SpvCapabilitySparseResidency};
|
||||
static const SpvCapability pygen_variable_caps_SubgroupAvcMotionEstimationINTEL[] = {SpvCapabilitySubgroupAvcMotionEstimationINTEL};
|
||||
@@ -277,10 +281,10 @@ static const spv_opcode_desc_t kOpcodeTableEntries[] = {
|
||||
{"BitwiseXor", SpvOpBitwiseXor, 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", SpvOpBitwiseAnd, 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", SpvOpNot, 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", SpvOpBitFieldInsert, 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_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0), 0xffffffffu},
|
||||
{"BitFieldSExtract", SpvOpBitFieldSExtract, 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_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0), 0xffffffffu},
|
||||
{"BitFieldUExtract", SpvOpBitFieldUExtract, 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_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0), 0xffffffffu},
|
||||
{"BitReverse", SpvOpBitReverse, 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},
|
||||
{"BitFieldInsert", SpvOpBitFieldInsert, 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", SpvOpBitFieldSExtract, 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", SpvOpBitFieldUExtract, 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", SpvOpBitReverse, 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", SpvOpBitCount, 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", SpvOpDPdx, 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", SpvOpDPdy, 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},
|
||||
@@ -446,6 +450,12 @@ static const spv_opcode_desc_t kOpcodeTableEntries[] = {
|
||||
{"ConvertUToAccelerationStructureKHR", SpvOpConvertUToAccelerationStructureKHR, 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", SpvOpIgnoreIntersectionKHR, 1, pygen_variable_caps_RayTracingKHR, 0, {}, 0, 0, 1, pygen_variable_exts_SPV_KHR_ray_tracing, 0xffffffffu, 0xffffffffu},
|
||||
{"TerminateRayKHR", SpvOpTerminateRayKHR, 1, pygen_variable_caps_RayTracingKHR, 0, {}, 0, 0, 1, pygen_variable_exts_SPV_KHR_ray_tracing, 0xffffffffu, 0xffffffffu},
|
||||
{"SDotKHR", SpvOpSDotKHR, 1, pygen_variable_caps_DotProductKHR, 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, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"UDotKHR", SpvOpUDotKHR, 1, pygen_variable_caps_DotProductKHR, 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, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SUDotKHR", SpvOpSUDotKHR, 1, pygen_variable_caps_DotProductKHR, 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, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SDotAccSatKHR", SpvOpSDotAccSatKHR, 1, pygen_variable_caps_DotProductKHR, 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, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"UDotAccSatKHR", SpvOpUDotAccSatKHR, 1, pygen_variable_caps_DotProductKHR, 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, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"SUDotAccSatKHR", SpvOpSUDotAccSatKHR, 1, pygen_variable_caps_DotProductKHR, 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, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"TypeRayQueryKHR", SpvOpTypeRayQueryKHR, 1, pygen_variable_caps_RayQueryKHR, 1, {SPV_OPERAND_TYPE_RESULT_ID}, 1, 0, 1, pygen_variable_exts_SPV_KHR_ray_query, 0xffffffffu, 0xffffffffu},
|
||||
{"RayQueryInitializeKHR", SpvOpRayQueryInitializeKHR, 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", SpvOpRayQueryTerminateKHR, 1, pygen_variable_caps_RayQueryKHR, 1, {SPV_OPERAND_TYPE_ID}, 0, 0, 1, pygen_variable_exts_SPV_KHR_ray_query, 0xffffffffu, 0xffffffffu},
|
||||
@@ -642,7 +652,60 @@ static const spv_opcode_desc_t kOpcodeTableEntries[] = {
|
||||
{"VariableLengthArrayINTEL", SpvOpVariableLengthArrayINTEL, 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", SpvOpSaveMemoryINTEL, 1, pygen_variable_caps_VariableLengthArrayINTEL, 2, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"RestoreMemoryINTEL", SpvOpRestoreMemoryINTEL, 1, pygen_variable_caps_VariableLengthArrayINTEL, 1, {SPV_OPERAND_TYPE_ID}, 0, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ArbitraryFloatSinCosPiINTEL", SpvOpArbitraryFloatSinCosPiINTEL, 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", SpvOpArbitraryFloatCastINTEL, 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", SpvOpArbitraryFloatCastFromIntINTEL, 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", SpvOpArbitraryFloatCastToIntINTEL, 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", SpvOpArbitraryFloatAddINTEL, 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", SpvOpArbitraryFloatSubINTEL, 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", SpvOpArbitraryFloatMulINTEL, 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", SpvOpArbitraryFloatDivINTEL, 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", SpvOpArbitraryFloatGTINTEL, 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", SpvOpArbitraryFloatGEINTEL, 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", SpvOpArbitraryFloatLTINTEL, 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", SpvOpArbitraryFloatLEINTEL, 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", SpvOpArbitraryFloatEQINTEL, 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", SpvOpArbitraryFloatRecipINTEL, 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", SpvOpArbitraryFloatRSqrtINTEL, 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", SpvOpArbitraryFloatCbrtINTEL, 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", SpvOpArbitraryFloatHypotINTEL, 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", SpvOpArbitraryFloatSqrtINTEL, 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", SpvOpArbitraryFloatLogINTEL, 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", SpvOpArbitraryFloatLog2INTEL, 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", SpvOpArbitraryFloatLog10INTEL, 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", SpvOpArbitraryFloatLog1pINTEL, 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", SpvOpArbitraryFloatExpINTEL, 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", SpvOpArbitraryFloatExp2INTEL, 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", SpvOpArbitraryFloatExp10INTEL, 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", SpvOpArbitraryFloatExpm1INTEL, 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", SpvOpArbitraryFloatSinINTEL, 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", SpvOpArbitraryFloatCosINTEL, 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", SpvOpArbitraryFloatSinCosINTEL, 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", SpvOpArbitraryFloatSinPiINTEL, 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", SpvOpArbitraryFloatCosPiINTEL, 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", SpvOpArbitraryFloatASinINTEL, 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", SpvOpArbitraryFloatASinPiINTEL, 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", SpvOpArbitraryFloatACosINTEL, 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", SpvOpArbitraryFloatACosPiINTEL, 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", SpvOpArbitraryFloatATanINTEL, 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", SpvOpArbitraryFloatATanPiINTEL, 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", SpvOpArbitraryFloatATan2INTEL, 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", SpvOpArbitraryFloatPowINTEL, 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", SpvOpArbitraryFloatPowRINTEL, 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", SpvOpArbitraryFloatPowNINTEL, 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},
|
||||
{"ArbitraryFloatPowNINTEL", SpvOpArbitraryFloatPowNINTEL, 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", SpvOpLoopControlINTEL, 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},
|
||||
{"FixedSqrtINTEL", SpvOpFixedSqrtINTEL, 1, pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL, 9, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_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", SpvOpFixedRecipINTEL, 1, pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL, 9, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_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", SpvOpFixedRsqrtINTEL, 1, pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL, 9, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_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", SpvOpFixedSinINTEL, 1, pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL, 9, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_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", SpvOpFixedCosINTEL, 1, pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL, 9, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_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", SpvOpFixedSinCosINTEL, 1, pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL, 9, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_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", SpvOpFixedSinPiINTEL, 1, pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL, 9, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_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", SpvOpFixedCosPiINTEL, 1, pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL, 9, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_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", SpvOpFixedSinCosPiINTEL, 1, pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL, 9, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_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", SpvOpFixedLogINTEL, 1, pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL, 9, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_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", SpvOpFixedExpINTEL, 1, pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL, 9, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_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", SpvOpPtrCastToCrossWorkgroupINTEL, 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", SpvOpCrossWorkgroupCastToPtrINTEL, 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", SpvOpReadPipeBlockingINTEL, 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},
|
||||
@@ -665,7 +728,7 @@ static const spv_opcode_desc_t kOpcodeTableEntries[] = {
|
||||
{"RayQueryGetWorldRayOriginKHR", SpvOpRayQueryGetWorldRayOriginKHR, 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", SpvOpRayQueryGetIntersectionObjectToWorldKHR, 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", SpvOpRayQueryGetIntersectionWorldToObjectKHR, 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", SpvOpAtomicFAddEXT, 2, pygen_variable_caps_AtomicFloat32AddEXTAtomicFloat64AddEXT, 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},
|
||||
{"AtomicFAddEXT", SpvOpAtomicFAddEXT, 3, pygen_variable_caps_AtomicFloat16AddEXTAtomicFloat32AddEXTAtomicFloat64AddEXT, 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", SpvOpTypeBufferSurfaceINTEL, 1, pygen_variable_caps_VectorComputeINTEL, 2, {SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ACCESS_QUALIFIER}, 1, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"TypeStructContinuedINTEL", SpvOpTypeStructContinuedINTEL, 1, pygen_variable_caps_LongConstantCompositeINTEL, 1, {SPV_OPERAND_TYPE_VARIABLE_ID}, 0, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
{"ConstantCompositeContinuedINTEL", SpvOpConstantCompositeContinuedINTEL, 1, pygen_variable_caps_LongConstantCompositeINTEL, 1, {SPV_OPERAND_TYPE_VARIABLE_ID}, 0, 0, 0, nullptr, 0xffffffffu, 0xffffffffu},
|
||||
|
||||
@@ -32,6 +32,8 @@ const char* ExtensionToString(Extension extension) {
|
||||
return "SPV_EXT_fragment_shader_interlock";
|
||||
case Extension::kSPV_EXT_physical_storage_buffer:
|
||||
return "SPV_EXT_physical_storage_buffer";
|
||||
case Extension::kSPV_EXT_shader_atomic_float16_add:
|
||||
return "SPV_EXT_shader_atomic_float16_add";
|
||||
case Extension::kSPV_EXT_shader_atomic_float_add:
|
||||
return "SPV_EXT_shader_atomic_float_add";
|
||||
case Extension::kSPV_EXT_shader_atomic_float_min_max:
|
||||
@@ -48,10 +50,16 @@ const char* ExtensionToString(Extension extension) {
|
||||
return "SPV_GOOGLE_hlsl_functionality1";
|
||||
case Extension::kSPV_GOOGLE_user_type:
|
||||
return "SPV_GOOGLE_user_type";
|
||||
case Extension::kSPV_INTEL_arbitrary_precision_fixed_point:
|
||||
return "SPV_INTEL_arbitrary_precision_fixed_point";
|
||||
case Extension::kSPV_INTEL_arbitrary_precision_floating_point:
|
||||
return "SPV_INTEL_arbitrary_precision_floating_point";
|
||||
case Extension::kSPV_INTEL_arbitrary_precision_integers:
|
||||
return "SPV_INTEL_arbitrary_precision_integers";
|
||||
case Extension::kSPV_INTEL_blocking_pipes:
|
||||
return "SPV_INTEL_blocking_pipes";
|
||||
case Extension::kSPV_INTEL_debug_module:
|
||||
return "SPV_INTEL_debug_module";
|
||||
case Extension::kSPV_INTEL_device_side_avc_motion_estimation:
|
||||
return "SPV_INTEL_device_side_avc_motion_estimation";
|
||||
case Extension::kSPV_INTEL_float_controls2:
|
||||
@@ -100,6 +108,8 @@ const char* ExtensionToString(Extension extension) {
|
||||
return "SPV_KHR_16bit_storage";
|
||||
case Extension::kSPV_KHR_8bit_storage:
|
||||
return "SPV_KHR_8bit_storage";
|
||||
case Extension::kSPV_KHR_bit_instructions:
|
||||
return "SPV_KHR_bit_instructions";
|
||||
case Extension::kSPV_KHR_device_group:
|
||||
return "SPV_KHR_device_group";
|
||||
case Extension::kSPV_KHR_expect_assume:
|
||||
@@ -108,6 +118,8 @@ const char* ExtensionToString(Extension extension) {
|
||||
return "SPV_KHR_float_controls";
|
||||
case Extension::kSPV_KHR_fragment_shading_rate:
|
||||
return "SPV_KHR_fragment_shading_rate";
|
||||
case Extension::kSPV_KHR_integer_dot_product:
|
||||
return "SPV_KHR_integer_dot_product";
|
||||
case Extension::kSPV_KHR_linkonce_odr:
|
||||
return "SPV_KHR_linkonce_odr";
|
||||
case Extension::kSPV_KHR_multiview:
|
||||
@@ -134,6 +146,8 @@ const char* ExtensionToString(Extension extension) {
|
||||
return "SPV_KHR_shader_draw_parameters";
|
||||
case Extension::kSPV_KHR_storage_buffer_storage_class:
|
||||
return "SPV_KHR_storage_buffer_storage_class";
|
||||
case Extension::kSPV_KHR_subgroup_uniform_control_flow:
|
||||
return "SPV_KHR_subgroup_uniform_control_flow";
|
||||
case Extension::kSPV_KHR_subgroup_vote:
|
||||
return "SPV_KHR_subgroup_vote";
|
||||
case Extension::kSPV_KHR_terminate_invocation:
|
||||
@@ -181,8 +195,8 @@ const char* ExtensionToString(Extension extension) {
|
||||
|
||||
|
||||
bool GetExtensionFromString(const char* str, Extension* extension) {
|
||||
static const char* known_ext_strs[] = { "SPV_AMD_gcn_shader", "SPV_AMD_gpu_shader_half_float", "SPV_AMD_gpu_shader_half_float_fetch", "SPV_AMD_gpu_shader_int16", "SPV_AMD_shader_ballot", "SPV_AMD_shader_explicit_vertex_parameter", "SPV_AMD_shader_fragment_mask", "SPV_AMD_shader_image_load_store_lod", "SPV_AMD_shader_trinary_minmax", "SPV_AMD_texture_gather_bias_lod", "SPV_EXT_demote_to_helper_invocation", "SPV_EXT_descriptor_indexing", "SPV_EXT_fragment_fully_covered", "SPV_EXT_fragment_invocation_density", "SPV_EXT_fragment_shader_interlock", "SPV_EXT_physical_storage_buffer", "SPV_EXT_shader_atomic_float_add", "SPV_EXT_shader_atomic_float_min_max", "SPV_EXT_shader_image_int64", "SPV_EXT_shader_stencil_export", "SPV_EXT_shader_viewport_index_layer", "SPV_GOOGLE_decorate_string", "SPV_GOOGLE_hlsl_functionality1", "SPV_GOOGLE_user_type", "SPV_INTEL_arbitrary_precision_integers", "SPV_INTEL_blocking_pipes", "SPV_INTEL_device_side_avc_motion_estimation", "SPV_INTEL_float_controls2", "SPV_INTEL_fp_fast_math_mode", "SPV_INTEL_fpga_buffer_location", "SPV_INTEL_fpga_cluster_attributes", "SPV_INTEL_fpga_loop_controls", "SPV_INTEL_fpga_memory_accesses", "SPV_INTEL_fpga_memory_attributes", "SPV_INTEL_fpga_reg", "SPV_INTEL_function_pointers", "SPV_INTEL_inline_assembly", "SPV_INTEL_io_pipes", "SPV_INTEL_kernel_attributes", "SPV_INTEL_long_constant_composite", "SPV_INTEL_loop_fuse", "SPV_INTEL_media_block_io", "SPV_INTEL_shader_integer_functions2", "SPV_INTEL_subgroups", "SPV_INTEL_unstructured_loop_controls", "SPV_INTEL_usm_storage_classes", "SPV_INTEL_variable_length_array", "SPV_INTEL_vector_compute", "SPV_KHR_16bit_storage", "SPV_KHR_8bit_storage", "SPV_KHR_device_group", "SPV_KHR_expect_assume", "SPV_KHR_float_controls", "SPV_KHR_fragment_shading_rate", "SPV_KHR_linkonce_odr", "SPV_KHR_multiview", "SPV_KHR_no_integer_wrap_decoration", "SPV_KHR_non_semantic_info", "SPV_KHR_physical_storage_buffer", "SPV_KHR_post_depth_coverage", "SPV_KHR_ray_query", "SPV_KHR_ray_tracing", "SPV_KHR_shader_atomic_counter_ops", "SPV_KHR_shader_ballot", "SPV_KHR_shader_clock", "SPV_KHR_shader_draw_parameters", "SPV_KHR_storage_buffer_storage_class", "SPV_KHR_subgroup_vote", "SPV_KHR_terminate_invocation", "SPV_KHR_variable_pointers", "SPV_KHR_vulkan_memory_model", "SPV_KHR_workgroup_memory_explicit_layout", "SPV_NVX_multiview_per_view_attributes", "SPV_NV_compute_shader_derivatives", "SPV_NV_cooperative_matrix", "SPV_NV_fragment_shader_barycentric", "SPV_NV_geometry_shader_passthrough", "SPV_NV_mesh_shader", "SPV_NV_ray_tracing", "SPV_NV_sample_mask_override_coverage", "SPV_NV_shader_image_footprint", "SPV_NV_shader_sm_builtins", "SPV_NV_shader_subgroup_partitioned", "SPV_NV_shading_rate", "SPV_NV_stereo_view_rendering", "SPV_NV_viewport_array2", "SPV_VALIDATOR_ignore_type_decl_unique" };
|
||||
static const Extension known_ext_ids[] = { Extension::kSPV_AMD_gcn_shader, Extension::kSPV_AMD_gpu_shader_half_float, Extension::kSPV_AMD_gpu_shader_half_float_fetch, Extension::kSPV_AMD_gpu_shader_int16, Extension::kSPV_AMD_shader_ballot, Extension::kSPV_AMD_shader_explicit_vertex_parameter, Extension::kSPV_AMD_shader_fragment_mask, Extension::kSPV_AMD_shader_image_load_store_lod, Extension::kSPV_AMD_shader_trinary_minmax, Extension::kSPV_AMD_texture_gather_bias_lod, Extension::kSPV_EXT_demote_to_helper_invocation, Extension::kSPV_EXT_descriptor_indexing, Extension::kSPV_EXT_fragment_fully_covered, Extension::kSPV_EXT_fragment_invocation_density, Extension::kSPV_EXT_fragment_shader_interlock, Extension::kSPV_EXT_physical_storage_buffer, Extension::kSPV_EXT_shader_atomic_float_add, Extension::kSPV_EXT_shader_atomic_float_min_max, Extension::kSPV_EXT_shader_image_int64, Extension::kSPV_EXT_shader_stencil_export, Extension::kSPV_EXT_shader_viewport_index_layer, Extension::kSPV_GOOGLE_decorate_string, Extension::kSPV_GOOGLE_hlsl_functionality1, Extension::kSPV_GOOGLE_user_type, Extension::kSPV_INTEL_arbitrary_precision_integers, Extension::kSPV_INTEL_blocking_pipes, Extension::kSPV_INTEL_device_side_avc_motion_estimation, Extension::kSPV_INTEL_float_controls2, Extension::kSPV_INTEL_fp_fast_math_mode, Extension::kSPV_INTEL_fpga_buffer_location, Extension::kSPV_INTEL_fpga_cluster_attributes, Extension::kSPV_INTEL_fpga_loop_controls, Extension::kSPV_INTEL_fpga_memory_accesses, Extension::kSPV_INTEL_fpga_memory_attributes, Extension::kSPV_INTEL_fpga_reg, Extension::kSPV_INTEL_function_pointers, Extension::kSPV_INTEL_inline_assembly, Extension::kSPV_INTEL_io_pipes, Extension::kSPV_INTEL_kernel_attributes, Extension::kSPV_INTEL_long_constant_composite, Extension::kSPV_INTEL_loop_fuse, Extension::kSPV_INTEL_media_block_io, Extension::kSPV_INTEL_shader_integer_functions2, Extension::kSPV_INTEL_subgroups, Extension::kSPV_INTEL_unstructured_loop_controls, Extension::kSPV_INTEL_usm_storage_classes, Extension::kSPV_INTEL_variable_length_array, Extension::kSPV_INTEL_vector_compute, Extension::kSPV_KHR_16bit_storage, Extension::kSPV_KHR_8bit_storage, Extension::kSPV_KHR_device_group, Extension::kSPV_KHR_expect_assume, Extension::kSPV_KHR_float_controls, Extension::kSPV_KHR_fragment_shading_rate, Extension::kSPV_KHR_linkonce_odr, Extension::kSPV_KHR_multiview, Extension::kSPV_KHR_no_integer_wrap_decoration, Extension::kSPV_KHR_non_semantic_info, Extension::kSPV_KHR_physical_storage_buffer, Extension::kSPV_KHR_post_depth_coverage, Extension::kSPV_KHR_ray_query, Extension::kSPV_KHR_ray_tracing, Extension::kSPV_KHR_shader_atomic_counter_ops, Extension::kSPV_KHR_shader_ballot, Extension::kSPV_KHR_shader_clock, Extension::kSPV_KHR_shader_draw_parameters, Extension::kSPV_KHR_storage_buffer_storage_class, Extension::kSPV_KHR_subgroup_vote, Extension::kSPV_KHR_terminate_invocation, Extension::kSPV_KHR_variable_pointers, Extension::kSPV_KHR_vulkan_memory_model, Extension::kSPV_KHR_workgroup_memory_explicit_layout, Extension::kSPV_NVX_multiview_per_view_attributes, Extension::kSPV_NV_compute_shader_derivatives, Extension::kSPV_NV_cooperative_matrix, Extension::kSPV_NV_fragment_shader_barycentric, Extension::kSPV_NV_geometry_shader_passthrough, Extension::kSPV_NV_mesh_shader, Extension::kSPV_NV_ray_tracing, Extension::kSPV_NV_sample_mask_override_coverage, Extension::kSPV_NV_shader_image_footprint, Extension::kSPV_NV_shader_sm_builtins, Extension::kSPV_NV_shader_subgroup_partitioned, Extension::kSPV_NV_shading_rate, Extension::kSPV_NV_stereo_view_rendering, Extension::kSPV_NV_viewport_array2, Extension::kSPV_VALIDATOR_ignore_type_decl_unique };
|
||||
static const char* known_ext_strs[] = { "SPV_AMD_gcn_shader", "SPV_AMD_gpu_shader_half_float", "SPV_AMD_gpu_shader_half_float_fetch", "SPV_AMD_gpu_shader_int16", "SPV_AMD_shader_ballot", "SPV_AMD_shader_explicit_vertex_parameter", "SPV_AMD_shader_fragment_mask", "SPV_AMD_shader_image_load_store_lod", "SPV_AMD_shader_trinary_minmax", "SPV_AMD_texture_gather_bias_lod", "SPV_EXT_demote_to_helper_invocation", "SPV_EXT_descriptor_indexing", "SPV_EXT_fragment_fully_covered", "SPV_EXT_fragment_invocation_density", "SPV_EXT_fragment_shader_interlock", "SPV_EXT_physical_storage_buffer", "SPV_EXT_shader_atomic_float16_add", "SPV_EXT_shader_atomic_float_add", "SPV_EXT_shader_atomic_float_min_max", "SPV_EXT_shader_image_int64", "SPV_EXT_shader_stencil_export", "SPV_EXT_shader_viewport_index_layer", "SPV_GOOGLE_decorate_string", "SPV_GOOGLE_hlsl_functionality1", "SPV_GOOGLE_user_type", "SPV_INTEL_arbitrary_precision_fixed_point", "SPV_INTEL_arbitrary_precision_floating_point", "SPV_INTEL_arbitrary_precision_integers", "SPV_INTEL_blocking_pipes", "SPV_INTEL_debug_module", "SPV_INTEL_device_side_avc_motion_estimation", "SPV_INTEL_float_controls2", "SPV_INTEL_fp_fast_math_mode", "SPV_INTEL_fpga_buffer_location", "SPV_INTEL_fpga_cluster_attributes", "SPV_INTEL_fpga_loop_controls", "SPV_INTEL_fpga_memory_accesses", "SPV_INTEL_fpga_memory_attributes", "SPV_INTEL_fpga_reg", "SPV_INTEL_function_pointers", "SPV_INTEL_inline_assembly", "SPV_INTEL_io_pipes", "SPV_INTEL_kernel_attributes", "SPV_INTEL_long_constant_composite", "SPV_INTEL_loop_fuse", "SPV_INTEL_media_block_io", "SPV_INTEL_shader_integer_functions2", "SPV_INTEL_subgroups", "SPV_INTEL_unstructured_loop_controls", "SPV_INTEL_usm_storage_classes", "SPV_INTEL_variable_length_array", "SPV_INTEL_vector_compute", "SPV_KHR_16bit_storage", "SPV_KHR_8bit_storage", "SPV_KHR_bit_instructions", "SPV_KHR_device_group", "SPV_KHR_expect_assume", "SPV_KHR_float_controls", "SPV_KHR_fragment_shading_rate", "SPV_KHR_integer_dot_product", "SPV_KHR_linkonce_odr", "SPV_KHR_multiview", "SPV_KHR_no_integer_wrap_decoration", "SPV_KHR_non_semantic_info", "SPV_KHR_physical_storage_buffer", "SPV_KHR_post_depth_coverage", "SPV_KHR_ray_query", "SPV_KHR_ray_tracing", "SPV_KHR_shader_atomic_counter_ops", "SPV_KHR_shader_ballot", "SPV_KHR_shader_clock", "SPV_KHR_shader_draw_parameters", "SPV_KHR_storage_buffer_storage_class", "SPV_KHR_subgroup_uniform_control_flow", "SPV_KHR_subgroup_vote", "SPV_KHR_terminate_invocation", "SPV_KHR_variable_pointers", "SPV_KHR_vulkan_memory_model", "SPV_KHR_workgroup_memory_explicit_layout", "SPV_NVX_multiview_per_view_attributes", "SPV_NV_compute_shader_derivatives", "SPV_NV_cooperative_matrix", "SPV_NV_fragment_shader_barycentric", "SPV_NV_geometry_shader_passthrough", "SPV_NV_mesh_shader", "SPV_NV_ray_tracing", "SPV_NV_sample_mask_override_coverage", "SPV_NV_shader_image_footprint", "SPV_NV_shader_sm_builtins", "SPV_NV_shader_subgroup_partitioned", "SPV_NV_shading_rate", "SPV_NV_stereo_view_rendering", "SPV_NV_viewport_array2", "SPV_VALIDATOR_ignore_type_decl_unique" };
|
||||
static const Extension known_ext_ids[] = { Extension::kSPV_AMD_gcn_shader, Extension::kSPV_AMD_gpu_shader_half_float, Extension::kSPV_AMD_gpu_shader_half_float_fetch, Extension::kSPV_AMD_gpu_shader_int16, Extension::kSPV_AMD_shader_ballot, Extension::kSPV_AMD_shader_explicit_vertex_parameter, Extension::kSPV_AMD_shader_fragment_mask, Extension::kSPV_AMD_shader_image_load_store_lod, Extension::kSPV_AMD_shader_trinary_minmax, Extension::kSPV_AMD_texture_gather_bias_lod, Extension::kSPV_EXT_demote_to_helper_invocation, Extension::kSPV_EXT_descriptor_indexing, Extension::kSPV_EXT_fragment_fully_covered, Extension::kSPV_EXT_fragment_invocation_density, Extension::kSPV_EXT_fragment_shader_interlock, Extension::kSPV_EXT_physical_storage_buffer, Extension::kSPV_EXT_shader_atomic_float16_add, Extension::kSPV_EXT_shader_atomic_float_add, Extension::kSPV_EXT_shader_atomic_float_min_max, Extension::kSPV_EXT_shader_image_int64, Extension::kSPV_EXT_shader_stencil_export, Extension::kSPV_EXT_shader_viewport_index_layer, Extension::kSPV_GOOGLE_decorate_string, Extension::kSPV_GOOGLE_hlsl_functionality1, Extension::kSPV_GOOGLE_user_type, Extension::kSPV_INTEL_arbitrary_precision_fixed_point, Extension::kSPV_INTEL_arbitrary_precision_floating_point, Extension::kSPV_INTEL_arbitrary_precision_integers, Extension::kSPV_INTEL_blocking_pipes, Extension::kSPV_INTEL_debug_module, Extension::kSPV_INTEL_device_side_avc_motion_estimation, Extension::kSPV_INTEL_float_controls2, Extension::kSPV_INTEL_fp_fast_math_mode, Extension::kSPV_INTEL_fpga_buffer_location, Extension::kSPV_INTEL_fpga_cluster_attributes, Extension::kSPV_INTEL_fpga_loop_controls, Extension::kSPV_INTEL_fpga_memory_accesses, Extension::kSPV_INTEL_fpga_memory_attributes, Extension::kSPV_INTEL_fpga_reg, Extension::kSPV_INTEL_function_pointers, Extension::kSPV_INTEL_inline_assembly, Extension::kSPV_INTEL_io_pipes, Extension::kSPV_INTEL_kernel_attributes, Extension::kSPV_INTEL_long_constant_composite, Extension::kSPV_INTEL_loop_fuse, Extension::kSPV_INTEL_media_block_io, Extension::kSPV_INTEL_shader_integer_functions2, Extension::kSPV_INTEL_subgroups, Extension::kSPV_INTEL_unstructured_loop_controls, Extension::kSPV_INTEL_usm_storage_classes, Extension::kSPV_INTEL_variable_length_array, Extension::kSPV_INTEL_vector_compute, Extension::kSPV_KHR_16bit_storage, Extension::kSPV_KHR_8bit_storage, Extension::kSPV_KHR_bit_instructions, Extension::kSPV_KHR_device_group, Extension::kSPV_KHR_expect_assume, Extension::kSPV_KHR_float_controls, Extension::kSPV_KHR_fragment_shading_rate, Extension::kSPV_KHR_integer_dot_product, Extension::kSPV_KHR_linkonce_odr, Extension::kSPV_KHR_multiview, Extension::kSPV_KHR_no_integer_wrap_decoration, Extension::kSPV_KHR_non_semantic_info, Extension::kSPV_KHR_physical_storage_buffer, Extension::kSPV_KHR_post_depth_coverage, Extension::kSPV_KHR_ray_query, Extension::kSPV_KHR_ray_tracing, Extension::kSPV_KHR_shader_atomic_counter_ops, Extension::kSPV_KHR_shader_ballot, Extension::kSPV_KHR_shader_clock, Extension::kSPV_KHR_shader_draw_parameters, Extension::kSPV_KHR_storage_buffer_storage_class, Extension::kSPV_KHR_subgroup_uniform_control_flow, Extension::kSPV_KHR_subgroup_vote, Extension::kSPV_KHR_terminate_invocation, Extension::kSPV_KHR_variable_pointers, Extension::kSPV_KHR_vulkan_memory_model, Extension::kSPV_KHR_workgroup_memory_explicit_layout, Extension::kSPV_NVX_multiview_per_view_attributes, Extension::kSPV_NV_compute_shader_derivatives, Extension::kSPV_NV_cooperative_matrix, Extension::kSPV_NV_fragment_shader_barycentric, Extension::kSPV_NV_geometry_shader_passthrough, Extension::kSPV_NV_mesh_shader, Extension::kSPV_NV_ray_tracing, Extension::kSPV_NV_sample_mask_override_coverage, Extension::kSPV_NV_shader_image_footprint, Extension::kSPV_NV_shader_sm_builtins, Extension::kSPV_NV_shader_subgroup_partitioned, Extension::kSPV_NV_shading_rate, Extension::kSPV_NV_stereo_view_rendering, Extension::kSPV_NV_viewport_array2, Extension::kSPV_VALIDATOR_ignore_type_decl_unique };
|
||||
const auto b = std::begin(known_ext_strs);
|
||||
const auto e = std::end(known_ext_strs);
|
||||
const auto found = std::equal_range(
|
||||
@@ -530,6 +544,8 @@ const char* CapabilityToString(SpvCapability capability) {
|
||||
return "FPFastMathModeINTEL";
|
||||
case SpvCapabilityArbitraryPrecisionIntegersINTEL:
|
||||
return "ArbitraryPrecisionIntegersINTEL";
|
||||
case SpvCapabilityArbitraryPrecisionFloatingPointINTEL:
|
||||
return "ArbitraryPrecisionFloatingPointINTEL";
|
||||
case SpvCapabilityUnstructuredLoopControlsINTEL:
|
||||
return "UnstructuredLoopControlsINTEL";
|
||||
case SpvCapabilityFPGALoopControlsINTEL:
|
||||
@@ -546,6 +562,8 @@ const char* CapabilityToString(SpvCapability capability) {
|
||||
return "LoopFuseINTEL";
|
||||
case SpvCapabilityFPGABufferLocationINTEL:
|
||||
return "FPGABufferLocationINTEL";
|
||||
case SpvCapabilityArbitraryPrecisionFixedPointINTEL:
|
||||
return "ArbitraryPrecisionFixedPointINTEL";
|
||||
case SpvCapabilityUSMStorageClassesINTEL:
|
||||
return "USMStorageClassesINTEL";
|
||||
case SpvCapabilityIOPipesINTEL:
|
||||
@@ -554,12 +572,26 @@ const char* CapabilityToString(SpvCapability capability) {
|
||||
return "BlockingPipesINTEL";
|
||||
case SpvCapabilityFPGARegINTEL:
|
||||
return "FPGARegINTEL";
|
||||
case SpvCapabilityDotProductInputAllKHR:
|
||||
return "DotProductInputAllKHR";
|
||||
case SpvCapabilityDotProductInput4x8BitKHR:
|
||||
return "DotProductInput4x8BitKHR";
|
||||
case SpvCapabilityDotProductInput4x8BitPackedKHR:
|
||||
return "DotProductInput4x8BitPackedKHR";
|
||||
case SpvCapabilityDotProductKHR:
|
||||
return "DotProductKHR";
|
||||
case SpvCapabilityBitInstructions:
|
||||
return "BitInstructions";
|
||||
case SpvCapabilityAtomicFloat32AddEXT:
|
||||
return "AtomicFloat32AddEXT";
|
||||
case SpvCapabilityAtomicFloat64AddEXT:
|
||||
return "AtomicFloat64AddEXT";
|
||||
case SpvCapabilityLongConstantCompositeINTEL:
|
||||
return "LongConstantCompositeINTEL";
|
||||
case SpvCapabilityAtomicFloat16AddEXT:
|
||||
return "AtomicFloat16AddEXT";
|
||||
case SpvCapabilityDebugInfoModuleINTEL:
|
||||
return "DebugInfoModuleINTEL";
|
||||
case SpvCapabilityMax:
|
||||
assert(0 && "Attempting to convert SpvCapabilityMax to string");
|
||||
return "";
|
||||
|
||||
@@ -14,6 +14,7 @@ kSPV_EXT_fragment_fully_covered,
|
||||
kSPV_EXT_fragment_invocation_density,
|
||||
kSPV_EXT_fragment_shader_interlock,
|
||||
kSPV_EXT_physical_storage_buffer,
|
||||
kSPV_EXT_shader_atomic_float16_add,
|
||||
kSPV_EXT_shader_atomic_float_add,
|
||||
kSPV_EXT_shader_atomic_float_min_max,
|
||||
kSPV_EXT_shader_image_int64,
|
||||
@@ -22,8 +23,11 @@ kSPV_EXT_shader_viewport_index_layer,
|
||||
kSPV_GOOGLE_decorate_string,
|
||||
kSPV_GOOGLE_hlsl_functionality1,
|
||||
kSPV_GOOGLE_user_type,
|
||||
kSPV_INTEL_arbitrary_precision_fixed_point,
|
||||
kSPV_INTEL_arbitrary_precision_floating_point,
|
||||
kSPV_INTEL_arbitrary_precision_integers,
|
||||
kSPV_INTEL_blocking_pipes,
|
||||
kSPV_INTEL_debug_module,
|
||||
kSPV_INTEL_device_side_avc_motion_estimation,
|
||||
kSPV_INTEL_float_controls2,
|
||||
kSPV_INTEL_fp_fast_math_mode,
|
||||
@@ -48,10 +52,12 @@ kSPV_INTEL_variable_length_array,
|
||||
kSPV_INTEL_vector_compute,
|
||||
kSPV_KHR_16bit_storage,
|
||||
kSPV_KHR_8bit_storage,
|
||||
kSPV_KHR_bit_instructions,
|
||||
kSPV_KHR_device_group,
|
||||
kSPV_KHR_expect_assume,
|
||||
kSPV_KHR_float_controls,
|
||||
kSPV_KHR_fragment_shading_rate,
|
||||
kSPV_KHR_integer_dot_product,
|
||||
kSPV_KHR_linkonce_odr,
|
||||
kSPV_KHR_multiview,
|
||||
kSPV_KHR_no_integer_wrap_decoration,
|
||||
@@ -65,6 +71,7 @@ kSPV_KHR_shader_ballot,
|
||||
kSPV_KHR_shader_clock,
|
||||
kSPV_KHR_shader_draw_parameters,
|
||||
kSPV_KHR_storage_buffer_storage_class,
|
||||
kSPV_KHR_subgroup_uniform_control_flow,
|
||||
kSPV_KHR_subgroup_vote,
|
||||
kSPV_KHR_terminate_invocation,
|
||||
kSPV_KHR_variable_pointers,
|
||||
|
||||
48
3rdparty/spirv-tools/include/generated/nonsemantic.vulkan.debuginfo.100.insts.inc
vendored
Normal file
48
3rdparty/spirv-tools/include/generated/nonsemantic.vulkan.debuginfo.100.insts.inc
vendored
Normal file
@@ -0,0 +1,48 @@
|
||||
|
||||
|
||||
static const spv_ext_inst_desc_t nonsemantic_vulkan_debuginfo_100_entries[] = {
|
||||
{"DebugInfoNone", 0, 0, nullptr, {SPV_OPERAND_TYPE_NONE}},
|
||||
{"DebugCompilationUnit", 1, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"DebugTypeBasic", 2, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"DebugTypePointer", 3, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"DebugTypeQualifier", 4, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"DebugTypeArray", 5, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"DebugTypeVector", 6, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"DebugTypedef", 7, 0, nullptr, {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_NONE}},
|
||||
{"DebugTypeFunction", 8, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"DebugTypeEnum", 9, 0, nullptr, {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, SPV_OPERAND_TYPE_NONE}},
|
||||
{"DebugTypeComposite", 10, 0, nullptr, {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, SPV_OPERAND_TYPE_NONE}},
|
||||
{"DebugTypeMember", 11, 0, nullptr, {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_NONE}},
|
||||
{"DebugTypeInheritance", 12, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"DebugTypePtrToMember", 13, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"DebugTypeTemplate", 14, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"DebugTypeTemplateParameter", 15, 0, nullptr, {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_NONE}},
|
||||
{"DebugTypeTemplateTemplateParameter", 16, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"DebugTypeTemplateParameterPack", 17, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"DebugGlobalVariable", 18, 0, nullptr, {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_NONE}},
|
||||
{"DebugFunctionDeclaration", 19, 0, nullptr, {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_NONE}},
|
||||
{"DebugFunction", 20, 0, nullptr, {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_NONE}},
|
||||
{"DebugLexicalBlock", 21, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"DebugLexicalBlockDiscriminator", 22, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"DebugScope", 23, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"DebugNoScope", 24, 0, nullptr, {SPV_OPERAND_TYPE_NONE}},
|
||||
{"DebugInlinedAt", 25, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"DebugLocalVariable", 26, 0, nullptr, {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_NONE}},
|
||||
{"DebugInlinedVariable", 27, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"DebugDeclare", 28, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"DebugValue", 29, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"DebugOperation", 30, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"DebugExpression", 31, 0, nullptr, {SPV_OPERAND_TYPE_VARIABLE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"DebugMacroDef", 32, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"DebugMacroUndef", 33, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"DebugImportedEntity", 34, 0, nullptr, {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_NONE}},
|
||||
{"DebugSource", 35, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"DebugFunctionDefinition", 101, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"DebugSourceContinued", 102, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"DebugLine", 103, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"DebugNoLine", 104, 0, nullptr, {SPV_OPERAND_TYPE_NONE}},
|
||||
{"DebugBuildIdentifier", 105, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"DebugStoragePath", 106, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"DebugEntryPoint", 107, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"DebugTypeMatrix", 108, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}
|
||||
};
|
||||
@@ -36,5 +36,6 @@ static const spv_ext_inst_desc_t opencl_debuginfo_100_entries[] = {
|
||||
{"DebugMacroDef", 32, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"DebugMacroUndef", 33, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"DebugImportedEntity", 34, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_DEBUG_IMPORTED_ENTITY, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"DebugSource", 35, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID, SPV_OPERAND_TYPE_NONE}}
|
||||
{"DebugSource", 35, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID, SPV_OPERAND_TYPE_NONE}},
|
||||
{"DebugModuleINTEL", 36, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_NONE}}
|
||||
};
|
||||
@@ -1,4 +1,5 @@
|
||||
static const SpvCapability pygen_variable_caps_Addresses[] = {SpvCapabilityAddresses};
|
||||
static const SpvCapability pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL[] = {SpvCapabilityArbitraryPrecisionFixedPointINTEL};
|
||||
static const SpvCapability pygen_variable_caps_AsmINTEL[] = {SpvCapabilityAsmINTEL};
|
||||
static const SpvCapability pygen_variable_caps_AtomicStorage[] = {SpvCapabilityAtomicStorage};
|
||||
static const SpvCapability pygen_variable_caps_ClipDistance[] = {SpvCapabilityClipDistance};
|
||||
@@ -49,6 +50,7 @@ static const SpvCapability pygen_variable_caps_InputAttachment[] = {SpvCapabilit
|
||||
static const SpvCapability pygen_variable_caps_InputAttachmentShaderNonUniform[] = {SpvCapabilityInputAttachment, SpvCapabilityShaderNonUniform};
|
||||
static const SpvCapability pygen_variable_caps_Int64[] = {SpvCapabilityInt64};
|
||||
static const SpvCapability pygen_variable_caps_Int64ImageEXT[] = {SpvCapabilityInt64ImageEXT};
|
||||
static const SpvCapability pygen_variable_caps_Int8[] = {SpvCapabilityInt8};
|
||||
static const SpvCapability pygen_variable_caps_Kernel[] = {SpvCapabilityKernel};
|
||||
static const SpvCapability pygen_variable_caps_KernelGroupNonUniform[] = {SpvCapabilityKernel, SpvCapabilityGroupNonUniform};
|
||||
static const SpvCapability pygen_variable_caps_KernelGroupNonUniformSubgroupBallotKHR[] = {SpvCapabilityKernel, SpvCapabilityGroupNonUniform, SpvCapabilitySubgroupBallotKHR};
|
||||
@@ -125,6 +127,7 @@ static const spvtools::Extension pygen_variable_exts_SPV_EXT_fragment_fully_cove
|
||||
static const spvtools::Extension pygen_variable_exts_SPV_EXT_fragment_invocation_densitySPV_NV_shading_rate[] = {spvtools::Extension::kSPV_EXT_fragment_invocation_density, spvtools::Extension::kSPV_NV_shading_rate};
|
||||
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_physical_storage_bufferSPV_KHR_physical_storage_buffer[] = {spvtools::Extension::kSPV_EXT_physical_storage_buffer, spvtools::Extension::kSPV_KHR_physical_storage_buffer};
|
||||
static const spvtools::Extension pygen_variable_exts_SPV_EXT_shader_atomic_float16_add[] = {spvtools::Extension::kSPV_EXT_shader_atomic_float16_add};
|
||||
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_EXT_shader_atomic_float_min_max[] = {spvtools::Extension::kSPV_EXT_shader_atomic_float_min_max};
|
||||
static const spvtools::Extension pygen_variable_exts_SPV_EXT_shader_image_int64[] = {spvtools::Extension::kSPV_EXT_shader_image_int64};
|
||||
@@ -132,8 +135,11 @@ static const spvtools::Extension pygen_variable_exts_SPV_EXT_shader_stencil_expo
|
||||
static const spvtools::Extension pygen_variable_exts_SPV_EXT_shader_viewport_index_layerSPV_NV_viewport_array2[] = {spvtools::Extension::kSPV_EXT_shader_viewport_index_layer, spvtools::Extension::kSPV_NV_viewport_array2};
|
||||
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_GOOGLE_user_type[] = {spvtools::Extension::kSPV_GOOGLE_user_type};
|
||||
static const spvtools::Extension pygen_variable_exts_SPV_INTEL_arbitrary_precision_fixed_point[] = {spvtools::Extension::kSPV_INTEL_arbitrary_precision_fixed_point};
|
||||
static const spvtools::Extension pygen_variable_exts_SPV_INTEL_arbitrary_precision_floating_point[] = {spvtools::Extension::kSPV_INTEL_arbitrary_precision_floating_point};
|
||||
static const spvtools::Extension pygen_variable_exts_SPV_INTEL_arbitrary_precision_integers[] = {spvtools::Extension::kSPV_INTEL_arbitrary_precision_integers};
|
||||
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_debug_module[] = {spvtools::Extension::kSPV_INTEL_debug_module};
|
||||
static const spvtools::Extension pygen_variable_exts_SPV_INTEL_device_side_avc_motion_estimation[] = {spvtools::Extension::kSPV_INTEL_device_side_avc_motion_estimation};
|
||||
static const spvtools::Extension pygen_variable_exts_SPV_INTEL_float_controls2[] = {spvtools::Extension::kSPV_INTEL_float_controls2};
|
||||
static const spvtools::Extension pygen_variable_exts_SPV_INTEL_fp_fast_math_mode[] = {spvtools::Extension::kSPV_INTEL_fp_fast_math_mode};
|
||||
@@ -158,10 +164,12 @@ static const spvtools::Extension pygen_variable_exts_SPV_INTEL_variable_length_a
|
||||
static const spvtools::Extension pygen_variable_exts_SPV_INTEL_vector_compute[] = {spvtools::Extension::kSPV_INTEL_vector_compute};
|
||||
static const spvtools::Extension pygen_variable_exts_SPV_KHR_16bit_storage[] = {spvtools::Extension::kSPV_KHR_16bit_storage};
|
||||
static const spvtools::Extension pygen_variable_exts_SPV_KHR_8bit_storage[] = {spvtools::Extension::kSPV_KHR_8bit_storage};
|
||||
static const spvtools::Extension pygen_variable_exts_SPV_KHR_bit_instructions[] = {spvtools::Extension::kSPV_KHR_bit_instructions};
|
||||
static const spvtools::Extension pygen_variable_exts_SPV_KHR_device_group[] = {spvtools::Extension::kSPV_KHR_device_group};
|
||||
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_float_controls[] = {spvtools::Extension::kSPV_KHR_float_controls};
|
||||
static const spvtools::Extension pygen_variable_exts_SPV_KHR_fragment_shading_rate[] = {spvtools::Extension::kSPV_KHR_fragment_shading_rate};
|
||||
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_linkonce_odr[] = {spvtools::Extension::kSPV_KHR_linkonce_odr};
|
||||
static const spvtools::Extension pygen_variable_exts_SPV_KHR_multiview[] = {spvtools::Extension::kSPV_KHR_multiview};
|
||||
static const spvtools::Extension pygen_variable_exts_SPV_KHR_no_integer_wrap_decoration[] = {spvtools::Extension::kSPV_KHR_no_integer_wrap_decoration};
|
||||
@@ -176,6 +184,7 @@ static const spvtools::Extension pygen_variable_exts_SPV_KHR_shader_clock[] = {s
|
||||
static const spvtools::Extension pygen_variable_exts_SPV_KHR_shader_draw_parameters[] = {spvtools::Extension::kSPV_KHR_shader_draw_parameters};
|
||||
static const spvtools::Extension pygen_variable_exts_SPV_KHR_shader_draw_parametersSPV_NV_mesh_shader[] = {spvtools::Extension::kSPV_KHR_shader_draw_parameters, spvtools::Extension::kSPV_NV_mesh_shader};
|
||||
static const spvtools::Extension pygen_variable_exts_SPV_KHR_storage_buffer_storage_classSPV_KHR_variable_pointers[] = {spvtools::Extension::kSPV_KHR_storage_buffer_storage_class, spvtools::Extension::kSPV_KHR_variable_pointers};
|
||||
static const spvtools::Extension pygen_variable_exts_SPV_KHR_subgroup_uniform_control_flow[] = {spvtools::Extension::kSPV_KHR_subgroup_uniform_control_flow};
|
||||
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_variable_pointers[] = {spvtools::Extension::kSPV_KHR_variable_pointers};
|
||||
static const spvtools::Extension pygen_variable_exts_SPV_KHR_vulkan_memory_model[] = {spvtools::Extension::kSPV_KHR_vulkan_memory_model};
|
||||
@@ -331,7 +340,8 @@ static const spv_operand_desc_t pygen_variable_SourceLanguageEntries[] = {
|
||||
{"GLSL", 2, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0), 0xffffffffu},
|
||||
{"OpenCL_C", 3, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0), 0xffffffffu},
|
||||
{"OpenCL_CPP", 4, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0), 0xffffffffu},
|
||||
{"HLSL", 5, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0), 0xffffffffu}
|
||||
{"HLSL", 5, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0), 0xffffffffu},
|
||||
{"CPP_for_OpenCL", 6, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0), 0xffffffffu}
|
||||
};
|
||||
|
||||
static const spv_operand_desc_t pygen_variable_ExecutionModelEntries[] = {
|
||||
@@ -412,7 +422,8 @@ static const spv_operand_desc_t pygen_variable_ExecutionModeEntries[] = {
|
||||
{"SubgroupsPerWorkgroup", 36, 1, pygen_variable_caps_SubgroupDispatch, 0, nullptr, {SPV_OPERAND_TYPE_LITERAL_INTEGER}, SPV_SPIRV_VERSION_WORD(1,1), 0xffffffffu},
|
||||
{"SubgroupsPerWorkgroupId", 37, 1, pygen_variable_caps_SubgroupDispatch, 0, nullptr, {SPV_OPERAND_TYPE_ID}, SPV_SPIRV_VERSION_WORD(1,2), 0xffffffffu},
|
||||
{"LocalSizeId", 38, 0, nullptr, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, SPV_SPIRV_VERSION_WORD(1,2), 0xffffffffu},
|
||||
{"LocalSizeHintId", 39, 1, pygen_variable_caps_Kernel, 0, nullptr, {SPV_OPERAND_TYPE_ID}, SPV_SPIRV_VERSION_WORD(1,2), 0xffffffffu},
|
||||
{"LocalSizeHintId", 39, 1, pygen_variable_caps_Kernel, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, SPV_SPIRV_VERSION_WORD(1,2), 0xffffffffu},
|
||||
{"SubgroupUniformControlFlowKHR", 4421, 1, pygen_variable_caps_Shader, 1, pygen_variable_exts_SPV_KHR_subgroup_uniform_control_flow, {}, 0xffffffffu, 0xffffffffu},
|
||||
{"PostDepthCoverage", 4446, 1, pygen_variable_caps_SampleMaskPostDepthCoverage, 1, pygen_variable_exts_SPV_KHR_post_depth_coverage, {}, 0xffffffffu, 0xffffffffu},
|
||||
{"DenormPreserve", 4459, 1, pygen_variable_caps_DenormPreserve, 1, pygen_variable_exts_SPV_KHR_float_controls, {SPV_OPERAND_TYPE_LITERAL_INTEGER}, SPV_SPIRV_VERSION_WORD(1,4), 0xffffffffu},
|
||||
{"DenormFlushToZero", 4460, 1, pygen_variable_caps_DenormFlushToZero, 1, pygen_variable_exts_SPV_KHR_float_controls, {SPV_OPERAND_TYPE_LITERAL_INTEGER}, SPV_SPIRV_VERSION_WORD(1,4), 0xffffffffu},
|
||||
@@ -599,11 +610,29 @@ static const spv_operand_desc_t pygen_variable_FPDenormModeEntries[] = {
|
||||
{"FlushToZero", 1, 1, pygen_variable_caps_FunctionFloatControlINTEL, 0, nullptr, {}, 0xffffffffu, 0xffffffffu}
|
||||
};
|
||||
|
||||
static const spv_operand_desc_t pygen_variable_QuantizationModesEntries[] = {
|
||||
{"TRN", 0, 1, pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL, 0, nullptr, {}, 0xffffffffu, 0xffffffffu},
|
||||
{"TRN_ZERO", 1, 1, pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL, 0, nullptr, {}, 0xffffffffu, 0xffffffffu},
|
||||
{"RND", 2, 1, pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL, 0, nullptr, {}, 0xffffffffu, 0xffffffffu},
|
||||
{"RND_ZERO", 3, 1, pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL, 0, nullptr, {}, 0xffffffffu, 0xffffffffu},
|
||||
{"RND_INF", 4, 1, pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL, 0, nullptr, {}, 0xffffffffu, 0xffffffffu},
|
||||
{"RND_MIN_INF", 5, 1, pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL, 0, nullptr, {}, 0xffffffffu, 0xffffffffu},
|
||||
{"RND_CONV", 6, 1, pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL, 0, nullptr, {}, 0xffffffffu, 0xffffffffu},
|
||||
{"RND_CONV_ODD", 7, 1, pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL, 0, nullptr, {}, 0xffffffffu, 0xffffffffu}
|
||||
};
|
||||
|
||||
static const spv_operand_desc_t pygen_variable_FPOperationModeEntries[] = {
|
||||
{"IEEE", 0, 1, pygen_variable_caps_FunctionFloatControlINTEL, 0, nullptr, {}, 0xffffffffu, 0xffffffffu},
|
||||
{"ALT", 1, 1, pygen_variable_caps_FunctionFloatControlINTEL, 0, nullptr, {}, 0xffffffffu, 0xffffffffu}
|
||||
};
|
||||
|
||||
static const spv_operand_desc_t pygen_variable_OverflowModesEntries[] = {
|
||||
{"WRAP", 0, 1, pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL, 0, nullptr, {}, 0xffffffffu, 0xffffffffu},
|
||||
{"SAT", 1, 1, pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL, 0, nullptr, {}, 0xffffffffu, 0xffffffffu},
|
||||
{"SAT_ZERO", 2, 1, pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL, 0, nullptr, {}, 0xffffffffu, 0xffffffffu},
|
||||
{"SAT_SYM", 3, 1, pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL, 0, nullptr, {}, 0xffffffffu, 0xffffffffu}
|
||||
};
|
||||
|
||||
static const spv_operand_desc_t pygen_variable_LinkageTypeEntries[] = {
|
||||
{"Export", 0, 1, pygen_variable_caps_Linkage, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0), 0xffffffffu},
|
||||
{"Import", 1, 1, pygen_variable_caps_Linkage, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0), 0xffffffffu},
|
||||
@@ -1067,6 +1096,7 @@ static const spv_operand_desc_t pygen_variable_CapabilityEntries[] = {
|
||||
{"FPGAMemoryAttributesINTEL", 5824, 0, nullptr, 1, pygen_variable_exts_SPV_INTEL_fpga_memory_attributes, {}, 0xffffffffu, 0xffffffffu},
|
||||
{"FPFastMathModeINTEL", 5837, 1, pygen_variable_caps_Kernel, 1, pygen_variable_exts_SPV_INTEL_fp_fast_math_mode, {}, 0xffffffffu, 0xffffffffu},
|
||||
{"ArbitraryPrecisionIntegersINTEL", 5844, 0, nullptr, 1, pygen_variable_exts_SPV_INTEL_arbitrary_precision_integers, {}, 0xffffffffu, 0xffffffffu},
|
||||
{"ArbitraryPrecisionFloatingPointINTEL", 5845, 0, nullptr, 1, pygen_variable_exts_SPV_INTEL_arbitrary_precision_floating_point, {}, 0xffffffffu, 0xffffffffu},
|
||||
{"UnstructuredLoopControlsINTEL", 5886, 0, nullptr, 1, pygen_variable_exts_SPV_INTEL_unstructured_loop_controls, {}, 0xffffffffu, 0xffffffffu},
|
||||
{"FPGALoopControlsINTEL", 5888, 0, nullptr, 1, pygen_variable_exts_SPV_INTEL_fpga_loop_controls, {}, 0xffffffffu, 0xffffffffu},
|
||||
{"KernelAttributesINTEL", 5892, 0, nullptr, 1, pygen_variable_exts_SPV_INTEL_kernel_attributes, {}, 0xffffffffu, 0xffffffffu},
|
||||
@@ -1075,13 +1105,21 @@ static const spv_operand_desc_t pygen_variable_CapabilityEntries[] = {
|
||||
{"FPGAClusterAttributesINTEL", 5904, 0, nullptr, 1, pygen_variable_exts_SPV_INTEL_fpga_cluster_attributes, {}, 0xffffffffu, 0xffffffffu},
|
||||
{"LoopFuseINTEL", 5906, 0, nullptr, 1, pygen_variable_exts_SPV_INTEL_loop_fuse, {}, 0xffffffffu, 0xffffffffu},
|
||||
{"FPGABufferLocationINTEL", 5920, 0, nullptr, 1, pygen_variable_exts_SPV_INTEL_fpga_buffer_location, {}, 0xffffffffu, 0xffffffffu},
|
||||
{"ArbitraryPrecisionFixedPointINTEL", 5922, 0, nullptr, 1, pygen_variable_exts_SPV_INTEL_arbitrary_precision_fixed_point, {}, 0xffffffffu, 0xffffffffu},
|
||||
{"USMStorageClassesINTEL", 5935, 0, nullptr, 1, pygen_variable_exts_SPV_INTEL_usm_storage_classes, {}, 0xffffffffu, 0xffffffffu},
|
||||
{"IOPipesINTEL", 5943, 0, nullptr, 1, pygen_variable_exts_SPV_INTEL_io_pipes, {}, 0xffffffffu, 0xffffffffu},
|
||||
{"BlockingPipesINTEL", 5945, 0, nullptr, 1, pygen_variable_exts_SPV_INTEL_blocking_pipes, {}, 0xffffffffu, 0xffffffffu},
|
||||
{"FPGARegINTEL", 5948, 0, nullptr, 1, pygen_variable_exts_SPV_INTEL_fpga_reg, {}, 0xffffffffu, 0xffffffffu},
|
||||
{"DotProductInputAllKHR", 6016, 0, nullptr, 1, pygen_variable_exts_SPV_KHR_integer_dot_product, {}, 0xffffffffu, 0xffffffffu},
|
||||
{"DotProductInput4x8BitKHR", 6017, 1, pygen_variable_caps_Int8, 1, pygen_variable_exts_SPV_KHR_integer_dot_product, {}, 0xffffffffu, 0xffffffffu},
|
||||
{"DotProductInput4x8BitPackedKHR", 6018, 0, nullptr, 1, pygen_variable_exts_SPV_KHR_integer_dot_product, {}, 0xffffffffu, 0xffffffffu},
|
||||
{"DotProductKHR", 6019, 0, nullptr, 1, pygen_variable_exts_SPV_KHR_integer_dot_product, {}, 0xffffffffu, 0xffffffffu},
|
||||
{"BitInstructions", 6025, 0, nullptr, 1, pygen_variable_exts_SPV_KHR_bit_instructions, {}, 0xffffffffu, 0xffffffffu},
|
||||
{"AtomicFloat32AddEXT", 6033, 1, pygen_variable_caps_Shader, 1, pygen_variable_exts_SPV_EXT_shader_atomic_float_add, {}, 0xffffffffu, 0xffffffffu},
|
||||
{"AtomicFloat64AddEXT", 6034, 1, pygen_variable_caps_Shader, 1, pygen_variable_exts_SPV_EXT_shader_atomic_float_add, {}, 0xffffffffu, 0xffffffffu},
|
||||
{"LongConstantCompositeINTEL", 6089, 0, nullptr, 1, pygen_variable_exts_SPV_INTEL_long_constant_composite, {}, 0xffffffffu, 0xffffffffu}
|
||||
{"LongConstantCompositeINTEL", 6089, 0, nullptr, 1, pygen_variable_exts_SPV_INTEL_long_constant_composite, {}, 0xffffffffu, 0xffffffffu},
|
||||
{"AtomicFloat16AddEXT", 6095, 1, pygen_variable_caps_Shader, 1, pygen_variable_exts_SPV_EXT_shader_atomic_float16_add, {}, 0xffffffffu, 0xffffffffu},
|
||||
{"DebugInfoModuleINTEL", 6114, 0, nullptr, 1, pygen_variable_exts_SPV_INTEL_debug_module, {}, 0xffffffffu, 0xffffffffu}
|
||||
};
|
||||
|
||||
static const spv_operand_desc_t pygen_variable_RayQueryIntersectionEntries[] = {
|
||||
@@ -1100,6 +1138,10 @@ static const spv_operand_desc_t pygen_variable_RayQueryCandidateIntersectionType
|
||||
{"RayQueryCandidateIntersectionAABBKHR", 1, 1, pygen_variable_caps_RayQueryKHR, 0, nullptr, {}, 0xffffffffu, 0xffffffffu}
|
||||
};
|
||||
|
||||
static const spv_operand_desc_t pygen_variable_PackedVectorFormatEntries[] = {
|
||||
{"PackedVectorFormat4x8BitKHR", 0, 0, nullptr, 1, pygen_variable_exts_SPV_KHR_integer_dot_product, {}, 0xffffffffu, 0xffffffffu}
|
||||
};
|
||||
|
||||
static const spv_operand_desc_t pygen_variable_DebugInfoFlagsEntries[] = {
|
||||
{"None", 0x0000, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0), 0xffffffffu},
|
||||
{"FlagIsProtected", 0x01, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0), 0xffffffffu},
|
||||
@@ -1243,7 +1285,9 @@ static const spv_operand_desc_group_t pygen_variable_OperandInfoTable[] = {
|
||||
{SPV_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE, ARRAY_SIZE(pygen_variable_ImageChannelDataTypeEntries), pygen_variable_ImageChannelDataTypeEntries},
|
||||
{SPV_OPERAND_TYPE_FP_ROUNDING_MODE, ARRAY_SIZE(pygen_variable_FPRoundingModeEntries), pygen_variable_FPRoundingModeEntries},
|
||||
{SPV_OPERAND_TYPE_FPDENORM_MODE, ARRAY_SIZE(pygen_variable_FPDenormModeEntries), pygen_variable_FPDenormModeEntries},
|
||||
{SPV_OPERAND_TYPE_QUANTIZATION_MODES, ARRAY_SIZE(pygen_variable_QuantizationModesEntries), pygen_variable_QuantizationModesEntries},
|
||||
{SPV_OPERAND_TYPE_FPOPERATION_MODE, ARRAY_SIZE(pygen_variable_FPOperationModeEntries), pygen_variable_FPOperationModeEntries},
|
||||
{SPV_OPERAND_TYPE_OVERFLOW_MODES, ARRAY_SIZE(pygen_variable_OverflowModesEntries), pygen_variable_OverflowModesEntries},
|
||||
{SPV_OPERAND_TYPE_LINKAGE_TYPE, ARRAY_SIZE(pygen_variable_LinkageTypeEntries), pygen_variable_LinkageTypeEntries},
|
||||
{SPV_OPERAND_TYPE_ACCESS_QUALIFIER, ARRAY_SIZE(pygen_variable_AccessQualifierEntries), pygen_variable_AccessQualifierEntries},
|
||||
{SPV_OPERAND_TYPE_FUNCTION_PARAMETER_ATTRIBUTE, ARRAY_SIZE(pygen_variable_FunctionParameterAttributeEntries), pygen_variable_FunctionParameterAttributeEntries},
|
||||
@@ -1256,6 +1300,7 @@ static const spv_operand_desc_group_t pygen_variable_OperandInfoTable[] = {
|
||||
{SPV_OPERAND_TYPE_RAY_QUERY_INTERSECTION, ARRAY_SIZE(pygen_variable_RayQueryIntersectionEntries), pygen_variable_RayQueryIntersectionEntries},
|
||||
{SPV_OPERAND_TYPE_RAY_QUERY_COMMITTED_INTERSECTION_TYPE, ARRAY_SIZE(pygen_variable_RayQueryCommittedIntersectionTypeEntries), pygen_variable_RayQueryCommittedIntersectionTypeEntries},
|
||||
{SPV_OPERAND_TYPE_RAY_QUERY_CANDIDATE_INTERSECTION_TYPE, ARRAY_SIZE(pygen_variable_RayQueryCandidateIntersectionTypeEntries), pygen_variable_RayQueryCandidateIntersectionTypeEntries},
|
||||
{SPV_OPERAND_TYPE_PACKED_VECTOR_FORMAT, ARRAY_SIZE(pygen_variable_PackedVectorFormatEntries), pygen_variable_PackedVectorFormatEntries},
|
||||
{SPV_OPERAND_TYPE_DEBUG_INFO_FLAGS, ARRAY_SIZE(pygen_variable_DebugInfoFlagsEntries), pygen_variable_DebugInfoFlagsEntries},
|
||||
{SPV_OPERAND_TYPE_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING, ARRAY_SIZE(pygen_variable_DebugBaseTypeAttributeEncodingEntries), pygen_variable_DebugBaseTypeAttributeEncodingEntries},
|
||||
{SPV_OPERAND_TYPE_DEBUG_COMPOSITE_TYPE, ARRAY_SIZE(pygen_variable_DebugCompositeTypeEntries), pygen_variable_DebugCompositeTypeEntries},
|
||||
@@ -1269,5 +1314,6 @@ static const spv_operand_desc_group_t pygen_variable_OperandInfoTable[] = {
|
||||
{SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_IMPORTED_ENTITY, ARRAY_SIZE(pygen_variable_CLDEBUG100_DebugImportedEntityEntries), pygen_variable_CLDEBUG100_DebugImportedEntityEntries},
|
||||
{SPV_OPERAND_TYPE_OPTIONAL_IMAGE, ARRAY_SIZE(pygen_variable_ImageOperandsEntries), pygen_variable_ImageOperandsEntries},
|
||||
{SPV_OPERAND_TYPE_OPTIONAL_MEMORY_ACCESS, ARRAY_SIZE(pygen_variable_MemoryAccessEntries), pygen_variable_MemoryAccessEntries},
|
||||
{SPV_OPERAND_TYPE_OPTIONAL_ACCESS_QUALIFIER, ARRAY_SIZE(pygen_variable_AccessQualifierEntries), pygen_variable_AccessQualifierEntries}
|
||||
{SPV_OPERAND_TYPE_OPTIONAL_ACCESS_QUALIFIER, ARRAY_SIZE(pygen_variable_AccessQualifierEntries), pygen_variable_AccessQualifierEntries},
|
||||
{SPV_OPERAND_TYPE_OPTIONAL_PACKED_VECTOR_FORMAT, ARRAY_SIZE(pygen_variable_PackedVectorFormatEntries), pygen_variable_PackedVectorFormatEntries}
|
||||
};
|
||||
@@ -178,6 +178,7 @@ static const int kInstErrorBuffOOBUniform = 4;
|
||||
static const int kInstErrorBuffOOBStorage = 5;
|
||||
static const int kInstErrorBuffOOBUniformTexel = 6;
|
||||
static const int kInstErrorBuffOOBStorageTexel = 7;
|
||||
static const int kInstErrorMax = kInstErrorBuffOOBStorageTexel;
|
||||
|
||||
// Direct Input Buffer Offsets
|
||||
//
|
||||
|
||||
@@ -113,6 +113,9 @@ typedef enum spv_endianness_t {
|
||||
// Sometimes we also need to be able to express the fact that an operand
|
||||
// is a member of an optional tuple of values. In that case the first member
|
||||
// would be optional, and the subsequent members would be required.
|
||||
//
|
||||
// NOTE: Although we don't promise binary compatibility, as a courtesy, please
|
||||
// add new enum values at the end.
|
||||
typedef enum spv_operand_type_t {
|
||||
// A sentinel value.
|
||||
SPV_OPERAND_TYPE_NONE = 0,
|
||||
@@ -167,12 +170,8 @@ typedef enum spv_operand_type_t {
|
||||
SPV_OPERAND_TYPE_KERNEL_ENQ_FLAGS, // SPIR-V Sec 3.29
|
||||
SPV_OPERAND_TYPE_KERNEL_PROFILING_INFO, // SPIR-V Sec 3.30
|
||||
SPV_OPERAND_TYPE_CAPABILITY, // SPIR-V Sec 3.31
|
||||
SPV_OPERAND_TYPE_RAY_FLAGS, // SPIR-V Sec 3.RF
|
||||
SPV_OPERAND_TYPE_RAY_QUERY_INTERSECTION, // SPIR-V Sec 3.RQIntersection
|
||||
SPV_OPERAND_TYPE_RAY_QUERY_COMMITTED_INTERSECTION_TYPE, // SPIR-V Sec
|
||||
// 3.RQCommitted
|
||||
SPV_OPERAND_TYPE_RAY_QUERY_CANDIDATE_INTERSECTION_TYPE, // SPIR-V Sec
|
||||
// 3.RQCandidate
|
||||
|
||||
// NOTE: New concrete enum values should be added at the end.
|
||||
|
||||
// Set 5: Operands that are a single word bitmask.
|
||||
// Sometimes a set bit indicates the instruction requires still more operands.
|
||||
@@ -184,7 +183,10 @@ typedef enum spv_operand_type_t {
|
||||
SPV_OPERAND_TYPE_MEMORY_ACCESS, // SPIR-V Sec 3.26
|
||||
SPV_OPERAND_TYPE_FRAGMENT_SHADING_RATE, // SPIR-V Sec 3.FSR
|
||||
|
||||
// The remaining operand types are only used internally by the assembler.
|
||||
// NOTE: New concrete enum values should be added at the end.
|
||||
|
||||
// The "optional" and "variable" operand types are only used internally by
|
||||
// the assembler and the binary parser.
|
||||
// There are two categories:
|
||||
// Optional : expands to 0 or 1 operand, like ? in regular expressions.
|
||||
// Variable : expands to 0, 1 or many operands or pairs of operands.
|
||||
@@ -265,6 +267,24 @@ typedef enum spv_operand_type_t {
|
||||
// https://github.com/intel/llvm/blob/39fa9b0cbfbae88327118990a05c5b387b56d2ef/sycl/doc/extensions/SPIRV/SPV_INTEL_float_controls2.asciidoc
|
||||
SPV_OPERAND_TYPE_FPDENORM_MODE, // Sec 3.17 FP Denorm Mode
|
||||
SPV_OPERAND_TYPE_FPOPERATION_MODE, // Sec 3.18 FP Operation Mode
|
||||
// A value enum from https://github.com/KhronosGroup/SPIRV-Headers/pull/177
|
||||
SPV_OPERAND_TYPE_QUANTIZATION_MODES,
|
||||
// A value enum from https://github.com/KhronosGroup/SPIRV-Headers/pull/177
|
||||
SPV_OPERAND_TYPE_OVERFLOW_MODES,
|
||||
|
||||
// Concrete operand types for the provisional Vulkan ray tracing feature.
|
||||
SPV_OPERAND_TYPE_RAY_FLAGS, // SPIR-V Sec 3.RF
|
||||
SPV_OPERAND_TYPE_RAY_QUERY_INTERSECTION, // SPIR-V Sec 3.RQIntersection
|
||||
SPV_OPERAND_TYPE_RAY_QUERY_COMMITTED_INTERSECTION_TYPE, // SPIR-V Sec
|
||||
// 3.RQCommitted
|
||||
SPV_OPERAND_TYPE_RAY_QUERY_CANDIDATE_INTERSECTION_TYPE, // SPIR-V Sec
|
||||
// 3.RQCandidate
|
||||
|
||||
// Concrete operand types for integer dot product.
|
||||
// Packed vector format
|
||||
SPV_OPERAND_TYPE_PACKED_VECTOR_FORMAT, // SPIR-V Sec 3.x
|
||||
// An optional packed vector format
|
||||
SPV_OPERAND_TYPE_OPTIONAL_PACKED_VECTOR_FORMAT,
|
||||
|
||||
// This is a sentinel value, and does not represent an operand type.
|
||||
// It should come last.
|
||||
@@ -290,6 +310,7 @@ typedef enum spv_ext_inst_type_t {
|
||||
SPV_EXT_INST_TYPE_DEBUGINFO,
|
||||
SPV_EXT_INST_TYPE_OPENCL_DEBUGINFO_100,
|
||||
SPV_EXT_INST_TYPE_NONSEMANTIC_CLSPVREFLECTION,
|
||||
SPV_EXT_INST_TYPE_NONSEMANTIC_VULKAN_DEBUGINFO_100,
|
||||
|
||||
// Multiple distinct extended instruction set types could return this
|
||||
// value, if they are prefixed with NonSemantic. and are otherwise
|
||||
|
||||
@@ -514,6 +514,13 @@ Optimizer::PassToken CreateDeadInsertElimPass();
|
||||
// eliminated with standard dead code elimination.
|
||||
Optimizer::PassToken CreateAggressiveDCEPass();
|
||||
|
||||
// Creates a remove-unused-interface-variables pass.
|
||||
// Removes variables referenced on the |OpEntryPoint| instruction that are not
|
||||
// referenced in the entry point function or any function in its call tree. Note
|
||||
// that this could cause the shader interface to no longer match other shader
|
||||
// stages.
|
||||
Optimizer::PassToken CreateRemoveUnusedInterfaceVariablesPass();
|
||||
|
||||
// Creates an empty pass.
|
||||
// This is deprecated and will be removed.
|
||||
// TODO(jaebaek): remove this pass after handling glslang's broken unit tests.
|
||||
|
||||
8
3rdparty/spirv-tools/source/binary.cpp
vendored
8
3rdparty/spirv-tools/source/binary.cpp
vendored
@@ -657,12 +657,18 @@ spv_result_t Parser::parseOperand(size_t inst_offset,
|
||||
case SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_OPERATION:
|
||||
case SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_IMPORTED_ENTITY:
|
||||
case SPV_OPERAND_TYPE_FPDENORM_MODE:
|
||||
case SPV_OPERAND_TYPE_FPOPERATION_MODE: {
|
||||
case SPV_OPERAND_TYPE_FPOPERATION_MODE:
|
||||
case SPV_OPERAND_TYPE_QUANTIZATION_MODES:
|
||||
case SPV_OPERAND_TYPE_OVERFLOW_MODES:
|
||||
case SPV_OPERAND_TYPE_PACKED_VECTOR_FORMAT:
|
||||
case SPV_OPERAND_TYPE_OPTIONAL_PACKED_VECTOR_FORMAT: {
|
||||
// A single word that is a plain enum value.
|
||||
|
||||
// Map an optional operand type to its corresponding concrete type.
|
||||
if (type == SPV_OPERAND_TYPE_OPTIONAL_ACCESS_QUALIFIER)
|
||||
parsed_operand.type = SPV_OPERAND_TYPE_ACCESS_QUALIFIER;
|
||||
if (type == SPV_OPERAND_TYPE_OPTIONAL_PACKED_VECTOR_FORMAT)
|
||||
parsed_operand.type = SPV_OPERAND_TYPE_PACKED_VECTOR_FORMAT;
|
||||
|
||||
spv_operand_desc entry;
|
||||
if (grammar_.lookupOperand(type, word, &entry)) {
|
||||
|
||||
64
3rdparty/spirv-tools/source/common_debug_info.h
vendored
Normal file
64
3rdparty/spirv-tools/source/common_debug_info.h
vendored
Normal file
@@ -0,0 +1,64 @@
|
||||
// Copyright (c) 2021 The Khronos Group Inc.
|
||||
// Copyright (c) 2021 Valve Corporation
|
||||
// Copyright (c) 2021 LunarG 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_COMMON_DEBUG_INFO_HEADER_H_
|
||||
#define SOURCE_COMMON_DEBUG_INFO_HEADER_H_
|
||||
|
||||
// This enum defines the known common set of instructions that are the same
|
||||
// between OpenCL.DebugInfo.100 and NonSemantic.Vulkan.DebugInfo.100.
|
||||
// note that NonSemantic.DebugInfo.100 instructions can still have slightly
|
||||
// different encoding, as it does not use literals anywhere and only constants.
|
||||
enum CommonDebugInfoInstructions {
|
||||
CommonDebugInfoDebugInfoNone = 0,
|
||||
CommonDebugInfoDebugCompilationUnit = 1,
|
||||
CommonDebugInfoDebugTypeBasic = 2,
|
||||
CommonDebugInfoDebugTypePointer = 3,
|
||||
CommonDebugInfoDebugTypeQualifier = 4,
|
||||
CommonDebugInfoDebugTypeArray = 5,
|
||||
CommonDebugInfoDebugTypeVector = 6,
|
||||
CommonDebugInfoDebugTypedef = 7,
|
||||
CommonDebugInfoDebugTypeFunction = 8,
|
||||
CommonDebugInfoDebugTypeEnum = 9,
|
||||
CommonDebugInfoDebugTypeComposite = 10,
|
||||
CommonDebugInfoDebugTypeMember = 11,
|
||||
CommonDebugInfoDebugTypeInheritance = 12,
|
||||
CommonDebugInfoDebugTypePtrToMember = 13,
|
||||
CommonDebugInfoDebugTypeTemplate = 14,
|
||||
CommonDebugInfoDebugTypeTemplateParameter = 15,
|
||||
CommonDebugInfoDebugTypeTemplateTemplateParameter = 16,
|
||||
CommonDebugInfoDebugTypeTemplateParameterPack = 17,
|
||||
CommonDebugInfoDebugGlobalVariable = 18,
|
||||
CommonDebugInfoDebugFunctionDeclaration = 19,
|
||||
CommonDebugInfoDebugFunction = 20,
|
||||
CommonDebugInfoDebugLexicalBlock = 21,
|
||||
CommonDebugInfoDebugLexicalBlockDiscriminator = 22,
|
||||
CommonDebugInfoDebugScope = 23,
|
||||
CommonDebugInfoDebugNoScope = 24,
|
||||
CommonDebugInfoDebugInlinedAt = 25,
|
||||
CommonDebugInfoDebugLocalVariable = 26,
|
||||
CommonDebugInfoDebugInlinedVariable = 27,
|
||||
CommonDebugInfoDebugDeclare = 28,
|
||||
CommonDebugInfoDebugValue = 29,
|
||||
CommonDebugInfoDebugOperation = 30,
|
||||
CommonDebugInfoDebugExpression = 31,
|
||||
CommonDebugInfoDebugMacroDef = 32,
|
||||
CommonDebugInfoDebugMacroUndef = 33,
|
||||
CommonDebugInfoDebugImportedEntity = 34,
|
||||
CommonDebugInfoDebugSource = 35,
|
||||
CommonDebugInfoInstructionsMax = 0x7ffffff
|
||||
};
|
||||
|
||||
#endif // SOURCE_COMMON_DEBUG_INFO_HEADER_H_
|
||||
2
3rdparty/spirv-tools/source/diagnostic.cpp
vendored
2
3rdparty/spirv-tools/source/diagnostic.cpp
vendored
@@ -37,7 +37,7 @@ spv_diagnostic spvDiagnosticCreate(const spv_position position,
|
||||
diagnostic->position = *position;
|
||||
diagnostic->isTextSource = false;
|
||||
memset(diagnostic->error, 0, length);
|
||||
strncpy(diagnostic->error, message, length);
|
||||
strcpy(diagnostic->error, message);
|
||||
return diagnostic;
|
||||
}
|
||||
|
||||
|
||||
16
3rdparty/spirv-tools/source/disassemble.cpp
vendored
16
3rdparty/spirv-tools/source/disassemble.cpp
vendored
@@ -328,7 +328,9 @@ void Disassembler::EmitOperand(const spv_parsed_instruction_t& inst,
|
||||
case SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_OPERATION:
|
||||
case SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_IMPORTED_ENTITY:
|
||||
case SPV_OPERAND_TYPE_FPDENORM_MODE:
|
||||
case SPV_OPERAND_TYPE_FPOPERATION_MODE: {
|
||||
case SPV_OPERAND_TYPE_FPOPERATION_MODE:
|
||||
case SPV_OPERAND_TYPE_QUANTIZATION_MODES:
|
||||
case SPV_OPERAND_TYPE_OVERFLOW_MODES: {
|
||||
spv_operand_desc entry;
|
||||
if (grammar_.lookupOperand(operand.type, word, &entry))
|
||||
assert(false && "should have caught this earlier");
|
||||
@@ -345,7 +347,17 @@ void Disassembler::EmitOperand(const spv_parsed_instruction_t& inst,
|
||||
EmitMaskOperand(operand.type, word);
|
||||
break;
|
||||
default:
|
||||
assert(false && "unhandled or invalid case");
|
||||
if (spvOperandIsConcreteMask(operand.type)) {
|
||||
EmitMaskOperand(operand.type, word);
|
||||
} else if (spvOperandIsConcrete(operand.type)) {
|
||||
spv_operand_desc entry;
|
||||
if (grammar_.lookupOperand(operand.type, word, &entry))
|
||||
assert(false && "should have caught this earlier");
|
||||
stream_ << entry->name;
|
||||
} else {
|
||||
assert(false && "unhandled or invalid case");
|
||||
}
|
||||
break;
|
||||
}
|
||||
ResetColor();
|
||||
}
|
||||
|
||||
8
3rdparty/spirv-tools/source/ext_inst.cpp
vendored
8
3rdparty/spirv-tools/source/ext_inst.cpp
vendored
@@ -29,6 +29,7 @@
|
||||
#include "debuginfo.insts.inc"
|
||||
#include "glsl.std.450.insts.inc"
|
||||
#include "nonsemantic.clspvreflection.insts.inc"
|
||||
#include "nonsemantic.vulkan.debuginfo.100.insts.inc"
|
||||
#include "opencl.debuginfo.100.insts.inc"
|
||||
#include "opencl.std.insts.inc"
|
||||
|
||||
@@ -55,6 +56,9 @@ static const spv_ext_inst_group_t kGroups_1_0[] = {
|
||||
debuginfo_entries},
|
||||
{SPV_EXT_INST_TYPE_OPENCL_DEBUGINFO_100,
|
||||
ARRAY_SIZE(opencl_debuginfo_100_entries), opencl_debuginfo_100_entries},
|
||||
{SPV_EXT_INST_TYPE_NONSEMANTIC_VULKAN_DEBUGINFO_100,
|
||||
ARRAY_SIZE(nonsemantic_vulkan_debuginfo_100_entries),
|
||||
nonsemantic_vulkan_debuginfo_100_entries},
|
||||
{SPV_EXT_INST_TYPE_NONSEMANTIC_CLSPVREFLECTION,
|
||||
ARRAY_SIZE(nonsemantic_clspvreflection_entries),
|
||||
nonsemantic_clspvreflection_entries},
|
||||
@@ -126,6 +130,9 @@ spv_ext_inst_type_t spvExtInstImportTypeGet(const char* name) {
|
||||
if (!strcmp("OpenCL.DebugInfo.100", name)) {
|
||||
return SPV_EXT_INST_TYPE_OPENCL_DEBUGINFO_100;
|
||||
}
|
||||
if (!strcmp("NonSemantic.Vulkan.DebugInfo.100", name)) {
|
||||
return SPV_EXT_INST_TYPE_NONSEMANTIC_VULKAN_DEBUGINFO_100;
|
||||
}
|
||||
if (!strncmp("NonSemantic.ClspvReflection.", name, 28)) {
|
||||
return SPV_EXT_INST_TYPE_NONSEMANTIC_CLSPVREFLECTION;
|
||||
}
|
||||
@@ -139,6 +146,7 @@ spv_ext_inst_type_t spvExtInstImportTypeGet(const char* name) {
|
||||
|
||||
bool spvExtInstIsNonSemantic(const spv_ext_inst_type_t type) {
|
||||
if (type == SPV_EXT_INST_TYPE_NONSEMANTIC_UNKNOWN ||
|
||||
type == SPV_EXT_INST_TYPE_NONSEMANTIC_VULKAN_DEBUGINFO_100 ||
|
||||
type == SPV_EXT_INST_TYPE_NONSEMANTIC_CLSPVREFLECTION) {
|
||||
return true;
|
||||
}
|
||||
|
||||
637
3rdparty/spirv-tools/source/extinst.nonsemantic.vulkan.debuginfo.100.grammar.json
vendored
Normal file
637
3rdparty/spirv-tools/source/extinst.nonsemantic.vulkan.debuginfo.100.grammar.json
vendored
Normal file
@@ -0,0 +1,637 @@
|
||||
{
|
||||
"copyright" : [
|
||||
"Copyright (c) 2018 The Khronos Group Inc.",
|
||||
"",
|
||||
"Permission is hereby granted, free of charge, to any person obtaining a copy",
|
||||
"of this software and/or associated documentation files (the \"Materials\"),",
|
||||
"to deal in the Materials without restriction, including without limitation",
|
||||
"the rights to use, copy, modify, merge, publish, distribute, sublicense,",
|
||||
"and/or sell copies of the Materials, and to permit persons to whom the",
|
||||
"Materials are furnished to do so, subject to the following conditions:",
|
||||
"",
|
||||
"The above copyright notice and this permission notice shall be included in",
|
||||
"all copies or substantial portions of the Materials.",
|
||||
"",
|
||||
"MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS",
|
||||
"STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND",
|
||||
"HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ ",
|
||||
"",
|
||||
"THE MATERIALS ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS",
|
||||
"OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,",
|
||||
"FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL",
|
||||
"THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER",
|
||||
"LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING",
|
||||
"FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS",
|
||||
"IN THE MATERIALS."
|
||||
],
|
||||
"version" : 100,
|
||||
"revision" : 2,
|
||||
"instructions" : [
|
||||
{
|
||||
"opname" : "DebugInfoNone",
|
||||
"opcode" : 0
|
||||
},
|
||||
{
|
||||
"opname" : "DebugCompilationUnit",
|
||||
"opcode" : 1,
|
||||
"operands" : [
|
||||
{ "kind" : "IdRef", "name" : "'Version'" },
|
||||
{ "kind" : "IdRef", "name" : "'DWARF Version'" },
|
||||
{ "kind" : "IdRef", "name" : "'Source'" },
|
||||
{ "kind" : "IdRef", "name" : "'Language'" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"opname" : "DebugTypeBasic",
|
||||
"opcode" : 2,
|
||||
"operands" : [
|
||||
{ "kind" : "IdRef", "name" : "'Name'" },
|
||||
{ "kind" : "IdRef", "name" : "'Size'" },
|
||||
{ "kind" : "IdRef", "name" : "'Encoding'" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"opname" : "DebugTypePointer",
|
||||
"opcode" : 3,
|
||||
"operands" : [
|
||||
{ "kind" : "IdRef", "name" : "'Base Type'" },
|
||||
{ "kind" : "IdRef", "name" : "'Storage Class'" },
|
||||
{ "kind" : "IdRef", "name" : "'Flags'" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"opname" : "DebugTypeQualifier",
|
||||
"opcode" : 4,
|
||||
"operands" : [
|
||||
{ "kind" : "IdRef", "name" : "'Base Type'" },
|
||||
{ "kind" : "IdRef", "name" : "'Type Qualifier'" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"opname" : "DebugTypeArray",
|
||||
"opcode" : 5,
|
||||
"operands" : [
|
||||
{ "kind" : "IdRef", "name" : "'Base Type'" },
|
||||
{ "kind" : "IdRef", "name" : "'Component Counts'", "quantifier" : "*" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"opname" : "DebugTypeVector",
|
||||
"opcode" : 6,
|
||||
"operands" : [
|
||||
{ "kind" : "IdRef", "name" : "'Base Type'" },
|
||||
{ "kind" : "IdRef", "name" : "'Component Count'" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"opname" : "DebugTypedef",
|
||||
"opcode" : 7,
|
||||
"operands" : [
|
||||
{ "kind" : "IdRef", "name" : "'Name'" },
|
||||
{ "kind" : "IdRef", "name" : "'Base Type'" },
|
||||
{ "kind" : "IdRef", "name" : "'Source'" },
|
||||
{ "kind" : "IdRef", "name" : "'Line'" },
|
||||
{ "kind" : "IdRef", "name" : "'Column'" },
|
||||
{ "kind" : "IdRef", "name" : "'Parent'" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"opname" : "DebugTypeFunction",
|
||||
"opcode" : 8,
|
||||
"operands" : [
|
||||
{ "kind" : "IdRef", "name" : "'Flags'" },
|
||||
{ "kind" : "IdRef", "name" : "'Return Type'" },
|
||||
{ "kind" : "IdRef", "name" : "'Parameter Types'", "quantifier" : "*" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"opname" : "DebugTypeEnum",
|
||||
"opcode" : 9,
|
||||
"operands" : [
|
||||
{ "kind" : "IdRef", "name" : "'Name'" },
|
||||
{ "kind" : "IdRef", "name" : "'Underlying Type'" },
|
||||
{ "kind" : "IdRef", "name" : "'Source'" },
|
||||
{ "kind" : "IdRef", "name" : "'Line'" },
|
||||
{ "kind" : "IdRef", "name" : "'Column'" },
|
||||
{ "kind" : "IdRef", "name" : "'Parent'" },
|
||||
{ "kind" : "IdRef", "name" : "'Size'" },
|
||||
{ "kind" : "IdRef", "name" : "'Flags'" },
|
||||
{ "kind" : "PairIdRefIdRef", "name" : "'Value, Name, Value, Name, ...'", "quantifier" : "*" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"opname" : "DebugTypeComposite",
|
||||
"opcode" : 10,
|
||||
"operands" : [
|
||||
{ "kind" : "IdRef", "name" : "'Name'" },
|
||||
{ "kind" : "IdRef", "name" : "'Tag'" },
|
||||
{ "kind" : "IdRef", "name" : "'Source'" },
|
||||
{ "kind" : "IdRef", "name" : "'Line'" },
|
||||
{ "kind" : "IdRef", "name" : "'Column'" },
|
||||
{ "kind" : "IdRef", "name" : "'Parent'" },
|
||||
{ "kind" : "IdRef", "name" : "'Linkage Name'" },
|
||||
{ "kind" : "IdRef", "name" : "'Size'" },
|
||||
{ "kind" : "IdRef", "name" : "'Flags'" },
|
||||
{ "kind" : "IdRef", "name" : "'Members'", "quantifier" : "*" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"opname" : "DebugTypeMember",
|
||||
"opcode" : 11,
|
||||
"operands" : [
|
||||
{ "kind" : "IdRef", "name" : "'Name'" },
|
||||
{ "kind" : "IdRef", "name" : "'Type'" },
|
||||
{ "kind" : "IdRef", "name" : "'Source'" },
|
||||
{ "kind" : "IdRef", "name" : "'Line'" },
|
||||
{ "kind" : "IdRef", "name" : "'Column'" },
|
||||
{ "kind" : "IdRef", "name" : "'Offset'" },
|
||||
{ "kind" : "IdRef", "name" : "'Size'" },
|
||||
{ "kind" : "IdRef", "name" : "'Flags'" },
|
||||
{ "kind" : "IdRef", "name" : "'Value'", "quantifier" : "?" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"opname" : "DebugTypeInheritance",
|
||||
"opcode" : 12,
|
||||
"operands" : [
|
||||
{ "kind" : "IdRef", "name" : "'Parent'" },
|
||||
{ "kind" : "IdRef", "name" : "'Offset'" },
|
||||
{ "kind" : "IdRef", "name" : "'Size'" },
|
||||
{ "kind" : "IdRef", "name" : "'Flags'" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"opname" : "DebugTypePtrToMember",
|
||||
"opcode" : 13,
|
||||
"operands" : [
|
||||
{ "kind" : "IdRef", "name" : "'Member Type'" },
|
||||
{ "kind" : "IdRef", "name" : "'Parent'" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"opname" : "DebugTypeTemplate",
|
||||
"opcode" : 14,
|
||||
"operands" : [
|
||||
{ "kind" : "IdRef", "name" : "'Target'" },
|
||||
{ "kind" : "IdRef", "name" : "'Parameters'", "quantifier" : "*" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"opname" : "DebugTypeTemplateParameter",
|
||||
"opcode" : 15,
|
||||
"operands" : [
|
||||
{ "kind" : "IdRef", "name" : "'Name'" },
|
||||
{ "kind" : "IdRef", "name" : "'Actual Type'" },
|
||||
{ "kind" : "IdRef", "name" : "'Value'" },
|
||||
{ "kind" : "IdRef", "name" : "'Source'" },
|
||||
{ "kind" : "IdRef", "name" : "'Line'" },
|
||||
{ "kind" : "IdRef", "name" : "'Column'" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"opname" : "DebugTypeTemplateTemplateParameter",
|
||||
"opcode" : 16,
|
||||
"operands" : [
|
||||
{ "kind" : "IdRef", "name" : "'Name'" },
|
||||
{ "kind" : "IdRef", "name" : "'Template Name'" },
|
||||
{ "kind" : "IdRef", "name" : "'Source'" },
|
||||
{ "kind" : "IdRef", "name" : "'Line'" },
|
||||
{ "kind" : "IdRef", "name" : "'Column'" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"opname" : "DebugTypeTemplateParameterPack",
|
||||
"opcode" : 17,
|
||||
"operands" : [
|
||||
{ "kind" : "IdRef", "name" : "'Name'" },
|
||||
{ "kind" : "IdRef", "name" : "'Source'" },
|
||||
{ "kind" : "IdRef", "name" : "'Line'" },
|
||||
{ "kind" : "IdRef", "name" : "'Column'" },
|
||||
{ "kind" : "IdRef", "name" : "'Template Parameters'", "quantifier" : "*" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"opname" : "DebugGlobalVariable",
|
||||
"opcode" : 18,
|
||||
"operands" : [
|
||||
{ "kind" : "IdRef", "name" : "'Name'" },
|
||||
{ "kind" : "IdRef", "name" : "'Type'" },
|
||||
{ "kind" : "IdRef", "name" : "'Source'" },
|
||||
{ "kind" : "IdRef", "name" : "'Line'" },
|
||||
{ "kind" : "IdRef", "name" : "'Column'" },
|
||||
{ "kind" : "IdRef", "name" : "'Parent'" },
|
||||
{ "kind" : "IdRef", "name" : "'Linkage Name'" },
|
||||
{ "kind" : "IdRef", "name" : "'Variable'" },
|
||||
{ "kind" : "IdRef", "name" : "'Flags'" },
|
||||
{ "kind" : "IdRef", "name" : "'Static Member Declaration'", "quantifier" : "?" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"opname" : "DebugFunctionDeclaration",
|
||||
"opcode" : 19,
|
||||
"operands" : [
|
||||
{ "kind" : "IdRef", "name" : "'Name'" },
|
||||
{ "kind" : "IdRef", "name" : "'Type'" },
|
||||
{ "kind" : "IdRef", "name" : "'Source'" },
|
||||
{ "kind" : "IdRef", "name" : "'Line'" },
|
||||
{ "kind" : "IdRef", "name" : "'Column'" },
|
||||
{ "kind" : "IdRef", "name" : "'Parent'" },
|
||||
{ "kind" : "IdRef", "name" : "'Linkage Name'" },
|
||||
{ "kind" : "IdRef", "name" : "'Flags'" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"opname" : "DebugFunction",
|
||||
"opcode" : 20,
|
||||
"operands" : [
|
||||
{ "kind" : "IdRef", "name" : "'Name'" },
|
||||
{ "kind" : "IdRef", "name" : "'Type'" },
|
||||
{ "kind" : "IdRef", "name" : "'Source'" },
|
||||
{ "kind" : "IdRef", "name" : "'Line'" },
|
||||
{ "kind" : "IdRef", "name" : "'Column'" },
|
||||
{ "kind" : "IdRef", "name" : "'Parent'" },
|
||||
{ "kind" : "IdRef", "name" : "'Linkage Name'" },
|
||||
{ "kind" : "IdRef", "name" : "'Flags'" },
|
||||
{ "kind" : "IdRef", "name" : "'Scope Line'" },
|
||||
{ "kind" : "IdRef", "name" : "'Declaration'", "quantifier" : "?" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"opname" : "DebugLexicalBlock",
|
||||
"opcode" : 21,
|
||||
"operands" : [
|
||||
{ "kind" : "IdRef", "name" : "'Source'" },
|
||||
{ "kind" : "IdRef", "name" : "'Line'" },
|
||||
{ "kind" : "IdRef", "name" : "'Column'" },
|
||||
{ "kind" : "IdRef", "name" : "'Parent'" },
|
||||
{ "kind" : "IdRef", "name" : "'Name'", "quantifier" : "?" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"opname" : "DebugLexicalBlockDiscriminator",
|
||||
"opcode" : 22,
|
||||
"operands" : [
|
||||
{ "kind" : "IdRef", "name" : "'Source'" },
|
||||
{ "kind" : "IdRef", "name" : "'Discriminator'" },
|
||||
{ "kind" : "IdRef", "name" : "'Parent'" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"opname" : "DebugScope",
|
||||
"opcode" : 23,
|
||||
"operands" : [
|
||||
{ "kind" : "IdRef", "name" : "'Scope'" },
|
||||
{ "kind" : "IdRef", "name" : "'Inlined At'", "quantifier" : "?" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"opname" : "DebugNoScope",
|
||||
"opcode" : 24
|
||||
},
|
||||
{
|
||||
"opname" : "DebugInlinedAt",
|
||||
"opcode" : 25,
|
||||
"operands" : [
|
||||
{ "kind" : "IdRef", "name" : "'Line'" },
|
||||
{ "kind" : "IdRef", "name" : "'Scope'" },
|
||||
{ "kind" : "IdRef", "name" : "'Inlined'", "quantifier" : "?" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"opname" : "DebugLocalVariable",
|
||||
"opcode" : 26,
|
||||
"operands" : [
|
||||
{ "kind" : "IdRef", "name" : "'Name'" },
|
||||
{ "kind" : "IdRef", "name" : "'Type'" },
|
||||
{ "kind" : "IdRef", "name" : "'Source'" },
|
||||
{ "kind" : "IdRef", "name" : "'Line'" },
|
||||
{ "kind" : "IdRef", "name" : "'Column'" },
|
||||
{ "kind" : "IdRef", "name" : "'Parent'" },
|
||||
{ "kind" : "IdRef", "name" : "'Flags'" },
|
||||
{ "kind" : "IdRef", "name" : "'Arg Number'", "quantifier" : "?" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"opname" : "DebugInlinedVariable",
|
||||
"opcode" : 27,
|
||||
"operands" : [
|
||||
{ "kind" : "IdRef", "name" : "'Variable'" },
|
||||
{ "kind" : "IdRef", "name" : "'Inlined'" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"opname" : "DebugDeclare",
|
||||
"opcode" : 28,
|
||||
"operands" : [
|
||||
{ "kind" : "IdRef", "name" : "'Local Variable'" },
|
||||
{ "kind" : "IdRef", "name" : "'Variable'" },
|
||||
{ "kind" : "IdRef", "name" : "'Expression'" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"opname" : "DebugValue",
|
||||
"opcode" : 29,
|
||||
"operands" : [
|
||||
{ "kind" : "IdRef", "name" : "'Local Variable'" },
|
||||
{ "kind" : "IdRef", "name" : "'Value'" },
|
||||
{ "kind" : "IdRef", "name" : "'Expression'" },
|
||||
{ "kind" : "IdRef", "name" : "'Indexes'", "quantifier" : "*" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"opname" : "DebugOperation",
|
||||
"opcode" : 30,
|
||||
"operands" : [
|
||||
{ "kind" : "IdRef", "name" : "'OpCode'" },
|
||||
{ "kind" : "IdRef", "name" : "'Operands ...'", "quantifier" : "*" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"opname" : "DebugExpression",
|
||||
"opcode" : 31,
|
||||
"operands" : [
|
||||
{ "kind" : "IdRef", "name" : "'Operands ...'", "quantifier" : "*" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"opname" : "DebugMacroDef",
|
||||
"opcode" : 32,
|
||||
"operands" : [
|
||||
{ "kind" : "IdRef", "name" : "'Source'" },
|
||||
{ "kind" : "IdRef", "name" : "'Line'" },
|
||||
{ "kind" : "IdRef", "name" : "'Name'" },
|
||||
{ "kind" : "IdRef", "name" : "'Value'", "quantifier" : "?" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"opname" : "DebugMacroUndef",
|
||||
"opcode" : 33,
|
||||
"operands" : [
|
||||
{ "kind" : "IdRef", "name" : "'Source'" },
|
||||
{ "kind" : "IdRef", "name" : "'Line'" },
|
||||
{ "kind" : "IdRef", "name" : "'Macro'" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"opname" : "DebugImportedEntity",
|
||||
"opcode" : 34,
|
||||
"operands" : [
|
||||
{ "kind" : "IdRef", "name" : "'Name'" },
|
||||
{ "kind" : "IdRef", "name" : "'Tag'" },
|
||||
{ "kind" : "IdRef", "name" : "'Source'" },
|
||||
{ "kind" : "IdRef", "name" : "'Entity'" },
|
||||
{ "kind" : "IdRef", "name" : "'Line'" },
|
||||
{ "kind" : "IdRef", "name" : "'Column'" },
|
||||
{ "kind" : "IdRef", "name" : "'Parent'" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"opname" : "DebugSource",
|
||||
"opcode" : 35,
|
||||
"operands" : [
|
||||
{ "kind" : "IdRef", "name" : "'File'" },
|
||||
{ "kind" : "IdRef", "name" : "'Text'", "quantifier" : "?" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"opname" : "DebugFunctionDefinition",
|
||||
"opcode" : 101,
|
||||
"operands" : [
|
||||
{ "kind" : "IdRef", "name" : "'Function'" },
|
||||
{ "kind" : "IdRef", "name" : "'Definition'" }
|
||||
]
|
||||
}
|
||||
],
|
||||
"operand_kinds" : [
|
||||
{
|
||||
"category" : "BitEnum",
|
||||
"kind" : "DebugInfoFlags",
|
||||
"enumerants" : [
|
||||
{
|
||||
"enumerant" : "FlagIsProtected",
|
||||
"value" : "0x01"
|
||||
},
|
||||
{
|
||||
"enumerant" : "FlagIsPrivate",
|
||||
"value" : "0x02"
|
||||
},
|
||||
{
|
||||
"enumerant" : "FlagIsPublic",
|
||||
"value" : "0x03"
|
||||
},
|
||||
{
|
||||
"enumerant" : "FlagIsLocal",
|
||||
"value" : "0x04"
|
||||
},
|
||||
{
|
||||
"enumerant" : "FlagIsDefinition",
|
||||
"value" : "0x08"
|
||||
},
|
||||
{
|
||||
"enumerant" : "FlagFwdDecl",
|
||||
"value" : "0x10"
|
||||
},
|
||||
{
|
||||
"enumerant" : "FlagArtificial",
|
||||
"value" : "0x20"
|
||||
},
|
||||
{
|
||||
"enumerant" : "FlagExplicit",
|
||||
"value" : "0x40"
|
||||
},
|
||||
{
|
||||
"enumerant" : "FlagPrototyped",
|
||||
"value" : "0x80"
|
||||
},
|
||||
{
|
||||
"enumerant" : "FlagObjectPointer",
|
||||
"value" : "0x100"
|
||||
},
|
||||
{
|
||||
"enumerant" : "FlagStaticMember",
|
||||
"value" : "0x200"
|
||||
},
|
||||
{
|
||||
"enumerant" : "FlagIndirectVariable",
|
||||
"value" : "0x400"
|
||||
},
|
||||
{
|
||||
"enumerant" : "FlagLValueReference",
|
||||
"value" : "0x800"
|
||||
},
|
||||
{
|
||||
"enumerant" : "FlagRValueReference",
|
||||
"value" : "0x1000"
|
||||
},
|
||||
{
|
||||
"enumerant" : "FlagIsOptimized",
|
||||
"value" : "0x2000"
|
||||
},
|
||||
{
|
||||
"enumerant" : "FlagIsEnumClass",
|
||||
"value" : "0x4000"
|
||||
},
|
||||
{
|
||||
"enumerant" : "FlagTypePassByValue",
|
||||
"value" : "0x8000"
|
||||
},
|
||||
{
|
||||
"enumerant" : "FlagTypePassByReference",
|
||||
"value" : "0x10000"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"category" : "ValueEnum",
|
||||
"kind" : "DebugBaseTypeAttributeEncoding",
|
||||
"enumerants" : [
|
||||
{
|
||||
"enumerant" : "Unspecified",
|
||||
"value" : "0"
|
||||
},
|
||||
{
|
||||
"enumerant" : "Address",
|
||||
"value" : "1"
|
||||
},
|
||||
{
|
||||
"enumerant" : "Boolean",
|
||||
"value" : "2"
|
||||
},
|
||||
{
|
||||
"enumerant" : "Float",
|
||||
"value" : "3"
|
||||
},
|
||||
{
|
||||
"enumerant" : "Signed",
|
||||
"value" : "4"
|
||||
},
|
||||
{
|
||||
"enumerant" : "SignedChar",
|
||||
"value" : "5"
|
||||
},
|
||||
{
|
||||
"enumerant" : "Unsigned",
|
||||
"value" : "6"
|
||||
},
|
||||
{
|
||||
"enumerant" : "UnsignedChar",
|
||||
"value" : "7"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"category" : "ValueEnum",
|
||||
"kind" : "DebugCompositeType",
|
||||
"enumerants" : [
|
||||
{
|
||||
"enumerant" : "Class",
|
||||
"value" : "0"
|
||||
},
|
||||
{
|
||||
"enumerant" : "Structure",
|
||||
"value" : "1"
|
||||
},
|
||||
{
|
||||
"enumerant" : "Union",
|
||||
"value" : "2"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"category" : "ValueEnum",
|
||||
"kind" : "DebugTypeQualifier",
|
||||
"enumerants" : [
|
||||
{
|
||||
"enumerant" : "ConstType",
|
||||
"value" : "0"
|
||||
},
|
||||
{
|
||||
"enumerant" : "VolatileType",
|
||||
"value" : "1"
|
||||
},
|
||||
{
|
||||
"enumerant" : "RestrictType",
|
||||
"value" : "2"
|
||||
},
|
||||
{
|
||||
"enumerant" : "AtomicType",
|
||||
"value" : "3"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"category" : "ValueEnum",
|
||||
"kind" : "DebugOperation",
|
||||
"enumerants" : [
|
||||
{
|
||||
"enumerant" : "Deref",
|
||||
"value" : "0"
|
||||
},
|
||||
{
|
||||
"enumerant" : "Plus",
|
||||
"value" : "1"
|
||||
},
|
||||
{
|
||||
"enumerant" : "Minus",
|
||||
"value" : "2"
|
||||
},
|
||||
{
|
||||
"enumerant" : "PlusUconst",
|
||||
"value" : "3",
|
||||
"parameters" : [
|
||||
{ "kind" : "IdRef" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"enumerant" : "BitPiece",
|
||||
"value" : "4",
|
||||
"parameters" : [
|
||||
{ "kind" : "IdRef" },
|
||||
{ "kind" : "IdRef" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"enumerant" : "Swap",
|
||||
"value" : "5"
|
||||
},
|
||||
{
|
||||
"enumerant" : "Xderef",
|
||||
"value" : "6"
|
||||
},
|
||||
{
|
||||
"enumerant" : "StackValue",
|
||||
"value" : "7"
|
||||
},
|
||||
{
|
||||
"enumerant" : "Constu",
|
||||
"value" : "8",
|
||||
"parameters" : [
|
||||
{ "kind" : "IdRef" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"enumerant" : "Fragment",
|
||||
"value" : "9",
|
||||
"parameters" : [
|
||||
{ "kind" : "IdRef" },
|
||||
{ "kind" : "IdRef" }
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"category" : "ValueEnum",
|
||||
"kind" : "DebugImportedEntity",
|
||||
"enumerants" : [
|
||||
{
|
||||
"enumerant" : "ImportedModule",
|
||||
"value" : "0"
|
||||
},
|
||||
{
|
||||
"enumerant" : "ImportedDeclaration",
|
||||
"value" : "1"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
11
3rdparty/spirv-tools/source/operand.cpp
vendored
11
3rdparty/spirv-tools/source/operand.cpp
vendored
@@ -229,6 +229,9 @@ const char* spvOperandTypeStr(spv_operand_type_t type) {
|
||||
return "ray query committed intersection type";
|
||||
case SPV_OPERAND_TYPE_RAY_QUERY_CANDIDATE_INTERSECTION_TYPE:
|
||||
return "ray query candidate intersection type";
|
||||
case SPV_OPERAND_TYPE_PACKED_VECTOR_FORMAT:
|
||||
case SPV_OPERAND_TYPE_OPTIONAL_PACKED_VECTOR_FORMAT:
|
||||
return "packed vector format";
|
||||
case SPV_OPERAND_TYPE_IMAGE:
|
||||
case SPV_OPERAND_TYPE_OPTIONAL_IMAGE:
|
||||
return "image";
|
||||
@@ -269,6 +272,10 @@ const char* spvOperandTypeStr(spv_operand_type_t type) {
|
||||
return "FP denorm mode";
|
||||
case SPV_OPERAND_TYPE_FPOPERATION_MODE:
|
||||
return "FP operation mode";
|
||||
case SPV_OPERAND_TYPE_QUANTIZATION_MODES:
|
||||
return "quantization mode";
|
||||
case SPV_OPERAND_TYPE_OVERFLOW_MODES:
|
||||
return "overflow mode";
|
||||
|
||||
case SPV_OPERAND_TYPE_NONE:
|
||||
return "NONE";
|
||||
@@ -355,6 +362,9 @@ bool spvOperandIsConcrete(spv_operand_type_t type) {
|
||||
case SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_IMPORTED_ENTITY:
|
||||
case SPV_OPERAND_TYPE_FPDENORM_MODE:
|
||||
case SPV_OPERAND_TYPE_FPOPERATION_MODE:
|
||||
case SPV_OPERAND_TYPE_QUANTIZATION_MODES:
|
||||
case SPV_OPERAND_TYPE_OVERFLOW_MODES:
|
||||
case SPV_OPERAND_TYPE_PACKED_VECTOR_FORMAT:
|
||||
return true;
|
||||
default:
|
||||
break;
|
||||
@@ -390,6 +400,7 @@ bool spvOperandIsOptional(spv_operand_type_t type) {
|
||||
case SPV_OPERAND_TYPE_OPTIONAL_TYPED_LITERAL_INTEGER:
|
||||
case SPV_OPERAND_TYPE_OPTIONAL_LITERAL_STRING:
|
||||
case SPV_OPERAND_TYPE_OPTIONAL_ACCESS_QUALIFIER:
|
||||
case SPV_OPERAND_TYPE_OPTIONAL_PACKED_VECTOR_FORMAT:
|
||||
case SPV_OPERAND_TYPE_OPTIONAL_CIV:
|
||||
return true;
|
||||
default:
|
||||
|
||||
@@ -474,14 +474,13 @@ bool AggressiveDCEPass::AggressiveDCE(Function* func) {
|
||||
ProcessLoad(func, varId);
|
||||
}
|
||||
// If DebugDeclare, process as load of variable
|
||||
} else if (liveInst->GetOpenCL100DebugOpcode() ==
|
||||
OpenCLDebugInfo100DebugDeclare) {
|
||||
} else if (liveInst->GetCommonDebugOpcode() ==
|
||||
CommonDebugInfoDebugDeclare) {
|
||||
uint32_t varId =
|
||||
liveInst->GetSingleWordOperand(kDebugDeclareOperandVariableIndex);
|
||||
ProcessLoad(func, varId);
|
||||
// If DebugValue with Deref, process as load of variable
|
||||
} else if (liveInst->GetOpenCL100DebugOpcode() ==
|
||||
OpenCLDebugInfo100DebugValue) {
|
||||
} else if (liveInst->GetCommonDebugOpcode() == CommonDebugInfoDebugValue) {
|
||||
uint32_t varId = context()
|
||||
->get_debug_info_mgr()
|
||||
->GetVariableIdOfDebugValueUsedForDeclare(liveInst);
|
||||
@@ -652,7 +651,7 @@ void AggressiveDCEPass::InitializeModuleScopeLiveInstructions() {
|
||||
// For each DebugInfo GlobalVariable keep all operands except the Variable.
|
||||
// Later, if the variable is dead, we will set the operand to DebugInfoNone.
|
||||
for (auto& dbg : get_module()->ext_inst_debuginfo()) {
|
||||
if (dbg.GetOpenCL100DebugOpcode() != OpenCLDebugInfo100DebugGlobalVariable)
|
||||
if (dbg.GetCommonDebugOpcode() != CommonDebugInfoDebugGlobalVariable)
|
||||
continue;
|
||||
dbg.ForEachInId([this](const uint32_t* iid) {
|
||||
Instruction* inInst = get_def_use_mgr()->GetDef(*iid);
|
||||
@@ -877,8 +876,7 @@ bool AggressiveDCEPass::ProcessGlobalValues() {
|
||||
if (!IsDead(&dbg)) continue;
|
||||
// Save GlobalVariable if its variable is live, otherwise null out variable
|
||||
// index
|
||||
if (dbg.GetOpenCL100DebugOpcode() ==
|
||||
OpenCLDebugInfo100DebugGlobalVariable) {
|
||||
if (dbg.GetCommonDebugOpcode() == CommonDebugInfoDebugGlobalVariable) {
|
||||
auto var_id = dbg.GetSingleWordOperand(kGlobalVariableVariableIndex);
|
||||
Instruction* var_inst = get_def_use_mgr()->GetDef(var_id);
|
||||
if (!IsDead(var_inst)) continue;
|
||||
@@ -996,6 +994,10 @@ void AggressiveDCEPass::InitExtensions() {
|
||||
"SPV_EXT_physical_storage_buffer",
|
||||
"SPV_KHR_terminate_invocation",
|
||||
"SPV_KHR_shader_clock",
|
||||
"SPV_KHR_vulkan_memory_model",
|
||||
"SPV_KHR_subgroup_uniform_control_flow",
|
||||
"SPV_KHR_integer_dot_product",
|
||||
"SPV_EXT_shader_image_int64",
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -28,7 +28,9 @@ namespace opt {
|
||||
bool BlockMergePass::MergeBlocks(Function* func) {
|
||||
bool modified = false;
|
||||
for (auto bi = func->begin(); bi != func->end();) {
|
||||
if (blockmergeutil::CanMergeWithSuccessor(context(), &*bi)) {
|
||||
// Don't bother trying to merge unreachable blocks.
|
||||
if (context()->IsReachable(*bi) &&
|
||||
blockmergeutil::CanMergeWithSuccessor(context(), &*bi)) {
|
||||
blockmergeutil::MergeWithSuccessor(context(), func, bi);
|
||||
// Reprocess block.
|
||||
modified = true;
|
||||
|
||||
@@ -103,11 +103,6 @@ bool CanMergeWithSuccessor(IRContext* context, BasicBlock* block) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Don't bother trying to merge unreachable blocks.
|
||||
if (auto dominators = context->GetDominatorAnalysis(block->GetParent())) {
|
||||
if (!dominators->IsReachable(block)) return false;
|
||||
}
|
||||
|
||||
Instruction* merge_inst = block->GetMergeInst();
|
||||
const bool pred_is_header = IsHeader(block);
|
||||
if (pred_is_header && lab_id != merge_inst->GetSingleWordInOperand(0u)) {
|
||||
|
||||
@@ -29,10 +29,10 @@ const uint32_t kCompositeExtractObjectInOperand = 0;
|
||||
const uint32_t kTypePointerStorageClassInIdx = 0;
|
||||
const uint32_t kTypePointerPointeeInIdx = 1;
|
||||
|
||||
bool IsOpenCL100DebugDeclareOrValue(Instruction* di) {
|
||||
auto dbg_opcode = di->GetOpenCL100DebugOpcode();
|
||||
return dbg_opcode == OpenCLDebugInfo100DebugDeclare ||
|
||||
dbg_opcode == OpenCLDebugInfo100DebugValue;
|
||||
bool IsDebugDeclareOrValue(Instruction* di) {
|
||||
auto dbg_opcode = di->GetCommonDebugOpcode();
|
||||
return dbg_opcode == CommonDebugInfoDebugDeclare ||
|
||||
dbg_opcode == CommonDebugInfoDebugValue;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
@@ -194,7 +194,7 @@ bool CopyPropagateArrays::HasValidReferencesOnly(Instruction* ptr_inst,
|
||||
return ptr_inst->opcode() == SpvOpVariable &&
|
||||
store_inst->GetSingleWordInOperand(kStorePointerInOperand) ==
|
||||
ptr_inst->result_id();
|
||||
} else if (IsOpenCL100DebugDeclareOrValue(use)) {
|
||||
} else if (IsDebugDeclareOrValue(use)) {
|
||||
return true;
|
||||
}
|
||||
// Some other instruction. Be conservative.
|
||||
@@ -500,7 +500,7 @@ bool CopyPropagateArrays::CanUpdateUses(Instruction* original_ptr_inst,
|
||||
const_mgr,
|
||||
type](Instruction* use,
|
||||
uint32_t) {
|
||||
if (IsOpenCL100DebugDeclareOrValue(use)) return true;
|
||||
if (IsDebugDeclareOrValue(use)) return true;
|
||||
|
||||
switch (use->opcode()) {
|
||||
case SpvOpLoad: {
|
||||
@@ -592,9 +592,9 @@ void CopyPropagateArrays::UpdateUses(Instruction* original_ptr_inst,
|
||||
Instruction* use = pair.first;
|
||||
uint32_t index = pair.second;
|
||||
|
||||
if (use->IsOpenCL100DebugInstr()) {
|
||||
switch (use->GetOpenCL100DebugOpcode()) {
|
||||
case OpenCLDebugInfo100DebugDeclare: {
|
||||
if (use->IsCommonDebugInstr()) {
|
||||
switch (use->GetCommonDebugOpcode()) {
|
||||
case CommonDebugInfoDebugDeclare: {
|
||||
if (new_ptr_inst->opcode() == SpvOpVariable ||
|
||||
new_ptr_inst->opcode() == SpvOpFunctionParameter) {
|
||||
context()->ForgetUses(use);
|
||||
@@ -608,9 +608,8 @@ void CopyPropagateArrays::UpdateUses(Instruction* original_ptr_inst,
|
||||
context()->ForgetUses(use);
|
||||
|
||||
// Change DebugDeclare to DebugValue.
|
||||
use->SetOperand(
|
||||
index - 2,
|
||||
{static_cast<uint32_t>(OpenCLDebugInfo100DebugValue)});
|
||||
use->SetOperand(index - 2,
|
||||
{static_cast<uint32_t>(CommonDebugInfoDebugValue)});
|
||||
use->SetOperand(index, {new_ptr_inst->result_id()});
|
||||
|
||||
// Add Deref operation.
|
||||
@@ -625,7 +624,7 @@ void CopyPropagateArrays::UpdateUses(Instruction* original_ptr_inst,
|
||||
}
|
||||
break;
|
||||
}
|
||||
case OpenCLDebugInfo100DebugValue:
|
||||
case CommonDebugInfoDebugValue:
|
||||
context()->ForgetUses(use);
|
||||
use->SetOperand(index, {new_ptr_inst->result_id()});
|
||||
context()->AnalyzeUses(use);
|
||||
|
||||
@@ -196,7 +196,7 @@ bool DeadInsertElimPass::EliminateDeadInsertsOnePass(Function* func) {
|
||||
}
|
||||
const uint32_t id = ii->result_id();
|
||||
get_def_use_mgr()->ForEachUser(id, [&ii, this](Instruction* user) {
|
||||
if (user->IsOpenCL100DebugInstr()) return;
|
||||
if (user->IsCommonDebugInstr()) return;
|
||||
switch (user->opcode()) {
|
||||
case SpvOpCompositeInsert:
|
||||
case SpvOpPhi:
|
||||
|
||||
@@ -80,6 +80,8 @@ void FeatureManager::AddExtInstImportIds(Module* module) {
|
||||
extinst_importid_GLSLstd450_ = module->GetExtInstImportId("GLSL.std.450");
|
||||
extinst_importid_OpenCL100DebugInfo_ =
|
||||
module->GetExtInstImportId("OpenCL.DebugInfo.100");
|
||||
extinst_importid_Vulkan100DebugInfo_ =
|
||||
module->GetExtInstImportId("NonSemantic.Vulkan.DebugInfo.100");
|
||||
}
|
||||
|
||||
bool operator==(const FeatureManager& a, const FeatureManager& b) {
|
||||
@@ -107,6 +109,11 @@ bool operator==(const FeatureManager& a, const FeatureManager& b) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (a.extinst_importid_Vulkan100DebugInfo_ !=
|
||||
b.extinst_importid_Vulkan100DebugInfo_) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
} // namespace opt
|
||||
|
||||
@@ -55,6 +55,10 @@ class FeatureManager {
|
||||
return extinst_importid_OpenCL100DebugInfo_;
|
||||
}
|
||||
|
||||
uint32_t GetExtInstImportId_Vulkan100DebugInfo() const {
|
||||
return extinst_importid_Vulkan100DebugInfo_;
|
||||
}
|
||||
|
||||
friend bool operator==(const FeatureManager& a, const FeatureManager& b);
|
||||
friend bool operator!=(const FeatureManager& a, const FeatureManager& b) {
|
||||
return !(a == b);
|
||||
@@ -92,6 +96,10 @@ class FeatureManager {
|
||||
// Common OpenCL100DebugInfo external instruction import ids, cached
|
||||
// for performance.
|
||||
uint32_t extinst_importid_OpenCL100DebugInfo_ = 0;
|
||||
|
||||
// Common NonSemanticVulkan100DebugInfo external instruction import ids,
|
||||
// cached for performance.
|
||||
uint32_t extinst_importid_Vulkan100DebugInfo_ = 0;
|
||||
};
|
||||
|
||||
} // namespace opt
|
||||
|
||||
10
3rdparty/spirv-tools/source/opt/inline_pass.cpp
vendored
10
3rdparty/spirv-tools/source/opt/inline_pass.cpp
vendored
@@ -158,8 +158,8 @@ bool InlinePass::CloneAndMapLocals(
|
||||
auto callee_block_itr = calleeFn->begin();
|
||||
auto callee_var_itr = callee_block_itr->begin();
|
||||
while (callee_var_itr->opcode() == SpvOp::SpvOpVariable ||
|
||||
callee_var_itr->GetOpenCL100DebugOpcode() ==
|
||||
OpenCLDebugInfo100DebugDeclare) {
|
||||
callee_var_itr->GetCommonDebugOpcode() ==
|
||||
CommonDebugInfoDebugDeclare) {
|
||||
if (callee_var_itr->opcode() != SpvOp::SpvOpVariable) {
|
||||
++callee_var_itr;
|
||||
continue;
|
||||
@@ -300,8 +300,7 @@ InstructionList::iterator InlinePass::AddStoresForVariableInitializers(
|
||||
UptrVectorIterator<BasicBlock> callee_first_block_itr) {
|
||||
auto callee_itr = callee_first_block_itr->begin();
|
||||
while (callee_itr->opcode() == SpvOp::SpvOpVariable ||
|
||||
callee_itr->GetOpenCL100DebugOpcode() ==
|
||||
OpenCLDebugInfo100DebugDeclare) {
|
||||
callee_itr->GetCommonDebugOpcode() == CommonDebugInfoDebugDeclare) {
|
||||
if (callee_itr->opcode() == SpvOp::SpvOpVariable &&
|
||||
callee_itr->NumInOperands() == 2) {
|
||||
assert(callee2caller.count(callee_itr->result_id()) &&
|
||||
@@ -315,8 +314,7 @@ InstructionList::iterator InlinePass::AddStoresForVariableInitializers(
|
||||
context()->get_debug_info_mgr()->BuildDebugScope(
|
||||
callee_itr->GetDebugScope(), inlined_at_ctx));
|
||||
}
|
||||
if (callee_itr->GetOpenCL100DebugOpcode() ==
|
||||
OpenCLDebugInfo100DebugDeclare) {
|
||||
if (callee_itr->GetCommonDebugOpcode() == CommonDebugInfoDebugDeclare) {
|
||||
InlineSingleInstruction(
|
||||
callee2caller, new_blk_ptr->get(), &*callee_itr,
|
||||
context()->get_debug_info_mgr()->BuildDebugInlinedAtChain(
|
||||
|
||||
59
3rdparty/spirv-tools/source/opt/instruction.cpp
vendored
59
3rdparty/spirv-tools/source/opt/instruction.cpp
vendored
@@ -16,6 +16,7 @@
|
||||
|
||||
#include <initializer_list>
|
||||
|
||||
#include "NonSemanticVulkanDebugInfo100.h"
|
||||
#include "OpenCLDebugInfo100.h"
|
||||
#include "source/disassemble.h"
|
||||
#include "source/opt/fold.h"
|
||||
@@ -32,7 +33,8 @@ const uint32_t kLoadBaseIndex = 0;
|
||||
const uint32_t kPointerTypeStorageClassIndex = 0;
|
||||
const uint32_t kTypeImageSampledIndex = 5;
|
||||
|
||||
// Constants for OpenCL.DebugInfo.100 extension instructions.
|
||||
// Constants for OpenCL.DebugInfo.100 / NonSemantic.Vulkan.DebugInfo.100
|
||||
// extension instructions.
|
||||
const uint32_t kExtInstSetIdInIdx = 0;
|
||||
const uint32_t kExtInstInstructionInIdx = 1;
|
||||
const uint32_t kDebugScopeNumWords = 7;
|
||||
@@ -64,7 +66,8 @@ Instruction::Instruction(IRContext* c, SpvOp op)
|
||||
|
||||
Instruction::Instruction(IRContext* c, const spv_parsed_instruction_t& inst,
|
||||
std::vector<Instruction>&& dbg_line)
|
||||
: context_(c),
|
||||
: utils::IntrusiveNodeBase<Instruction>(),
|
||||
context_(c),
|
||||
opcode_(static_cast<SpvOp>(inst.opcode)),
|
||||
has_type_id_(inst.type_id != 0),
|
||||
has_result_id_(inst.result_id != 0),
|
||||
@@ -84,7 +87,8 @@ Instruction::Instruction(IRContext* c, const spv_parsed_instruction_t& inst,
|
||||
|
||||
Instruction::Instruction(IRContext* c, const spv_parsed_instruction_t& inst,
|
||||
const DebugScope& dbg_scope)
|
||||
: context_(c),
|
||||
: utils::IntrusiveNodeBase<Instruction>(),
|
||||
context_(c),
|
||||
opcode_(static_cast<SpvOp>(inst.opcode)),
|
||||
has_type_id_(inst.type_id != 0),
|
||||
has_result_id_(inst.result_id != 0),
|
||||
@@ -122,6 +126,7 @@ Instruction::Instruction(IRContext* c, SpvOp op, uint32_t ty_id,
|
||||
|
||||
Instruction::Instruction(Instruction&& that)
|
||||
: utils::IntrusiveNodeBase<Instruction>(),
|
||||
context_(that.context_),
|
||||
opcode_(that.opcode_),
|
||||
has_type_id_(that.has_type_id_),
|
||||
has_result_id_(that.has_result_id_),
|
||||
@@ -135,6 +140,7 @@ Instruction::Instruction(Instruction&& that)
|
||||
}
|
||||
|
||||
Instruction& Instruction::operator=(Instruction&& that) {
|
||||
context_ = that.context_;
|
||||
opcode_ = that.opcode_;
|
||||
has_type_id_ = that.has_type_id_;
|
||||
has_result_id_ = that.has_result_id_;
|
||||
@@ -618,6 +624,49 @@ OpenCLDebugInfo100Instructions Instruction::GetOpenCL100DebugOpcode() const {
|
||||
GetSingleWordInOperand(kExtInstInstructionInIdx));
|
||||
}
|
||||
|
||||
NonSemanticVulkanDebugInfo100Instructions Instruction::GetVulkan100DebugOpcode()
|
||||
const {
|
||||
if (opcode() != SpvOpExtInst) {
|
||||
return NonSemanticVulkanDebugInfo100InstructionsMax;
|
||||
}
|
||||
|
||||
if (!context()->get_feature_mgr()->GetExtInstImportId_Vulkan100DebugInfo()) {
|
||||
return NonSemanticVulkanDebugInfo100InstructionsMax;
|
||||
}
|
||||
|
||||
if (GetSingleWordInOperand(kExtInstSetIdInIdx) !=
|
||||
context()->get_feature_mgr()->GetExtInstImportId_Vulkan100DebugInfo()) {
|
||||
return NonSemanticVulkanDebugInfo100InstructionsMax;
|
||||
}
|
||||
|
||||
return NonSemanticVulkanDebugInfo100Instructions(
|
||||
GetSingleWordInOperand(kExtInstInstructionInIdx));
|
||||
}
|
||||
|
||||
CommonDebugInfoInstructions Instruction::GetCommonDebugOpcode() const {
|
||||
if (opcode() != SpvOpExtInst) {
|
||||
return CommonDebugInfoInstructionsMax;
|
||||
}
|
||||
|
||||
const uint32_t opencl_set_id =
|
||||
context()->get_feature_mgr()->GetExtInstImportId_OpenCL100DebugInfo();
|
||||
const uint32_t vulkan_set_id =
|
||||
context()->get_feature_mgr()->GetExtInstImportId_Vulkan100DebugInfo();
|
||||
|
||||
if (!opencl_set_id && !vulkan_set_id) {
|
||||
return CommonDebugInfoInstructionsMax;
|
||||
}
|
||||
|
||||
const uint32_t used_set_id = GetSingleWordInOperand(kExtInstSetIdInIdx);
|
||||
|
||||
if (used_set_id != opencl_set_id && used_set_id != vulkan_set_id) {
|
||||
return CommonDebugInfoInstructionsMax;
|
||||
}
|
||||
|
||||
return CommonDebugInfoInstructions(
|
||||
GetSingleWordInOperand(kExtInstInstructionInIdx));
|
||||
}
|
||||
|
||||
bool Instruction::IsValidBaseImage() const {
|
||||
uint32_t tid = type_id();
|
||||
if (tid == 0) {
|
||||
@@ -940,10 +989,10 @@ void DebugScope::ToBinary(uint32_t type_id, uint32_t result_id,
|
||||
uint32_t ext_set,
|
||||
std::vector<uint32_t>* binary) const {
|
||||
uint32_t num_words = kDebugScopeNumWords;
|
||||
OpenCLDebugInfo100Instructions dbg_opcode = OpenCLDebugInfo100DebugScope;
|
||||
CommonDebugInfoInstructions dbg_opcode = CommonDebugInfoDebugScope;
|
||||
if (GetLexicalScope() == kNoDebugScope) {
|
||||
num_words = kDebugNoScopeNumWords;
|
||||
dbg_opcode = OpenCLDebugInfo100DebugNoScope;
|
||||
dbg_opcode = CommonDebugInfoDebugNoScope;
|
||||
} else if (GetInlinedAt() == kNoInlinedAt) {
|
||||
num_words = kDebugScopeNumWordsWithoutInlinedAt;
|
||||
}
|
||||
|
||||
20
3rdparty/spirv-tools/source/opt/instruction.h
vendored
20
3rdparty/spirv-tools/source/opt/instruction.h
vendored
@@ -22,7 +22,9 @@
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
|
||||
#include "NonSemanticVulkanDebugInfo100.h"
|
||||
#include "OpenCLDebugInfo100.h"
|
||||
#include "source/common_debug_info.h"
|
||||
#include "source/latest_version_glsl_std_450_header.h"
|
||||
#include "source/latest_version_spirv_header.h"
|
||||
#include "source/opcode.h"
|
||||
@@ -550,10 +552,28 @@ class Instruction : public utils::IntrusiveNodeBase<Instruction> {
|
||||
// OpenCLDebugInfo100InstructionsMax.
|
||||
OpenCLDebugInfo100Instructions GetOpenCL100DebugOpcode() const;
|
||||
|
||||
// Returns debug opcode of a NonSemantic.Vulkan.DebugInfo.100 instruction. If
|
||||
// it is not a NonSemantic.Vulkan.DebugInfo.100 instruction, just returns
|
||||
// NonSemanticVulkanDebugInfo100InstructionsMax.
|
||||
NonSemanticVulkanDebugInfo100Instructions GetVulkan100DebugOpcode() const;
|
||||
|
||||
// Returns debug opcode of an OpenCL.100.DebugInfo or
|
||||
// NonSemantic.Vulkan.DebugInfo.100 instruction. Since these overlap, we
|
||||
// return the OpenCLDebugInfo code
|
||||
CommonDebugInfoInstructions GetCommonDebugOpcode() const;
|
||||
|
||||
// Returns true if it is an OpenCL.DebugInfo.100 instruction.
|
||||
bool IsOpenCL100DebugInstr() const {
|
||||
return GetOpenCL100DebugOpcode() != OpenCLDebugInfo100InstructionsMax;
|
||||
}
|
||||
// Returns true if it is a NonSemantic.Vulkan.DebugInfo.100 instruction.
|
||||
bool IsVulkan100DebugInstr() const {
|
||||
return GetVulkan100DebugOpcode() !=
|
||||
NonSemanticVulkanDebugInfo100InstructionsMax;
|
||||
}
|
||||
bool IsCommonDebugInstr() const {
|
||||
return GetCommonDebugOpcode() != CommonDebugInfoInstructionsMax;
|
||||
}
|
||||
|
||||
// Returns true if this instructions a non-semantic instruction.
|
||||
bool IsNonSemanticInstruction() const;
|
||||
|
||||
12
3rdparty/spirv-tools/source/opt/ir_context.cpp
vendored
12
3rdparty/spirv-tools/source/opt/ir_context.cpp
vendored
@@ -30,7 +30,8 @@ static const int kSpvDecorateBuiltinInIdx = 2;
|
||||
static const int kEntryPointInterfaceInIdx = 3;
|
||||
static const int kEntryPointFunctionIdInIdx = 1;
|
||||
|
||||
// Constants for OpenCL.DebugInfo.100 extension instructions.
|
||||
// Constants for OpenCL.DebugInfo.100 / NonSemantic.Vulkan.DebugInfo.100
|
||||
// extension instructions.
|
||||
static const uint32_t kDebugFunctionOperandFunctionIndex = 13;
|
||||
static const uint32_t kDebugGlobalVariableOperandVariableIndex = 11;
|
||||
|
||||
@@ -437,8 +438,7 @@ void IRContext::KillOperandFromDebugInstructions(Instruction* inst) {
|
||||
if (opcode == SpvOpVariable || IsConstantInst(opcode)) {
|
||||
for (auto it = module()->ext_inst_debuginfo_begin();
|
||||
it != module()->ext_inst_debuginfo_end(); ++it) {
|
||||
if (it->GetOpenCL100DebugOpcode() !=
|
||||
OpenCLDebugInfo100DebugGlobalVariable)
|
||||
if (it->GetCommonDebugOpcode() != CommonDebugInfoDebugGlobalVariable)
|
||||
continue;
|
||||
auto& operand = it->GetOperand(kDebugGlobalVariableOperandVariableIndex);
|
||||
if (operand.words[0] == id) {
|
||||
@@ -1034,5 +1034,11 @@ bool IRContext::CheckCFG() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool IRContext::IsReachable(const opt::BasicBlock& bb) {
|
||||
auto enclosing_function = bb.GetParent();
|
||||
return GetDominatorAnalysis(enclosing_function)
|
||||
->Dominates(enclosing_function->entry().get(), &bb);
|
||||
}
|
||||
} // namespace opt
|
||||
} // namespace spvtools
|
||||
|
||||
10
3rdparty/spirv-tools/source/opt/ir_context.h
vendored
10
3rdparty/spirv-tools/source/opt/ir_context.h
vendored
@@ -190,8 +190,8 @@ class IRContext {
|
||||
inline IteratorRange<Module::const_inst_iterator> debugs3() const;
|
||||
|
||||
// Iterators for debug info instructions (excluding OpLine & OpNoLine)
|
||||
// contained in this module. These are OpExtInst for OpenCL.DebugInfo.100
|
||||
// or DebugInfo extension placed between section 9 and 10.
|
||||
// contained in this module. These are OpExtInst for DebugInfo extension
|
||||
// placed between section 9 and 10.
|
||||
inline Module::inst_iterator ext_inst_debuginfo_begin();
|
||||
inline Module::inst_iterator ext_inst_debuginfo_end();
|
||||
inline IteratorRange<Module::inst_iterator> ext_inst_debuginfo();
|
||||
@@ -598,10 +598,14 @@ class IRContext {
|
||||
bool ProcessCallTreeFromRoots(ProcessFunction& pfn,
|
||||
std::queue<uint32_t>* roots);
|
||||
|
||||
// Emmits a error message to the message consumer indicating the error
|
||||
// Emits a error message to the message consumer indicating the error
|
||||
// described by |message| occurred in |inst|.
|
||||
void EmitErrorMessage(std::string message, Instruction* inst);
|
||||
|
||||
// Returns true if and only if there is a path to |bb| from the entry block of
|
||||
// the function that contains |bb|.
|
||||
bool IsReachable(const opt::BasicBlock& bb);
|
||||
|
||||
private:
|
||||
// Builds the def-use manager from scratch, even if it was already valid.
|
||||
void BuildDefUseManager() {
|
||||
|
||||
12
3rdparty/spirv-tools/source/opt/ir_loader.cpp
vendored
12
3rdparty/spirv-tools/source/opt/ir_loader.cpp
vendored
@@ -53,10 +53,12 @@ bool IrLoader::AddInstruction(const spv_parsed_instruction_t* inst) {
|
||||
// struct DebugScope.
|
||||
if (opcode == SpvOpExtInst && spvExtInstIsDebugInfo(inst->ext_inst_type)) {
|
||||
const uint32_t ext_inst_index = inst->words[kExtInstSetIndex];
|
||||
if (inst->ext_inst_type == SPV_EXT_INST_TYPE_OPENCL_DEBUGINFO_100) {
|
||||
const OpenCLDebugInfo100Instructions ext_inst_key =
|
||||
OpenCLDebugInfo100Instructions(ext_inst_index);
|
||||
if (ext_inst_key == OpenCLDebugInfo100DebugScope) {
|
||||
if (inst->ext_inst_type == SPV_EXT_INST_TYPE_OPENCL_DEBUGINFO_100 ||
|
||||
inst->ext_inst_type ==
|
||||
SPV_EXT_INST_TYPE_NONSEMANTIC_VULKAN_DEBUGINFO_100) {
|
||||
const CommonDebugInfoInstructions ext_inst_key =
|
||||
CommonDebugInfoInstructions(ext_inst_index);
|
||||
if (ext_inst_key == CommonDebugInfoDebugScope) {
|
||||
uint32_t inlined_at = 0;
|
||||
if (inst->num_words > kInlinedAtIndex)
|
||||
inlined_at = inst->words[kInlinedAtIndex];
|
||||
@@ -65,7 +67,7 @@ bool IrLoader::AddInstruction(const spv_parsed_instruction_t* inst) {
|
||||
module()->SetContainsDebugInfo();
|
||||
return true;
|
||||
}
|
||||
if (ext_inst_key == OpenCLDebugInfo100DebugNoScope) {
|
||||
if (ext_inst_key == CommonDebugInfoDebugNoScope) {
|
||||
last_dbg_scope_ = DebugScope(kNoDebugScope, kNoInlinedAt);
|
||||
module()->SetContainsDebugInfo();
|
||||
return true;
|
||||
|
||||
@@ -184,8 +184,8 @@ bool LocalAccessChainConvertPass::IsConstantIndexAccessChain(
|
||||
bool LocalAccessChainConvertPass::HasOnlySupportedRefs(uint32_t ptrId) {
|
||||
if (supported_ref_ptrs_.find(ptrId) != supported_ref_ptrs_.end()) return true;
|
||||
if (get_def_use_mgr()->WhileEachUser(ptrId, [this](Instruction* user) {
|
||||
if (user->GetOpenCL100DebugOpcode() == OpenCLDebugInfo100DebugValue ||
|
||||
user->GetOpenCL100DebugOpcode() == OpenCLDebugInfo100DebugDeclare) {
|
||||
if (user->GetCommonDebugOpcode() == CommonDebugInfoDebugValue ||
|
||||
user->GetCommonDebugOpcode() == CommonDebugInfoDebugDeclare) {
|
||||
return true;
|
||||
}
|
||||
SpvOp op = user->opcode();
|
||||
@@ -418,6 +418,9 @@ void LocalAccessChainConvertPass::InitExtensions() {
|
||||
"SPV_KHR_ray_query",
|
||||
"SPV_EXT_fragment_invocation_density",
|
||||
"SPV_KHR_terminate_invocation",
|
||||
"SPV_KHR_subgroup_uniform_control_flow",
|
||||
"SPV_KHR_integer_dot_product",
|
||||
"SPV_EXT_shader_image_int64",
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -31,9 +31,9 @@ const uint32_t kStoreValIdInIdx = 1;
|
||||
bool LocalSingleBlockLoadStoreElimPass::HasOnlySupportedRefs(uint32_t ptrId) {
|
||||
if (supported_ref_ptrs_.find(ptrId) != supported_ref_ptrs_.end()) return true;
|
||||
if (get_def_use_mgr()->WhileEachUser(ptrId, [this](Instruction* user) {
|
||||
auto dbg_op = user->GetOpenCL100DebugOpcode();
|
||||
if (dbg_op == OpenCLDebugInfo100DebugDeclare ||
|
||||
dbg_op == OpenCLDebugInfo100DebugValue) {
|
||||
auto dbg_op = user->GetCommonDebugOpcode();
|
||||
if (dbg_op == CommonDebugInfoDebugDeclare ||
|
||||
dbg_op == CommonDebugInfoDebugValue) {
|
||||
return true;
|
||||
}
|
||||
SpvOp op = user->opcode();
|
||||
@@ -270,6 +270,9 @@ void LocalSingleBlockLoadStoreElimPass::InitExtensions() {
|
||||
"SPV_EXT_fragment_invocation_density",
|
||||
"SPV_EXT_physical_storage_buffer",
|
||||
"SPV_KHR_terminate_invocation",
|
||||
"SPV_KHR_subgroup_uniform_control_flow",
|
||||
"SPV_KHR_integer_dot_product",
|
||||
"SPV_EXT_shader_image_int64",
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -123,6 +123,9 @@ void LocalSingleStoreElimPass::InitExtensionAllowList() {
|
||||
"SPV_EXT_fragment_invocation_density",
|
||||
"SPV_EXT_physical_storage_buffer",
|
||||
"SPV_KHR_terminate_invocation",
|
||||
"SPV_KHR_subgroup_uniform_control_flow",
|
||||
"SPV_KHR_integer_dot_product",
|
||||
"SPV_EXT_shader_image_int64",
|
||||
});
|
||||
}
|
||||
bool LocalSingleStoreElimPass::ProcessVariable(Instruction* var_inst) {
|
||||
@@ -221,9 +224,9 @@ Instruction* LocalSingleStoreElimPass::FindSingleStoreAndCheckUses(
|
||||
case SpvOpCopyObject:
|
||||
break;
|
||||
case SpvOpExtInst: {
|
||||
auto dbg_op = user->GetOpenCL100DebugOpcode();
|
||||
if (dbg_op == OpenCLDebugInfo100DebugDeclare ||
|
||||
dbg_op == OpenCLDebugInfo100DebugValue) {
|
||||
auto dbg_op = user->GetCommonDebugOpcode();
|
||||
if (dbg_op == CommonDebugInfoDebugDeclare ||
|
||||
dbg_op == CommonDebugInfoDebugValue) {
|
||||
break;
|
||||
}
|
||||
return nullptr;
|
||||
@@ -290,9 +293,9 @@ bool LocalSingleStoreElimPass::RewriteLoads(
|
||||
bool modified = false;
|
||||
for (Instruction* use : uses) {
|
||||
if (use->opcode() == SpvOpStore) continue;
|
||||
auto dbg_op = use->GetOpenCL100DebugOpcode();
|
||||
if (dbg_op == OpenCLDebugInfo100DebugDeclare ||
|
||||
dbg_op == OpenCLDebugInfo100DebugValue)
|
||||
auto dbg_op = use->GetCommonDebugOpcode();
|
||||
if (dbg_op == CommonDebugInfoDebugDeclare ||
|
||||
dbg_op == CommonDebugInfoDebugValue)
|
||||
continue;
|
||||
if (use->opcode() == SpvOpLoad &&
|
||||
dominator_analysis->Dominates(store_inst, use)) {
|
||||
|
||||
7
3rdparty/spirv-tools/source/opt/mem_pass.cpp
vendored
7
3rdparty/spirv-tools/source/opt/mem_pass.cpp
vendored
@@ -20,7 +20,6 @@
|
||||
#include <set>
|
||||
#include <vector>
|
||||
|
||||
#include "OpenCLDebugInfo100.h"
|
||||
#include "source/cfa.h"
|
||||
#include "source/opt/basic_block.h"
|
||||
#include "source/opt/dominator_analysis.h"
|
||||
@@ -226,9 +225,9 @@ MemPass::MemPass() {}
|
||||
|
||||
bool MemPass::HasOnlySupportedRefs(uint32_t varId) {
|
||||
return get_def_use_mgr()->WhileEachUser(varId, [this](Instruction* user) {
|
||||
auto dbg_op = user->GetOpenCL100DebugOpcode();
|
||||
if (dbg_op == OpenCLDebugInfo100DebugDeclare ||
|
||||
dbg_op == OpenCLDebugInfo100DebugValue) {
|
||||
auto dbg_op = user->GetCommonDebugOpcode();
|
||||
if (dbg_op == CommonDebugInfoDebugDeclare ||
|
||||
dbg_op == CommonDebugInfoDebugValue) {
|
||||
return true;
|
||||
}
|
||||
SpvOp op = user->opcode();
|
||||
|
||||
8
3rdparty/spirv-tools/source/opt/module.h
vendored
8
3rdparty/spirv-tools/source/opt/module.h
vendored
@@ -103,8 +103,8 @@ class Module {
|
||||
// This is due to decision by the SPIR Working Group, pending publication.
|
||||
inline void AddDebug3Inst(std::unique_ptr<Instruction> d);
|
||||
|
||||
// Appends a debug info extension (OpenCL.DebugInfo.100 or DebugInfo)
|
||||
// instruction to this module.
|
||||
// Appends a debug info extension (OpenCL.DebugInfo.100,
|
||||
// NonSemantic.Vulkan.DebugInfo.100, or DebugInfo) instruction to this module.
|
||||
inline void AddExtInstDebugInfo(std::unique_ptr<Instruction> d);
|
||||
|
||||
// Appends an annotation instruction to this module.
|
||||
@@ -192,8 +192,8 @@ class Module {
|
||||
inline IteratorRange<const_inst_iterator> debugs3() const;
|
||||
|
||||
// Iterators for debug info instructions (excluding OpLine & OpNoLine)
|
||||
// contained in this module. These are OpExtInst for OpenCL.DebugInfo.100
|
||||
// or DebugInfo extension placed between section 9 and 10.
|
||||
// contained in this module. These are OpExtInst for DebugInfo extension
|
||||
// placed between section 9 and 10.
|
||||
inline inst_iterator ext_inst_debuginfo_begin();
|
||||
inline inst_iterator ext_inst_debuginfo_end();
|
||||
inline IteratorRange<inst_iterator> ext_inst_debuginfo();
|
||||
|
||||
@@ -489,6 +489,8 @@ bool Optimizer::RegisterPassFromFlag(const std::string& flag) {
|
||||
RegisterSizePasses();
|
||||
} else if (pass_name == "legalize-hlsl") {
|
||||
RegisterLegalizationPasses();
|
||||
} else if (pass_name == "remove-unused-interface-variables") {
|
||||
RegisterPass(CreateRemoveUnusedInterfaceVariablesPass());
|
||||
} else if (pass_name == "graphics-robust-access") {
|
||||
RegisterPass(CreateGraphicsRobustAccessPass());
|
||||
} else if (pass_name == "wrap-opkill") {
|
||||
@@ -729,6 +731,11 @@ Optimizer::PassToken CreateAggressiveDCEPass() {
|
||||
MakeUnique<opt::AggressiveDCEPass>());
|
||||
}
|
||||
|
||||
Optimizer::PassToken CreateRemoveUnusedInterfaceVariablesPass() {
|
||||
return MakeUnique<Optimizer::PassToken::Impl>(
|
||||
MakeUnique<opt::RemoveUnusedInterfaceVariablesPass>());
|
||||
}
|
||||
|
||||
Optimizer::PassToken CreatePropagateLineInfoPass() {
|
||||
return MakeUnique<Optimizer::PassToken::Impl>(MakeUnique<opt::EmptyPass>());
|
||||
}
|
||||
|
||||
1
3rdparty/spirv-tools/source/opt/passes.h
vendored
1
3rdparty/spirv-tools/source/opt/passes.h
vendored
@@ -64,6 +64,7 @@
|
||||
#include "source/opt/redundancy_elimination.h"
|
||||
#include "source/opt/relax_float_ops_pass.h"
|
||||
#include "source/opt/remove_duplicates_pass.h"
|
||||
#include "source/opt/remove_unused_interface_variables_pass.h"
|
||||
#include "source/opt/replace_invalid_opc.h"
|
||||
#include "source/opt/scalar_replacement_pass.h"
|
||||
#include "source/opt/set_spec_constant_default_value_pass.h"
|
||||
|
||||
@@ -157,8 +157,7 @@ uint32_t PrivateToLocalPass::GetNewType(uint32_t old_type_id) {
|
||||
bool PrivateToLocalPass::IsValidUse(const Instruction* inst) const {
|
||||
// The cases in this switch have to match the cases in |UpdateUse|.
|
||||
// If we don't know how to update it, it is not valid.
|
||||
if (inst->GetOpenCL100DebugOpcode() ==
|
||||
OpenCLDebugInfo100DebugGlobalVariable) {
|
||||
if (inst->GetCommonDebugOpcode() == CommonDebugInfoDebugGlobalVariable) {
|
||||
return true;
|
||||
}
|
||||
switch (inst->opcode()) {
|
||||
@@ -183,8 +182,7 @@ bool PrivateToLocalPass::UpdateUse(Instruction* inst, Instruction* user) {
|
||||
// The cases in this switch have to match the cases in |IsValidUse|. If we
|
||||
// don't think it is valid, the optimization will not view the variable as a
|
||||
// candidate, and therefore the use will not be updated.
|
||||
if (inst->GetOpenCL100DebugOpcode() ==
|
||||
OpenCLDebugInfo100DebugGlobalVariable) {
|
||||
if (inst->GetCommonDebugOpcode() == CommonDebugInfoDebugGlobalVariable) {
|
||||
context()->get_debug_info_mgr()->ConvertDebugGlobalToLocalVariable(inst,
|
||||
user);
|
||||
return true;
|
||||
|
||||
@@ -139,7 +139,7 @@ bool ReduceLoadSize::ShouldReplaceExtract(Instruction* inst) {
|
||||
|
||||
all_elements_used =
|
||||
!def_use_mgr->WhileEachUser(op_inst, [&elements_used](Instruction* use) {
|
||||
if (use->IsOpenCL100DebugInstr()) return true;
|
||||
if (use->IsCommonDebugInstr()) return true;
|
||||
if (use->opcode() != SpvOpCompositeExtract ||
|
||||
use->NumInOperands() == 1) {
|
||||
return false;
|
||||
|
||||
93
3rdparty/spirv-tools/source/opt/remove_unused_interface_variables_pass.cpp
vendored
Normal file
93
3rdparty/spirv-tools/source/opt/remove_unused_interface_variables_pass.cpp
vendored
Normal file
@@ -0,0 +1,93 @@
|
||||
// Copyright (c) 2021 ZHOU He
|
||||
//
|
||||
// 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 "remove_unused_interface_variables_pass.h"
|
||||
#include "source/spirv_constant.h"
|
||||
namespace spvtools {
|
||||
namespace opt {
|
||||
|
||||
class RemoveUnusedInterfaceVariablesContext {
|
||||
RemoveUnusedInterfaceVariablesPass& parent_;
|
||||
Instruction& entry_;
|
||||
std::unordered_set<uint32_t> used_variables_;
|
||||
IRContext::ProcessFunction pfn_ =
|
||||
std::bind(&RemoveUnusedInterfaceVariablesContext::processFunction, this,
|
||||
std::placeholders::_1);
|
||||
|
||||
bool processFunction(Function* func) {
|
||||
for (const auto& basic_block : *func)
|
||||
for (const auto& instruction : basic_block)
|
||||
instruction.ForEachInId([&](const uint32_t* id) {
|
||||
if (used_variables_.count(*id)) return;
|
||||
auto* var = parent_.get_def_use_mgr()->GetDef(*id);
|
||||
if (!var || var->opcode() != SpvOpVariable) return;
|
||||
auto storage_class = var->GetSingleWordInOperand(0);
|
||||
if (storage_class != SpvStorageClassFunction &&
|
||||
(parent_.get_module()->version() >=
|
||||
SPV_SPIRV_VERSION_WORD(1, 4) ||
|
||||
storage_class == SpvStorageClassInput ||
|
||||
storage_class == SpvStorageClassOutput))
|
||||
used_variables_.insert(*id);
|
||||
});
|
||||
return false;
|
||||
}
|
||||
|
||||
public:
|
||||
RemoveUnusedInterfaceVariablesContext(
|
||||
RemoveUnusedInterfaceVariablesPass& parent, Instruction& entry)
|
||||
: parent_(parent), entry_(entry) {}
|
||||
|
||||
void CollectUsedVariables() {
|
||||
std::queue<uint32_t> roots;
|
||||
roots.push(entry_.GetSingleWordInOperand(1));
|
||||
parent_.context()->ProcessCallTreeFromRoots(pfn_, &roots);
|
||||
}
|
||||
|
||||
bool ShouldModify() {
|
||||
std::unordered_set<uint32_t> old_variables;
|
||||
for (int i = entry_.NumInOperands() - 1; i >= 3; --i) {
|
||||
auto variable = entry_.GetInOperand(i).words[0];
|
||||
if (!used_variables_.count(variable)) return true; // It is unused.
|
||||
if (old_variables.count(variable)) return true; // It is duplicate.
|
||||
old_variables.insert(variable);
|
||||
}
|
||||
if (old_variables.size() != used_variables_.size()) // Missing IDs.
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
void Modify() {
|
||||
for (int i = entry_.NumInOperands() - 1; i >= 3; --i)
|
||||
entry_.RemoveInOperand(i);
|
||||
for (auto id : used_variables_) {
|
||||
entry_.AddOperand(Operand(SPV_OPERAND_TYPE_ID, {id}));
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
RemoveUnusedInterfaceVariablesPass::Status
|
||||
RemoveUnusedInterfaceVariablesPass::Process() {
|
||||
bool modified = false;
|
||||
for (auto& entry : get_module()->entry_points()) {
|
||||
RemoveUnusedInterfaceVariablesContext context(*this, entry);
|
||||
context.CollectUsedVariables();
|
||||
if (context.ShouldModify()) {
|
||||
context.Modify();
|
||||
modified = true;
|
||||
}
|
||||
}
|
||||
return (modified ? Status::SuccessWithChange : Status::SuccessWithoutChange);
|
||||
}
|
||||
} // namespace opt
|
||||
} // namespace spvtools
|
||||
26
3rdparty/spirv-tools/source/opt/remove_unused_interface_variables_pass.h
vendored
Normal file
26
3rdparty/spirv-tools/source/opt/remove_unused_interface_variables_pass.h
vendored
Normal file
@@ -0,0 +1,26 @@
|
||||
// Copyright (c) 2021 ZHOU He
|
||||
//
|
||||
// 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/pass.h"
|
||||
namespace spvtools {
|
||||
namespace opt {
|
||||
|
||||
class RemoveUnusedInterfaceVariablesPass : public Pass {
|
||||
const char* name() const override {
|
||||
return "remove-unused-interface-variables-pass";
|
||||
}
|
||||
Status Process() override;
|
||||
};
|
||||
} // namespace opt
|
||||
} // namespace spvtools
|
||||
@@ -83,14 +83,14 @@ Pass::Status ScalarReplacementPass::ReplaceVariable(
|
||||
std::vector<Instruction*> dead;
|
||||
bool replaced_all_uses = get_def_use_mgr()->WhileEachUser(
|
||||
inst, [this, &replacements, &dead](Instruction* user) {
|
||||
if (user->GetOpenCL100DebugOpcode() == OpenCLDebugInfo100DebugDeclare) {
|
||||
if (user->GetCommonDebugOpcode() == CommonDebugInfoDebugDeclare) {
|
||||
if (ReplaceWholeDebugDeclare(user, replacements)) {
|
||||
dead.push_back(user);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
if (user->GetOpenCL100DebugOpcode() == OpenCLDebugInfo100DebugValue) {
|
||||
if (user->GetCommonDebugOpcode() == CommonDebugInfoDebugValue) {
|
||||
if (ReplaceWholeDebugValue(user, replacements)) {
|
||||
dead.push_back(user);
|
||||
return true;
|
||||
@@ -504,7 +504,7 @@ void ScalarReplacementPass::CreateVariable(
|
||||
}
|
||||
}
|
||||
|
||||
// Update the OpenCL.DebugInfo.100 debug information.
|
||||
// Update the DebugInfo debug information.
|
||||
inst->UpdateDebugInfoFrom(varInst);
|
||||
|
||||
replacements->push_back(inst);
|
||||
@@ -791,8 +791,8 @@ bool ScalarReplacementPass::CheckUses(const Instruction* inst,
|
||||
get_def_use_mgr()->ForEachUse(inst, [this, max_legal_index, stats, &ok](
|
||||
const Instruction* user,
|
||||
uint32_t index) {
|
||||
if (user->GetOpenCL100DebugOpcode() == OpenCLDebugInfo100DebugDeclare ||
|
||||
user->GetOpenCL100DebugOpcode() == OpenCLDebugInfo100DebugValue) {
|
||||
if (user->GetCommonDebugOpcode() == CommonDebugInfoDebugDeclare ||
|
||||
user->GetCommonDebugOpcode() == CommonDebugInfoDebugValue) {
|
||||
// TODO: include num_partial_accesses if it uses Fragment operation or
|
||||
// DebugValue has Indexes operand.
|
||||
stats->num_full_accesses++;
|
||||
|
||||
@@ -50,7 +50,7 @@ uint32_t ValueNumberTable::AssignValueNumber(Instruction* 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.
|
||||
if (!context()->IsCombinatorInstruction(inst) &&
|
||||
!inst->IsOpenCL100DebugInstr()) {
|
||||
!inst->IsCommonDebugInstr()) {
|
||||
value = TakeNextValueNumber();
|
||||
id_to_value_[inst->result_id()] = value;
|
||||
return value;
|
||||
|
||||
@@ -52,7 +52,7 @@ void VectorDCE::FindLiveComponents(Function* function,
|
||||
// components are live because of arbitrary nesting of structs.
|
||||
function->ForEachInst(
|
||||
[&work_list, this, live_components](Instruction* current_inst) {
|
||||
if (current_inst->IsOpenCL100DebugInstr()) {
|
||||
if (current_inst->IsCommonDebugInstr()) {
|
||||
return;
|
||||
}
|
||||
if (!HasVectorOrScalarResult(current_inst) ||
|
||||
@@ -394,7 +394,7 @@ void VectorDCE::MarkDebugValueUsesAsDead(
|
||||
Instruction* composite, std::vector<Instruction*>* dead_dbg_value) {
|
||||
context()->get_def_use_mgr()->ForEachUser(
|
||||
composite, [&dead_dbg_value](Instruction* use) {
|
||||
if (use->GetOpenCL100DebugOpcode() == OpenCLDebugInfo100DebugValue)
|
||||
if (use->GetCommonDebugOpcode() == CommonDebugInfoDebugValue)
|
||||
dead_dbg_value->push_back(use);
|
||||
});
|
||||
}
|
||||
|
||||
2
3rdparty/spirv-tools/source/print.cpp
vendored
2
3rdparty/spirv-tools/source/print.cpp
vendored
@@ -15,7 +15,7 @@
|
||||
#include "source/print.h"
|
||||
|
||||
#if defined(SPIRV_ANDROID) || defined(SPIRV_LINUX) || defined(SPIRV_MAC) || \
|
||||
defined(SPIRV_IOS) || defined(SPIRV_FREEBSD) || \
|
||||
defined(SPIRV_IOS) || defined(SPIRV_TVOS) || defined(SPIRV_FREEBSD) || \
|
||||
defined(SPIRV_EMSCRIPTEN) || defined(SPIRV_FUCHSIA)
|
||||
namespace spvtools {
|
||||
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
#include "source/reduce/remove_unused_instruction_reduction_opportunity_finder.h"
|
||||
#include "source/reduce/remove_unused_struct_member_reduction_opportunity_finder.h"
|
||||
#include "source/reduce/simple_conditional_branch_to_branch_opportunity_finder.h"
|
||||
#include "source/reduce/structured_construct_to_block_reduction_opportunity_finder.h"
|
||||
#include "source/reduce/structured_loop_to_selection_reduction_opportunity_finder.h"
|
||||
#include "source/spirv_reducer_options.h"
|
||||
|
||||
@@ -112,6 +113,8 @@ void Reducer::AddDefaultReductionPasses() {
|
||||
spvtools::MakeUnique<OperandToConstReductionOpportunityFinder>());
|
||||
AddReductionPass(
|
||||
spvtools::MakeUnique<OperandToDominatingIdReductionOpportunityFinder>());
|
||||
AddReductionPass(spvtools::MakeUnique<
|
||||
StructuredConstructToBlockReductionOpportunityFinder>());
|
||||
AddReductionPass(spvtools::MakeUnique<
|
||||
StructuredLoopToSelectionReductionOpportunityFinder>());
|
||||
AddReductionPass(
|
||||
@@ -141,7 +144,7 @@ void Reducer::AddReductionPass(
|
||||
std::unique_ptr<ReductionOpportunityFinder> finder) {
|
||||
passes_.push_back(
|
||||
spvtools::MakeUnique<ReductionPass>(target_env_, std::move(finder)));
|
||||
}
|
||||
}
|
||||
|
||||
void Reducer::AddCleanupReductionPass(
|
||||
std::unique_ptr<ReductionOpportunityFinder> finder) {
|
||||
|
||||
67
3rdparty/spirv-tools/source/reduce/structured_construct_to_block_reduction_opportunity.cpp
vendored
Normal file
67
3rdparty/spirv-tools/source/reduce/structured_construct_to_block_reduction_opportunity.cpp
vendored
Normal file
@@ -0,0 +1,67 @@
|
||||
// Copyright (c) 2021 Alastair F. Donaldson
|
||||
//
|
||||
// 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/reduce/structured_construct_to_block_reduction_opportunity.h"
|
||||
|
||||
namespace spvtools {
|
||||
namespace reduce {
|
||||
|
||||
bool StructuredConstructToBlockReductionOpportunity::PreconditionHolds() {
|
||||
return context_->get_def_use_mgr()->GetDef(construct_header_) != nullptr;
|
||||
}
|
||||
|
||||
void StructuredConstructToBlockReductionOpportunity::Apply() {
|
||||
auto header_block = context_->cfg()->block(construct_header_);
|
||||
auto merge_block = context_->cfg()->block(header_block->MergeBlockId());
|
||||
|
||||
auto* enclosing_function = header_block->GetParent();
|
||||
|
||||
// A region of blocks is defined in terms of dominators and post-dominators,
|
||||
// so we compute these for the enclosing function.
|
||||
auto* dominators = context_->GetDominatorAnalysis(enclosing_function);
|
||||
auto* postdominators = context_->GetPostDominatorAnalysis(enclosing_function);
|
||||
|
||||
// For each block in the function, determine whether it is inside the region.
|
||||
// If it is, delete it.
|
||||
for (auto block_it = enclosing_function->begin();
|
||||
block_it != enclosing_function->end();) {
|
||||
if (header_block != &*block_it && merge_block != &*block_it &&
|
||||
dominators->Dominates(header_block, &*block_it) &&
|
||||
postdominators->Dominates(merge_block, &*block_it)) {
|
||||
block_it = block_it.Erase();
|
||||
} else {
|
||||
++block_it;
|
||||
}
|
||||
}
|
||||
// Having removed some blocks from the module it is necessary to invalidate
|
||||
// analyses, since the remaining patch-up work depends on various analyses
|
||||
// which will otherwise reference blocks that have been deleted.
|
||||
context_->InvalidateAnalysesExceptFor(opt::IRContext::kAnalysisNone);
|
||||
|
||||
// We demote the header of the region to a regular block by deleting its merge
|
||||
// instruction.
|
||||
context_->KillInst(header_block->GetMergeInst());
|
||||
|
||||
// The terminator for the header block is changed to be an unconditional
|
||||
// branch to the merge block.
|
||||
header_block->terminator()->SetOpcode(SpvOpBranch);
|
||||
header_block->terminator()->SetInOperands(
|
||||
{{SPV_OPERAND_TYPE_ID, {merge_block->id()}}});
|
||||
|
||||
// This is an intrusive change, so we invalidate all analyses.
|
||||
context_->InvalidateAnalysesExceptFor(opt::IRContext::kAnalysisNone);
|
||||
}
|
||||
|
||||
} // namespace reduce
|
||||
} // namespace spvtools
|
||||
49
3rdparty/spirv-tools/source/reduce/structured_construct_to_block_reduction_opportunity.h
vendored
Normal file
49
3rdparty/spirv-tools/source/reduce/structured_construct_to_block_reduction_opportunity.h
vendored
Normal file
@@ -0,0 +1,49 @@
|
||||
// Copyright (c) 2021 Alastair F. Donaldson
|
||||
//
|
||||
// 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_REDUCE_STRUCTURED_CONSTRUCT_TO_BLOCK_REDUCTION_OPPORTUNITY_H_
|
||||
#define SOURCE_REDUCE_STRUCTURED_CONSTRUCT_TO_BLOCK_REDUCTION_OPPORTUNITY_H_
|
||||
|
||||
#include "source/opt/ir_context.h"
|
||||
#include "source/reduce/reduction_opportunity.h"
|
||||
|
||||
namespace spvtools {
|
||||
namespace reduce {
|
||||
|
||||
// An opportunity to replace a skeletal structured control flow construct with a
|
||||
// single block.
|
||||
class StructuredConstructToBlockReductionOpportunity
|
||||
: public ReductionOpportunity {
|
||||
public:
|
||||
// Constructs an opportunity from a header block id.
|
||||
StructuredConstructToBlockReductionOpportunity(opt::IRContext* context,
|
||||
uint32_t construct_header)
|
||||
: context_(context), construct_header_(construct_header) {}
|
||||
|
||||
// Returns true if and only if |construct_header_| exists in the module -
|
||||
// another opportunity may have removed it.
|
||||
bool PreconditionHolds() override;
|
||||
|
||||
protected:
|
||||
void Apply() override;
|
||||
|
||||
private:
|
||||
opt::IRContext* context_;
|
||||
uint32_t construct_header_;
|
||||
};
|
||||
|
||||
} // namespace reduce
|
||||
} // namespace spvtools
|
||||
|
||||
#endif // SOURCE_REDUCE_STRUCTURED_CONSTRUCT_TO_BLOCK_REDUCTION_OPPORTUNITY_H_
|
||||
185
3rdparty/spirv-tools/source/reduce/structured_construct_to_block_reduction_opportunity_finder.cpp
vendored
Normal file
185
3rdparty/spirv-tools/source/reduce/structured_construct_to_block_reduction_opportunity_finder.cpp
vendored
Normal file
@@ -0,0 +1,185 @@
|
||||
// Copyright (c) 2021 Alastair F. Donaldson
|
||||
//
|
||||
// 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/reduce/structured_construct_to_block_reduction_opportunity_finder.h"
|
||||
|
||||
#include <unordered_set>
|
||||
|
||||
#include "source/reduce/structured_construct_to_block_reduction_opportunity.h"
|
||||
|
||||
namespace spvtools {
|
||||
namespace reduce {
|
||||
|
||||
std::vector<std::unique_ptr<ReductionOpportunity>>
|
||||
StructuredConstructToBlockReductionOpportunityFinder::GetAvailableOpportunities(
|
||||
opt::IRContext* context, uint32_t target_function) const {
|
||||
std::vector<std::unique_ptr<ReductionOpportunity>> result;
|
||||
|
||||
// Consider every function in the module.
|
||||
for (auto* function : GetTargetFunctions(context, target_function)) {
|
||||
// For every header block in the function, there is potentially a region of
|
||||
// blocks that could be collapsed.
|
||||
std::unordered_map<opt::BasicBlock*, std::unordered_set<opt::BasicBlock*>>
|
||||
regions;
|
||||
|
||||
// Regions are identified using dominators and postdominators, so we compute
|
||||
// those for the function.
|
||||
auto* dominators = context->GetDominatorAnalysis(function);
|
||||
auto* postdominators = context->GetPostDominatorAnalysis(function);
|
||||
|
||||
// Consider every block in the function.
|
||||
for (auto& block : *function) {
|
||||
// If a block has an unreachable predecessor then folding away a region in
|
||||
// which that block is contained gets complicated, so we ignore regions
|
||||
// that contain such blocks. We note whether this block suffers from this
|
||||
// problem.
|
||||
bool has_unreachable_predecessor =
|
||||
HasUnreachablePredecessor(block, context);
|
||||
|
||||
// Look through all the regions we have identified so far to see whether
|
||||
// this block is part of a region, or spoils a region (by having an
|
||||
// unreachable predecessor).
|
||||
for (auto entry = regions.begin(); entry != regions.end();) {
|
||||
// |block| is in this region if it is dominated by the header,
|
||||
// post-dominated by the merge, and different from the merge.
|
||||
assert(&block != entry->first &&
|
||||
"The block should not be the region's header because we only "
|
||||
"make a region when we encounter its header.");
|
||||
if (entry->first->MergeBlockId() != block.id() &&
|
||||
dominators->Dominates(entry->first, &block) &&
|
||||
postdominators->Dominates(
|
||||
entry->first->GetMergeInst()->GetSingleWordInOperand(0),
|
||||
block.id())) {
|
||||
if (has_unreachable_predecessor) {
|
||||
// The block would be in this region, but it has an unreachable
|
||||
// predecessor. This spoils the region, so we remove it.
|
||||
entry = regions.erase(entry);
|
||||
continue;
|
||||
} else {
|
||||
// Add the block to the region.
|
||||
entry->second.insert(&block);
|
||||
}
|
||||
}
|
||||
++entry;
|
||||
}
|
||||
if (block.MergeBlockIdIfAny() == 0) {
|
||||
// The block isn't a header, so it doesn't constitute a new region.
|
||||
continue;
|
||||
}
|
||||
if (!context->IsReachable(block)) {
|
||||
// The block isn't reachable, so it doesn't constitute a new region.
|
||||
continue;
|
||||
}
|
||||
auto* merge_block = context->cfg()->block(
|
||||
block.GetMergeInst()->GetSingleWordInOperand(0));
|
||||
if (!context->IsReachable(*merge_block)) {
|
||||
// The block's merge is unreachable, so it doesn't constitute a new
|
||||
// region.
|
||||
continue;
|
||||
}
|
||||
assert(dominators->Dominates(&block, merge_block) &&
|
||||
"The merge block is reachable, so the header must dominate it");
|
||||
if (!postdominators->Dominates(merge_block, &block)) {
|
||||
// The block is not post-dominated by its merge. This happens for
|
||||
// instance when there is a break from a conditional, or an early exit.
|
||||
// This also means that we don't add a region.
|
||||
continue;
|
||||
}
|
||||
// We have a reachable header block with a rechable merge that
|
||||
// postdominates the header: this means we have a new region.
|
||||
regions.emplace(&block, std::unordered_set<opt::BasicBlock*>());
|
||||
}
|
||||
|
||||
// Now that we have found all the regions and blocks within them, we check
|
||||
// whether any region defines an id that is used outside the region. If this
|
||||
// is *not* the case, then we have an opportunity to collapse the region
|
||||
// down to its header block and merge block.
|
||||
for (auto& entry : regions) {
|
||||
if (DefinitionsRestrictedToRegion(*entry.first, entry.second, context)) {
|
||||
result.emplace_back(
|
||||
MakeUnique<StructuredConstructToBlockReductionOpportunity>(
|
||||
context, entry.first->id()));
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
bool StructuredConstructToBlockReductionOpportunityFinder::
|
||||
DefinitionsRestrictedToRegion(
|
||||
const opt::BasicBlock& header,
|
||||
const std::unordered_set<opt::BasicBlock*>& region,
|
||||
opt::IRContext* context) {
|
||||
// Consider every block in the region.
|
||||
for (auto& block : region) {
|
||||
// Consider every instruction in the block - this includes the label
|
||||
// instruction
|
||||
if (!block->WhileEachInst(
|
||||
[context, &header, ®ion](opt::Instruction* inst) -> bool {
|
||||
if (inst->result_id() == 0) {
|
||||
// The instruction does not genreate a result id, thus it cannot
|
||||
// be referred to outside the region - this is fine.
|
||||
return true;
|
||||
}
|
||||
// Consider every use of the instruction's result id.
|
||||
if (!context->get_def_use_mgr()->WhileEachUse(
|
||||
inst->result_id(),
|
||||
[context, &header, ®ion](opt::Instruction* user,
|
||||
uint32_t) -> bool {
|
||||
auto user_block = context->get_instr_block(user);
|
||||
if (user == header.GetMergeInst() ||
|
||||
user == header.terminator()) {
|
||||
// We are going to delete the header's merge
|
||||
// instruction and rewrite its terminator, so it does
|
||||
// not matter if the user is one of these
|
||||
// instructions.
|
||||
return true;
|
||||
}
|
||||
if (user_block == nullptr ||
|
||||
region.count(user_block) == 0) {
|
||||
// The user is either a global instruction, or an
|
||||
// instruction in a block outside the region. Removing
|
||||
// the region would invalidate this user.
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
})) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
})) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool StructuredConstructToBlockReductionOpportunityFinder::
|
||||
HasUnreachablePredecessor(const opt::BasicBlock& block,
|
||||
opt::IRContext* context) {
|
||||
for (auto pred : context->cfg()->preds(block.id())) {
|
||||
if (!context->IsReachable(*context->cfg()->block(pred))) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
std::string StructuredConstructToBlockReductionOpportunityFinder::GetName()
|
||||
const {
|
||||
return "StructuredConstructToBlockReductionOpportunityFinder";
|
||||
}
|
||||
|
||||
} // namespace reduce
|
||||
} // namespace spvtools
|
||||
57
3rdparty/spirv-tools/source/reduce/structured_construct_to_block_reduction_opportunity_finder.h
vendored
Normal file
57
3rdparty/spirv-tools/source/reduce/structured_construct_to_block_reduction_opportunity_finder.h
vendored
Normal file
@@ -0,0 +1,57 @@
|
||||
// Copyright (c) 2021 Alastair F. Donaldson
|
||||
//
|
||||
// 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_REDUCE_STRUCTURED_CONSTRUCT_TO_BLOCK_REDUCTION_OPPORTUNITY_FINDER_H
|
||||
#define SOURCE_REDUCE_STRUCTURED_CONSTRUCT_TO_BLOCK_REDUCTION_OPPORTUNITY_FINDER_H
|
||||
|
||||
#include "source/reduce/reduction_opportunity_finder.h"
|
||||
|
||||
namespace spvtools {
|
||||
namespace reduce {
|
||||
|
||||
// A finder for opportunities to replace a skeletal structured control flow
|
||||
// construct - that is, a construct that does not define anything that's used
|
||||
// outside the construct - into its header block.
|
||||
class StructuredConstructToBlockReductionOpportunityFinder
|
||||
: public ReductionOpportunityFinder {
|
||||
public:
|
||||
StructuredConstructToBlockReductionOpportunityFinder() = default;
|
||||
|
||||
~StructuredConstructToBlockReductionOpportunityFinder() override = default;
|
||||
|
||||
std::string GetName() const final;
|
||||
|
||||
std::vector<std::unique_ptr<ReductionOpportunity>> GetAvailableOpportunities(
|
||||
opt::IRContext* context, uint32_t target_function) const final;
|
||||
|
||||
private:
|
||||
// Returns true if and only if all instructions defined in |region| are used
|
||||
// only inside |region|, with the exception that they may be used by the merge
|
||||
// or terminator instruction of |header|, which must be the header block for
|
||||
// the region.
|
||||
static bool DefinitionsRestrictedToRegion(
|
||||
const opt::BasicBlock& header,
|
||||
const std::unordered_set<opt::BasicBlock*>& region,
|
||||
opt::IRContext* context);
|
||||
|
||||
// Returns true if and only if |block| has at least one predecessor that is
|
||||
// unreachable in the control flow graph of its function.
|
||||
static bool HasUnreachablePredecessor(const opt::BasicBlock& block,
|
||||
opt::IRContext* context);
|
||||
};
|
||||
|
||||
} // namespace reduce
|
||||
} // namespace spvtools
|
||||
|
||||
#endif // SOURCE_REDUCE_STRUCTURED_CONSTRUCT_TO_BLOCK_REDUCTION_OPPORTUNITY_FINDER_H
|
||||
@@ -27,16 +27,14 @@ const uint32_t kMergeNodeIndex = 0;
|
||||
|
||||
bool StructuredLoopToSelectionReductionOpportunity::PreconditionHolds() {
|
||||
// Is the loop header reachable?
|
||||
return loop_construct_header_->GetLabel()
|
||||
->context()
|
||||
->GetDominatorAnalysis(enclosing_function_)
|
||||
->IsReachable(loop_construct_header_);
|
||||
return loop_construct_header_->GetLabel()->context()->IsReachable(
|
||||
*loop_construct_header_);
|
||||
}
|
||||
|
||||
void StructuredLoopToSelectionReductionOpportunity::Apply() {
|
||||
// Force computation of dominator analysis, CFG and structured CFG analysis
|
||||
// before we start to mess with edges in the function.
|
||||
context_->GetDominatorAnalysis(enclosing_function_);
|
||||
context_->GetDominatorAnalysis(loop_construct_header_->GetParent());
|
||||
context_->cfg();
|
||||
context_->GetStructuredCFGAnalysis();
|
||||
|
||||
@@ -78,8 +76,7 @@ void StructuredLoopToSelectionReductionOpportunity::RedirectToClosestMergeBlock(
|
||||
}
|
||||
already_seen.insert(pred);
|
||||
|
||||
if (!context_->GetDominatorAnalysis(enclosing_function_)
|
||||
->IsReachable(pred)) {
|
||||
if (!context_->IsReachable(*context_->cfg()->block(pred))) {
|
||||
// We do not care about unreachable predecessors (and dominance
|
||||
// information, and thus the notion of structured control flow, makes
|
||||
// little sense for unreachable blocks).
|
||||
@@ -216,7 +213,7 @@ void StructuredLoopToSelectionReductionOpportunity::ChangeLoopToSelection() {
|
||||
|
||||
void StructuredLoopToSelectionReductionOpportunity::FixNonDominatedIdUses() {
|
||||
// Consider each instruction in the function.
|
||||
for (auto& block : *enclosing_function_) {
|
||||
for (auto& block : *loop_construct_header_->GetParent()) {
|
||||
for (auto& def : block) {
|
||||
if (def.opcode() == SpvOpVariable) {
|
||||
// Variables are defined at the start of the function, and can be
|
||||
@@ -243,7 +240,7 @@ void StructuredLoopToSelectionReductionOpportunity::FixNonDominatedIdUses() {
|
||||
case SpvStorageClassFunction:
|
||||
use->SetOperand(
|
||||
index, {FindOrCreateFunctionVariable(
|
||||
context_, enclosing_function_,
|
||||
context_, loop_construct_header_->GetParent(),
|
||||
context_->get_type_mgr()->GetId(pointer_type))});
|
||||
break;
|
||||
default:
|
||||
@@ -276,11 +273,11 @@ bool StructuredLoopToSelectionReductionOpportunity::
|
||||
if (use->opcode() == SpvOpPhi) {
|
||||
// A use in a phi doesn't need to be dominated by its definition, but the
|
||||
// associated parent block does need to be dominated by the definition.
|
||||
return context_->GetDominatorAnalysis(enclosing_function_)
|
||||
return context_->GetDominatorAnalysis(loop_construct_header_->GetParent())
|
||||
->Dominates(def_block.id(), use->GetSingleWordOperand(use_index + 1));
|
||||
}
|
||||
// In non-phi cases, a use needs to be dominated by its definition.
|
||||
return context_->GetDominatorAnalysis(enclosing_function_)
|
||||
return context_->GetDominatorAnalysis(loop_construct_header_->GetParent())
|
||||
->Dominates(def, use);
|
||||
}
|
||||
|
||||
|
||||
@@ -12,8 +12,8 @@
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#ifndef SOURCE_REDUCE_CUT_LOOP_REDUCTION_OPPORTUNITY_H_
|
||||
#define SOURCE_REDUCE_CUT_LOOP_REDUCTION_OPPORTUNITY_H_
|
||||
#ifndef SOURCE_REDUCE_STRUCTURED_LOOP_TO_SELECTION_REDUCTION_OPPORTUNITY_H_
|
||||
#define SOURCE_REDUCE_STRUCTURED_LOOP_TO_SELECTION_REDUCTION_OPPORTUNITY_H_
|
||||
|
||||
#include "source/opt/def_use_manager.h"
|
||||
#include "source/opt/dominator_analysis.h"
|
||||
@@ -30,11 +30,8 @@ class StructuredLoopToSelectionReductionOpportunity
|
||||
// Constructs an opportunity from a loop header block and the function that
|
||||
// encloses it.
|
||||
explicit StructuredLoopToSelectionReductionOpportunity(
|
||||
opt::IRContext* context, opt::BasicBlock* loop_construct_header,
|
||||
opt::Function* enclosing_function)
|
||||
: context_(context),
|
||||
loop_construct_header_(loop_construct_header),
|
||||
enclosing_function_(enclosing_function) {}
|
||||
opt::IRContext* context, opt::BasicBlock* loop_construct_header)
|
||||
: context_(context), loop_construct_header_(loop_construct_header) {}
|
||||
|
||||
// Returns true if the loop header is reachable. A structured loop might
|
||||
// become unreachable as a result of turning another structured loop into
|
||||
@@ -88,10 +85,9 @@ class StructuredLoopToSelectionReductionOpportunity
|
||||
|
||||
opt::IRContext* context_;
|
||||
opt::BasicBlock* loop_construct_header_;
|
||||
opt::Function* enclosing_function_;
|
||||
};
|
||||
|
||||
} // namespace reduce
|
||||
} // namespace spvtools
|
||||
|
||||
#endif // SOURCE_REDUCE_CUT_LOOP_REDUCTION_OPPORTUNITY_H_
|
||||
#endif // SOURCE_REDUCE_STRUCTURED_LOOP_TO_SELECTION_REDUCTION_OPPORTUNITY_H_
|
||||
|
||||
@@ -86,8 +86,8 @@ StructuredLoopToSelectionReductionOpportunityFinder::GetAvailableOpportunities(
|
||||
// We can turn this structured loop into a selection, so add the
|
||||
// opportunity to do so.
|
||||
result.push_back(
|
||||
MakeUnique<StructuredLoopToSelectionReductionOpportunity>(
|
||||
context, &block, function));
|
||||
MakeUnique<StructuredLoopToSelectionReductionOpportunity>(context,
|
||||
&block));
|
||||
}
|
||||
}
|
||||
return result;
|
||||
|
||||
@@ -222,6 +222,13 @@ spv_result_t AtomicsPass(ValidationState_t& _, const Instruction* inst) {
|
||||
|
||||
if (opcode == SpvOpAtomicFAddEXT) {
|
||||
// result type being float checked already
|
||||
if ((_.GetBitWidth(result_type) == 16) &&
|
||||
(!_.HasCapability(SpvCapabilityAtomicFloat16AddEXT))) {
|
||||
return _.diag(SPV_ERROR_INVALID_DATA, inst)
|
||||
<< spvOpcodeString(opcode)
|
||||
<< ": float add atomics require the AtomicFloat32AddEXT "
|
||||
"capability";
|
||||
}
|
||||
if ((_.GetBitWidth(result_type) == 32) &&
|
||||
(!_.HasCapability(SpvCapabilityAtomicFloat32AddEXT))) {
|
||||
return _.diag(SPV_ERROR_INVALID_DATA, inst)
|
||||
|
||||
@@ -3112,6 +3112,7 @@ spv_result_t ValidateExtInst(ValidationState_t& _, const Instruction* inst) {
|
||||
case OpenCLDebugInfo100DebugMacroDef:
|
||||
case OpenCLDebugInfo100DebugMacroUndef:
|
||||
case OpenCLDebugInfo100DebugImportedEntity:
|
||||
case OpenCLDebugInfo100DebugModuleINTEL:
|
||||
break;
|
||||
case OpenCLDebugInfo100InstructionsMax:
|
||||
assert(0);
|
||||
|
||||
@@ -442,7 +442,8 @@ spv_result_t ValidateImageOperands(ValidationState_t& _,
|
||||
<< " components, but given " << offset_size;
|
||||
}
|
||||
|
||||
if (spvIsVulkanEnv(_.context()->target_env)) {
|
||||
if (!_.options()->before_hlsl_legalization &&
|
||||
spvIsVulkanEnv(_.context()->target_env)) {
|
||||
if (opcode != SpvOpImageGather && opcode != SpvOpImageDrefGather &&
|
||||
opcode != SpvOpImageSparseGather &&
|
||||
opcode != SpvOpImageSparseDrefGather) {
|
||||
@@ -1509,8 +1510,8 @@ spv_result_t ValidateImageRead(ValidationState_t& _, const Instruction* inst) {
|
||||
if (spvIsVulkanEnv(target_env)) {
|
||||
if (_.GetDimension(actual_result_type) != 4) {
|
||||
return _.diag(SPV_ERROR_INVALID_DATA, inst)
|
||||
<< "Expected " << GetActualResultTypeStr(opcode)
|
||||
<< " to have 4 components";
|
||||
<< _.VkErrorID(4780) << "Expected "
|
||||
<< GetActualResultTypeStr(opcode) << " to have 4 components";
|
||||
}
|
||||
} // Check OpenCL below, after we get the image info.
|
||||
|
||||
|
||||
@@ -520,17 +520,39 @@ void ValidationState_t::RegisterDebugInstruction(const Instruction* inst) {
|
||||
void ValidationState_t::RegisterInstruction(Instruction* inst) {
|
||||
if (inst->id()) all_definitions_.insert(std::make_pair(inst->id(), inst));
|
||||
|
||||
// If the instruction is using an OpTypeSampledImage as an operand, it should
|
||||
// be recorded. The validator will ensure that all usages of an
|
||||
// OpTypeSampledImage and its definition are in the same basic block.
|
||||
// Some validation checks are easier by getting all the consumers
|
||||
for (uint16_t i = 0; i < inst->operands().size(); ++i) {
|
||||
const spv_parsed_operand_t& operand = inst->operand(i);
|
||||
if (SPV_OPERAND_TYPE_ID == operand.type) {
|
||||
if ((SPV_OPERAND_TYPE_ID == operand.type) ||
|
||||
(SPV_OPERAND_TYPE_TYPE_ID == operand.type)) {
|
||||
const uint32_t operand_word = inst->word(operand.offset);
|
||||
Instruction* operand_inst = FindDef(operand_word);
|
||||
if (operand_inst && SpvOpSampledImage == operand_inst->opcode()) {
|
||||
if (!operand_inst) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// If the instruction is using an OpTypeSampledImage as an operand, it
|
||||
// should be recorded. The validator will ensure that all usages of an
|
||||
// OpTypeSampledImage and its definition are in the same basic block.
|
||||
if ((SPV_OPERAND_TYPE_ID == operand.type) &&
|
||||
(SpvOpSampledImage == operand_inst->opcode())) {
|
||||
RegisterSampledImageConsumer(operand_word, inst);
|
||||
}
|
||||
|
||||
// In order to track storage classes (not Function) used per execution
|
||||
// model we can't use RegisterExecutionModelLimitation on instructions
|
||||
// like OpTypePointer which are going to be in the pre-function section.
|
||||
// Instead just need to register storage class usage for consumers in a
|
||||
// function block.
|
||||
if (inst->function()) {
|
||||
if (operand_inst->opcode() == SpvOpTypePointer) {
|
||||
RegisterStorageClassConsumer(
|
||||
operand_inst->GetOperandAs<SpvStorageClass>(1), inst);
|
||||
} else if (operand_inst->opcode() == SpvOpVariable) {
|
||||
RegisterStorageClassConsumer(
|
||||
operand_inst->GetOperandAs<SpvStorageClass>(2), inst);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -550,6 +572,57 @@ void ValidationState_t::RegisterSampledImageConsumer(uint32_t sampled_image_id,
|
||||
sampled_image_consumers_[sampled_image_id].push_back(consumer);
|
||||
}
|
||||
|
||||
void ValidationState_t::RegisterStorageClassConsumer(
|
||||
SpvStorageClass storage_class, Instruction* consumer) {
|
||||
if (spvIsVulkanEnv(context()->target_env)) {
|
||||
if (storage_class == SpvStorageClassOutput) {
|
||||
std::string errorVUID = VkErrorID(4644);
|
||||
function(consumer->function()->id())
|
||||
->RegisterExecutionModelLimitation([errorVUID](
|
||||
SpvExecutionModel model, std::string* message) {
|
||||
if (model == SpvExecutionModelGLCompute ||
|
||||
model == SpvExecutionModelRayGenerationKHR ||
|
||||
model == SpvExecutionModelIntersectionKHR ||
|
||||
model == SpvExecutionModelAnyHitKHR ||
|
||||
model == SpvExecutionModelClosestHitKHR ||
|
||||
model == SpvExecutionModelMissKHR ||
|
||||
model == SpvExecutionModelCallableKHR) {
|
||||
if (message) {
|
||||
*message =
|
||||
errorVUID +
|
||||
"in Vulkan evironment, Output Storage Class must not be "
|
||||
"used in GLCompute, RayGenerationKHR, IntersectionKHR, "
|
||||
"AnyHitKHR, ClosestHitKHR, MissKHR, or CallableKHR "
|
||||
"execution models";
|
||||
}
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
if (storage_class == SpvStorageClassWorkgroup) {
|
||||
std::string errorVUID = VkErrorID(4645);
|
||||
function(consumer->function()->id())
|
||||
->RegisterExecutionModelLimitation([errorVUID](
|
||||
SpvExecutionModel model, std::string* message) {
|
||||
if (model != SpvExecutionModelGLCompute &&
|
||||
model != SpvExecutionModelTaskNV &&
|
||||
model != SpvExecutionModelMeshNV) {
|
||||
if (message) {
|
||||
*message =
|
||||
errorVUID +
|
||||
"in Vulkan evironment, Workgroup Storage Class is limited "
|
||||
"to MeshNV, TaskNV, and GLCompute execution model";
|
||||
}
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t ValidationState_t::getIdBound() const { return id_bound_; }
|
||||
|
||||
void ValidationState_t::setIdBound(const uint32_t bound) { id_bound_ = bound; }
|
||||
@@ -1696,6 +1769,10 @@ std::string ValidationState_t::VkErrorID(uint32_t id,
|
||||
return VUID_WRAP(VUID-StandaloneSpirv-None-04642);
|
||||
case 4643:
|
||||
return VUID_WRAP(VUID-StandaloneSpirv-None-04643);
|
||||
case 4644:
|
||||
return VUID_WRAP(VUID-StandaloneSpirv-None-04644);
|
||||
case 4645:
|
||||
return VUID_WRAP(VUID-StandaloneSpirv-None-04645);
|
||||
case 4651:
|
||||
return VUID_WRAP(VUID-StandaloneSpirv-OpVariable-04651);
|
||||
case 4652:
|
||||
@@ -1748,6 +1825,8 @@ std::string ValidationState_t::VkErrorID(uint32_t id,
|
||||
return VUID_WRAP(VUID-StandaloneSpirv-OpMemoryBarrier-04732);
|
||||
case 4733:
|
||||
return VUID_WRAP(VUID-StandaloneSpirv-OpMemoryBarrier-04733);
|
||||
case 4780:
|
||||
return VUID_WRAP(VUID-StandaloneSpirv-Result-04780);
|
||||
default:
|
||||
return ""; // unknown id
|
||||
}
|
||||
|
||||
@@ -465,6 +465,10 @@ class ValidationState_t {
|
||||
void RegisterSampledImageConsumer(uint32_t sampled_image_id,
|
||||
Instruction* consumer);
|
||||
|
||||
// Record a function's storage class consumer instruction
|
||||
void RegisterStorageClassConsumer(SpvStorageClass storage_class,
|
||||
Instruction* consumer);
|
||||
|
||||
/// Returns the set of Global Variables.
|
||||
std::unordered_set<uint32_t>& global_vars() { return global_vars_; }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user