spirv-reflect: Update to latest commit, adds SPIRV 1.6 support
This commit is contained in:
parent
d233908fb6
commit
912c2062e6
5 changed files with 557 additions and 111 deletions
2
thirdparty/README.md
vendored
2
thirdparty/README.md
vendored
|
@ -552,7 +552,7 @@ Godot. Please check the file to know what's new.
|
|||
## spirv-reflect
|
||||
|
||||
- Upstream: https://github.com/KhronosGroup/SPIRV-Reflect
|
||||
- Version: git (cc937caab141d889c9c9dff572c5a6854d5cf9b4, 2021)
|
||||
- Version: git (1aceb6af56e74b92a00378842dda5c5a73f49a4b, 2022)
|
||||
- License: Apache 2.0
|
||||
|
||||
Does not track Vulkan SDK releases closely, but try to package a commit newer
|
||||
|
|
|
@ -53,12 +53,12 @@
|
|||
|
||||
typedef unsigned int SpvId;
|
||||
|
||||
#define SPV_VERSION 0x10500
|
||||
#define SPV_REVISION 4
|
||||
#define SPV_VERSION 0x10600
|
||||
#define SPV_REVISION 1
|
||||
|
||||
static const unsigned int SpvMagicNumber = 0x07230203;
|
||||
static const unsigned int SpvVersion = 0x00010500;
|
||||
static const unsigned int SpvRevision = 4;
|
||||
static const unsigned int SpvVersion = 0x00010600;
|
||||
static const unsigned int SpvRevision = 1;
|
||||
static const unsigned int SpvOpCodeMask = 0xffff;
|
||||
static const unsigned int SpvWordCountShift = 16;
|
||||
|
||||
|
@ -69,6 +69,7 @@ typedef enum SpvSourceLanguage_ {
|
|||
SpvSourceLanguageOpenCL_C = 3,
|
||||
SpvSourceLanguageOpenCL_CPP = 4,
|
||||
SpvSourceLanguageHLSL = 5,
|
||||
SpvSourceLanguageCPP_for_OpenCL = 6,
|
||||
SpvSourceLanguageMax = 0x7fffffff,
|
||||
} SpvSourceLanguage;
|
||||
|
||||
|
@ -154,6 +155,7 @@ typedef enum SpvExecutionMode_ {
|
|||
SpvExecutionModeSubgroupsPerWorkgroupId = 37,
|
||||
SpvExecutionModeLocalSizeId = 38,
|
||||
SpvExecutionModeLocalSizeHintId = 39,
|
||||
SpvExecutionModeSubgroupUniformControlFlowKHR = 4421,
|
||||
SpvExecutionModePostDepthCoverage = 4446,
|
||||
SpvExecutionModeDenormPreserve = 4459,
|
||||
SpvExecutionModeDenormFlushToZero = 4460,
|
||||
|
@ -172,10 +174,16 @@ typedef enum SpvExecutionMode_ {
|
|||
SpvExecutionModeSampleInterlockUnorderedEXT = 5369,
|
||||
SpvExecutionModeShadingRateInterlockOrderedEXT = 5370,
|
||||
SpvExecutionModeShadingRateInterlockUnorderedEXT = 5371,
|
||||
SpvExecutionModeSharedLocalMemorySizeINTEL = 5618,
|
||||
SpvExecutionModeRoundingModeRTPINTEL = 5620,
|
||||
SpvExecutionModeRoundingModeRTNINTEL = 5621,
|
||||
SpvExecutionModeFloatingPointModeALTINTEL = 5622,
|
||||
SpvExecutionModeFloatingPointModeIEEEINTEL = 5623,
|
||||
SpvExecutionModeMaxWorkgroupSizeINTEL = 5893,
|
||||
SpvExecutionModeMaxWorkDimINTEL = 5894,
|
||||
SpvExecutionModeNoGlobalOffsetINTEL = 5895,
|
||||
SpvExecutionModeNumSIMDWorkitemsINTEL = 5896,
|
||||
SpvExecutionModeSchedulerTargetFmaxMhzINTEL = 5903,
|
||||
SpvExecutionModeMax = 0x7fffffff,
|
||||
} SpvExecutionMode;
|
||||
|
||||
|
@ -208,6 +216,8 @@ typedef enum SpvStorageClass_ {
|
|||
SpvStorageClassPhysicalStorageBuffer = 5349,
|
||||
SpvStorageClassPhysicalStorageBufferEXT = 5349,
|
||||
SpvStorageClassCodeSectionINTEL = 5605,
|
||||
SpvStorageClassDeviceOnlyINTEL = 5936,
|
||||
SpvStorageClassHostOnlyINTEL = 5937,
|
||||
SpvStorageClassMax = 0x7fffffff,
|
||||
} SpvStorageClass;
|
||||
|
||||
|
@ -347,6 +357,8 @@ typedef enum SpvImageOperandsShift_ {
|
|||
SpvImageOperandsVolatileTexelKHRShift = 11,
|
||||
SpvImageOperandsSignExtendShift = 12,
|
||||
SpvImageOperandsZeroExtendShift = 13,
|
||||
SpvImageOperandsNontemporalShift = 14,
|
||||
SpvImageOperandsOffsetsShift = 16,
|
||||
SpvImageOperandsMax = 0x7fffffff,
|
||||
} SpvImageOperandsShift;
|
||||
|
||||
|
@ -370,6 +382,8 @@ typedef enum SpvImageOperandsMask_ {
|
|||
SpvImageOperandsVolatileTexelKHRMask = 0x00000800,
|
||||
SpvImageOperandsSignExtendMask = 0x00001000,
|
||||
SpvImageOperandsZeroExtendMask = 0x00002000,
|
||||
SpvImageOperandsNontemporalMask = 0x00004000,
|
||||
SpvImageOperandsOffsetsMask = 0x00010000,
|
||||
} SpvImageOperandsMask;
|
||||
|
||||
typedef enum SpvFPFastMathModeShift_ {
|
||||
|
@ -378,6 +392,8 @@ typedef enum SpvFPFastMathModeShift_ {
|
|||
SpvFPFastMathModeNSZShift = 2,
|
||||
SpvFPFastMathModeAllowRecipShift = 3,
|
||||
SpvFPFastMathModeFastShift = 4,
|
||||
SpvFPFastMathModeAllowContractFastINTELShift = 16,
|
||||
SpvFPFastMathModeAllowReassocINTELShift = 17,
|
||||
SpvFPFastMathModeMax = 0x7fffffff,
|
||||
} SpvFPFastMathModeShift;
|
||||
|
||||
|
@ -388,6 +404,8 @@ typedef enum SpvFPFastMathModeMask_ {
|
|||
SpvFPFastMathModeNSZMask = 0x00000004,
|
||||
SpvFPFastMathModeAllowRecipMask = 0x00000008,
|
||||
SpvFPFastMathModeFastMask = 0x00000010,
|
||||
SpvFPFastMathModeAllowContractFastINTELMask = 0x00010000,
|
||||
SpvFPFastMathModeAllowReassocINTELMask = 0x00020000,
|
||||
} SpvFPFastMathModeMask;
|
||||
|
||||
typedef enum SpvFPRoundingMode_ {
|
||||
|
@ -401,6 +419,7 @@ typedef enum SpvFPRoundingMode_ {
|
|||
typedef enum SpvLinkageType_ {
|
||||
SpvLinkageTypeExport = 0,
|
||||
SpvLinkageTypeImport = 1,
|
||||
SpvLinkageTypeLinkOnceODR = 2,
|
||||
SpvLinkageTypeMax = 0x7fffffff,
|
||||
} SpvLinkageType;
|
||||
|
||||
|
@ -481,6 +500,7 @@ typedef enum SpvDecoration_ {
|
|||
SpvDecorationPerPrimitiveNV = 5271,
|
||||
SpvDecorationPerViewNV = 5272,
|
||||
SpvDecorationPerTaskNV = 5273,
|
||||
SpvDecorationPerVertexKHR = 5285,
|
||||
SpvDecorationPerVertexNV = 5285,
|
||||
SpvDecorationNonUniform = 5300,
|
||||
SpvDecorationNonUniformEXT = 5300,
|
||||
|
@ -488,12 +508,26 @@ typedef enum SpvDecoration_ {
|
|||
SpvDecorationRestrictPointerEXT = 5355,
|
||||
SpvDecorationAliasedPointer = 5356,
|
||||
SpvDecorationAliasedPointerEXT = 5356,
|
||||
SpvDecorationBindlessSamplerNV = 5398,
|
||||
SpvDecorationBindlessImageNV = 5399,
|
||||
SpvDecorationBoundSamplerNV = 5400,
|
||||
SpvDecorationBoundImageNV = 5401,
|
||||
SpvDecorationSIMTCallINTEL = 5599,
|
||||
SpvDecorationReferencedIndirectlyINTEL = 5602,
|
||||
SpvDecorationClobberINTEL = 5607,
|
||||
SpvDecorationSideEffectsINTEL = 5608,
|
||||
SpvDecorationVectorComputeVariableINTEL = 5624,
|
||||
SpvDecorationFuncParamIOKindINTEL = 5625,
|
||||
SpvDecorationVectorComputeFunctionINTEL = 5626,
|
||||
SpvDecorationStackCallINTEL = 5627,
|
||||
SpvDecorationGlobalVariableOffsetINTEL = 5628,
|
||||
SpvDecorationCounterBuffer = 5634,
|
||||
SpvDecorationHlslCounterBufferGOOGLE = 5634,
|
||||
SpvDecorationHlslSemanticGOOGLE = 5635,
|
||||
SpvDecorationUserSemantic = 5635,
|
||||
SpvDecorationUserTypeGOOGLE = 5636,
|
||||
SpvDecorationFunctionRoundingModeINTEL = 5822,
|
||||
SpvDecorationFunctionDenormModeINTEL = 5823,
|
||||
SpvDecorationRegisterINTEL = 5825,
|
||||
SpvDecorationMemoryINTEL = 5826,
|
||||
SpvDecorationNumbanksINTEL = 5827,
|
||||
|
@ -506,6 +540,18 @@ typedef enum SpvDecoration_ {
|
|||
SpvDecorationMergeINTEL = 5834,
|
||||
SpvDecorationBankBitsINTEL = 5835,
|
||||
SpvDecorationForcePow2DepthINTEL = 5836,
|
||||
SpvDecorationBurstCoalesceINTEL = 5899,
|
||||
SpvDecorationCacheSizeINTEL = 5900,
|
||||
SpvDecorationDontStaticallyCoalesceINTEL = 5901,
|
||||
SpvDecorationPrefetchINTEL = 5902,
|
||||
SpvDecorationStallEnableINTEL = 5905,
|
||||
SpvDecorationFuseLoopsInFunctionINTEL = 5907,
|
||||
SpvDecorationBufferLocationINTEL = 5921,
|
||||
SpvDecorationIOPipeStorageINTEL = 5944,
|
||||
SpvDecorationFunctionFloatingPointModeINTEL = 6080,
|
||||
SpvDecorationSingleElementVectorINTEL = 6085,
|
||||
SpvDecorationVectorComputeCallableFunctionINTEL = 6087,
|
||||
SpvDecorationMediaBlockIOINTEL = 6140,
|
||||
SpvDecorationMax = 0x7fffffff,
|
||||
} SpvDecoration;
|
||||
|
||||
|
@ -590,7 +636,9 @@ typedef enum SpvBuiltIn_ {
|
|||
SpvBuiltInLayerPerViewNV = 5279,
|
||||
SpvBuiltInMeshViewCountNV = 5280,
|
||||
SpvBuiltInMeshViewIndicesNV = 5281,
|
||||
SpvBuiltInBaryCoordKHR = 5286,
|
||||
SpvBuiltInBaryCoordNV = 5286,
|
||||
SpvBuiltInBaryCoordNoPerspKHR = 5287,
|
||||
SpvBuiltInBaryCoordNoPerspNV = 5287,
|
||||
SpvBuiltInFragSizeEXT = 5292,
|
||||
SpvBuiltInFragmentSizeNV = 5292,
|
||||
|
@ -621,6 +669,7 @@ typedef enum SpvBuiltIn_ {
|
|||
SpvBuiltInHitTNV = 5332,
|
||||
SpvBuiltInHitKindKHR = 5333,
|
||||
SpvBuiltInHitKindNV = 5333,
|
||||
SpvBuiltInCurrentRayTimeNV = 5334,
|
||||
SpvBuiltInIncomingRayFlagsKHR = 5351,
|
||||
SpvBuiltInIncomingRayFlagsNV = 5351,
|
||||
SpvBuiltInRayGeometryIndexKHR = 5352,
|
||||
|
@ -660,6 +709,7 @@ typedef enum SpvLoopControlShift_ {
|
|||
SpvLoopControlLoopCoalesceINTELShift = 20,
|
||||
SpvLoopControlMaxInterleavingINTELShift = 21,
|
||||
SpvLoopControlSpeculatedIterationsINTELShift = 22,
|
||||
SpvLoopControlNoFusionINTELShift = 23,
|
||||
SpvLoopControlMax = 0x7fffffff,
|
||||
} SpvLoopControlShift;
|
||||
|
||||
|
@ -681,6 +731,7 @@ typedef enum SpvLoopControlMask_ {
|
|||
SpvLoopControlLoopCoalesceINTELMask = 0x00100000,
|
||||
SpvLoopControlMaxInterleavingINTELMask = 0x00200000,
|
||||
SpvLoopControlSpeculatedIterationsINTELMask = 0x00400000,
|
||||
SpvLoopControlNoFusionINTELMask = 0x00800000,
|
||||
} SpvLoopControlMask;
|
||||
|
||||
typedef enum SpvFunctionControlShift_ {
|
||||
|
@ -688,6 +739,7 @@ typedef enum SpvFunctionControlShift_ {
|
|||
SpvFunctionControlDontInlineShift = 1,
|
||||
SpvFunctionControlPureShift = 2,
|
||||
SpvFunctionControlConstShift = 3,
|
||||
SpvFunctionControlOptNoneINTELShift = 16,
|
||||
SpvFunctionControlMax = 0x7fffffff,
|
||||
} SpvFunctionControlShift;
|
||||
|
||||
|
@ -697,6 +749,7 @@ typedef enum SpvFunctionControlMask_ {
|
|||
SpvFunctionControlDontInlineMask = 0x00000002,
|
||||
SpvFunctionControlPureMask = 0x00000004,
|
||||
SpvFunctionControlConstMask = 0x00000008,
|
||||
SpvFunctionControlOptNoneINTELMask = 0x00010000,
|
||||
} SpvFunctionControlMask;
|
||||
|
||||
typedef enum SpvMemorySemanticsShift_ {
|
||||
|
@ -877,9 +930,13 @@ typedef enum SpvCapability_ {
|
|||
SpvCapabilityGroupNonUniformQuad = 68,
|
||||
SpvCapabilityShaderLayer = 69,
|
||||
SpvCapabilityShaderViewportIndex = 70,
|
||||
SpvCapabilityUniformDecoration = 71,
|
||||
SpvCapabilityFragmentShadingRateKHR = 4422,
|
||||
SpvCapabilitySubgroupBallotKHR = 4423,
|
||||
SpvCapabilityDrawParameters = 4427,
|
||||
SpvCapabilityWorkgroupMemoryExplicitLayoutKHR = 4428,
|
||||
SpvCapabilityWorkgroupMemoryExplicitLayout8BitAccessKHR = 4429,
|
||||
SpvCapabilityWorkgroupMemoryExplicitLayout16BitAccessKHR = 4430,
|
||||
SpvCapabilitySubgroupVoteKHR = 4431,
|
||||
SpvCapabilityStorageBuffer16BitAccess = 4433,
|
||||
SpvCapabilityStorageUniformBufferBlock16 = 4433,
|
||||
|
@ -922,6 +979,7 @@ typedef enum SpvCapability_ {
|
|||
SpvCapabilityFragmentFullyCoveredEXT = 5265,
|
||||
SpvCapabilityMeshShadingNV = 5266,
|
||||
SpvCapabilityImageFootprintNV = 5282,
|
||||
SpvCapabilityFragmentBarycentricKHR = 5284,
|
||||
SpvCapabilityFragmentBarycentricNV = 5284,
|
||||
SpvCapabilityComputeDerivativeGroupQuadsNV = 5288,
|
||||
SpvCapabilityFragmentDensityEXT = 5291,
|
||||
|
@ -952,6 +1010,7 @@ typedef enum SpvCapability_ {
|
|||
SpvCapabilityStorageTexelBufferArrayNonUniformIndexing = 5312,
|
||||
SpvCapabilityStorageTexelBufferArrayNonUniformIndexingEXT = 5312,
|
||||
SpvCapabilityRayTracingNV = 5340,
|
||||
SpvCapabilityRayTracingMotionBlurNV = 5341,
|
||||
SpvCapabilityVulkanMemoryModel = 5345,
|
||||
SpvCapabilityVulkanMemoryModelKHR = 5345,
|
||||
SpvCapabilityVulkanMemoryModelDeviceScope = 5346,
|
||||
|
@ -965,26 +1024,62 @@ typedef enum SpvCapability_ {
|
|||
SpvCapabilityFragmentShaderShadingRateInterlockEXT = 5372,
|
||||
SpvCapabilityShaderSMBuiltinsNV = 5373,
|
||||
SpvCapabilityFragmentShaderPixelInterlockEXT = 5378,
|
||||
SpvCapabilityDemoteToHelperInvocation = 5379,
|
||||
SpvCapabilityDemoteToHelperInvocationEXT = 5379,
|
||||
SpvCapabilityBindlessTextureNV = 5390,
|
||||
SpvCapabilitySubgroupShuffleINTEL = 5568,
|
||||
SpvCapabilitySubgroupBufferBlockIOINTEL = 5569,
|
||||
SpvCapabilitySubgroupImageBlockIOINTEL = 5570,
|
||||
SpvCapabilitySubgroupImageMediaBlockIOINTEL = 5579,
|
||||
SpvCapabilityRoundToInfinityINTEL = 5582,
|
||||
SpvCapabilityFloatingPointModeINTEL = 5583,
|
||||
SpvCapabilityIntegerFunctions2INTEL = 5584,
|
||||
SpvCapabilityFunctionPointersINTEL = 5603,
|
||||
SpvCapabilityIndirectReferencesINTEL = 5604,
|
||||
SpvCapabilityAsmINTEL = 5606,
|
||||
SpvCapabilityAtomicFloat32MinMaxEXT = 5612,
|
||||
SpvCapabilityAtomicFloat64MinMaxEXT = 5613,
|
||||
SpvCapabilityAtomicFloat16MinMaxEXT = 5616,
|
||||
SpvCapabilityVectorComputeINTEL = 5617,
|
||||
SpvCapabilityVectorAnyINTEL = 5619,
|
||||
SpvCapabilityExpectAssumeKHR = 5629,
|
||||
SpvCapabilitySubgroupAvcMotionEstimationINTEL = 5696,
|
||||
SpvCapabilitySubgroupAvcMotionEstimationIntraINTEL = 5697,
|
||||
SpvCapabilitySubgroupAvcMotionEstimationChromaINTEL = 5698,
|
||||
SpvCapabilityVariableLengthArrayINTEL = 5817,
|
||||
SpvCapabilityFunctionFloatControlINTEL = 5821,
|
||||
SpvCapabilityFPGAMemoryAttributesINTEL = 5824,
|
||||
SpvCapabilityFPFastMathModeINTEL = 5837,
|
||||
SpvCapabilityArbitraryPrecisionIntegersINTEL = 5844,
|
||||
SpvCapabilityArbitraryPrecisionFloatingPointINTEL = 5845,
|
||||
SpvCapabilityUnstructuredLoopControlsINTEL = 5886,
|
||||
SpvCapabilityFPGALoopControlsINTEL = 5888,
|
||||
SpvCapabilityKernelAttributesINTEL = 5892,
|
||||
SpvCapabilityFPGAKernelAttributesINTEL = 5897,
|
||||
SpvCapabilityFPGAMemoryAccessesINTEL = 5898,
|
||||
SpvCapabilityFPGAClusterAttributesINTEL = 5904,
|
||||
SpvCapabilityLoopFuseINTEL = 5906,
|
||||
SpvCapabilityFPGABufferLocationINTEL = 5920,
|
||||
SpvCapabilityArbitraryPrecisionFixedPointINTEL = 5922,
|
||||
SpvCapabilityUSMStorageClassesINTEL = 5935,
|
||||
SpvCapabilityIOPipesINTEL = 5943,
|
||||
SpvCapabilityBlockingPipesINTEL = 5945,
|
||||
SpvCapabilityFPGARegINTEL = 5948,
|
||||
SpvCapabilityDotProductInputAll = 6016,
|
||||
SpvCapabilityDotProductInputAllKHR = 6016,
|
||||
SpvCapabilityDotProductInput4x8Bit = 6017,
|
||||
SpvCapabilityDotProductInput4x8BitKHR = 6017,
|
||||
SpvCapabilityDotProductInput4x8BitPacked = 6018,
|
||||
SpvCapabilityDotProductInput4x8BitPackedKHR = 6018,
|
||||
SpvCapabilityDotProduct = 6019,
|
||||
SpvCapabilityDotProductKHR = 6019,
|
||||
SpvCapabilityBitInstructions = 6025,
|
||||
SpvCapabilityAtomicFloat32AddEXT = 6033,
|
||||
SpvCapabilityAtomicFloat64AddEXT = 6034,
|
||||
SpvCapabilityLongConstantCompositeINTEL = 6089,
|
||||
SpvCapabilityOptNoneINTEL = 6094,
|
||||
SpvCapabilityAtomicFloat16AddEXT = 6095,
|
||||
SpvCapabilityDebugInfoModuleINTEL = 6114,
|
||||
SpvCapabilityMax = 0x7fffffff,
|
||||
} SpvCapability;
|
||||
|
||||
|
@ -1051,6 +1146,44 @@ typedef enum SpvFragmentShadingRateMask_ {
|
|||
SpvFragmentShadingRateHorizontal4PixelsMask = 0x00000008,
|
||||
} SpvFragmentShadingRateMask;
|
||||
|
||||
typedef enum SpvFPDenormMode_ {
|
||||
SpvFPDenormModePreserve = 0,
|
||||
SpvFPDenormModeFlushToZero = 1,
|
||||
SpvFPDenormModeMax = 0x7fffffff,
|
||||
} SpvFPDenormMode;
|
||||
|
||||
typedef enum SpvFPOperationMode_ {
|
||||
SpvFPOperationModeIEEE = 0,
|
||||
SpvFPOperationModeALT = 1,
|
||||
SpvFPOperationModeMax = 0x7fffffff,
|
||||
} SpvFPOperationMode;
|
||||
|
||||
typedef enum SpvQuantizationModes_ {
|
||||
SpvQuantizationModesTRN = 0,
|
||||
SpvQuantizationModesTRN_ZERO = 1,
|
||||
SpvQuantizationModesRND = 2,
|
||||
SpvQuantizationModesRND_ZERO = 3,
|
||||
SpvQuantizationModesRND_INF = 4,
|
||||
SpvQuantizationModesRND_MIN_INF = 5,
|
||||
SpvQuantizationModesRND_CONV = 6,
|
||||
SpvQuantizationModesRND_CONV_ODD = 7,
|
||||
SpvQuantizationModesMax = 0x7fffffff,
|
||||
} SpvQuantizationModes;
|
||||
|
||||
typedef enum SpvOverflowModes_ {
|
||||
SpvOverflowModesWRAP = 0,
|
||||
SpvOverflowModesSAT = 1,
|
||||
SpvOverflowModesSAT_ZERO = 2,
|
||||
SpvOverflowModesSAT_SYM = 3,
|
||||
SpvOverflowModesMax = 0x7fffffff,
|
||||
} SpvOverflowModes;
|
||||
|
||||
typedef enum SpvPackedVectorFormat_ {
|
||||
SpvPackedVectorFormatPackedVectorFormat4x8Bit = 0,
|
||||
SpvPackedVectorFormatPackedVectorFormat4x8BitKHR = 0,
|
||||
SpvPackedVectorFormatMax = 0x7fffffff,
|
||||
} SpvPackedVectorFormat;
|
||||
|
||||
typedef enum SpvOp_ {
|
||||
SpvOpNop = 0,
|
||||
SpvOpUndef = 1,
|
||||
|
@ -1408,6 +1541,18 @@ typedef enum SpvOp_ {
|
|||
SpvOpConvertUToAccelerationStructureKHR = 4447,
|
||||
SpvOpIgnoreIntersectionKHR = 4448,
|
||||
SpvOpTerminateRayKHR = 4449,
|
||||
SpvOpSDot = 4450,
|
||||
SpvOpSDotKHR = 4450,
|
||||
SpvOpUDot = 4451,
|
||||
SpvOpUDotKHR = 4451,
|
||||
SpvOpSUDot = 4452,
|
||||
SpvOpSUDotKHR = 4452,
|
||||
SpvOpSDotAccSat = 4453,
|
||||
SpvOpSDotAccSatKHR = 4453,
|
||||
SpvOpUDotAccSat = 4454,
|
||||
SpvOpUDotAccSatKHR = 4454,
|
||||
SpvOpSUDotAccSat = 4455,
|
||||
SpvOpSUDotAccSatKHR = 4455,
|
||||
SpvOpTypeRayQueryKHR = 4472,
|
||||
SpvOpRayQueryInitializeKHR = 4473,
|
||||
SpvOpRayQueryTerminateKHR = 4474,
|
||||
|
@ -1434,6 +1579,8 @@ typedef enum SpvOp_ {
|
|||
SpvOpIgnoreIntersectionNV = 5335,
|
||||
SpvOpTerminateRayNV = 5336,
|
||||
SpvOpTraceNV = 5337,
|
||||
SpvOpTraceMotionNV = 5338,
|
||||
SpvOpTraceRayMotionNV = 5339,
|
||||
SpvOpTypeAccelerationStructureKHR = 5341,
|
||||
SpvOpTypeAccelerationStructureNV = 5341,
|
||||
SpvOpExecuteCallableNV = 5344,
|
||||
|
@ -1444,8 +1591,16 @@ typedef enum SpvOp_ {
|
|||
SpvOpCooperativeMatrixLengthNV = 5362,
|
||||
SpvOpBeginInvocationInterlockEXT = 5364,
|
||||
SpvOpEndInvocationInterlockEXT = 5365,
|
||||
SpvOpDemoteToHelperInvocation = 5380,
|
||||
SpvOpDemoteToHelperInvocationEXT = 5380,
|
||||
SpvOpIsHelperInvocationEXT = 5381,
|
||||
SpvOpConvertUToImageNV = 5391,
|
||||
SpvOpConvertUToSamplerNV = 5392,
|
||||
SpvOpConvertImageToUNV = 5393,
|
||||
SpvOpConvertSamplerToUNV = 5394,
|
||||
SpvOpConvertUToSampledImageNV = 5395,
|
||||
SpvOpConvertSampledImageToUNV = 5396,
|
||||
SpvOpSamplerImageAddressingModeNV = 5397,
|
||||
SpvOpSubgroupShuffleINTEL = 5571,
|
||||
SpvOpSubgroupShuffleDownINTEL = 5572,
|
||||
SpvOpSubgroupShuffleUpINTEL = 5573,
|
||||
|
@ -1470,8 +1625,15 @@ typedef enum SpvOp_ {
|
|||
SpvOpUSubSatINTEL = 5596,
|
||||
SpvOpIMul32x16INTEL = 5597,
|
||||
SpvOpUMul32x16INTEL = 5598,
|
||||
SpvOpFunctionPointerINTEL = 5600,
|
||||
SpvOpConstantFunctionPointerINTEL = 5600,
|
||||
SpvOpFunctionPointerCallINTEL = 5601,
|
||||
SpvOpAsmTargetINTEL = 5609,
|
||||
SpvOpAsmINTEL = 5610,
|
||||
SpvOpAsmCallINTEL = 5611,
|
||||
SpvOpAtomicFMinEXT = 5614,
|
||||
SpvOpAtomicFMaxEXT = 5615,
|
||||
SpvOpAssumeTrueKHR = 5630,
|
||||
SpvOpExpectKHR = 5631,
|
||||
SpvOpDecorateString = 5632,
|
||||
SpvOpDecorateStringGOOGLE = 5632,
|
||||
SpvOpMemberDecorateString = 5633,
|
||||
|
@ -1594,7 +1756,64 @@ typedef enum SpvOp_ {
|
|||
SpvOpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL = 5814,
|
||||
SpvOpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL = 5815,
|
||||
SpvOpSubgroupAvcSicGetInterRawSadsINTEL = 5816,
|
||||
SpvOpVariableLengthArrayINTEL = 5818,
|
||||
SpvOpSaveMemoryINTEL = 5819,
|
||||
SpvOpRestoreMemoryINTEL = 5820,
|
||||
SpvOpArbitraryFloatSinCosPiINTEL = 5840,
|
||||
SpvOpArbitraryFloatCastINTEL = 5841,
|
||||
SpvOpArbitraryFloatCastFromIntINTEL = 5842,
|
||||
SpvOpArbitraryFloatCastToIntINTEL = 5843,
|
||||
SpvOpArbitraryFloatAddINTEL = 5846,
|
||||
SpvOpArbitraryFloatSubINTEL = 5847,
|
||||
SpvOpArbitraryFloatMulINTEL = 5848,
|
||||
SpvOpArbitraryFloatDivINTEL = 5849,
|
||||
SpvOpArbitraryFloatGTINTEL = 5850,
|
||||
SpvOpArbitraryFloatGEINTEL = 5851,
|
||||
SpvOpArbitraryFloatLTINTEL = 5852,
|
||||
SpvOpArbitraryFloatLEINTEL = 5853,
|
||||
SpvOpArbitraryFloatEQINTEL = 5854,
|
||||
SpvOpArbitraryFloatRecipINTEL = 5855,
|
||||
SpvOpArbitraryFloatRSqrtINTEL = 5856,
|
||||
SpvOpArbitraryFloatCbrtINTEL = 5857,
|
||||
SpvOpArbitraryFloatHypotINTEL = 5858,
|
||||
SpvOpArbitraryFloatSqrtINTEL = 5859,
|
||||
SpvOpArbitraryFloatLogINTEL = 5860,
|
||||
SpvOpArbitraryFloatLog2INTEL = 5861,
|
||||
SpvOpArbitraryFloatLog10INTEL = 5862,
|
||||
SpvOpArbitraryFloatLog1pINTEL = 5863,
|
||||
SpvOpArbitraryFloatExpINTEL = 5864,
|
||||
SpvOpArbitraryFloatExp2INTEL = 5865,
|
||||
SpvOpArbitraryFloatExp10INTEL = 5866,
|
||||
SpvOpArbitraryFloatExpm1INTEL = 5867,
|
||||
SpvOpArbitraryFloatSinINTEL = 5868,
|
||||
SpvOpArbitraryFloatCosINTEL = 5869,
|
||||
SpvOpArbitraryFloatSinCosINTEL = 5870,
|
||||
SpvOpArbitraryFloatSinPiINTEL = 5871,
|
||||
SpvOpArbitraryFloatCosPiINTEL = 5872,
|
||||
SpvOpArbitraryFloatASinINTEL = 5873,
|
||||
SpvOpArbitraryFloatASinPiINTEL = 5874,
|
||||
SpvOpArbitraryFloatACosINTEL = 5875,
|
||||
SpvOpArbitraryFloatACosPiINTEL = 5876,
|
||||
SpvOpArbitraryFloatATanINTEL = 5877,
|
||||
SpvOpArbitraryFloatATanPiINTEL = 5878,
|
||||
SpvOpArbitraryFloatATan2INTEL = 5879,
|
||||
SpvOpArbitraryFloatPowINTEL = 5880,
|
||||
SpvOpArbitraryFloatPowRINTEL = 5881,
|
||||
SpvOpArbitraryFloatPowNINTEL = 5882,
|
||||
SpvOpLoopControlINTEL = 5887,
|
||||
SpvOpFixedSqrtINTEL = 5923,
|
||||
SpvOpFixedRecipINTEL = 5924,
|
||||
SpvOpFixedRsqrtINTEL = 5925,
|
||||
SpvOpFixedSinINTEL = 5926,
|
||||
SpvOpFixedCosINTEL = 5927,
|
||||
SpvOpFixedSinCosINTEL = 5928,
|
||||
SpvOpFixedSinPiINTEL = 5929,
|
||||
SpvOpFixedCosPiINTEL = 5930,
|
||||
SpvOpFixedSinCosPiINTEL = 5931,
|
||||
SpvOpFixedLogINTEL = 5932,
|
||||
SpvOpFixedExpINTEL = 5933,
|
||||
SpvOpPtrCastToCrossWorkgroupINTEL = 5934,
|
||||
SpvOpCrossWorkgroupCastToPtrINTEL = 5938,
|
||||
SpvOpReadPipeBlockingINTEL = 5946,
|
||||
SpvOpWritePipeBlockingINTEL = 5947,
|
||||
SpvOpFPGARegINTEL = 5949,
|
||||
|
@ -1616,6 +1835,10 @@ typedef enum SpvOp_ {
|
|||
SpvOpRayQueryGetIntersectionObjectToWorldKHR = 6031,
|
||||
SpvOpRayQueryGetIntersectionWorldToObjectKHR = 6032,
|
||||
SpvOpAtomicFAddEXT = 6035,
|
||||
SpvOpTypeBufferSurfaceINTEL = 6086,
|
||||
SpvOpTypeStructContinuedINTEL = 6090,
|
||||
SpvOpConstantCompositeContinuedINTEL = 6091,
|
||||
SpvOpSpecConstantCompositeContinuedINTEL = 6092,
|
||||
SpvOpMax = 0x7fffffff,
|
||||
} SpvOp;
|
||||
|
||||
|
@ -1980,6 +2203,12 @@ inline void SpvHasResultAndType(SpvOp opcode, bool *hasResult, bool *hasResultTy
|
|||
case SpvOpConvertUToAccelerationStructureKHR: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpIgnoreIntersectionKHR: *hasResult = false; *hasResultType = false; break;
|
||||
case SpvOpTerminateRayKHR: *hasResult = false; *hasResultType = false; break;
|
||||
case SpvOpSDot: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpUDot: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpSUDot: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpSDotAccSat: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpUDotAccSat: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpSUDotAccSat: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpTypeRayQueryKHR: *hasResult = true; *hasResultType = false; break;
|
||||
case SpvOpRayQueryInitializeKHR: *hasResult = false; *hasResultType = false; break;
|
||||
case SpvOpRayQueryTerminateKHR: *hasResult = false; *hasResultType = false; break;
|
||||
|
@ -2005,6 +2234,8 @@ inline void SpvHasResultAndType(SpvOp opcode, bool *hasResult, bool *hasResultTy
|
|||
case SpvOpIgnoreIntersectionNV: *hasResult = false; *hasResultType = false; break;
|
||||
case SpvOpTerminateRayNV: *hasResult = false; *hasResultType = false; break;
|
||||
case SpvOpTraceNV: *hasResult = false; *hasResultType = false; break;
|
||||
case SpvOpTraceMotionNV: *hasResult = false; *hasResultType = false; break;
|
||||
case SpvOpTraceRayMotionNV: *hasResult = false; *hasResultType = false; break;
|
||||
case SpvOpTypeAccelerationStructureNV: *hasResult = true; *hasResultType = false; break;
|
||||
case SpvOpExecuteCallableNV: *hasResult = false; *hasResultType = false; break;
|
||||
case SpvOpTypeCooperativeMatrixNV: *hasResult = true; *hasResultType = false; break;
|
||||
|
@ -2014,8 +2245,15 @@ inline void SpvHasResultAndType(SpvOp opcode, bool *hasResult, bool *hasResultTy
|
|||
case SpvOpCooperativeMatrixLengthNV: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpBeginInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break;
|
||||
case SpvOpEndInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break;
|
||||
case SpvOpDemoteToHelperInvocationEXT: *hasResult = false; *hasResultType = false; break;
|
||||
case SpvOpDemoteToHelperInvocation: *hasResult = false; *hasResultType = false; break;
|
||||
case SpvOpIsHelperInvocationEXT: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpConvertUToImageNV: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpConvertUToSamplerNV: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpConvertImageToUNV: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpConvertSamplerToUNV: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpConvertUToSampledImageNV: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpConvertSampledImageToUNV: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpSamplerImageAddressingModeNV: *hasResult = false; *hasResultType = false; break;
|
||||
case SpvOpSubgroupShuffleINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpSubgroupShuffleDownINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpSubgroupShuffleUpINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
|
@ -2040,8 +2278,15 @@ inline void SpvHasResultAndType(SpvOp opcode, bool *hasResult, bool *hasResultTy
|
|||
case SpvOpUSubSatINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpIMul32x16INTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpUMul32x16INTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpFunctionPointerINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpConstantFunctionPointerINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpFunctionPointerCallINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpAsmTargetINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpAsmINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpAsmCallINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpAtomicFMinEXT: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpAtomicFMaxEXT: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpAssumeTrueKHR: *hasResult = false; *hasResultType = false; break;
|
||||
case SpvOpExpectKHR: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpDecorateString: *hasResult = false; *hasResultType = false; break;
|
||||
case SpvOpMemberDecorateString: *hasResult = false; *hasResultType = false; break;
|
||||
case SpvOpVmeImageINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
|
@ -2162,7 +2407,64 @@ inline void SpvHasResultAndType(SpvOp opcode, bool *hasResult, bool *hasResultTy
|
|||
case SpvOpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpSubgroupAvcSicGetInterRawSadsINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpVariableLengthArrayINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpSaveMemoryINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpRestoreMemoryINTEL: *hasResult = false; *hasResultType = false; break;
|
||||
case SpvOpArbitraryFloatSinCosPiINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpArbitraryFloatCastINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpArbitraryFloatCastFromIntINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpArbitraryFloatCastToIntINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpArbitraryFloatAddINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpArbitraryFloatSubINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpArbitraryFloatMulINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpArbitraryFloatDivINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpArbitraryFloatGTINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpArbitraryFloatGEINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpArbitraryFloatLTINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpArbitraryFloatLEINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpArbitraryFloatEQINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpArbitraryFloatRecipINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpArbitraryFloatRSqrtINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpArbitraryFloatCbrtINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpArbitraryFloatHypotINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpArbitraryFloatSqrtINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpArbitraryFloatLogINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpArbitraryFloatLog2INTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpArbitraryFloatLog10INTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpArbitraryFloatLog1pINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpArbitraryFloatExpINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpArbitraryFloatExp2INTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpArbitraryFloatExp10INTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpArbitraryFloatExpm1INTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpArbitraryFloatSinINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpArbitraryFloatCosINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpArbitraryFloatSinCosINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpArbitraryFloatSinPiINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpArbitraryFloatCosPiINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpArbitraryFloatASinINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpArbitraryFloatASinPiINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpArbitraryFloatACosINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpArbitraryFloatACosPiINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpArbitraryFloatATanINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpArbitraryFloatATanPiINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpArbitraryFloatATan2INTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpArbitraryFloatPowINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpArbitraryFloatPowRINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpArbitraryFloatPowNINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpLoopControlINTEL: *hasResult = false; *hasResultType = false; break;
|
||||
case SpvOpFixedSqrtINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpFixedRecipINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpFixedRsqrtINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpFixedSinINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpFixedCosINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpFixedSinCosINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpFixedSinPiINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpFixedCosPiINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpFixedSinCosPiINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpFixedLogINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpFixedExpINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpPtrCastToCrossWorkgroupINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpCrossWorkgroupCastToPtrINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpReadPipeBlockingINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpWritePipeBlockingINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpFPGARegINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
|
@ -2184,6 +2486,10 @@ inline void SpvHasResultAndType(SpvOp opcode, bool *hasResult, bool *hasResultTy
|
|||
case SpvOpRayQueryGetIntersectionObjectToWorldKHR: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpRayQueryGetIntersectionWorldToObjectKHR: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpAtomicFAddEXT: *hasResult = true; *hasResultType = true; break;
|
||||
case SpvOpTypeBufferSurfaceINTEL: *hasResult = true; *hasResultType = false; break;
|
||||
case SpvOpTypeStructContinuedINTEL: *hasResult = false; *hasResultType = false; break;
|
||||
case SpvOpConstantCompositeContinuedINTEL: *hasResult = false; *hasResultType = false; break;
|
||||
case SpvOpSpecConstantCompositeContinuedINTEL: *hasResult = false; *hasResultType = false; break;
|
||||
}
|
||||
}
|
||||
#endif /* SPV_ENABLE_UTILITY_CODE */
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
diff --git a/thirdparty/spirv-reflect/spirv_reflect.c b/thirdparty/spirv-reflect/spirv_reflect.c
|
||||
index 1c94a2e00e..2786a7f3ad 100644
|
||||
index e9b11bf495..f181df5fa2 100644
|
||||
--- a/thirdparty/spirv-reflect/spirv_reflect.c
|
||||
+++ b/thirdparty/spirv-reflect/spirv_reflect.c
|
||||
@@ -124,6 +124,9 @@ typedef struct SpvReflectPrvDecorations {
|
||||
@@ -125,6 +125,9 @@ typedef struct SpvReflectPrvDecorations {
|
||||
SpvReflectPrvNumberDecoration location;
|
||||
SpvReflectPrvNumberDecoration offset;
|
||||
SpvReflectPrvNumberDecoration uav_counter_buffer;
|
||||
|
@ -12,7 +12,7 @@ index 1c94a2e00e..2786a7f3ad 100644
|
|||
SpvReflectPrvStringDecoration semantic;
|
||||
uint32_t array_stride;
|
||||
uint32_t matrix_stride;
|
||||
@@ -629,6 +632,9 @@ static SpvReflectResult ParseNodes(SpvReflectPrvParser* p_parser)
|
||||
@@ -631,6 +634,9 @@ static SpvReflectResult ParseNodes(SpvReflectPrvParser* p_parser)
|
||||
p_parser->nodes[i].decorations.offset.value = (uint32_t)INVALID_VALUE;
|
||||
p_parser->nodes[i].decorations.uav_counter_buffer.value = (uint32_t)INVALID_VALUE;
|
||||
p_parser->nodes[i].decorations.built_in = (SpvBuiltIn)INVALID_VALUE;
|
||||
|
@ -22,7 +22,7 @@ index 1c94a2e00e..2786a7f3ad 100644
|
|||
}
|
||||
// Mark source file id node
|
||||
p_parser->source_file_id = (uint32_t)INVALID_VALUE;
|
||||
@@ -819,10 +825,16 @@ static SpvReflectResult ParseNodes(SpvReflectPrvParser* p_parser)
|
||||
@@ -821,10 +827,16 @@ static SpvReflectResult ParseNodes(SpvReflectPrvParser* p_parser)
|
||||
CHECKED_READU32(p_parser, p_node->word_offset + 2, p_node->result_id);
|
||||
}
|
||||
break;
|
||||
|
@ -41,7 +41,7 @@ index 1c94a2e00e..2786a7f3ad 100644
|
|||
case SpvOpSpecConstantComposite:
|
||||
case SpvOpSpecConstantOp: {
|
||||
CHECKED_READU32(p_parser, p_node->word_offset + 1, p_node->result_type_id);
|
||||
@@ -854,7 +866,7 @@ static SpvReflectResult ParseNodes(SpvReflectPrvParser* p_parser)
|
||||
@@ -856,7 +868,7 @@ static SpvReflectResult ParseNodes(SpvReflectPrvParser* p_parser)
|
||||
CHECKED_READU32(p_parser, p_node->word_offset + 3, p_access_chain->base_id);
|
||||
//
|
||||
// SPIRV_ACCESS_CHAIN_INDEX_OFFSET (4) is the number of words up until the first index:
|
||||
|
@ -50,17 +50,17 @@ index 1c94a2e00e..2786a7f3ad 100644
|
|||
//
|
||||
p_access_chain->index_count = (node_word_count - SPIRV_ACCESS_CHAIN_INDEX_OFFSET);
|
||||
if (p_access_chain->index_count > 0) {
|
||||
@@ -1334,6 +1346,9 @@ static SpvReflectResult ParseDecorations(SpvReflectPrvParser* p_parser)
|
||||
@@ -1338,6 +1350,9 @@ static SpvReflectResult ParseDecorations(SpvReflectPrvParser* p_parser)
|
||||
skip = true;
|
||||
}
|
||||
break;
|
||||
+// -- GODOT begin --
|
||||
+ case SpvDecorationSpecId:
|
||||
+// -- GODOT end --
|
||||
case SpvDecorationRelaxedPrecision:
|
||||
case SpvDecorationBlock:
|
||||
case SpvDecorationBufferBlock:
|
||||
case SpvDecorationColMajor:
|
||||
@@ -1466,7 +1481,14 @@ static SpvReflectResult ParseDecorations(SpvReflectPrvParser* p_parser)
|
||||
@@ -1481,7 +1496,14 @@ static SpvReflectResult ParseDecorations(SpvReflectPrvParser* p_parser)
|
||||
p_target_decorations->input_attachment_index.word_offset = word_offset;
|
||||
}
|
||||
break;
|
||||
|
@ -76,7 +76,7 @@ index 1c94a2e00e..2786a7f3ad 100644
|
|||
case SpvReflectDecorationHlslCounterBufferGOOGLE: {
|
||||
uint32_t word_offset = p_node->word_offset + member_offset+ 3;
|
||||
CHECKED_READU32(p_parser, word_offset, p_target_decorations->uav_counter_buffer.value);
|
||||
@@ -1766,6 +1788,13 @@ static SpvReflectResult ParseType(
|
||||
@@ -1789,6 +1811,13 @@ static SpvReflectResult ParseType(
|
||||
p_type->type_flags |= SPV_REFLECT_TYPE_FLAG_EXTERNAL_ACCELERATION_STRUCTURE;
|
||||
}
|
||||
break;
|
||||
|
@ -90,7 +90,7 @@ index 1c94a2e00e..2786a7f3ad 100644
|
|||
}
|
||||
|
||||
if (result == SPV_REFLECT_RESULT_SUCCESS) {
|
||||
@@ -3236,6 +3265,69 @@ static SpvReflectResult ParseExecutionModes(
|
||||
@@ -3269,6 +3298,69 @@ static SpvReflectResult ParseExecutionModes(
|
||||
return SPV_REFLECT_RESULT_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -160,7 +160,7 @@ index 1c94a2e00e..2786a7f3ad 100644
|
|||
static SpvReflectResult ParsePushConstantBlocks(
|
||||
SpvReflectPrvParser* p_parser,
|
||||
SpvReflectShaderModule* p_module)
|
||||
@@ -3613,6 +3705,12 @@ SpvReflectResult spvReflectCreateShaderModule(
|
||||
@@ -3650,6 +3742,12 @@ static SpvReflectResult CreateShaderModule(
|
||||
result = ParsePushConstantBlocks(&parser, p_module);
|
||||
SPV_REFLECT_ASSERT(result == SPV_REFLECT_RESULT_SUCCESS);
|
||||
}
|
||||
|
@ -173,7 +173,7 @@ index 1c94a2e00e..2786a7f3ad 100644
|
|||
if (result == SPV_REFLECT_RESULT_SUCCESS) {
|
||||
result = ParseEntryPoints(&parser, p_module);
|
||||
SPV_REFLECT_ASSERT(result == SPV_REFLECT_RESULT_SUCCESS);
|
||||
@@ -3742,6 +3840,9 @@ void spvReflectDestroyShaderModule(SpvReflectShaderModule* p_module)
|
||||
@@ -3807,6 +3905,9 @@ void spvReflectDestroyShaderModule(SpvReflectShaderModule* p_module)
|
||||
SafeFree(p_entry->used_push_constants);
|
||||
}
|
||||
SafeFree(p_module->entry_points);
|
||||
|
@ -183,7 +183,7 @@ index 1c94a2e00e..2786a7f3ad 100644
|
|||
|
||||
// Push constants
|
||||
for (size_t i = 0; i < p_module->push_constant_block_count; ++i) {
|
||||
@@ -4010,6 +4111,38 @@ SpvReflectResult spvReflectEnumerateEntryPointInterfaceVariables(
|
||||
@@ -4077,6 +4178,38 @@ SpvReflectResult spvReflectEnumerateEntryPointInterfaceVariables(
|
||||
return SPV_REFLECT_RESULT_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -223,10 +223,10 @@ index 1c94a2e00e..2786a7f3ad 100644
|
|||
const SpvReflectShaderModule* p_module,
|
||||
uint32_t* p_count,
|
||||
diff --git a/thirdparty/spirv-reflect/spirv_reflect.h b/thirdparty/spirv-reflect/spirv_reflect.h
|
||||
index da05400973..50cc65222b 100644
|
||||
index e9e4c40755..948533d3c0 100644
|
||||
--- a/thirdparty/spirv-reflect/spirv_reflect.h
|
||||
+++ b/thirdparty/spirv-reflect/spirv_reflect.h
|
||||
@@ -292,6 +292,28 @@ typedef struct SpvReflectTypeDescription {
|
||||
@@ -323,6 +323,28 @@ typedef struct SpvReflectTypeDescription {
|
||||
struct SpvReflectTypeDescription* members;
|
||||
} SpvReflectTypeDescription;
|
||||
|
||||
|
@ -255,7 +255,7 @@ index da05400973..50cc65222b 100644
|
|||
|
||||
/*! @struct SpvReflectInterfaceVariable
|
||||
|
||||
@@ -439,6 +461,10 @@ typedef struct SpvReflectShaderModule {
|
||||
@@ -472,6 +494,10 @@ typedef struct SpvReflectShaderModule {
|
||||
SpvReflectInterfaceVariable* interface_variables; // Uses value(s) from first entry point
|
||||
uint32_t push_constant_block_count; // Uses value(s) from first entry point
|
||||
SpvReflectBlockVariable* push_constant_blocks; // Uses value(s) from first entry point
|
||||
|
@ -265,8 +265,8 @@ index da05400973..50cc65222b 100644
|
|||
+ // -- GODOT end --
|
||||
|
||||
struct Internal {
|
||||
size_t spirv_size;
|
||||
@@ -694,6 +720,33 @@ SpvReflectResult spvReflectEnumerateInputVariables(
|
||||
SpvReflectModuleFlags module_flags;
|
||||
@@ -744,6 +770,33 @@ SpvReflectResult spvReflectEnumerateInputVariables(
|
||||
SpvReflectInterfaceVariable** pp_variables
|
||||
);
|
||||
|
||||
|
|
135
thirdparty/spirv-reflect/spirv_reflect.c
vendored
135
thirdparty/spirv-reflect/spirv_reflect.c
vendored
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright 2017-2018 Google Inc.
|
||||
Copyright 2017-2022 Google Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
|
@ -110,6 +110,7 @@ typedef struct SpvReflectPrvStringDecoration {
|
|||
|
||||
// clang-format off
|
||||
typedef struct SpvReflectPrvDecorations {
|
||||
bool is_relaxed_precision;
|
||||
bool is_block;
|
||||
bool is_buffer_block;
|
||||
bool is_row_major;
|
||||
|
@ -240,10 +241,8 @@ static uint32_t RoundUp(
|
|||
|
||||
#define SafeFree(ptr) \
|
||||
{ \
|
||||
if (ptr != NULL) { \
|
||||
free((void*)ptr); \
|
||||
ptr = NULL; \
|
||||
} \
|
||||
}
|
||||
|
||||
static int SortCompareUint32(
|
||||
|
@ -462,6 +461,9 @@ static SpvReflectResult ReadStr(
|
|||
static SpvReflectDecorationFlags ApplyDecorations(const SpvReflectPrvDecorations* p_decoration_fields)
|
||||
{
|
||||
SpvReflectDecorationFlags decorations = SPV_REFLECT_DECORATION_NONE;
|
||||
if (p_decoration_fields->is_relaxed_precision) {
|
||||
decorations |= SPV_REFLECT_DECORATION_RELAXED_PRECISION;
|
||||
}
|
||||
if (p_decoration_fields->is_block) {
|
||||
decorations |= SPV_REFLECT_DECORATION_BLOCK;
|
||||
}
|
||||
|
@ -1046,6 +1048,7 @@ static SpvReflectResult ParseFunction(
|
|||
case SpvOpGenericPtrMemSemantics:
|
||||
case SpvOpInBoundsPtrAccessChain:
|
||||
case SpvOpStore:
|
||||
case SpvOpImageTexelPointer:
|
||||
{
|
||||
++(p_func->accessed_ptr_count);
|
||||
}
|
||||
|
@ -1097,6 +1100,7 @@ static SpvReflectResult ParseFunction(
|
|||
case SpvOpArrayLength:
|
||||
case SpvOpGenericPtrMemSemantics:
|
||||
case SpvOpInBoundsPtrAccessChain:
|
||||
case SpvOpImageTexelPointer:
|
||||
{
|
||||
CHECKED_READU32(p_parser, p_node->word_offset + 3,
|
||||
p_func->accessed_ptrs[p_func->accessed_ptr_count]);
|
||||
|
@ -1349,6 +1353,7 @@ static SpvReflectResult ParseDecorations(SpvReflectPrvParser* p_parser)
|
|||
// -- GODOT begin --
|
||||
case SpvDecorationSpecId:
|
||||
// -- GODOT end --
|
||||
case SpvDecorationRelaxedPrecision:
|
||||
case SpvDecorationBlock:
|
||||
case SpvDecorationBufferBlock:
|
||||
case SpvDecorationColMajor:
|
||||
|
@ -1379,6 +1384,11 @@ static SpvReflectResult ParseDecorations(SpvReflectPrvParser* p_parser)
|
|||
CHECKED_READU32(p_parser, p_node->word_offset + 1, target_id);
|
||||
SpvReflectPrvNode* p_target_node = FindNode(p_parser, target_id);
|
||||
if (IsNull(p_target_node)) {
|
||||
if ((p_node->op == (uint32_t)SpvOpDecorate) && (decoration == SpvDecorationRelaxedPrecision)) {
|
||||
// Many OPs can be decorated that we don't care about. Ignore those.
|
||||
// See https://github.com/KhronosGroup/SPIRV-Reflect/issues/134
|
||||
continue;
|
||||
}
|
||||
return SPV_REFLECT_RESULT_ERROR_SPIRV_INVALID_ID_REFERENCE;
|
||||
}
|
||||
// Get decorations
|
||||
|
@ -1393,6 +1403,11 @@ static SpvReflectResult ParseDecorations(SpvReflectPrvParser* p_parser)
|
|||
switch (decoration) {
|
||||
default: break;
|
||||
|
||||
case SpvDecorationRelaxedPrecision: {
|
||||
p_target_decorations->is_relaxed_precision = true;
|
||||
}
|
||||
break;
|
||||
|
||||
case SpvDecorationBlock: {
|
||||
p_target_decorations->is_block = true;
|
||||
}
|
||||
|
@ -1685,16 +1700,19 @@ static SpvReflectResult ParseType(
|
|||
// Get length for current dimension
|
||||
SpvReflectPrvNode* p_length_node = FindNode(p_parser, length_id);
|
||||
if (IsNotNull(p_length_node)) {
|
||||
uint32_t dim_index = p_type->traits.array.dims_count;
|
||||
if (p_length_node->op == SpvOpSpecConstant ||
|
||||
p_length_node->op == SpvOpSpecConstantOp) {
|
||||
p_type->traits.array.dims[p_type->traits.array.dims_count] = 0xFFFFFFFF;
|
||||
p_type->traits.array.dims[dim_index] = 0xFFFFFFFF;
|
||||
p_type->traits.array.spec_constant_op_ids[dim_index] = length_id;
|
||||
p_type->traits.array.dims_count += 1;
|
||||
} else {
|
||||
uint32_t length = 0;
|
||||
IF_READU32(result, p_parser, p_length_node->word_offset + 3, length);
|
||||
if (result == SPV_REFLECT_RESULT_SUCCESS) {
|
||||
// Write the array dim and increment the count and offset
|
||||
p_type->traits.array.dims[p_type->traits.array.dims_count] = length;
|
||||
p_type->traits.array.dims[dim_index] = length;
|
||||
p_type->traits.array.spec_constant_op_ids[dim_index] = 0xFFFFFFFF;
|
||||
p_type->traits.array.dims_count += 1;
|
||||
} else {
|
||||
result = SPV_REFLECT_RESULT_ERROR_SPIRV_INVALID_ID_REFERENCE;
|
||||
|
@ -1719,6 +1737,11 @@ static SpvReflectResult ParseType(
|
|||
p_type->type_flags |= SPV_REFLECT_TYPE_FLAG_ARRAY;
|
||||
uint32_t element_type_id = (uint32_t)INVALID_VALUE;
|
||||
IF_READU32(result, p_parser, p_node->word_offset + 2, element_type_id);
|
||||
p_type->traits.array.stride = p_node->decorations.array_stride;
|
||||
uint32_t dim_index = p_type->traits.array.dims_count;
|
||||
p_type->traits.array.dims[dim_index] = 0;
|
||||
p_type->traits.array.spec_constant_op_ids[dim_index] = 0;
|
||||
p_type->traits.array.dims_count += 1;
|
||||
// Parse next dimension or element type
|
||||
SpvReflectPrvNode* p_next_node = FindNode(p_parser, element_type_id);
|
||||
if (IsNotNull(p_next_node)) {
|
||||
|
@ -2175,22 +2198,19 @@ static SpvReflectResult ParseDescriptorBlockVariable(
|
|||
return SPV_REFLECT_RESULT_ERROR_SPIRV_INVALID_ID_REFERENCE;
|
||||
}
|
||||
// Resolve to element type if current type is array or run time array
|
||||
while (p_type_node->op == SpvOpTypeArray || p_type_node->op == SpvOpTypeRuntimeArray) {
|
||||
if (p_type_node->op == SpvOpTypeArray) {
|
||||
while (p_type_node->op == SpvOpTypeArray) {
|
||||
p_type_node = FindNode(p_parser, p_type_node->array_traits.element_type_id);
|
||||
if (IsNull(p_type_node)) {
|
||||
return SPV_REFLECT_RESULT_ERROR_SPIRV_INVALID_ID_REFERENCE;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(p_type_node->op == SpvOpTypeRuntimeArray) {
|
||||
else {
|
||||
// Element type description
|
||||
p_type = FindType(p_module, p_type_node->array_traits.element_type_id);
|
||||
if (IsNull(p_type)) {
|
||||
SpvReflectTypeDescription* p_type_temp = FindType(p_module, p_type_node->array_traits.element_type_id);
|
||||
if (IsNull(p_type_temp)) {
|
||||
return SPV_REFLECT_RESULT_ERROR_SPIRV_INVALID_ID_REFERENCE;
|
||||
}
|
||||
// Element type node
|
||||
p_type_node = FindNode(p_parser, p_type->id);
|
||||
p_type_node = FindNode(p_parser, p_type_temp->id);
|
||||
}
|
||||
if (IsNull(p_type_node)) {
|
||||
return SPV_REFLECT_RESULT_ERROR_SPIRV_INVALID_ID_REFERENCE;
|
||||
}
|
||||
|
@ -2662,6 +2682,7 @@ static SpvReflectResult ParseFormat(
|
|||
|
||||
static SpvReflectResult ParseInterfaceVariable(
|
||||
SpvReflectPrvParser* p_parser,
|
||||
const SpvReflectPrvDecorations* p_var_node_decorations,
|
||||
const SpvReflectPrvDecorations* p_type_node_decorations,
|
||||
SpvReflectShaderModule* p_module,
|
||||
SpvReflectTypeDescription* p_type,
|
||||
|
@ -2685,7 +2706,7 @@ static SpvReflectResult ParseInterfaceVariable(
|
|||
SpvReflectPrvDecorations* p_member_decorations = &p_type_node->member_decorations[member_index];
|
||||
SpvReflectTypeDescription* p_member_type = &p_type->members[member_index];
|
||||
SpvReflectInterfaceVariable* p_member_var = &p_var->members[member_index];
|
||||
SpvReflectResult result = ParseInterfaceVariable(p_parser, p_member_decorations, p_module, p_member_type, p_member_var, p_has_built_in);
|
||||
SpvReflectResult result = ParseInterfaceVariable(p_parser, NULL, p_member_decorations, p_module, p_member_type, p_member_var, p_has_built_in);
|
||||
if (result != SPV_REFLECT_RESULT_SUCCESS) {
|
||||
SPV_REFLECT_ASSERT(false);
|
||||
return result;
|
||||
|
@ -2695,6 +2716,9 @@ static SpvReflectResult ParseInterfaceVariable(
|
|||
|
||||
p_var->name = p_type_node->name;
|
||||
p_var->decoration_flags = ApplyDecorations(p_type_node_decorations);
|
||||
if (p_var_node_decorations != NULL) {
|
||||
p_var->decoration_flags |= ApplyDecorations(p_var_node_decorations);
|
||||
}
|
||||
p_var->built_in = p_type_node_decorations->built_in;
|
||||
ApplyNumericTraits(p_type, &p_var->numeric);
|
||||
if (p_type->op == SpvOpTypeArray) {
|
||||
|
@ -2806,6 +2830,7 @@ static SpvReflectResult ParseInterfaceVariables(
|
|||
bool has_built_in = p_node->decorations.is_built_in;
|
||||
SpvReflectResult result = ParseInterfaceVariable(
|
||||
p_parser,
|
||||
&p_node->decorations,
|
||||
&p_type_node->decorations,
|
||||
p_module,
|
||||
p_type,
|
||||
|
@ -3208,7 +3233,11 @@ static SpvReflectResult ParseExecutionModes(
|
|||
}
|
||||
break;
|
||||
|
||||
case SpvExecutionModeInvocations:
|
||||
case SpvExecutionModeInvocations: {
|
||||
CHECKED_READU32(p_parser, p_node->word_offset + 3, p_entry_point->invocations);
|
||||
}
|
||||
break;
|
||||
|
||||
case SpvExecutionModeSpacingEqual:
|
||||
case SpvExecutionModeSpacingFractionalEven:
|
||||
case SpvExecutionModeSpacingFractionalOdd:
|
||||
|
@ -3241,7 +3270,11 @@ static SpvReflectResult ParseExecutionModes(
|
|||
case SpvExecutionModeInputTrianglesAdjacency:
|
||||
case SpvExecutionModeQuads:
|
||||
case SpvExecutionModeIsolines:
|
||||
case SpvExecutionModeOutputVertices:
|
||||
case SpvExecutionModeOutputVertices: {
|
||||
CHECKED_READU32(p_parser, p_node->word_offset + 3, p_entry_point->output_vertices);
|
||||
}
|
||||
break;
|
||||
|
||||
case SpvExecutionModeOutputPoints:
|
||||
case SpvExecutionModeOutputLineStrip:
|
||||
case SpvExecutionModeOutputTriangleStrip:
|
||||
|
@ -3591,16 +3624,8 @@ static SpvReflectResult SynchronizeDescriptorSets(SpvReflectShaderModule* p_modu
|
|||
return result;
|
||||
}
|
||||
|
||||
SpvReflectResult spvReflectGetShaderModule(
|
||||
size_t size,
|
||||
const void* p_code,
|
||||
SpvReflectShaderModule* p_module
|
||||
)
|
||||
{
|
||||
return spvReflectCreateShaderModule(size, p_code, p_module);
|
||||
}
|
||||
|
||||
SpvReflectResult spvReflectCreateShaderModule(
|
||||
static SpvReflectResult CreateShaderModule(
|
||||
uint32_t flags,
|
||||
size_t size,
|
||||
const void* p_code,
|
||||
SpvReflectShaderModule* p_module
|
||||
|
@ -3618,6 +3643,16 @@ SpvReflectResult spvReflectCreateShaderModule(
|
|||
if (IsNull(p_module->_internal)) {
|
||||
return SPV_REFLECT_RESULT_ERROR_ALLOC_FAILED;
|
||||
}
|
||||
// Copy flags
|
||||
p_module->_internal->module_flags = flags;
|
||||
// Figure out if we need to copy the SPIR-V code or not
|
||||
if (flags & SPV_REFLECT_MODULE_FLAG_NO_COPY) {
|
||||
// Set internal size and pointer to args passed in
|
||||
p_module->_internal->spirv_size = size;
|
||||
p_module->_internal->spirv_code = (void*)p_code; // cast that const away
|
||||
p_module->_internal->spirv_word_count = (uint32_t)(size / SPIRV_WORD_SIZE);
|
||||
}
|
||||
else {
|
||||
// Allocate SPIR-V code storage
|
||||
p_module->_internal->spirv_size = size;
|
||||
p_module->_internal->spirv_code = (uint32_t*)calloc(1, p_module->_internal->spirv_size);
|
||||
|
@ -3626,7 +3661,9 @@ SpvReflectResult spvReflectCreateShaderModule(
|
|||
SafeFree(p_module->_internal);
|
||||
return SPV_REFLECT_RESULT_ERROR_ALLOC_FAILED;
|
||||
}
|
||||
// Copy SPIR-V to code storage
|
||||
memcpy(p_module->_internal->spirv_code, p_code, size);
|
||||
}
|
||||
|
||||
SpvReflectPrvParser parser = { 0 };
|
||||
SpvReflectResult result = CreateParser(p_module->_internal->spirv_size,
|
||||
|
@ -3751,6 +3788,34 @@ SpvReflectResult spvReflectCreateShaderModule(
|
|||
return result;
|
||||
}
|
||||
|
||||
SpvReflectResult spvReflectCreateShaderModule(
|
||||
size_t size,
|
||||
const void* p_code,
|
||||
SpvReflectShaderModule* p_module
|
||||
)
|
||||
{
|
||||
return CreateShaderModule(0, size, p_code, p_module);
|
||||
}
|
||||
|
||||
SpvReflectResult spvReflectCreateShaderModule2(
|
||||
uint32_t flags,
|
||||
size_t size,
|
||||
const void* p_code,
|
||||
SpvReflectShaderModule* p_module
|
||||
)
|
||||
{
|
||||
return CreateShaderModule(flags, size, p_code, p_module);
|
||||
}
|
||||
|
||||
SpvReflectResult spvReflectGetShaderModule(
|
||||
size_t size,
|
||||
const void* p_code,
|
||||
SpvReflectShaderModule* p_module
|
||||
)
|
||||
{
|
||||
return spvReflectCreateShaderModule(size, p_code, p_module);
|
||||
}
|
||||
|
||||
static void SafeFreeTypes(SpvReflectTypeDescription* p_type)
|
||||
{
|
||||
if (IsNull(p_type)) {
|
||||
|
@ -3860,8 +3925,10 @@ void spvReflectDestroyShaderModule(SpvReflectShaderModule* p_module)
|
|||
}
|
||||
SafeFree(p_module->_internal->type_descriptions);
|
||||
|
||||
// Free SPIR-V code
|
||||
// Free SPIR-V code if there was a copy
|
||||
if ((p_module->_internal->module_flags & SPV_REFLECT_MODULE_FLAG_NO_COPY) == 0) {
|
||||
SafeFree(p_module->_internal->spirv_code);
|
||||
}
|
||||
// Free internal
|
||||
SafeFree(p_module->_internal);
|
||||
}
|
||||
|
@ -5025,9 +5092,19 @@ const char* spvReflectSourceLanguage(SpvSourceLanguage source_lang)
|
|||
case SpvSourceLanguageOpenCL_C : return "OpenCL_C";
|
||||
case SpvSourceLanguageOpenCL_CPP : return "OpenCL_CPP";
|
||||
case SpvSourceLanguageHLSL : return "HLSL";
|
||||
|
||||
case SpvSourceLanguageCPP_for_OpenCL : return "CPP_for_OpenCL";
|
||||
case SpvSourceLanguageMax:
|
||||
break;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
const char* spvReflectBlockVariableTypeName(
|
||||
const SpvReflectBlockVariable* p_var
|
||||
)
|
||||
{
|
||||
if (p_var == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
return p_var->type_description->type_name;
|
||||
}
|
||||
|
|
95
thirdparty/spirv-reflect/spirv_reflect.h
vendored
95
thirdparty/spirv-reflect/spirv_reflect.h
vendored
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright 2017-2018 Google Inc.
|
||||
Copyright 2017-2022 Google Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
|
@ -76,6 +76,25 @@ typedef enum SpvReflectResult {
|
|||
SPV_REFLECT_RESULT_ERROR_SPIRV_INVALID_EXECUTION_MODE,
|
||||
} SpvReflectResult;
|
||||
|
||||
/*! @enum SpvReflectModuleFlagBits
|
||||
|
||||
SPV_REFLECT_MODULE_FLAG_NO_COPY - Disables copying of SPIR-V code
|
||||
when a SPIRV-Reflect shader module is created. It is the
|
||||
responsibility of the calling program to ensure that the pointer
|
||||
remains valid and the memory it's pointing to is not freed while
|
||||
SPIRV-Reflect operations are taking place. Freeing the backing
|
||||
memory will cause undefined behavior or most likely a crash.
|
||||
This is flag is intended for cases where the memory overhead of
|
||||
storing the copied SPIR-V is undesirable.
|
||||
|
||||
*/
|
||||
typedef enum SpvReflectModuleFlagBits {
|
||||
SPV_REFLECT_MODULE_FLAG_NONE = 0x00000000,
|
||||
SPV_REFLECT_MODULE_FLAG_NO_COPY = 0x00000001,
|
||||
} SpvReflectModuleFlagBits;
|
||||
|
||||
typedef uint32_t SpvReflectModuleFlags;
|
||||
|
||||
/*! @enum SpvReflectTypeFlagBits
|
||||
|
||||
*/
|
||||
|
@ -101,6 +120,13 @@ typedef uint32_t SpvReflectTypeFlags;
|
|||
|
||||
/*! @enum SpvReflectDecorationBits
|
||||
|
||||
NOTE: HLSL row_major and column_major decorations are reversed
|
||||
in SPIR-V. Meaning that matrices declrations with row_major
|
||||
will get reflected as column_major and vice versa. The
|
||||
row and column decorations get appied during the compilation.
|
||||
SPIRV-Reflect reads the data as is and does not make any
|
||||
attempt to correct it to match what's in the source.
|
||||
|
||||
*/
|
||||
typedef enum SpvReflectDecorationFlagBits {
|
||||
SPV_REFLECT_DECORATION_NONE = 0x00000000,
|
||||
|
@ -112,6 +138,7 @@ typedef enum SpvReflectDecorationFlagBits {
|
|||
SPV_REFLECT_DECORATION_NOPERSPECTIVE = 0x00000020,
|
||||
SPV_REFLECT_DECORATION_FLAT = 0x00000040,
|
||||
SPV_REFLECT_DECORATION_NON_WRITABLE = 0x00000080,
|
||||
SPV_REFLECT_DECORATION_RELAXED_PRECISION = 0x00000100,
|
||||
} SpvReflectDecorationFlagBits;
|
||||
|
||||
typedef uint32_t SpvReflectDecorationFlags;
|
||||
|
@ -198,12 +225,12 @@ typedef enum SpvReflectShaderStageFlagBits {
|
|||
SPV_REFLECT_SHADER_STAGE_COMPUTE_BIT = 0x00000020, // = VK_SHADER_STAGE_COMPUTE_BIT
|
||||
SPV_REFLECT_SHADER_STAGE_TASK_BIT_NV = 0x00000040, // = VK_SHADER_STAGE_TASK_BIT_NV
|
||||
SPV_REFLECT_SHADER_STAGE_MESH_BIT_NV = 0x00000080, // = VK_SHADER_STAGE_MESH_BIT_NV
|
||||
SPV_REFLECT_SHADER_STAGE_RAYGEN_BIT_KHR = 0x00000100, // VK_SHADER_STAGE_RAYGEN_BIT_KHR
|
||||
SPV_REFLECT_SHADER_STAGE_ANY_HIT_BIT_KHR = 0x00000200, // VK_SHADER_STAGE_ANY_HIT_BIT_KHR
|
||||
SPV_REFLECT_SHADER_STAGE_CLOSEST_HIT_BIT_KHR = 0x00000400, // VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR
|
||||
SPV_REFLECT_SHADER_STAGE_MISS_BIT_KHR = 0x00000800, // VK_SHADER_STAGE_MISS_BIT_KHR
|
||||
SPV_REFLECT_SHADER_STAGE_INTERSECTION_BIT_KHR = 0x00001000, // VK_SHADER_STAGE_INTERSECTION_BIT_KHR
|
||||
SPV_REFLECT_SHADER_STAGE_CALLABLE_BIT_KHR = 0x00002000, // VK_SHADER_STAGE_CALLABLE_BIT_KHR
|
||||
SPV_REFLECT_SHADER_STAGE_RAYGEN_BIT_KHR = 0x00000100, // = VK_SHADER_STAGE_RAYGEN_BIT_KHR
|
||||
SPV_REFLECT_SHADER_STAGE_ANY_HIT_BIT_KHR = 0x00000200, // = VK_SHADER_STAGE_ANY_HIT_BIT_KHR
|
||||
SPV_REFLECT_SHADER_STAGE_CLOSEST_HIT_BIT_KHR = 0x00000400, // = VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR
|
||||
SPV_REFLECT_SHADER_STAGE_MISS_BIT_KHR = 0x00000800, // = VK_SHADER_STAGE_MISS_BIT_KHR
|
||||
SPV_REFLECT_SHADER_STAGE_INTERSECTION_BIT_KHR = 0x00001000, // = VK_SHADER_STAGE_INTERSECTION_BIT_KHR
|
||||
SPV_REFLECT_SHADER_STAGE_CALLABLE_BIT_KHR = 0x00002000, // = VK_SHADER_STAGE_CALLABLE_BIT_KHR
|
||||
|
||||
} SpvReflectShaderStageFlagBits;
|
||||
|
||||
|
@ -261,7 +288,11 @@ typedef struct SpvReflectImageTraits {
|
|||
|
||||
typedef struct SpvReflectArrayTraits {
|
||||
uint32_t dims_count;
|
||||
// Each entry is: 0xFFFFFFFF for a specialization constant dimension,
|
||||
// 0 for a runtime array dimension, and the array length otherwise.
|
||||
uint32_t dims[SPV_REFLECT_MAX_ARRAY_DIMS];
|
||||
// Stores Ids for dimensions that are specialization constants
|
||||
uint32_t spec_constant_op_ids[SPV_REFLECT_MAX_ARRAY_DIMS];
|
||||
uint32_t stride; // Measured in bytes
|
||||
} SpvReflectArrayTraits;
|
||||
|
||||
|
@ -432,6 +463,8 @@ typedef struct SpvReflectEntryPoint {
|
|||
uint32_t y;
|
||||
uint32_t z;
|
||||
} local_size;
|
||||
uint32_t invocations; // valid for geometry
|
||||
uint32_t output_vertices; // valid for geometry, tesselation
|
||||
} SpvReflectEntryPoint;
|
||||
|
||||
/*! @struct SpvReflectShaderModule
|
||||
|
@ -467,6 +500,7 @@ typedef struct SpvReflectShaderModule {
|
|||
// -- GODOT end --
|
||||
|
||||
struct Internal {
|
||||
SpvReflectModuleFlags module_flags;
|
||||
size_t spirv_size;
|
||||
uint32_t* spirv_code;
|
||||
uint32_t spirv_word_count;
|
||||
|
@ -495,6 +529,22 @@ SpvReflectResult spvReflectCreateShaderModule(
|
|||
SpvReflectShaderModule* p_module
|
||||
);
|
||||
|
||||
/*! @fn spvReflectCreateShaderModule2
|
||||
|
||||
@param flags Flags for module creations.
|
||||
@param size Size in bytes of SPIR-V code.
|
||||
@param p_code Pointer to SPIR-V code.
|
||||
@param p_module Pointer to an instance of SpvReflectShaderModule.
|
||||
@return SPV_REFLECT_RESULT_SUCCESS on success.
|
||||
|
||||
*/
|
||||
SpvReflectResult spvReflectCreateShaderModule2(
|
||||
SpvReflectModuleFlags flags,
|
||||
size_t size,
|
||||
const void* p_code,
|
||||
SpvReflectShaderModule* p_module
|
||||
);
|
||||
|
||||
SPV_REFLECT_DEPRECATED("renamed to spvReflectCreateShaderModule")
|
||||
SpvReflectResult spvReflectGetShaderModule(
|
||||
size_t size,
|
||||
|
@ -1404,6 +1454,16 @@ SpvReflectResult spvReflectChangeOutputVariableLocation(
|
|||
*/
|
||||
const char* spvReflectSourceLanguage(SpvSourceLanguage source_lang);
|
||||
|
||||
/*! @fn spvReflectBlockVariableTypeName
|
||||
|
||||
@param p_var Pointer to block variable.
|
||||
@return Returns string of block variable's type description type name
|
||||
or NULL if p_var is NULL.
|
||||
*/
|
||||
const char* spvReflectBlockVariableTypeName(
|
||||
const SpvReflectBlockVariable* p_var
|
||||
);
|
||||
|
||||
#if defined(__cplusplus)
|
||||
};
|
||||
#endif
|
||||
|
@ -1421,9 +1481,9 @@ namespace spv_reflect {
|
|||
class ShaderModule {
|
||||
public:
|
||||
ShaderModule();
|
||||
ShaderModule(size_t size, const void* p_code);
|
||||
ShaderModule(const std::vector<uint8_t>& code);
|
||||
ShaderModule(const std::vector<uint32_t>& code);
|
||||
ShaderModule(size_t size, const void* p_code, SpvReflectModuleFlags flags = SPV_REFLECT_MODULE_FLAG_NONE);
|
||||
ShaderModule(const std::vector<uint8_t>& code, SpvReflectModuleFlags flags = SPV_REFLECT_MODULE_FLAG_NONE);
|
||||
ShaderModule(const std::vector<uint32_t>& code, SpvReflectModuleFlags flags = SPV_REFLECT_MODULE_FLAG_NONE);
|
||||
~ShaderModule();
|
||||
|
||||
ShaderModule(ShaderModule&& other);
|
||||
|
@ -1533,8 +1593,9 @@ inline ShaderModule::ShaderModule() {}
|
|||
@param p_code
|
||||
|
||||
*/
|
||||
inline ShaderModule::ShaderModule(size_t size, const void* p_code) {
|
||||
m_result = spvReflectCreateShaderModule(
|
||||
inline ShaderModule::ShaderModule(size_t size, const void* p_code, SpvReflectModuleFlags flags) {
|
||||
m_result = spvReflectCreateShaderModule2(
|
||||
flags,
|
||||
size,
|
||||
p_code,
|
||||
&m_module);
|
||||
|
@ -1545,8 +1606,9 @@ inline ShaderModule::ShaderModule(size_t size, const void* p_code) {
|
|||
@param code
|
||||
|
||||
*/
|
||||
inline ShaderModule::ShaderModule(const std::vector<uint8_t>& code) {
|
||||
m_result = spvReflectCreateShaderModule(
|
||||
inline ShaderModule::ShaderModule(const std::vector<uint8_t>& code, SpvReflectModuleFlags flags) {
|
||||
m_result = spvReflectCreateShaderModule2(
|
||||
flags,
|
||||
code.size(),
|
||||
code.data(),
|
||||
&m_module);
|
||||
|
@ -1557,8 +1619,9 @@ inline ShaderModule::ShaderModule(const std::vector<uint8_t>& code) {
|
|||
@param code
|
||||
|
||||
*/
|
||||
inline ShaderModule::ShaderModule(const std::vector<uint32_t>& code) {
|
||||
m_result = spvReflectCreateShaderModule(
|
||||
inline ShaderModule::ShaderModule(const std::vector<uint32_t>& code, SpvReflectModuleFlags flags) {
|
||||
m_result = spvReflectCreateShaderModule2(
|
||||
flags,
|
||||
code.size() * sizeof(uint32_t),
|
||||
code.data(),
|
||||
&m_module);
|
||||
|
|
Loading…
Reference in a new issue