spirv-reflect: Update to latest commit, adds SPIRV 1.6 support
This commit is contained in:
parent
26b2defe0c
commit
84d7a69570
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
|
## spirv-reflect
|
||||||
|
|
||||||
- Upstream: https://github.com/KhronosGroup/SPIRV-Reflect
|
- Upstream: https://github.com/KhronosGroup/SPIRV-Reflect
|
||||||
- Version: git (cc937caab141d889c9c9dff572c5a6854d5cf9b4, 2021)
|
- Version: git (1aceb6af56e74b92a00378842dda5c5a73f49a4b, 2022)
|
||||||
- License: Apache 2.0
|
- License: Apache 2.0
|
||||||
|
|
||||||
Does not track Vulkan SDK releases closely, but try to package a commit newer
|
Does not track Vulkan SDK releases closely, but try to package a commit newer
|
||||||
|
@ -53,12 +53,12 @@
|
|||||||
|
|
||||||
typedef unsigned int SpvId;
|
typedef unsigned int SpvId;
|
||||||
|
|
||||||
#define SPV_VERSION 0x10500
|
#define SPV_VERSION 0x10600
|
||||||
#define SPV_REVISION 4
|
#define SPV_REVISION 1
|
||||||
|
|
||||||
static const unsigned int SpvMagicNumber = 0x07230203;
|
static const unsigned int SpvMagicNumber = 0x07230203;
|
||||||
static const unsigned int SpvVersion = 0x00010500;
|
static const unsigned int SpvVersion = 0x00010600;
|
||||||
static const unsigned int SpvRevision = 4;
|
static const unsigned int SpvRevision = 1;
|
||||||
static const unsigned int SpvOpCodeMask = 0xffff;
|
static const unsigned int SpvOpCodeMask = 0xffff;
|
||||||
static const unsigned int SpvWordCountShift = 16;
|
static const unsigned int SpvWordCountShift = 16;
|
||||||
|
|
||||||
@ -69,6 +69,7 @@ typedef enum SpvSourceLanguage_ {
|
|||||||
SpvSourceLanguageOpenCL_C = 3,
|
SpvSourceLanguageOpenCL_C = 3,
|
||||||
SpvSourceLanguageOpenCL_CPP = 4,
|
SpvSourceLanguageOpenCL_CPP = 4,
|
||||||
SpvSourceLanguageHLSL = 5,
|
SpvSourceLanguageHLSL = 5,
|
||||||
|
SpvSourceLanguageCPP_for_OpenCL = 6,
|
||||||
SpvSourceLanguageMax = 0x7fffffff,
|
SpvSourceLanguageMax = 0x7fffffff,
|
||||||
} SpvSourceLanguage;
|
} SpvSourceLanguage;
|
||||||
|
|
||||||
@ -154,6 +155,7 @@ typedef enum SpvExecutionMode_ {
|
|||||||
SpvExecutionModeSubgroupsPerWorkgroupId = 37,
|
SpvExecutionModeSubgroupsPerWorkgroupId = 37,
|
||||||
SpvExecutionModeLocalSizeId = 38,
|
SpvExecutionModeLocalSizeId = 38,
|
||||||
SpvExecutionModeLocalSizeHintId = 39,
|
SpvExecutionModeLocalSizeHintId = 39,
|
||||||
|
SpvExecutionModeSubgroupUniformControlFlowKHR = 4421,
|
||||||
SpvExecutionModePostDepthCoverage = 4446,
|
SpvExecutionModePostDepthCoverage = 4446,
|
||||||
SpvExecutionModeDenormPreserve = 4459,
|
SpvExecutionModeDenormPreserve = 4459,
|
||||||
SpvExecutionModeDenormFlushToZero = 4460,
|
SpvExecutionModeDenormFlushToZero = 4460,
|
||||||
@ -172,10 +174,16 @@ typedef enum SpvExecutionMode_ {
|
|||||||
SpvExecutionModeSampleInterlockUnorderedEXT = 5369,
|
SpvExecutionModeSampleInterlockUnorderedEXT = 5369,
|
||||||
SpvExecutionModeShadingRateInterlockOrderedEXT = 5370,
|
SpvExecutionModeShadingRateInterlockOrderedEXT = 5370,
|
||||||
SpvExecutionModeShadingRateInterlockUnorderedEXT = 5371,
|
SpvExecutionModeShadingRateInterlockUnorderedEXT = 5371,
|
||||||
|
SpvExecutionModeSharedLocalMemorySizeINTEL = 5618,
|
||||||
|
SpvExecutionModeRoundingModeRTPINTEL = 5620,
|
||||||
|
SpvExecutionModeRoundingModeRTNINTEL = 5621,
|
||||||
|
SpvExecutionModeFloatingPointModeALTINTEL = 5622,
|
||||||
|
SpvExecutionModeFloatingPointModeIEEEINTEL = 5623,
|
||||||
SpvExecutionModeMaxWorkgroupSizeINTEL = 5893,
|
SpvExecutionModeMaxWorkgroupSizeINTEL = 5893,
|
||||||
SpvExecutionModeMaxWorkDimINTEL = 5894,
|
SpvExecutionModeMaxWorkDimINTEL = 5894,
|
||||||
SpvExecutionModeNoGlobalOffsetINTEL = 5895,
|
SpvExecutionModeNoGlobalOffsetINTEL = 5895,
|
||||||
SpvExecutionModeNumSIMDWorkitemsINTEL = 5896,
|
SpvExecutionModeNumSIMDWorkitemsINTEL = 5896,
|
||||||
|
SpvExecutionModeSchedulerTargetFmaxMhzINTEL = 5903,
|
||||||
SpvExecutionModeMax = 0x7fffffff,
|
SpvExecutionModeMax = 0x7fffffff,
|
||||||
} SpvExecutionMode;
|
} SpvExecutionMode;
|
||||||
|
|
||||||
@ -208,6 +216,8 @@ typedef enum SpvStorageClass_ {
|
|||||||
SpvStorageClassPhysicalStorageBuffer = 5349,
|
SpvStorageClassPhysicalStorageBuffer = 5349,
|
||||||
SpvStorageClassPhysicalStorageBufferEXT = 5349,
|
SpvStorageClassPhysicalStorageBufferEXT = 5349,
|
||||||
SpvStorageClassCodeSectionINTEL = 5605,
|
SpvStorageClassCodeSectionINTEL = 5605,
|
||||||
|
SpvStorageClassDeviceOnlyINTEL = 5936,
|
||||||
|
SpvStorageClassHostOnlyINTEL = 5937,
|
||||||
SpvStorageClassMax = 0x7fffffff,
|
SpvStorageClassMax = 0x7fffffff,
|
||||||
} SpvStorageClass;
|
} SpvStorageClass;
|
||||||
|
|
||||||
@ -347,6 +357,8 @@ typedef enum SpvImageOperandsShift_ {
|
|||||||
SpvImageOperandsVolatileTexelKHRShift = 11,
|
SpvImageOperandsVolatileTexelKHRShift = 11,
|
||||||
SpvImageOperandsSignExtendShift = 12,
|
SpvImageOperandsSignExtendShift = 12,
|
||||||
SpvImageOperandsZeroExtendShift = 13,
|
SpvImageOperandsZeroExtendShift = 13,
|
||||||
|
SpvImageOperandsNontemporalShift = 14,
|
||||||
|
SpvImageOperandsOffsetsShift = 16,
|
||||||
SpvImageOperandsMax = 0x7fffffff,
|
SpvImageOperandsMax = 0x7fffffff,
|
||||||
} SpvImageOperandsShift;
|
} SpvImageOperandsShift;
|
||||||
|
|
||||||
@ -370,6 +382,8 @@ typedef enum SpvImageOperandsMask_ {
|
|||||||
SpvImageOperandsVolatileTexelKHRMask = 0x00000800,
|
SpvImageOperandsVolatileTexelKHRMask = 0x00000800,
|
||||||
SpvImageOperandsSignExtendMask = 0x00001000,
|
SpvImageOperandsSignExtendMask = 0x00001000,
|
||||||
SpvImageOperandsZeroExtendMask = 0x00002000,
|
SpvImageOperandsZeroExtendMask = 0x00002000,
|
||||||
|
SpvImageOperandsNontemporalMask = 0x00004000,
|
||||||
|
SpvImageOperandsOffsetsMask = 0x00010000,
|
||||||
} SpvImageOperandsMask;
|
} SpvImageOperandsMask;
|
||||||
|
|
||||||
typedef enum SpvFPFastMathModeShift_ {
|
typedef enum SpvFPFastMathModeShift_ {
|
||||||
@ -378,6 +392,8 @@ typedef enum SpvFPFastMathModeShift_ {
|
|||||||
SpvFPFastMathModeNSZShift = 2,
|
SpvFPFastMathModeNSZShift = 2,
|
||||||
SpvFPFastMathModeAllowRecipShift = 3,
|
SpvFPFastMathModeAllowRecipShift = 3,
|
||||||
SpvFPFastMathModeFastShift = 4,
|
SpvFPFastMathModeFastShift = 4,
|
||||||
|
SpvFPFastMathModeAllowContractFastINTELShift = 16,
|
||||||
|
SpvFPFastMathModeAllowReassocINTELShift = 17,
|
||||||
SpvFPFastMathModeMax = 0x7fffffff,
|
SpvFPFastMathModeMax = 0x7fffffff,
|
||||||
} SpvFPFastMathModeShift;
|
} SpvFPFastMathModeShift;
|
||||||
|
|
||||||
@ -388,6 +404,8 @@ typedef enum SpvFPFastMathModeMask_ {
|
|||||||
SpvFPFastMathModeNSZMask = 0x00000004,
|
SpvFPFastMathModeNSZMask = 0x00000004,
|
||||||
SpvFPFastMathModeAllowRecipMask = 0x00000008,
|
SpvFPFastMathModeAllowRecipMask = 0x00000008,
|
||||||
SpvFPFastMathModeFastMask = 0x00000010,
|
SpvFPFastMathModeFastMask = 0x00000010,
|
||||||
|
SpvFPFastMathModeAllowContractFastINTELMask = 0x00010000,
|
||||||
|
SpvFPFastMathModeAllowReassocINTELMask = 0x00020000,
|
||||||
} SpvFPFastMathModeMask;
|
} SpvFPFastMathModeMask;
|
||||||
|
|
||||||
typedef enum SpvFPRoundingMode_ {
|
typedef enum SpvFPRoundingMode_ {
|
||||||
@ -401,6 +419,7 @@ typedef enum SpvFPRoundingMode_ {
|
|||||||
typedef enum SpvLinkageType_ {
|
typedef enum SpvLinkageType_ {
|
||||||
SpvLinkageTypeExport = 0,
|
SpvLinkageTypeExport = 0,
|
||||||
SpvLinkageTypeImport = 1,
|
SpvLinkageTypeImport = 1,
|
||||||
|
SpvLinkageTypeLinkOnceODR = 2,
|
||||||
SpvLinkageTypeMax = 0x7fffffff,
|
SpvLinkageTypeMax = 0x7fffffff,
|
||||||
} SpvLinkageType;
|
} SpvLinkageType;
|
||||||
|
|
||||||
@ -481,6 +500,7 @@ typedef enum SpvDecoration_ {
|
|||||||
SpvDecorationPerPrimitiveNV = 5271,
|
SpvDecorationPerPrimitiveNV = 5271,
|
||||||
SpvDecorationPerViewNV = 5272,
|
SpvDecorationPerViewNV = 5272,
|
||||||
SpvDecorationPerTaskNV = 5273,
|
SpvDecorationPerTaskNV = 5273,
|
||||||
|
SpvDecorationPerVertexKHR = 5285,
|
||||||
SpvDecorationPerVertexNV = 5285,
|
SpvDecorationPerVertexNV = 5285,
|
||||||
SpvDecorationNonUniform = 5300,
|
SpvDecorationNonUniform = 5300,
|
||||||
SpvDecorationNonUniformEXT = 5300,
|
SpvDecorationNonUniformEXT = 5300,
|
||||||
@ -488,12 +508,26 @@ typedef enum SpvDecoration_ {
|
|||||||
SpvDecorationRestrictPointerEXT = 5355,
|
SpvDecorationRestrictPointerEXT = 5355,
|
||||||
SpvDecorationAliasedPointer = 5356,
|
SpvDecorationAliasedPointer = 5356,
|
||||||
SpvDecorationAliasedPointerEXT = 5356,
|
SpvDecorationAliasedPointerEXT = 5356,
|
||||||
|
SpvDecorationBindlessSamplerNV = 5398,
|
||||||
|
SpvDecorationBindlessImageNV = 5399,
|
||||||
|
SpvDecorationBoundSamplerNV = 5400,
|
||||||
|
SpvDecorationBoundImageNV = 5401,
|
||||||
|
SpvDecorationSIMTCallINTEL = 5599,
|
||||||
SpvDecorationReferencedIndirectlyINTEL = 5602,
|
SpvDecorationReferencedIndirectlyINTEL = 5602,
|
||||||
|
SpvDecorationClobberINTEL = 5607,
|
||||||
|
SpvDecorationSideEffectsINTEL = 5608,
|
||||||
|
SpvDecorationVectorComputeVariableINTEL = 5624,
|
||||||
|
SpvDecorationFuncParamIOKindINTEL = 5625,
|
||||||
|
SpvDecorationVectorComputeFunctionINTEL = 5626,
|
||||||
|
SpvDecorationStackCallINTEL = 5627,
|
||||||
|
SpvDecorationGlobalVariableOffsetINTEL = 5628,
|
||||||
SpvDecorationCounterBuffer = 5634,
|
SpvDecorationCounterBuffer = 5634,
|
||||||
SpvDecorationHlslCounterBufferGOOGLE = 5634,
|
SpvDecorationHlslCounterBufferGOOGLE = 5634,
|
||||||
SpvDecorationHlslSemanticGOOGLE = 5635,
|
SpvDecorationHlslSemanticGOOGLE = 5635,
|
||||||
SpvDecorationUserSemantic = 5635,
|
SpvDecorationUserSemantic = 5635,
|
||||||
SpvDecorationUserTypeGOOGLE = 5636,
|
SpvDecorationUserTypeGOOGLE = 5636,
|
||||||
|
SpvDecorationFunctionRoundingModeINTEL = 5822,
|
||||||
|
SpvDecorationFunctionDenormModeINTEL = 5823,
|
||||||
SpvDecorationRegisterINTEL = 5825,
|
SpvDecorationRegisterINTEL = 5825,
|
||||||
SpvDecorationMemoryINTEL = 5826,
|
SpvDecorationMemoryINTEL = 5826,
|
||||||
SpvDecorationNumbanksINTEL = 5827,
|
SpvDecorationNumbanksINTEL = 5827,
|
||||||
@ -506,6 +540,18 @@ typedef enum SpvDecoration_ {
|
|||||||
SpvDecorationMergeINTEL = 5834,
|
SpvDecorationMergeINTEL = 5834,
|
||||||
SpvDecorationBankBitsINTEL = 5835,
|
SpvDecorationBankBitsINTEL = 5835,
|
||||||
SpvDecorationForcePow2DepthINTEL = 5836,
|
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,
|
SpvDecorationMax = 0x7fffffff,
|
||||||
} SpvDecoration;
|
} SpvDecoration;
|
||||||
|
|
||||||
@ -590,7 +636,9 @@ typedef enum SpvBuiltIn_ {
|
|||||||
SpvBuiltInLayerPerViewNV = 5279,
|
SpvBuiltInLayerPerViewNV = 5279,
|
||||||
SpvBuiltInMeshViewCountNV = 5280,
|
SpvBuiltInMeshViewCountNV = 5280,
|
||||||
SpvBuiltInMeshViewIndicesNV = 5281,
|
SpvBuiltInMeshViewIndicesNV = 5281,
|
||||||
|
SpvBuiltInBaryCoordKHR = 5286,
|
||||||
SpvBuiltInBaryCoordNV = 5286,
|
SpvBuiltInBaryCoordNV = 5286,
|
||||||
|
SpvBuiltInBaryCoordNoPerspKHR = 5287,
|
||||||
SpvBuiltInBaryCoordNoPerspNV = 5287,
|
SpvBuiltInBaryCoordNoPerspNV = 5287,
|
||||||
SpvBuiltInFragSizeEXT = 5292,
|
SpvBuiltInFragSizeEXT = 5292,
|
||||||
SpvBuiltInFragmentSizeNV = 5292,
|
SpvBuiltInFragmentSizeNV = 5292,
|
||||||
@ -621,6 +669,7 @@ typedef enum SpvBuiltIn_ {
|
|||||||
SpvBuiltInHitTNV = 5332,
|
SpvBuiltInHitTNV = 5332,
|
||||||
SpvBuiltInHitKindKHR = 5333,
|
SpvBuiltInHitKindKHR = 5333,
|
||||||
SpvBuiltInHitKindNV = 5333,
|
SpvBuiltInHitKindNV = 5333,
|
||||||
|
SpvBuiltInCurrentRayTimeNV = 5334,
|
||||||
SpvBuiltInIncomingRayFlagsKHR = 5351,
|
SpvBuiltInIncomingRayFlagsKHR = 5351,
|
||||||
SpvBuiltInIncomingRayFlagsNV = 5351,
|
SpvBuiltInIncomingRayFlagsNV = 5351,
|
||||||
SpvBuiltInRayGeometryIndexKHR = 5352,
|
SpvBuiltInRayGeometryIndexKHR = 5352,
|
||||||
@ -660,6 +709,7 @@ typedef enum SpvLoopControlShift_ {
|
|||||||
SpvLoopControlLoopCoalesceINTELShift = 20,
|
SpvLoopControlLoopCoalesceINTELShift = 20,
|
||||||
SpvLoopControlMaxInterleavingINTELShift = 21,
|
SpvLoopControlMaxInterleavingINTELShift = 21,
|
||||||
SpvLoopControlSpeculatedIterationsINTELShift = 22,
|
SpvLoopControlSpeculatedIterationsINTELShift = 22,
|
||||||
|
SpvLoopControlNoFusionINTELShift = 23,
|
||||||
SpvLoopControlMax = 0x7fffffff,
|
SpvLoopControlMax = 0x7fffffff,
|
||||||
} SpvLoopControlShift;
|
} SpvLoopControlShift;
|
||||||
|
|
||||||
@ -681,6 +731,7 @@ typedef enum SpvLoopControlMask_ {
|
|||||||
SpvLoopControlLoopCoalesceINTELMask = 0x00100000,
|
SpvLoopControlLoopCoalesceINTELMask = 0x00100000,
|
||||||
SpvLoopControlMaxInterleavingINTELMask = 0x00200000,
|
SpvLoopControlMaxInterleavingINTELMask = 0x00200000,
|
||||||
SpvLoopControlSpeculatedIterationsINTELMask = 0x00400000,
|
SpvLoopControlSpeculatedIterationsINTELMask = 0x00400000,
|
||||||
|
SpvLoopControlNoFusionINTELMask = 0x00800000,
|
||||||
} SpvLoopControlMask;
|
} SpvLoopControlMask;
|
||||||
|
|
||||||
typedef enum SpvFunctionControlShift_ {
|
typedef enum SpvFunctionControlShift_ {
|
||||||
@ -688,6 +739,7 @@ typedef enum SpvFunctionControlShift_ {
|
|||||||
SpvFunctionControlDontInlineShift = 1,
|
SpvFunctionControlDontInlineShift = 1,
|
||||||
SpvFunctionControlPureShift = 2,
|
SpvFunctionControlPureShift = 2,
|
||||||
SpvFunctionControlConstShift = 3,
|
SpvFunctionControlConstShift = 3,
|
||||||
|
SpvFunctionControlOptNoneINTELShift = 16,
|
||||||
SpvFunctionControlMax = 0x7fffffff,
|
SpvFunctionControlMax = 0x7fffffff,
|
||||||
} SpvFunctionControlShift;
|
} SpvFunctionControlShift;
|
||||||
|
|
||||||
@ -697,6 +749,7 @@ typedef enum SpvFunctionControlMask_ {
|
|||||||
SpvFunctionControlDontInlineMask = 0x00000002,
|
SpvFunctionControlDontInlineMask = 0x00000002,
|
||||||
SpvFunctionControlPureMask = 0x00000004,
|
SpvFunctionControlPureMask = 0x00000004,
|
||||||
SpvFunctionControlConstMask = 0x00000008,
|
SpvFunctionControlConstMask = 0x00000008,
|
||||||
|
SpvFunctionControlOptNoneINTELMask = 0x00010000,
|
||||||
} SpvFunctionControlMask;
|
} SpvFunctionControlMask;
|
||||||
|
|
||||||
typedef enum SpvMemorySemanticsShift_ {
|
typedef enum SpvMemorySemanticsShift_ {
|
||||||
@ -877,9 +930,13 @@ typedef enum SpvCapability_ {
|
|||||||
SpvCapabilityGroupNonUniformQuad = 68,
|
SpvCapabilityGroupNonUniformQuad = 68,
|
||||||
SpvCapabilityShaderLayer = 69,
|
SpvCapabilityShaderLayer = 69,
|
||||||
SpvCapabilityShaderViewportIndex = 70,
|
SpvCapabilityShaderViewportIndex = 70,
|
||||||
|
SpvCapabilityUniformDecoration = 71,
|
||||||
SpvCapabilityFragmentShadingRateKHR = 4422,
|
SpvCapabilityFragmentShadingRateKHR = 4422,
|
||||||
SpvCapabilitySubgroupBallotKHR = 4423,
|
SpvCapabilitySubgroupBallotKHR = 4423,
|
||||||
SpvCapabilityDrawParameters = 4427,
|
SpvCapabilityDrawParameters = 4427,
|
||||||
|
SpvCapabilityWorkgroupMemoryExplicitLayoutKHR = 4428,
|
||||||
|
SpvCapabilityWorkgroupMemoryExplicitLayout8BitAccessKHR = 4429,
|
||||||
|
SpvCapabilityWorkgroupMemoryExplicitLayout16BitAccessKHR = 4430,
|
||||||
SpvCapabilitySubgroupVoteKHR = 4431,
|
SpvCapabilitySubgroupVoteKHR = 4431,
|
||||||
SpvCapabilityStorageBuffer16BitAccess = 4433,
|
SpvCapabilityStorageBuffer16BitAccess = 4433,
|
||||||
SpvCapabilityStorageUniformBufferBlock16 = 4433,
|
SpvCapabilityStorageUniformBufferBlock16 = 4433,
|
||||||
@ -922,6 +979,7 @@ typedef enum SpvCapability_ {
|
|||||||
SpvCapabilityFragmentFullyCoveredEXT = 5265,
|
SpvCapabilityFragmentFullyCoveredEXT = 5265,
|
||||||
SpvCapabilityMeshShadingNV = 5266,
|
SpvCapabilityMeshShadingNV = 5266,
|
||||||
SpvCapabilityImageFootprintNV = 5282,
|
SpvCapabilityImageFootprintNV = 5282,
|
||||||
|
SpvCapabilityFragmentBarycentricKHR = 5284,
|
||||||
SpvCapabilityFragmentBarycentricNV = 5284,
|
SpvCapabilityFragmentBarycentricNV = 5284,
|
||||||
SpvCapabilityComputeDerivativeGroupQuadsNV = 5288,
|
SpvCapabilityComputeDerivativeGroupQuadsNV = 5288,
|
||||||
SpvCapabilityFragmentDensityEXT = 5291,
|
SpvCapabilityFragmentDensityEXT = 5291,
|
||||||
@ -952,6 +1010,7 @@ typedef enum SpvCapability_ {
|
|||||||
SpvCapabilityStorageTexelBufferArrayNonUniformIndexing = 5312,
|
SpvCapabilityStorageTexelBufferArrayNonUniformIndexing = 5312,
|
||||||
SpvCapabilityStorageTexelBufferArrayNonUniformIndexingEXT = 5312,
|
SpvCapabilityStorageTexelBufferArrayNonUniformIndexingEXT = 5312,
|
||||||
SpvCapabilityRayTracingNV = 5340,
|
SpvCapabilityRayTracingNV = 5340,
|
||||||
|
SpvCapabilityRayTracingMotionBlurNV = 5341,
|
||||||
SpvCapabilityVulkanMemoryModel = 5345,
|
SpvCapabilityVulkanMemoryModel = 5345,
|
||||||
SpvCapabilityVulkanMemoryModelKHR = 5345,
|
SpvCapabilityVulkanMemoryModelKHR = 5345,
|
||||||
SpvCapabilityVulkanMemoryModelDeviceScope = 5346,
|
SpvCapabilityVulkanMemoryModelDeviceScope = 5346,
|
||||||
@ -965,26 +1024,62 @@ typedef enum SpvCapability_ {
|
|||||||
SpvCapabilityFragmentShaderShadingRateInterlockEXT = 5372,
|
SpvCapabilityFragmentShaderShadingRateInterlockEXT = 5372,
|
||||||
SpvCapabilityShaderSMBuiltinsNV = 5373,
|
SpvCapabilityShaderSMBuiltinsNV = 5373,
|
||||||
SpvCapabilityFragmentShaderPixelInterlockEXT = 5378,
|
SpvCapabilityFragmentShaderPixelInterlockEXT = 5378,
|
||||||
|
SpvCapabilityDemoteToHelperInvocation = 5379,
|
||||||
SpvCapabilityDemoteToHelperInvocationEXT = 5379,
|
SpvCapabilityDemoteToHelperInvocationEXT = 5379,
|
||||||
|
SpvCapabilityBindlessTextureNV = 5390,
|
||||||
SpvCapabilitySubgroupShuffleINTEL = 5568,
|
SpvCapabilitySubgroupShuffleINTEL = 5568,
|
||||||
SpvCapabilitySubgroupBufferBlockIOINTEL = 5569,
|
SpvCapabilitySubgroupBufferBlockIOINTEL = 5569,
|
||||||
SpvCapabilitySubgroupImageBlockIOINTEL = 5570,
|
SpvCapabilitySubgroupImageBlockIOINTEL = 5570,
|
||||||
SpvCapabilitySubgroupImageMediaBlockIOINTEL = 5579,
|
SpvCapabilitySubgroupImageMediaBlockIOINTEL = 5579,
|
||||||
|
SpvCapabilityRoundToInfinityINTEL = 5582,
|
||||||
|
SpvCapabilityFloatingPointModeINTEL = 5583,
|
||||||
SpvCapabilityIntegerFunctions2INTEL = 5584,
|
SpvCapabilityIntegerFunctions2INTEL = 5584,
|
||||||
SpvCapabilityFunctionPointersINTEL = 5603,
|
SpvCapabilityFunctionPointersINTEL = 5603,
|
||||||
SpvCapabilityIndirectReferencesINTEL = 5604,
|
SpvCapabilityIndirectReferencesINTEL = 5604,
|
||||||
|
SpvCapabilityAsmINTEL = 5606,
|
||||||
|
SpvCapabilityAtomicFloat32MinMaxEXT = 5612,
|
||||||
|
SpvCapabilityAtomicFloat64MinMaxEXT = 5613,
|
||||||
|
SpvCapabilityAtomicFloat16MinMaxEXT = 5616,
|
||||||
|
SpvCapabilityVectorComputeINTEL = 5617,
|
||||||
|
SpvCapabilityVectorAnyINTEL = 5619,
|
||||||
|
SpvCapabilityExpectAssumeKHR = 5629,
|
||||||
SpvCapabilitySubgroupAvcMotionEstimationINTEL = 5696,
|
SpvCapabilitySubgroupAvcMotionEstimationINTEL = 5696,
|
||||||
SpvCapabilitySubgroupAvcMotionEstimationIntraINTEL = 5697,
|
SpvCapabilitySubgroupAvcMotionEstimationIntraINTEL = 5697,
|
||||||
SpvCapabilitySubgroupAvcMotionEstimationChromaINTEL = 5698,
|
SpvCapabilitySubgroupAvcMotionEstimationChromaINTEL = 5698,
|
||||||
|
SpvCapabilityVariableLengthArrayINTEL = 5817,
|
||||||
|
SpvCapabilityFunctionFloatControlINTEL = 5821,
|
||||||
SpvCapabilityFPGAMemoryAttributesINTEL = 5824,
|
SpvCapabilityFPGAMemoryAttributesINTEL = 5824,
|
||||||
|
SpvCapabilityFPFastMathModeINTEL = 5837,
|
||||||
|
SpvCapabilityArbitraryPrecisionIntegersINTEL = 5844,
|
||||||
|
SpvCapabilityArbitraryPrecisionFloatingPointINTEL = 5845,
|
||||||
SpvCapabilityUnstructuredLoopControlsINTEL = 5886,
|
SpvCapabilityUnstructuredLoopControlsINTEL = 5886,
|
||||||
SpvCapabilityFPGALoopControlsINTEL = 5888,
|
SpvCapabilityFPGALoopControlsINTEL = 5888,
|
||||||
SpvCapabilityKernelAttributesINTEL = 5892,
|
SpvCapabilityKernelAttributesINTEL = 5892,
|
||||||
SpvCapabilityFPGAKernelAttributesINTEL = 5897,
|
SpvCapabilityFPGAKernelAttributesINTEL = 5897,
|
||||||
|
SpvCapabilityFPGAMemoryAccessesINTEL = 5898,
|
||||||
|
SpvCapabilityFPGAClusterAttributesINTEL = 5904,
|
||||||
|
SpvCapabilityLoopFuseINTEL = 5906,
|
||||||
|
SpvCapabilityFPGABufferLocationINTEL = 5920,
|
||||||
|
SpvCapabilityArbitraryPrecisionFixedPointINTEL = 5922,
|
||||||
|
SpvCapabilityUSMStorageClassesINTEL = 5935,
|
||||||
|
SpvCapabilityIOPipesINTEL = 5943,
|
||||||
SpvCapabilityBlockingPipesINTEL = 5945,
|
SpvCapabilityBlockingPipesINTEL = 5945,
|
||||||
SpvCapabilityFPGARegINTEL = 5948,
|
SpvCapabilityFPGARegINTEL = 5948,
|
||||||
|
SpvCapabilityDotProductInputAll = 6016,
|
||||||
|
SpvCapabilityDotProductInputAllKHR = 6016,
|
||||||
|
SpvCapabilityDotProductInput4x8Bit = 6017,
|
||||||
|
SpvCapabilityDotProductInput4x8BitKHR = 6017,
|
||||||
|
SpvCapabilityDotProductInput4x8BitPacked = 6018,
|
||||||
|
SpvCapabilityDotProductInput4x8BitPackedKHR = 6018,
|
||||||
|
SpvCapabilityDotProduct = 6019,
|
||||||
|
SpvCapabilityDotProductKHR = 6019,
|
||||||
|
SpvCapabilityBitInstructions = 6025,
|
||||||
SpvCapabilityAtomicFloat32AddEXT = 6033,
|
SpvCapabilityAtomicFloat32AddEXT = 6033,
|
||||||
SpvCapabilityAtomicFloat64AddEXT = 6034,
|
SpvCapabilityAtomicFloat64AddEXT = 6034,
|
||||||
|
SpvCapabilityLongConstantCompositeINTEL = 6089,
|
||||||
|
SpvCapabilityOptNoneINTEL = 6094,
|
||||||
|
SpvCapabilityAtomicFloat16AddEXT = 6095,
|
||||||
|
SpvCapabilityDebugInfoModuleINTEL = 6114,
|
||||||
SpvCapabilityMax = 0x7fffffff,
|
SpvCapabilityMax = 0x7fffffff,
|
||||||
} SpvCapability;
|
} SpvCapability;
|
||||||
|
|
||||||
@ -1051,6 +1146,44 @@ typedef enum SpvFragmentShadingRateMask_ {
|
|||||||
SpvFragmentShadingRateHorizontal4PixelsMask = 0x00000008,
|
SpvFragmentShadingRateHorizontal4PixelsMask = 0x00000008,
|
||||||
} SpvFragmentShadingRateMask;
|
} 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_ {
|
typedef enum SpvOp_ {
|
||||||
SpvOpNop = 0,
|
SpvOpNop = 0,
|
||||||
SpvOpUndef = 1,
|
SpvOpUndef = 1,
|
||||||
@ -1408,6 +1541,18 @@ typedef enum SpvOp_ {
|
|||||||
SpvOpConvertUToAccelerationStructureKHR = 4447,
|
SpvOpConvertUToAccelerationStructureKHR = 4447,
|
||||||
SpvOpIgnoreIntersectionKHR = 4448,
|
SpvOpIgnoreIntersectionKHR = 4448,
|
||||||
SpvOpTerminateRayKHR = 4449,
|
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,
|
SpvOpTypeRayQueryKHR = 4472,
|
||||||
SpvOpRayQueryInitializeKHR = 4473,
|
SpvOpRayQueryInitializeKHR = 4473,
|
||||||
SpvOpRayQueryTerminateKHR = 4474,
|
SpvOpRayQueryTerminateKHR = 4474,
|
||||||
@ -1434,6 +1579,8 @@ typedef enum SpvOp_ {
|
|||||||
SpvOpIgnoreIntersectionNV = 5335,
|
SpvOpIgnoreIntersectionNV = 5335,
|
||||||
SpvOpTerminateRayNV = 5336,
|
SpvOpTerminateRayNV = 5336,
|
||||||
SpvOpTraceNV = 5337,
|
SpvOpTraceNV = 5337,
|
||||||
|
SpvOpTraceMotionNV = 5338,
|
||||||
|
SpvOpTraceRayMotionNV = 5339,
|
||||||
SpvOpTypeAccelerationStructureKHR = 5341,
|
SpvOpTypeAccelerationStructureKHR = 5341,
|
||||||
SpvOpTypeAccelerationStructureNV = 5341,
|
SpvOpTypeAccelerationStructureNV = 5341,
|
||||||
SpvOpExecuteCallableNV = 5344,
|
SpvOpExecuteCallableNV = 5344,
|
||||||
@ -1444,8 +1591,16 @@ typedef enum SpvOp_ {
|
|||||||
SpvOpCooperativeMatrixLengthNV = 5362,
|
SpvOpCooperativeMatrixLengthNV = 5362,
|
||||||
SpvOpBeginInvocationInterlockEXT = 5364,
|
SpvOpBeginInvocationInterlockEXT = 5364,
|
||||||
SpvOpEndInvocationInterlockEXT = 5365,
|
SpvOpEndInvocationInterlockEXT = 5365,
|
||||||
|
SpvOpDemoteToHelperInvocation = 5380,
|
||||||
SpvOpDemoteToHelperInvocationEXT = 5380,
|
SpvOpDemoteToHelperInvocationEXT = 5380,
|
||||||
SpvOpIsHelperInvocationEXT = 5381,
|
SpvOpIsHelperInvocationEXT = 5381,
|
||||||
|
SpvOpConvertUToImageNV = 5391,
|
||||||
|
SpvOpConvertUToSamplerNV = 5392,
|
||||||
|
SpvOpConvertImageToUNV = 5393,
|
||||||
|
SpvOpConvertSamplerToUNV = 5394,
|
||||||
|
SpvOpConvertUToSampledImageNV = 5395,
|
||||||
|
SpvOpConvertSampledImageToUNV = 5396,
|
||||||
|
SpvOpSamplerImageAddressingModeNV = 5397,
|
||||||
SpvOpSubgroupShuffleINTEL = 5571,
|
SpvOpSubgroupShuffleINTEL = 5571,
|
||||||
SpvOpSubgroupShuffleDownINTEL = 5572,
|
SpvOpSubgroupShuffleDownINTEL = 5572,
|
||||||
SpvOpSubgroupShuffleUpINTEL = 5573,
|
SpvOpSubgroupShuffleUpINTEL = 5573,
|
||||||
@ -1470,8 +1625,15 @@ typedef enum SpvOp_ {
|
|||||||
SpvOpUSubSatINTEL = 5596,
|
SpvOpUSubSatINTEL = 5596,
|
||||||
SpvOpIMul32x16INTEL = 5597,
|
SpvOpIMul32x16INTEL = 5597,
|
||||||
SpvOpUMul32x16INTEL = 5598,
|
SpvOpUMul32x16INTEL = 5598,
|
||||||
SpvOpFunctionPointerINTEL = 5600,
|
SpvOpConstantFunctionPointerINTEL = 5600,
|
||||||
SpvOpFunctionPointerCallINTEL = 5601,
|
SpvOpFunctionPointerCallINTEL = 5601,
|
||||||
|
SpvOpAsmTargetINTEL = 5609,
|
||||||
|
SpvOpAsmINTEL = 5610,
|
||||||
|
SpvOpAsmCallINTEL = 5611,
|
||||||
|
SpvOpAtomicFMinEXT = 5614,
|
||||||
|
SpvOpAtomicFMaxEXT = 5615,
|
||||||
|
SpvOpAssumeTrueKHR = 5630,
|
||||||
|
SpvOpExpectKHR = 5631,
|
||||||
SpvOpDecorateString = 5632,
|
SpvOpDecorateString = 5632,
|
||||||
SpvOpDecorateStringGOOGLE = 5632,
|
SpvOpDecorateStringGOOGLE = 5632,
|
||||||
SpvOpMemberDecorateString = 5633,
|
SpvOpMemberDecorateString = 5633,
|
||||||
@ -1594,7 +1756,64 @@ typedef enum SpvOp_ {
|
|||||||
SpvOpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL = 5814,
|
SpvOpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL = 5814,
|
||||||
SpvOpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL = 5815,
|
SpvOpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL = 5815,
|
||||||
SpvOpSubgroupAvcSicGetInterRawSadsINTEL = 5816,
|
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,
|
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,
|
SpvOpReadPipeBlockingINTEL = 5946,
|
||||||
SpvOpWritePipeBlockingINTEL = 5947,
|
SpvOpWritePipeBlockingINTEL = 5947,
|
||||||
SpvOpFPGARegINTEL = 5949,
|
SpvOpFPGARegINTEL = 5949,
|
||||||
@ -1616,6 +1835,10 @@ typedef enum SpvOp_ {
|
|||||||
SpvOpRayQueryGetIntersectionObjectToWorldKHR = 6031,
|
SpvOpRayQueryGetIntersectionObjectToWorldKHR = 6031,
|
||||||
SpvOpRayQueryGetIntersectionWorldToObjectKHR = 6032,
|
SpvOpRayQueryGetIntersectionWorldToObjectKHR = 6032,
|
||||||
SpvOpAtomicFAddEXT = 6035,
|
SpvOpAtomicFAddEXT = 6035,
|
||||||
|
SpvOpTypeBufferSurfaceINTEL = 6086,
|
||||||
|
SpvOpTypeStructContinuedINTEL = 6090,
|
||||||
|
SpvOpConstantCompositeContinuedINTEL = 6091,
|
||||||
|
SpvOpSpecConstantCompositeContinuedINTEL = 6092,
|
||||||
SpvOpMax = 0x7fffffff,
|
SpvOpMax = 0x7fffffff,
|
||||||
} SpvOp;
|
} SpvOp;
|
||||||
|
|
||||||
@ -1980,6 +2203,12 @@ inline void SpvHasResultAndType(SpvOp opcode, bool *hasResult, bool *hasResultTy
|
|||||||
case SpvOpConvertUToAccelerationStructureKHR: *hasResult = true; *hasResultType = true; break;
|
case SpvOpConvertUToAccelerationStructureKHR: *hasResult = true; *hasResultType = true; break;
|
||||||
case SpvOpIgnoreIntersectionKHR: *hasResult = false; *hasResultType = false; break;
|
case SpvOpIgnoreIntersectionKHR: *hasResult = false; *hasResultType = false; break;
|
||||||
case SpvOpTerminateRayKHR: *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 SpvOpTypeRayQueryKHR: *hasResult = true; *hasResultType = false; break;
|
||||||
case SpvOpRayQueryInitializeKHR: *hasResult = false; *hasResultType = false; break;
|
case SpvOpRayQueryInitializeKHR: *hasResult = false; *hasResultType = false; break;
|
||||||
case SpvOpRayQueryTerminateKHR: *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 SpvOpIgnoreIntersectionNV: *hasResult = false; *hasResultType = false; break;
|
||||||
case SpvOpTerminateRayNV: *hasResult = false; *hasResultType = false; break;
|
case SpvOpTerminateRayNV: *hasResult = false; *hasResultType = false; break;
|
||||||
case SpvOpTraceNV: *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 SpvOpTypeAccelerationStructureNV: *hasResult = true; *hasResultType = false; break;
|
||||||
case SpvOpExecuteCallableNV: *hasResult = false; *hasResultType = false; break;
|
case SpvOpExecuteCallableNV: *hasResult = false; *hasResultType = false; break;
|
||||||
case SpvOpTypeCooperativeMatrixNV: *hasResult = true; *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 SpvOpCooperativeMatrixLengthNV: *hasResult = true; *hasResultType = true; break;
|
||||||
case SpvOpBeginInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break;
|
case SpvOpBeginInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break;
|
||||||
case SpvOpEndInvocationInterlockEXT: *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 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 SpvOpSubgroupShuffleINTEL: *hasResult = true; *hasResultType = true; break;
|
||||||
case SpvOpSubgroupShuffleDownINTEL: *hasResult = true; *hasResultType = true; break;
|
case SpvOpSubgroupShuffleDownINTEL: *hasResult = true; *hasResultType = true; break;
|
||||||
case SpvOpSubgroupShuffleUpINTEL: *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 SpvOpUSubSatINTEL: *hasResult = true; *hasResultType = true; break;
|
||||||
case SpvOpIMul32x16INTEL: *hasResult = true; *hasResultType = true; break;
|
case SpvOpIMul32x16INTEL: *hasResult = true; *hasResultType = true; break;
|
||||||
case SpvOpUMul32x16INTEL: *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 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 SpvOpDecorateString: *hasResult = false; *hasResultType = false; break;
|
||||||
case SpvOpMemberDecorateString: *hasResult = false; *hasResultType = false; break;
|
case SpvOpMemberDecorateString: *hasResult = false; *hasResultType = false; break;
|
||||||
case SpvOpVmeImageINTEL: *hasResult = true; *hasResultType = true; 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 SpvOpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL: *hasResult = true; *hasResultType = true; break;
|
||||||
case SpvOpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL: *hasResult = true; *hasResultType = true; break;
|
case SpvOpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL: *hasResult = true; *hasResultType = true; break;
|
||||||
case SpvOpSubgroupAvcSicGetInterRawSadsINTEL: *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 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 SpvOpReadPipeBlockingINTEL: *hasResult = true; *hasResultType = true; break;
|
||||||
case SpvOpWritePipeBlockingINTEL: *hasResult = true; *hasResultType = true; break;
|
case SpvOpWritePipeBlockingINTEL: *hasResult = true; *hasResultType = true; break;
|
||||||
case SpvOpFPGARegINTEL: *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 SpvOpRayQueryGetIntersectionObjectToWorldKHR: *hasResult = true; *hasResultType = true; break;
|
||||||
case SpvOpRayQueryGetIntersectionWorldToObjectKHR: *hasResult = true; *hasResultType = true; break;
|
case SpvOpRayQueryGetIntersectionWorldToObjectKHR: *hasResult = true; *hasResultType = true; break;
|
||||||
case SpvOpAtomicFAddEXT: *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 */
|
#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
|
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
|
--- a/thirdparty/spirv-reflect/spirv_reflect.c
|
||||||
+++ b/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 location;
|
||||||
SpvReflectPrvNumberDecoration offset;
|
SpvReflectPrvNumberDecoration offset;
|
||||||
SpvReflectPrvNumberDecoration uav_counter_buffer;
|
SpvReflectPrvNumberDecoration uav_counter_buffer;
|
||||||
@ -12,7 +12,7 @@ index 1c94a2e00e..2786a7f3ad 100644
|
|||||||
SpvReflectPrvStringDecoration semantic;
|
SpvReflectPrvStringDecoration semantic;
|
||||||
uint32_t array_stride;
|
uint32_t array_stride;
|
||||||
uint32_t matrix_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.offset.value = (uint32_t)INVALID_VALUE;
|
||||||
p_parser->nodes[i].decorations.uav_counter_buffer.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;
|
p_parser->nodes[i].decorations.built_in = (SpvBuiltIn)INVALID_VALUE;
|
||||||
@ -22,7 +22,7 @@ index 1c94a2e00e..2786a7f3ad 100644
|
|||||||
}
|
}
|
||||||
// Mark source file id node
|
// Mark source file id node
|
||||||
p_parser->source_file_id = (uint32_t)INVALID_VALUE;
|
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);
|
CHECKED_READU32(p_parser, p_node->word_offset + 2, p_node->result_id);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -41,7 +41,7 @@ index 1c94a2e00e..2786a7f3ad 100644
|
|||||||
case SpvOpSpecConstantComposite:
|
case SpvOpSpecConstantComposite:
|
||||||
case SpvOpSpecConstantOp: {
|
case SpvOpSpecConstantOp: {
|
||||||
CHECKED_READU32(p_parser, p_node->word_offset + 1, p_node->result_type_id);
|
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);
|
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:
|
// 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);
|
p_access_chain->index_count = (node_word_count - SPIRV_ACCESS_CHAIN_INDEX_OFFSET);
|
||||||
if (p_access_chain->index_count > 0) {
|
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;
|
skip = true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
+// -- GODOT begin --
|
+// -- GODOT begin --
|
||||||
+ case SpvDecorationSpecId:
|
+ case SpvDecorationSpecId:
|
||||||
+// -- GODOT end --
|
+// -- GODOT end --
|
||||||
|
case SpvDecorationRelaxedPrecision:
|
||||||
case SpvDecorationBlock:
|
case SpvDecorationBlock:
|
||||||
case SpvDecorationBufferBlock:
|
case SpvDecorationBufferBlock:
|
||||||
case SpvDecorationColMajor:
|
@@ -1481,7 +1496,14 @@ static SpvReflectResult ParseDecorations(SpvReflectPrvParser* p_parser)
|
||||||
@@ -1466,7 +1481,14 @@ static SpvReflectResult ParseDecorations(SpvReflectPrvParser* p_parser)
|
|
||||||
p_target_decorations->input_attachment_index.word_offset = word_offset;
|
p_target_decorations->input_attachment_index.word_offset = word_offset;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -76,7 +76,7 @@ index 1c94a2e00e..2786a7f3ad 100644
|
|||||||
case SpvReflectDecorationHlslCounterBufferGOOGLE: {
|
case SpvReflectDecorationHlslCounterBufferGOOGLE: {
|
||||||
uint32_t word_offset = p_node->word_offset + member_offset+ 3;
|
uint32_t word_offset = p_node->word_offset + member_offset+ 3;
|
||||||
CHECKED_READU32(p_parser, word_offset, p_target_decorations->uav_counter_buffer.value);
|
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;
|
p_type->type_flags |= SPV_REFLECT_TYPE_FLAG_EXTERNAL_ACCELERATION_STRUCTURE;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -90,7 +90,7 @@ index 1c94a2e00e..2786a7f3ad 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (result == SPV_REFLECT_RESULT_SUCCESS) {
|
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;
|
return SPV_REFLECT_RESULT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -160,7 +160,7 @@ index 1c94a2e00e..2786a7f3ad 100644
|
|||||||
static SpvReflectResult ParsePushConstantBlocks(
|
static SpvReflectResult ParsePushConstantBlocks(
|
||||||
SpvReflectPrvParser* p_parser,
|
SpvReflectPrvParser* p_parser,
|
||||||
SpvReflectShaderModule* p_module)
|
SpvReflectShaderModule* p_module)
|
||||||
@@ -3613,6 +3705,12 @@ SpvReflectResult spvReflectCreateShaderModule(
|
@@ -3650,6 +3742,12 @@ static SpvReflectResult CreateShaderModule(
|
||||||
result = ParsePushConstantBlocks(&parser, p_module);
|
result = ParsePushConstantBlocks(&parser, p_module);
|
||||||
SPV_REFLECT_ASSERT(result == SPV_REFLECT_RESULT_SUCCESS);
|
SPV_REFLECT_ASSERT(result == SPV_REFLECT_RESULT_SUCCESS);
|
||||||
}
|
}
|
||||||
@ -173,7 +173,7 @@ index 1c94a2e00e..2786a7f3ad 100644
|
|||||||
if (result == SPV_REFLECT_RESULT_SUCCESS) {
|
if (result == SPV_REFLECT_RESULT_SUCCESS) {
|
||||||
result = ParseEntryPoints(&parser, p_module);
|
result = ParseEntryPoints(&parser, p_module);
|
||||||
SPV_REFLECT_ASSERT(result == SPV_REFLECT_RESULT_SUCCESS);
|
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_entry->used_push_constants);
|
||||||
}
|
}
|
||||||
SafeFree(p_module->entry_points);
|
SafeFree(p_module->entry_points);
|
||||||
@ -183,7 +183,7 @@ index 1c94a2e00e..2786a7f3ad 100644
|
|||||||
|
|
||||||
// Push constants
|
// Push constants
|
||||||
for (size_t i = 0; i < p_module->push_constant_block_count; ++i) {
|
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;
|
return SPV_REFLECT_RESULT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -223,10 +223,10 @@ index 1c94a2e00e..2786a7f3ad 100644
|
|||||||
const SpvReflectShaderModule* p_module,
|
const SpvReflectShaderModule* p_module,
|
||||||
uint32_t* p_count,
|
uint32_t* p_count,
|
||||||
diff --git a/thirdparty/spirv-reflect/spirv_reflect.h b/thirdparty/spirv-reflect/spirv_reflect.h
|
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
|
--- a/thirdparty/spirv-reflect/spirv_reflect.h
|
||||||
+++ b/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;
|
struct SpvReflectTypeDescription* members;
|
||||||
} SpvReflectTypeDescription;
|
} SpvReflectTypeDescription;
|
||||||
|
|
||||||
@ -255,7 +255,7 @@ index da05400973..50cc65222b 100644
|
|||||||
|
|
||||||
/*! @struct SpvReflectInterfaceVariable
|
/*! @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
|
SpvReflectInterfaceVariable* interface_variables; // Uses value(s) from first entry point
|
||||||
uint32_t push_constant_block_count; // 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
|
SpvReflectBlockVariable* push_constant_blocks; // Uses value(s) from first entry point
|
||||||
@ -265,8 +265,8 @@ index da05400973..50cc65222b 100644
|
|||||||
+ // -- GODOT end --
|
+ // -- GODOT end --
|
||||||
|
|
||||||
struct Internal {
|
struct Internal {
|
||||||
size_t spirv_size;
|
SpvReflectModuleFlags module_flags;
|
||||||
@@ -694,6 +720,33 @@ SpvReflectResult spvReflectEnumerateInputVariables(
|
@@ -744,6 +770,33 @@ SpvReflectResult spvReflectEnumerateInputVariables(
|
||||||
SpvReflectInterfaceVariable** pp_variables
|
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");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
@ -110,6 +110,7 @@ typedef struct SpvReflectPrvStringDecoration {
|
|||||||
|
|
||||||
// clang-format off
|
// clang-format off
|
||||||
typedef struct SpvReflectPrvDecorations {
|
typedef struct SpvReflectPrvDecorations {
|
||||||
|
bool is_relaxed_precision;
|
||||||
bool is_block;
|
bool is_block;
|
||||||
bool is_buffer_block;
|
bool is_buffer_block;
|
||||||
bool is_row_major;
|
bool is_row_major;
|
||||||
@ -240,10 +241,8 @@ static uint32_t RoundUp(
|
|||||||
|
|
||||||
#define SafeFree(ptr) \
|
#define SafeFree(ptr) \
|
||||||
{ \
|
{ \
|
||||||
if (ptr != NULL) { \
|
|
||||||
free((void*)ptr); \
|
free((void*)ptr); \
|
||||||
ptr = NULL; \
|
ptr = NULL; \
|
||||||
} \
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int SortCompareUint32(
|
static int SortCompareUint32(
|
||||||
@ -462,6 +461,9 @@ static SpvReflectResult ReadStr(
|
|||||||
static SpvReflectDecorationFlags ApplyDecorations(const SpvReflectPrvDecorations* p_decoration_fields)
|
static SpvReflectDecorationFlags ApplyDecorations(const SpvReflectPrvDecorations* p_decoration_fields)
|
||||||
{
|
{
|
||||||
SpvReflectDecorationFlags decorations = SPV_REFLECT_DECORATION_NONE;
|
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) {
|
if (p_decoration_fields->is_block) {
|
||||||
decorations |= SPV_REFLECT_DECORATION_BLOCK;
|
decorations |= SPV_REFLECT_DECORATION_BLOCK;
|
||||||
}
|
}
|
||||||
@ -1046,6 +1048,7 @@ static SpvReflectResult ParseFunction(
|
|||||||
case SpvOpGenericPtrMemSemantics:
|
case SpvOpGenericPtrMemSemantics:
|
||||||
case SpvOpInBoundsPtrAccessChain:
|
case SpvOpInBoundsPtrAccessChain:
|
||||||
case SpvOpStore:
|
case SpvOpStore:
|
||||||
|
case SpvOpImageTexelPointer:
|
||||||
{
|
{
|
||||||
++(p_func->accessed_ptr_count);
|
++(p_func->accessed_ptr_count);
|
||||||
}
|
}
|
||||||
@ -1097,6 +1100,7 @@ static SpvReflectResult ParseFunction(
|
|||||||
case SpvOpArrayLength:
|
case SpvOpArrayLength:
|
||||||
case SpvOpGenericPtrMemSemantics:
|
case SpvOpGenericPtrMemSemantics:
|
||||||
case SpvOpInBoundsPtrAccessChain:
|
case SpvOpInBoundsPtrAccessChain:
|
||||||
|
case SpvOpImageTexelPointer:
|
||||||
{
|
{
|
||||||
CHECKED_READU32(p_parser, p_node->word_offset + 3,
|
CHECKED_READU32(p_parser, p_node->word_offset + 3,
|
||||||
p_func->accessed_ptrs[p_func->accessed_ptr_count]);
|
p_func->accessed_ptrs[p_func->accessed_ptr_count]);
|
||||||
@ -1349,6 +1353,7 @@ static SpvReflectResult ParseDecorations(SpvReflectPrvParser* p_parser)
|
|||||||
// -- GODOT begin --
|
// -- GODOT begin --
|
||||||
case SpvDecorationSpecId:
|
case SpvDecorationSpecId:
|
||||||
// -- GODOT end --
|
// -- GODOT end --
|
||||||
|
case SpvDecorationRelaxedPrecision:
|
||||||
case SpvDecorationBlock:
|
case SpvDecorationBlock:
|
||||||
case SpvDecorationBufferBlock:
|
case SpvDecorationBufferBlock:
|
||||||
case SpvDecorationColMajor:
|
case SpvDecorationColMajor:
|
||||||
@ -1379,6 +1384,11 @@ static SpvReflectResult ParseDecorations(SpvReflectPrvParser* p_parser)
|
|||||||
CHECKED_READU32(p_parser, p_node->word_offset + 1, target_id);
|
CHECKED_READU32(p_parser, p_node->word_offset + 1, target_id);
|
||||||
SpvReflectPrvNode* p_target_node = FindNode(p_parser, target_id);
|
SpvReflectPrvNode* p_target_node = FindNode(p_parser, target_id);
|
||||||
if (IsNull(p_target_node)) {
|
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;
|
return SPV_REFLECT_RESULT_ERROR_SPIRV_INVALID_ID_REFERENCE;
|
||||||
}
|
}
|
||||||
// Get decorations
|
// Get decorations
|
||||||
@ -1393,6 +1403,11 @@ static SpvReflectResult ParseDecorations(SpvReflectPrvParser* p_parser)
|
|||||||
switch (decoration) {
|
switch (decoration) {
|
||||||
default: break;
|
default: break;
|
||||||
|
|
||||||
|
case SpvDecorationRelaxedPrecision: {
|
||||||
|
p_target_decorations->is_relaxed_precision = true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case SpvDecorationBlock: {
|
case SpvDecorationBlock: {
|
||||||
p_target_decorations->is_block = true;
|
p_target_decorations->is_block = true;
|
||||||
}
|
}
|
||||||
@ -1685,16 +1700,19 @@ static SpvReflectResult ParseType(
|
|||||||
// Get length for current dimension
|
// Get length for current dimension
|
||||||
SpvReflectPrvNode* p_length_node = FindNode(p_parser, length_id);
|
SpvReflectPrvNode* p_length_node = FindNode(p_parser, length_id);
|
||||||
if (IsNotNull(p_length_node)) {
|
if (IsNotNull(p_length_node)) {
|
||||||
|
uint32_t dim_index = p_type->traits.array.dims_count;
|
||||||
if (p_length_node->op == SpvOpSpecConstant ||
|
if (p_length_node->op == SpvOpSpecConstant ||
|
||||||
p_length_node->op == SpvOpSpecConstantOp) {
|
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;
|
p_type->traits.array.dims_count += 1;
|
||||||
} else {
|
} else {
|
||||||
uint32_t length = 0;
|
uint32_t length = 0;
|
||||||
IF_READU32(result, p_parser, p_length_node->word_offset + 3, length);
|
IF_READU32(result, p_parser, p_length_node->word_offset + 3, length);
|
||||||
if (result == SPV_REFLECT_RESULT_SUCCESS) {
|
if (result == SPV_REFLECT_RESULT_SUCCESS) {
|
||||||
// Write the array dim and increment the count and offset
|
// 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;
|
p_type->traits.array.dims_count += 1;
|
||||||
} else {
|
} else {
|
||||||
result = SPV_REFLECT_RESULT_ERROR_SPIRV_INVALID_ID_REFERENCE;
|
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;
|
p_type->type_flags |= SPV_REFLECT_TYPE_FLAG_ARRAY;
|
||||||
uint32_t element_type_id = (uint32_t)INVALID_VALUE;
|
uint32_t element_type_id = (uint32_t)INVALID_VALUE;
|
||||||
IF_READU32(result, p_parser, p_node->word_offset + 2, element_type_id);
|
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
|
// Parse next dimension or element type
|
||||||
SpvReflectPrvNode* p_next_node = FindNode(p_parser, element_type_id);
|
SpvReflectPrvNode* p_next_node = FindNode(p_parser, element_type_id);
|
||||||
if (IsNotNull(p_next_node)) {
|
if (IsNotNull(p_next_node)) {
|
||||||
@ -2175,22 +2198,19 @@ static SpvReflectResult ParseDescriptorBlockVariable(
|
|||||||
return SPV_REFLECT_RESULT_ERROR_SPIRV_INVALID_ID_REFERENCE;
|
return SPV_REFLECT_RESULT_ERROR_SPIRV_INVALID_ID_REFERENCE;
|
||||||
}
|
}
|
||||||
// Resolve to element type if current type is array or run time array
|
// 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) {
|
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);
|
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 {
|
||||||
}
|
|
||||||
else if(p_type_node->op == SpvOpTypeRuntimeArray) {
|
|
||||||
// Element type description
|
// Element type description
|
||||||
p_type = FindType(p_module, p_type_node->array_traits.element_type_id);
|
SpvReflectTypeDescription* p_type_temp = FindType(p_module, p_type_node->array_traits.element_type_id);
|
||||||
if (IsNull(p_type)) {
|
if (IsNull(p_type_temp)) {
|
||||||
return SPV_REFLECT_RESULT_ERROR_SPIRV_INVALID_ID_REFERENCE;
|
return SPV_REFLECT_RESULT_ERROR_SPIRV_INVALID_ID_REFERENCE;
|
||||||
}
|
}
|
||||||
// Element type node
|
// 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)) {
|
if (IsNull(p_type_node)) {
|
||||||
return SPV_REFLECT_RESULT_ERROR_SPIRV_INVALID_ID_REFERENCE;
|
return SPV_REFLECT_RESULT_ERROR_SPIRV_INVALID_ID_REFERENCE;
|
||||||
}
|
}
|
||||||
@ -2662,6 +2682,7 @@ static SpvReflectResult ParseFormat(
|
|||||||
|
|
||||||
static SpvReflectResult ParseInterfaceVariable(
|
static SpvReflectResult ParseInterfaceVariable(
|
||||||
SpvReflectPrvParser* p_parser,
|
SpvReflectPrvParser* p_parser,
|
||||||
|
const SpvReflectPrvDecorations* p_var_node_decorations,
|
||||||
const SpvReflectPrvDecorations* p_type_node_decorations,
|
const SpvReflectPrvDecorations* p_type_node_decorations,
|
||||||
SpvReflectShaderModule* p_module,
|
SpvReflectShaderModule* p_module,
|
||||||
SpvReflectTypeDescription* p_type,
|
SpvReflectTypeDescription* p_type,
|
||||||
@ -2685,7 +2706,7 @@ static SpvReflectResult ParseInterfaceVariable(
|
|||||||
SpvReflectPrvDecorations* p_member_decorations = &p_type_node->member_decorations[member_index];
|
SpvReflectPrvDecorations* p_member_decorations = &p_type_node->member_decorations[member_index];
|
||||||
SpvReflectTypeDescription* p_member_type = &p_type->members[member_index];
|
SpvReflectTypeDescription* p_member_type = &p_type->members[member_index];
|
||||||
SpvReflectInterfaceVariable* p_member_var = &p_var->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) {
|
if (result != SPV_REFLECT_RESULT_SUCCESS) {
|
||||||
SPV_REFLECT_ASSERT(false);
|
SPV_REFLECT_ASSERT(false);
|
||||||
return result;
|
return result;
|
||||||
@ -2695,6 +2716,9 @@ static SpvReflectResult ParseInterfaceVariable(
|
|||||||
|
|
||||||
p_var->name = p_type_node->name;
|
p_var->name = p_type_node->name;
|
||||||
p_var->decoration_flags = ApplyDecorations(p_type_node_decorations);
|
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;
|
p_var->built_in = p_type_node_decorations->built_in;
|
||||||
ApplyNumericTraits(p_type, &p_var->numeric);
|
ApplyNumericTraits(p_type, &p_var->numeric);
|
||||||
if (p_type->op == SpvOpTypeArray) {
|
if (p_type->op == SpvOpTypeArray) {
|
||||||
@ -2806,6 +2830,7 @@ static SpvReflectResult ParseInterfaceVariables(
|
|||||||
bool has_built_in = p_node->decorations.is_built_in;
|
bool has_built_in = p_node->decorations.is_built_in;
|
||||||
SpvReflectResult result = ParseInterfaceVariable(
|
SpvReflectResult result = ParseInterfaceVariable(
|
||||||
p_parser,
|
p_parser,
|
||||||
|
&p_node->decorations,
|
||||||
&p_type_node->decorations,
|
&p_type_node->decorations,
|
||||||
p_module,
|
p_module,
|
||||||
p_type,
|
p_type,
|
||||||
@ -3208,7 +3233,11 @@ static SpvReflectResult ParseExecutionModes(
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SpvExecutionModeInvocations:
|
case SpvExecutionModeInvocations: {
|
||||||
|
CHECKED_READU32(p_parser, p_node->word_offset + 3, p_entry_point->invocations);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case SpvExecutionModeSpacingEqual:
|
case SpvExecutionModeSpacingEqual:
|
||||||
case SpvExecutionModeSpacingFractionalEven:
|
case SpvExecutionModeSpacingFractionalEven:
|
||||||
case SpvExecutionModeSpacingFractionalOdd:
|
case SpvExecutionModeSpacingFractionalOdd:
|
||||||
@ -3241,7 +3270,11 @@ static SpvReflectResult ParseExecutionModes(
|
|||||||
case SpvExecutionModeInputTrianglesAdjacency:
|
case SpvExecutionModeInputTrianglesAdjacency:
|
||||||
case SpvExecutionModeQuads:
|
case SpvExecutionModeQuads:
|
||||||
case SpvExecutionModeIsolines:
|
case SpvExecutionModeIsolines:
|
||||||
case SpvExecutionModeOutputVertices:
|
case SpvExecutionModeOutputVertices: {
|
||||||
|
CHECKED_READU32(p_parser, p_node->word_offset + 3, p_entry_point->output_vertices);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case SpvExecutionModeOutputPoints:
|
case SpvExecutionModeOutputPoints:
|
||||||
case SpvExecutionModeOutputLineStrip:
|
case SpvExecutionModeOutputLineStrip:
|
||||||
case SpvExecutionModeOutputTriangleStrip:
|
case SpvExecutionModeOutputTriangleStrip:
|
||||||
@ -3591,16 +3624,8 @@ static SpvReflectResult SynchronizeDescriptorSets(SpvReflectShaderModule* p_modu
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
SpvReflectResult spvReflectGetShaderModule(
|
static SpvReflectResult CreateShaderModule(
|
||||||
size_t size,
|
uint32_t flags,
|
||||||
const void* p_code,
|
|
||||||
SpvReflectShaderModule* p_module
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return spvReflectCreateShaderModule(size, p_code, p_module);
|
|
||||||
}
|
|
||||||
|
|
||||||
SpvReflectResult spvReflectCreateShaderModule(
|
|
||||||
size_t size,
|
size_t size,
|
||||||
const void* p_code,
|
const void* p_code,
|
||||||
SpvReflectShaderModule* p_module
|
SpvReflectShaderModule* p_module
|
||||||
@ -3618,6 +3643,16 @@ SpvReflectResult spvReflectCreateShaderModule(
|
|||||||
if (IsNull(p_module->_internal)) {
|
if (IsNull(p_module->_internal)) {
|
||||||
return SPV_REFLECT_RESULT_ERROR_ALLOC_FAILED;
|
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
|
// Allocate SPIR-V code storage
|
||||||
p_module->_internal->spirv_size = size;
|
p_module->_internal->spirv_size = size;
|
||||||
p_module->_internal->spirv_code = (uint32_t*)calloc(1, p_module->_internal->spirv_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);
|
SafeFree(p_module->_internal);
|
||||||
return SPV_REFLECT_RESULT_ERROR_ALLOC_FAILED;
|
return SPV_REFLECT_RESULT_ERROR_ALLOC_FAILED;
|
||||||
}
|
}
|
||||||
|
// Copy SPIR-V to code storage
|
||||||
memcpy(p_module->_internal->spirv_code, p_code, size);
|
memcpy(p_module->_internal->spirv_code, p_code, size);
|
||||||
|
}
|
||||||
|
|
||||||
SpvReflectPrvParser parser = { 0 };
|
SpvReflectPrvParser parser = { 0 };
|
||||||
SpvReflectResult result = CreateParser(p_module->_internal->spirv_size,
|
SpvReflectResult result = CreateParser(p_module->_internal->spirv_size,
|
||||||
@ -3751,6 +3788,34 @@ SpvReflectResult spvReflectCreateShaderModule(
|
|||||||
return result;
|
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)
|
static void SafeFreeTypes(SpvReflectTypeDescription* p_type)
|
||||||
{
|
{
|
||||||
if (IsNull(p_type)) {
|
if (IsNull(p_type)) {
|
||||||
@ -3860,8 +3925,10 @@ void spvReflectDestroyShaderModule(SpvReflectShaderModule* p_module)
|
|||||||
}
|
}
|
||||||
SafeFree(p_module->_internal->type_descriptions);
|
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);
|
SafeFree(p_module->_internal->spirv_code);
|
||||||
|
}
|
||||||
// Free internal
|
// Free internal
|
||||||
SafeFree(p_module->_internal);
|
SafeFree(p_module->_internal);
|
||||||
}
|
}
|
||||||
@ -5025,9 +5092,19 @@ const char* spvReflectSourceLanguage(SpvSourceLanguage source_lang)
|
|||||||
case SpvSourceLanguageOpenCL_C : return "OpenCL_C";
|
case SpvSourceLanguageOpenCL_C : return "OpenCL_C";
|
||||||
case SpvSourceLanguageOpenCL_CPP : return "OpenCL_CPP";
|
case SpvSourceLanguageOpenCL_CPP : return "OpenCL_CPP";
|
||||||
case SpvSourceLanguageHLSL : return "HLSL";
|
case SpvSourceLanguageHLSL : return "HLSL";
|
||||||
|
case SpvSourceLanguageCPP_for_OpenCL : return "CPP_for_OpenCL";
|
||||||
case SpvSourceLanguageMax:
|
case SpvSourceLanguageMax:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return "";
|
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");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with 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,
|
SPV_REFLECT_RESULT_ERROR_SPIRV_INVALID_EXECUTION_MODE,
|
||||||
} SpvReflectResult;
|
} 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
|
/*! @enum SpvReflectTypeFlagBits
|
||||||
|
|
||||||
*/
|
*/
|
||||||
@ -101,6 +120,13 @@ typedef uint32_t SpvReflectTypeFlags;
|
|||||||
|
|
||||||
/*! @enum SpvReflectDecorationBits
|
/*! @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 {
|
typedef enum SpvReflectDecorationFlagBits {
|
||||||
SPV_REFLECT_DECORATION_NONE = 0x00000000,
|
SPV_REFLECT_DECORATION_NONE = 0x00000000,
|
||||||
@ -112,6 +138,7 @@ typedef enum SpvReflectDecorationFlagBits {
|
|||||||
SPV_REFLECT_DECORATION_NOPERSPECTIVE = 0x00000020,
|
SPV_REFLECT_DECORATION_NOPERSPECTIVE = 0x00000020,
|
||||||
SPV_REFLECT_DECORATION_FLAT = 0x00000040,
|
SPV_REFLECT_DECORATION_FLAT = 0x00000040,
|
||||||
SPV_REFLECT_DECORATION_NON_WRITABLE = 0x00000080,
|
SPV_REFLECT_DECORATION_NON_WRITABLE = 0x00000080,
|
||||||
|
SPV_REFLECT_DECORATION_RELAXED_PRECISION = 0x00000100,
|
||||||
} SpvReflectDecorationFlagBits;
|
} SpvReflectDecorationFlagBits;
|
||||||
|
|
||||||
typedef uint32_t SpvReflectDecorationFlags;
|
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_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_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_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_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_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_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_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_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_CALLABLE_BIT_KHR = 0x00002000, // = VK_SHADER_STAGE_CALLABLE_BIT_KHR
|
||||||
|
|
||||||
} SpvReflectShaderStageFlagBits;
|
} SpvReflectShaderStageFlagBits;
|
||||||
|
|
||||||
@ -261,7 +288,11 @@ typedef struct SpvReflectImageTraits {
|
|||||||
|
|
||||||
typedef struct SpvReflectArrayTraits {
|
typedef struct SpvReflectArrayTraits {
|
||||||
uint32_t dims_count;
|
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];
|
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
|
uint32_t stride; // Measured in bytes
|
||||||
} SpvReflectArrayTraits;
|
} SpvReflectArrayTraits;
|
||||||
|
|
||||||
@ -432,6 +463,8 @@ typedef struct SpvReflectEntryPoint {
|
|||||||
uint32_t y;
|
uint32_t y;
|
||||||
uint32_t z;
|
uint32_t z;
|
||||||
} local_size;
|
} local_size;
|
||||||
|
uint32_t invocations; // valid for geometry
|
||||||
|
uint32_t output_vertices; // valid for geometry, tesselation
|
||||||
} SpvReflectEntryPoint;
|
} SpvReflectEntryPoint;
|
||||||
|
|
||||||
/*! @struct SpvReflectShaderModule
|
/*! @struct SpvReflectShaderModule
|
||||||
@ -467,6 +500,7 @@ typedef struct SpvReflectShaderModule {
|
|||||||
// -- GODOT end --
|
// -- GODOT end --
|
||||||
|
|
||||||
struct Internal {
|
struct Internal {
|
||||||
|
SpvReflectModuleFlags module_flags;
|
||||||
size_t spirv_size;
|
size_t spirv_size;
|
||||||
uint32_t* spirv_code;
|
uint32_t* spirv_code;
|
||||||
uint32_t spirv_word_count;
|
uint32_t spirv_word_count;
|
||||||
@ -495,6 +529,22 @@ SpvReflectResult spvReflectCreateShaderModule(
|
|||||||
SpvReflectShaderModule* p_module
|
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")
|
SPV_REFLECT_DEPRECATED("renamed to spvReflectCreateShaderModule")
|
||||||
SpvReflectResult spvReflectGetShaderModule(
|
SpvReflectResult spvReflectGetShaderModule(
|
||||||
size_t size,
|
size_t size,
|
||||||
@ -1404,6 +1454,16 @@ SpvReflectResult spvReflectChangeOutputVariableLocation(
|
|||||||
*/
|
*/
|
||||||
const char* spvReflectSourceLanguage(SpvSourceLanguage source_lang);
|
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)
|
#if defined(__cplusplus)
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
@ -1421,9 +1481,9 @@ namespace spv_reflect {
|
|||||||
class ShaderModule {
|
class ShaderModule {
|
||||||
public:
|
public:
|
||||||
ShaderModule();
|
ShaderModule();
|
||||||
ShaderModule(size_t size, const void* p_code);
|
ShaderModule(size_t size, const void* p_code, SpvReflectModuleFlags flags = SPV_REFLECT_MODULE_FLAG_NONE);
|
||||||
ShaderModule(const std::vector<uint8_t>& code);
|
ShaderModule(const std::vector<uint8_t>& code, SpvReflectModuleFlags flags = SPV_REFLECT_MODULE_FLAG_NONE);
|
||||||
ShaderModule(const std::vector<uint32_t>& code);
|
ShaderModule(const std::vector<uint32_t>& code, SpvReflectModuleFlags flags = SPV_REFLECT_MODULE_FLAG_NONE);
|
||||||
~ShaderModule();
|
~ShaderModule();
|
||||||
|
|
||||||
ShaderModule(ShaderModule&& other);
|
ShaderModule(ShaderModule&& other);
|
||||||
@ -1533,8 +1593,9 @@ inline ShaderModule::ShaderModule() {}
|
|||||||
@param p_code
|
@param p_code
|
||||||
|
|
||||||
*/
|
*/
|
||||||
inline ShaderModule::ShaderModule(size_t size, const void* p_code) {
|
inline ShaderModule::ShaderModule(size_t size, const void* p_code, SpvReflectModuleFlags flags) {
|
||||||
m_result = spvReflectCreateShaderModule(
|
m_result = spvReflectCreateShaderModule2(
|
||||||
|
flags,
|
||||||
size,
|
size,
|
||||||
p_code,
|
p_code,
|
||||||
&m_module);
|
&m_module);
|
||||||
@ -1545,8 +1606,9 @@ inline ShaderModule::ShaderModule(size_t size, const void* p_code) {
|
|||||||
@param code
|
@param code
|
||||||
|
|
||||||
*/
|
*/
|
||||||
inline ShaderModule::ShaderModule(const std::vector<uint8_t>& code) {
|
inline ShaderModule::ShaderModule(const std::vector<uint8_t>& code, SpvReflectModuleFlags flags) {
|
||||||
m_result = spvReflectCreateShaderModule(
|
m_result = spvReflectCreateShaderModule2(
|
||||||
|
flags,
|
||||||
code.size(),
|
code.size(),
|
||||||
code.data(),
|
code.data(),
|
||||||
&m_module);
|
&m_module);
|
||||||
@ -1557,8 +1619,9 @@ inline ShaderModule::ShaderModule(const std::vector<uint8_t>& code) {
|
|||||||
@param code
|
@param code
|
||||||
|
|
||||||
*/
|
*/
|
||||||
inline ShaderModule::ShaderModule(const std::vector<uint32_t>& code) {
|
inline ShaderModule::ShaderModule(const std::vector<uint32_t>& code, SpvReflectModuleFlags flags) {
|
||||||
m_result = spvReflectCreateShaderModule(
|
m_result = spvReflectCreateShaderModule2(
|
||||||
|
flags,
|
||||||
code.size() * sizeof(uint32_t),
|
code.size() * sizeof(uint32_t),
|
||||||
code.data(),
|
code.data(),
|
||||||
&m_module);
|
&m_module);
|
||||||
|
Loading…
Reference in New Issue
Block a user