Updated spirv-cross.
This commit is contained in:
parent
a6eb053d68
commit
a2ad066739
320
3rdparty/spirv-cross/spirv.h
vendored
320
3rdparty/spirv-cross/spirv.h
vendored
@ -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 */
|
||||
|
320
3rdparty/spirv-cross/spirv.hpp
vendored
320
3rdparty/spirv-cross/spirv.hpp
vendored
@ -49,12 +49,12 @@ namespace spv {
|
||||
|
||||
typedef unsigned int Id;
|
||||
|
||||
#define SPV_VERSION 0x10500
|
||||
#define SPV_REVISION 4
|
||||
#define SPV_VERSION 0x10600
|
||||
#define SPV_REVISION 1
|
||||
|
||||
static const unsigned int MagicNumber = 0x07230203;
|
||||
static const unsigned int Version = 0x00010500;
|
||||
static const unsigned int Revision = 4;
|
||||
static const unsigned int Version = 0x00010600;
|
||||
static const unsigned int Revision = 1;
|
||||
static const unsigned int OpCodeMask = 0xffff;
|
||||
static const unsigned int WordCountShift = 16;
|
||||
|
||||
@ -65,6 +65,7 @@ enum SourceLanguage {
|
||||
SourceLanguageOpenCL_C = 3,
|
||||
SourceLanguageOpenCL_CPP = 4,
|
||||
SourceLanguageHLSL = 5,
|
||||
SourceLanguageCPP_for_OpenCL = 6,
|
||||
SourceLanguageMax = 0x7fffffff,
|
||||
};
|
||||
|
||||
@ -150,6 +151,7 @@ enum ExecutionMode {
|
||||
ExecutionModeSubgroupsPerWorkgroupId = 37,
|
||||
ExecutionModeLocalSizeId = 38,
|
||||
ExecutionModeLocalSizeHintId = 39,
|
||||
ExecutionModeSubgroupUniformControlFlowKHR = 4421,
|
||||
ExecutionModePostDepthCoverage = 4446,
|
||||
ExecutionModeDenormPreserve = 4459,
|
||||
ExecutionModeDenormFlushToZero = 4460,
|
||||
@ -168,10 +170,16 @@ enum ExecutionMode {
|
||||
ExecutionModeSampleInterlockUnorderedEXT = 5369,
|
||||
ExecutionModeShadingRateInterlockOrderedEXT = 5370,
|
||||
ExecutionModeShadingRateInterlockUnorderedEXT = 5371,
|
||||
ExecutionModeSharedLocalMemorySizeINTEL = 5618,
|
||||
ExecutionModeRoundingModeRTPINTEL = 5620,
|
||||
ExecutionModeRoundingModeRTNINTEL = 5621,
|
||||
ExecutionModeFloatingPointModeALTINTEL = 5622,
|
||||
ExecutionModeFloatingPointModeIEEEINTEL = 5623,
|
||||
ExecutionModeMaxWorkgroupSizeINTEL = 5893,
|
||||
ExecutionModeMaxWorkDimINTEL = 5894,
|
||||
ExecutionModeNoGlobalOffsetINTEL = 5895,
|
||||
ExecutionModeNumSIMDWorkitemsINTEL = 5896,
|
||||
ExecutionModeSchedulerTargetFmaxMhzINTEL = 5903,
|
||||
ExecutionModeMax = 0x7fffffff,
|
||||
};
|
||||
|
||||
@ -204,6 +212,8 @@ enum StorageClass {
|
||||
StorageClassPhysicalStorageBuffer = 5349,
|
||||
StorageClassPhysicalStorageBufferEXT = 5349,
|
||||
StorageClassCodeSectionINTEL = 5605,
|
||||
StorageClassDeviceOnlyINTEL = 5936,
|
||||
StorageClassHostOnlyINTEL = 5937,
|
||||
StorageClassMax = 0x7fffffff,
|
||||
};
|
||||
|
||||
@ -343,6 +353,8 @@ enum ImageOperandsShift {
|
||||
ImageOperandsVolatileTexelKHRShift = 11,
|
||||
ImageOperandsSignExtendShift = 12,
|
||||
ImageOperandsZeroExtendShift = 13,
|
||||
ImageOperandsNontemporalShift = 14,
|
||||
ImageOperandsOffsetsShift = 16,
|
||||
ImageOperandsMax = 0x7fffffff,
|
||||
};
|
||||
|
||||
@ -366,6 +378,8 @@ enum ImageOperandsMask {
|
||||
ImageOperandsVolatileTexelKHRMask = 0x00000800,
|
||||
ImageOperandsSignExtendMask = 0x00001000,
|
||||
ImageOperandsZeroExtendMask = 0x00002000,
|
||||
ImageOperandsNontemporalMask = 0x00004000,
|
||||
ImageOperandsOffsetsMask = 0x00010000,
|
||||
};
|
||||
|
||||
enum FPFastMathModeShift {
|
||||
@ -374,6 +388,8 @@ enum FPFastMathModeShift {
|
||||
FPFastMathModeNSZShift = 2,
|
||||
FPFastMathModeAllowRecipShift = 3,
|
||||
FPFastMathModeFastShift = 4,
|
||||
FPFastMathModeAllowContractFastINTELShift = 16,
|
||||
FPFastMathModeAllowReassocINTELShift = 17,
|
||||
FPFastMathModeMax = 0x7fffffff,
|
||||
};
|
||||
|
||||
@ -384,6 +400,8 @@ enum FPFastMathModeMask {
|
||||
FPFastMathModeNSZMask = 0x00000004,
|
||||
FPFastMathModeAllowRecipMask = 0x00000008,
|
||||
FPFastMathModeFastMask = 0x00000010,
|
||||
FPFastMathModeAllowContractFastINTELMask = 0x00010000,
|
||||
FPFastMathModeAllowReassocINTELMask = 0x00020000,
|
||||
};
|
||||
|
||||
enum FPRoundingMode {
|
||||
@ -397,6 +415,7 @@ enum FPRoundingMode {
|
||||
enum LinkageType {
|
||||
LinkageTypeExport = 0,
|
||||
LinkageTypeImport = 1,
|
||||
LinkageTypeLinkOnceODR = 2,
|
||||
LinkageTypeMax = 0x7fffffff,
|
||||
};
|
||||
|
||||
@ -477,6 +496,7 @@ enum Decoration {
|
||||
DecorationPerPrimitiveNV = 5271,
|
||||
DecorationPerViewNV = 5272,
|
||||
DecorationPerTaskNV = 5273,
|
||||
DecorationPerVertexKHR = 5285,
|
||||
DecorationPerVertexNV = 5285,
|
||||
DecorationNonUniform = 5300,
|
||||
DecorationNonUniformEXT = 5300,
|
||||
@ -484,12 +504,26 @@ enum Decoration {
|
||||
DecorationRestrictPointerEXT = 5355,
|
||||
DecorationAliasedPointer = 5356,
|
||||
DecorationAliasedPointerEXT = 5356,
|
||||
DecorationBindlessSamplerNV = 5398,
|
||||
DecorationBindlessImageNV = 5399,
|
||||
DecorationBoundSamplerNV = 5400,
|
||||
DecorationBoundImageNV = 5401,
|
||||
DecorationSIMTCallINTEL = 5599,
|
||||
DecorationReferencedIndirectlyINTEL = 5602,
|
||||
DecorationClobberINTEL = 5607,
|
||||
DecorationSideEffectsINTEL = 5608,
|
||||
DecorationVectorComputeVariableINTEL = 5624,
|
||||
DecorationFuncParamIOKindINTEL = 5625,
|
||||
DecorationVectorComputeFunctionINTEL = 5626,
|
||||
DecorationStackCallINTEL = 5627,
|
||||
DecorationGlobalVariableOffsetINTEL = 5628,
|
||||
DecorationCounterBuffer = 5634,
|
||||
DecorationHlslCounterBufferGOOGLE = 5634,
|
||||
DecorationHlslSemanticGOOGLE = 5635,
|
||||
DecorationUserSemantic = 5635,
|
||||
DecorationUserTypeGOOGLE = 5636,
|
||||
DecorationFunctionRoundingModeINTEL = 5822,
|
||||
DecorationFunctionDenormModeINTEL = 5823,
|
||||
DecorationRegisterINTEL = 5825,
|
||||
DecorationMemoryINTEL = 5826,
|
||||
DecorationNumbanksINTEL = 5827,
|
||||
@ -502,6 +536,18 @@ enum Decoration {
|
||||
DecorationMergeINTEL = 5834,
|
||||
DecorationBankBitsINTEL = 5835,
|
||||
DecorationForcePow2DepthINTEL = 5836,
|
||||
DecorationBurstCoalesceINTEL = 5899,
|
||||
DecorationCacheSizeINTEL = 5900,
|
||||
DecorationDontStaticallyCoalesceINTEL = 5901,
|
||||
DecorationPrefetchINTEL = 5902,
|
||||
DecorationStallEnableINTEL = 5905,
|
||||
DecorationFuseLoopsInFunctionINTEL = 5907,
|
||||
DecorationBufferLocationINTEL = 5921,
|
||||
DecorationIOPipeStorageINTEL = 5944,
|
||||
DecorationFunctionFloatingPointModeINTEL = 6080,
|
||||
DecorationSingleElementVectorINTEL = 6085,
|
||||
DecorationVectorComputeCallableFunctionINTEL = 6087,
|
||||
DecorationMediaBlockIOINTEL = 6140,
|
||||
DecorationMax = 0x7fffffff,
|
||||
};
|
||||
|
||||
@ -586,7 +632,9 @@ enum BuiltIn {
|
||||
BuiltInLayerPerViewNV = 5279,
|
||||
BuiltInMeshViewCountNV = 5280,
|
||||
BuiltInMeshViewIndicesNV = 5281,
|
||||
BuiltInBaryCoordKHR = 5286,
|
||||
BuiltInBaryCoordNV = 5286,
|
||||
BuiltInBaryCoordNoPerspKHR = 5287,
|
||||
BuiltInBaryCoordNoPerspNV = 5287,
|
||||
BuiltInFragSizeEXT = 5292,
|
||||
BuiltInFragmentSizeNV = 5292,
|
||||
@ -617,6 +665,7 @@ enum BuiltIn {
|
||||
BuiltInHitTNV = 5332,
|
||||
BuiltInHitKindKHR = 5333,
|
||||
BuiltInHitKindNV = 5333,
|
||||
BuiltInCurrentRayTimeNV = 5334,
|
||||
BuiltInIncomingRayFlagsKHR = 5351,
|
||||
BuiltInIncomingRayFlagsNV = 5351,
|
||||
BuiltInRayGeometryIndexKHR = 5352,
|
||||
@ -656,6 +705,7 @@ enum LoopControlShift {
|
||||
LoopControlLoopCoalesceINTELShift = 20,
|
||||
LoopControlMaxInterleavingINTELShift = 21,
|
||||
LoopControlSpeculatedIterationsINTELShift = 22,
|
||||
LoopControlNoFusionINTELShift = 23,
|
||||
LoopControlMax = 0x7fffffff,
|
||||
};
|
||||
|
||||
@ -677,6 +727,7 @@ enum LoopControlMask {
|
||||
LoopControlLoopCoalesceINTELMask = 0x00100000,
|
||||
LoopControlMaxInterleavingINTELMask = 0x00200000,
|
||||
LoopControlSpeculatedIterationsINTELMask = 0x00400000,
|
||||
LoopControlNoFusionINTELMask = 0x00800000,
|
||||
};
|
||||
|
||||
enum FunctionControlShift {
|
||||
@ -684,6 +735,7 @@ enum FunctionControlShift {
|
||||
FunctionControlDontInlineShift = 1,
|
||||
FunctionControlPureShift = 2,
|
||||
FunctionControlConstShift = 3,
|
||||
FunctionControlOptNoneINTELShift = 16,
|
||||
FunctionControlMax = 0x7fffffff,
|
||||
};
|
||||
|
||||
@ -693,6 +745,7 @@ enum FunctionControlMask {
|
||||
FunctionControlDontInlineMask = 0x00000002,
|
||||
FunctionControlPureMask = 0x00000004,
|
||||
FunctionControlConstMask = 0x00000008,
|
||||
FunctionControlOptNoneINTELMask = 0x00010000,
|
||||
};
|
||||
|
||||
enum MemorySemanticsShift {
|
||||
@ -873,9 +926,13 @@ enum Capability {
|
||||
CapabilityGroupNonUniformQuad = 68,
|
||||
CapabilityShaderLayer = 69,
|
||||
CapabilityShaderViewportIndex = 70,
|
||||
CapabilityUniformDecoration = 71,
|
||||
CapabilityFragmentShadingRateKHR = 4422,
|
||||
CapabilitySubgroupBallotKHR = 4423,
|
||||
CapabilityDrawParameters = 4427,
|
||||
CapabilityWorkgroupMemoryExplicitLayoutKHR = 4428,
|
||||
CapabilityWorkgroupMemoryExplicitLayout8BitAccessKHR = 4429,
|
||||
CapabilityWorkgroupMemoryExplicitLayout16BitAccessKHR = 4430,
|
||||
CapabilitySubgroupVoteKHR = 4431,
|
||||
CapabilityStorageBuffer16BitAccess = 4433,
|
||||
CapabilityStorageUniformBufferBlock16 = 4433,
|
||||
@ -918,6 +975,7 @@ enum Capability {
|
||||
CapabilityFragmentFullyCoveredEXT = 5265,
|
||||
CapabilityMeshShadingNV = 5266,
|
||||
CapabilityImageFootprintNV = 5282,
|
||||
CapabilityFragmentBarycentricKHR = 5284,
|
||||
CapabilityFragmentBarycentricNV = 5284,
|
||||
CapabilityComputeDerivativeGroupQuadsNV = 5288,
|
||||
CapabilityFragmentDensityEXT = 5291,
|
||||
@ -948,6 +1006,7 @@ enum Capability {
|
||||
CapabilityStorageTexelBufferArrayNonUniformIndexing = 5312,
|
||||
CapabilityStorageTexelBufferArrayNonUniformIndexingEXT = 5312,
|
||||
CapabilityRayTracingNV = 5340,
|
||||
CapabilityRayTracingMotionBlurNV = 5341,
|
||||
CapabilityVulkanMemoryModel = 5345,
|
||||
CapabilityVulkanMemoryModelKHR = 5345,
|
||||
CapabilityVulkanMemoryModelDeviceScope = 5346,
|
||||
@ -961,26 +1020,62 @@ enum Capability {
|
||||
CapabilityFragmentShaderShadingRateInterlockEXT = 5372,
|
||||
CapabilityShaderSMBuiltinsNV = 5373,
|
||||
CapabilityFragmentShaderPixelInterlockEXT = 5378,
|
||||
CapabilityDemoteToHelperInvocation = 5379,
|
||||
CapabilityDemoteToHelperInvocationEXT = 5379,
|
||||
CapabilityBindlessTextureNV = 5390,
|
||||
CapabilitySubgroupShuffleINTEL = 5568,
|
||||
CapabilitySubgroupBufferBlockIOINTEL = 5569,
|
||||
CapabilitySubgroupImageBlockIOINTEL = 5570,
|
||||
CapabilitySubgroupImageMediaBlockIOINTEL = 5579,
|
||||
CapabilityRoundToInfinityINTEL = 5582,
|
||||
CapabilityFloatingPointModeINTEL = 5583,
|
||||
CapabilityIntegerFunctions2INTEL = 5584,
|
||||
CapabilityFunctionPointersINTEL = 5603,
|
||||
CapabilityIndirectReferencesINTEL = 5604,
|
||||
CapabilityAsmINTEL = 5606,
|
||||
CapabilityAtomicFloat32MinMaxEXT = 5612,
|
||||
CapabilityAtomicFloat64MinMaxEXT = 5613,
|
||||
CapabilityAtomicFloat16MinMaxEXT = 5616,
|
||||
CapabilityVectorComputeINTEL = 5617,
|
||||
CapabilityVectorAnyINTEL = 5619,
|
||||
CapabilityExpectAssumeKHR = 5629,
|
||||
CapabilitySubgroupAvcMotionEstimationINTEL = 5696,
|
||||
CapabilitySubgroupAvcMotionEstimationIntraINTEL = 5697,
|
||||
CapabilitySubgroupAvcMotionEstimationChromaINTEL = 5698,
|
||||
CapabilityVariableLengthArrayINTEL = 5817,
|
||||
CapabilityFunctionFloatControlINTEL = 5821,
|
||||
CapabilityFPGAMemoryAttributesINTEL = 5824,
|
||||
CapabilityFPFastMathModeINTEL = 5837,
|
||||
CapabilityArbitraryPrecisionIntegersINTEL = 5844,
|
||||
CapabilityArbitraryPrecisionFloatingPointINTEL = 5845,
|
||||
CapabilityUnstructuredLoopControlsINTEL = 5886,
|
||||
CapabilityFPGALoopControlsINTEL = 5888,
|
||||
CapabilityKernelAttributesINTEL = 5892,
|
||||
CapabilityFPGAKernelAttributesINTEL = 5897,
|
||||
CapabilityFPGAMemoryAccessesINTEL = 5898,
|
||||
CapabilityFPGAClusterAttributesINTEL = 5904,
|
||||
CapabilityLoopFuseINTEL = 5906,
|
||||
CapabilityFPGABufferLocationINTEL = 5920,
|
||||
CapabilityArbitraryPrecisionFixedPointINTEL = 5922,
|
||||
CapabilityUSMStorageClassesINTEL = 5935,
|
||||
CapabilityIOPipesINTEL = 5943,
|
||||
CapabilityBlockingPipesINTEL = 5945,
|
||||
CapabilityFPGARegINTEL = 5948,
|
||||
CapabilityDotProductInputAll = 6016,
|
||||
CapabilityDotProductInputAllKHR = 6016,
|
||||
CapabilityDotProductInput4x8Bit = 6017,
|
||||
CapabilityDotProductInput4x8BitKHR = 6017,
|
||||
CapabilityDotProductInput4x8BitPacked = 6018,
|
||||
CapabilityDotProductInput4x8BitPackedKHR = 6018,
|
||||
CapabilityDotProduct = 6019,
|
||||
CapabilityDotProductKHR = 6019,
|
||||
CapabilityBitInstructions = 6025,
|
||||
CapabilityAtomicFloat32AddEXT = 6033,
|
||||
CapabilityAtomicFloat64AddEXT = 6034,
|
||||
CapabilityLongConstantCompositeINTEL = 6089,
|
||||
CapabilityOptNoneINTEL = 6094,
|
||||
CapabilityAtomicFloat16AddEXT = 6095,
|
||||
CapabilityDebugInfoModuleINTEL = 6114,
|
||||
CapabilityMax = 0x7fffffff,
|
||||
};
|
||||
|
||||
@ -1047,6 +1142,44 @@ enum FragmentShadingRateMask {
|
||||
FragmentShadingRateHorizontal4PixelsMask = 0x00000008,
|
||||
};
|
||||
|
||||
enum FPDenormMode {
|
||||
FPDenormModePreserve = 0,
|
||||
FPDenormModeFlushToZero = 1,
|
||||
FPDenormModeMax = 0x7fffffff,
|
||||
};
|
||||
|
||||
enum FPOperationMode {
|
||||
FPOperationModeIEEE = 0,
|
||||
FPOperationModeALT = 1,
|
||||
FPOperationModeMax = 0x7fffffff,
|
||||
};
|
||||
|
||||
enum QuantizationModes {
|
||||
QuantizationModesTRN = 0,
|
||||
QuantizationModesTRN_ZERO = 1,
|
||||
QuantizationModesRND = 2,
|
||||
QuantizationModesRND_ZERO = 3,
|
||||
QuantizationModesRND_INF = 4,
|
||||
QuantizationModesRND_MIN_INF = 5,
|
||||
QuantizationModesRND_CONV = 6,
|
||||
QuantizationModesRND_CONV_ODD = 7,
|
||||
QuantizationModesMax = 0x7fffffff,
|
||||
};
|
||||
|
||||
enum OverflowModes {
|
||||
OverflowModesWRAP = 0,
|
||||
OverflowModesSAT = 1,
|
||||
OverflowModesSAT_ZERO = 2,
|
||||
OverflowModesSAT_SYM = 3,
|
||||
OverflowModesMax = 0x7fffffff,
|
||||
};
|
||||
|
||||
enum PackedVectorFormat {
|
||||
PackedVectorFormatPackedVectorFormat4x8Bit = 0,
|
||||
PackedVectorFormatPackedVectorFormat4x8BitKHR = 0,
|
||||
PackedVectorFormatMax = 0x7fffffff,
|
||||
};
|
||||
|
||||
enum Op {
|
||||
OpNop = 0,
|
||||
OpUndef = 1,
|
||||
@ -1404,6 +1537,18 @@ enum Op {
|
||||
OpConvertUToAccelerationStructureKHR = 4447,
|
||||
OpIgnoreIntersectionKHR = 4448,
|
||||
OpTerminateRayKHR = 4449,
|
||||
OpSDot = 4450,
|
||||
OpSDotKHR = 4450,
|
||||
OpUDot = 4451,
|
||||
OpUDotKHR = 4451,
|
||||
OpSUDot = 4452,
|
||||
OpSUDotKHR = 4452,
|
||||
OpSDotAccSat = 4453,
|
||||
OpSDotAccSatKHR = 4453,
|
||||
OpUDotAccSat = 4454,
|
||||
OpUDotAccSatKHR = 4454,
|
||||
OpSUDotAccSat = 4455,
|
||||
OpSUDotAccSatKHR = 4455,
|
||||
OpTypeRayQueryKHR = 4472,
|
||||
OpRayQueryInitializeKHR = 4473,
|
||||
OpRayQueryTerminateKHR = 4474,
|
||||
@ -1430,6 +1575,8 @@ enum Op {
|
||||
OpIgnoreIntersectionNV = 5335,
|
||||
OpTerminateRayNV = 5336,
|
||||
OpTraceNV = 5337,
|
||||
OpTraceMotionNV = 5338,
|
||||
OpTraceRayMotionNV = 5339,
|
||||
OpTypeAccelerationStructureKHR = 5341,
|
||||
OpTypeAccelerationStructureNV = 5341,
|
||||
OpExecuteCallableNV = 5344,
|
||||
@ -1440,8 +1587,16 @@ enum Op {
|
||||
OpCooperativeMatrixLengthNV = 5362,
|
||||
OpBeginInvocationInterlockEXT = 5364,
|
||||
OpEndInvocationInterlockEXT = 5365,
|
||||
OpDemoteToHelperInvocation = 5380,
|
||||
OpDemoteToHelperInvocationEXT = 5380,
|
||||
OpIsHelperInvocationEXT = 5381,
|
||||
OpConvertUToImageNV = 5391,
|
||||
OpConvertUToSamplerNV = 5392,
|
||||
OpConvertImageToUNV = 5393,
|
||||
OpConvertSamplerToUNV = 5394,
|
||||
OpConvertUToSampledImageNV = 5395,
|
||||
OpConvertSampledImageToUNV = 5396,
|
||||
OpSamplerImageAddressingModeNV = 5397,
|
||||
OpSubgroupShuffleINTEL = 5571,
|
||||
OpSubgroupShuffleDownINTEL = 5572,
|
||||
OpSubgroupShuffleUpINTEL = 5573,
|
||||
@ -1466,8 +1621,15 @@ enum Op {
|
||||
OpUSubSatINTEL = 5596,
|
||||
OpIMul32x16INTEL = 5597,
|
||||
OpUMul32x16INTEL = 5598,
|
||||
OpFunctionPointerINTEL = 5600,
|
||||
OpConstantFunctionPointerINTEL = 5600,
|
||||
OpFunctionPointerCallINTEL = 5601,
|
||||
OpAsmTargetINTEL = 5609,
|
||||
OpAsmINTEL = 5610,
|
||||
OpAsmCallINTEL = 5611,
|
||||
OpAtomicFMinEXT = 5614,
|
||||
OpAtomicFMaxEXT = 5615,
|
||||
OpAssumeTrueKHR = 5630,
|
||||
OpExpectKHR = 5631,
|
||||
OpDecorateString = 5632,
|
||||
OpDecorateStringGOOGLE = 5632,
|
||||
OpMemberDecorateString = 5633,
|
||||
@ -1590,7 +1752,64 @@ enum Op {
|
||||
OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL = 5814,
|
||||
OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL = 5815,
|
||||
OpSubgroupAvcSicGetInterRawSadsINTEL = 5816,
|
||||
OpVariableLengthArrayINTEL = 5818,
|
||||
OpSaveMemoryINTEL = 5819,
|
||||
OpRestoreMemoryINTEL = 5820,
|
||||
OpArbitraryFloatSinCosPiINTEL = 5840,
|
||||
OpArbitraryFloatCastINTEL = 5841,
|
||||
OpArbitraryFloatCastFromIntINTEL = 5842,
|
||||
OpArbitraryFloatCastToIntINTEL = 5843,
|
||||
OpArbitraryFloatAddINTEL = 5846,
|
||||
OpArbitraryFloatSubINTEL = 5847,
|
||||
OpArbitraryFloatMulINTEL = 5848,
|
||||
OpArbitraryFloatDivINTEL = 5849,
|
||||
OpArbitraryFloatGTINTEL = 5850,
|
||||
OpArbitraryFloatGEINTEL = 5851,
|
||||
OpArbitraryFloatLTINTEL = 5852,
|
||||
OpArbitraryFloatLEINTEL = 5853,
|
||||
OpArbitraryFloatEQINTEL = 5854,
|
||||
OpArbitraryFloatRecipINTEL = 5855,
|
||||
OpArbitraryFloatRSqrtINTEL = 5856,
|
||||
OpArbitraryFloatCbrtINTEL = 5857,
|
||||
OpArbitraryFloatHypotINTEL = 5858,
|
||||
OpArbitraryFloatSqrtINTEL = 5859,
|
||||
OpArbitraryFloatLogINTEL = 5860,
|
||||
OpArbitraryFloatLog2INTEL = 5861,
|
||||
OpArbitraryFloatLog10INTEL = 5862,
|
||||
OpArbitraryFloatLog1pINTEL = 5863,
|
||||
OpArbitraryFloatExpINTEL = 5864,
|
||||
OpArbitraryFloatExp2INTEL = 5865,
|
||||
OpArbitraryFloatExp10INTEL = 5866,
|
||||
OpArbitraryFloatExpm1INTEL = 5867,
|
||||
OpArbitraryFloatSinINTEL = 5868,
|
||||
OpArbitraryFloatCosINTEL = 5869,
|
||||
OpArbitraryFloatSinCosINTEL = 5870,
|
||||
OpArbitraryFloatSinPiINTEL = 5871,
|
||||
OpArbitraryFloatCosPiINTEL = 5872,
|
||||
OpArbitraryFloatASinINTEL = 5873,
|
||||
OpArbitraryFloatASinPiINTEL = 5874,
|
||||
OpArbitraryFloatACosINTEL = 5875,
|
||||
OpArbitraryFloatACosPiINTEL = 5876,
|
||||
OpArbitraryFloatATanINTEL = 5877,
|
||||
OpArbitraryFloatATanPiINTEL = 5878,
|
||||
OpArbitraryFloatATan2INTEL = 5879,
|
||||
OpArbitraryFloatPowINTEL = 5880,
|
||||
OpArbitraryFloatPowRINTEL = 5881,
|
||||
OpArbitraryFloatPowNINTEL = 5882,
|
||||
OpLoopControlINTEL = 5887,
|
||||
OpFixedSqrtINTEL = 5923,
|
||||
OpFixedRecipINTEL = 5924,
|
||||
OpFixedRsqrtINTEL = 5925,
|
||||
OpFixedSinINTEL = 5926,
|
||||
OpFixedCosINTEL = 5927,
|
||||
OpFixedSinCosINTEL = 5928,
|
||||
OpFixedSinPiINTEL = 5929,
|
||||
OpFixedCosPiINTEL = 5930,
|
||||
OpFixedSinCosPiINTEL = 5931,
|
||||
OpFixedLogINTEL = 5932,
|
||||
OpFixedExpINTEL = 5933,
|
||||
OpPtrCastToCrossWorkgroupINTEL = 5934,
|
||||
OpCrossWorkgroupCastToPtrINTEL = 5938,
|
||||
OpReadPipeBlockingINTEL = 5946,
|
||||
OpWritePipeBlockingINTEL = 5947,
|
||||
OpFPGARegINTEL = 5949,
|
||||
@ -1612,6 +1831,10 @@ enum Op {
|
||||
OpRayQueryGetIntersectionObjectToWorldKHR = 6031,
|
||||
OpRayQueryGetIntersectionWorldToObjectKHR = 6032,
|
||||
OpAtomicFAddEXT = 6035,
|
||||
OpTypeBufferSurfaceINTEL = 6086,
|
||||
OpTypeStructContinuedINTEL = 6090,
|
||||
OpConstantCompositeContinuedINTEL = 6091,
|
||||
OpSpecConstantCompositeContinuedINTEL = 6092,
|
||||
OpMax = 0x7fffffff,
|
||||
};
|
||||
|
||||
@ -1976,6 +2199,12 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) {
|
||||
case OpConvertUToAccelerationStructureKHR: *hasResult = true; *hasResultType = true; break;
|
||||
case OpIgnoreIntersectionKHR: *hasResult = false; *hasResultType = false; break;
|
||||
case OpTerminateRayKHR: *hasResult = false; *hasResultType = false; break;
|
||||
case OpSDot: *hasResult = true; *hasResultType = true; break;
|
||||
case OpUDot: *hasResult = true; *hasResultType = true; break;
|
||||
case OpSUDot: *hasResult = true; *hasResultType = true; break;
|
||||
case OpSDotAccSat: *hasResult = true; *hasResultType = true; break;
|
||||
case OpUDotAccSat: *hasResult = true; *hasResultType = true; break;
|
||||
case OpSUDotAccSat: *hasResult = true; *hasResultType = true; break;
|
||||
case OpTypeRayQueryKHR: *hasResult = true; *hasResultType = false; break;
|
||||
case OpRayQueryInitializeKHR: *hasResult = false; *hasResultType = false; break;
|
||||
case OpRayQueryTerminateKHR: *hasResult = false; *hasResultType = false; break;
|
||||
@ -2001,6 +2230,8 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) {
|
||||
case OpIgnoreIntersectionNV: *hasResult = false; *hasResultType = false; break;
|
||||
case OpTerminateRayNV: *hasResult = false; *hasResultType = false; break;
|
||||
case OpTraceNV: *hasResult = false; *hasResultType = false; break;
|
||||
case OpTraceMotionNV: *hasResult = false; *hasResultType = false; break;
|
||||
case OpTraceRayMotionNV: *hasResult = false; *hasResultType = false; break;
|
||||
case OpTypeAccelerationStructureNV: *hasResult = true; *hasResultType = false; break;
|
||||
case OpExecuteCallableNV: *hasResult = false; *hasResultType = false; break;
|
||||
case OpTypeCooperativeMatrixNV: *hasResult = true; *hasResultType = false; break;
|
||||
@ -2010,8 +2241,15 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) {
|
||||
case OpCooperativeMatrixLengthNV: *hasResult = true; *hasResultType = true; break;
|
||||
case OpBeginInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break;
|
||||
case OpEndInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break;
|
||||
case OpDemoteToHelperInvocationEXT: *hasResult = false; *hasResultType = false; break;
|
||||
case OpDemoteToHelperInvocation: *hasResult = false; *hasResultType = false; break;
|
||||
case OpIsHelperInvocationEXT: *hasResult = true; *hasResultType = true; break;
|
||||
case OpConvertUToImageNV: *hasResult = true; *hasResultType = true; break;
|
||||
case OpConvertUToSamplerNV: *hasResult = true; *hasResultType = true; break;
|
||||
case OpConvertImageToUNV: *hasResult = true; *hasResultType = true; break;
|
||||
case OpConvertSamplerToUNV: *hasResult = true; *hasResultType = true; break;
|
||||
case OpConvertUToSampledImageNV: *hasResult = true; *hasResultType = true; break;
|
||||
case OpConvertSampledImageToUNV: *hasResult = true; *hasResultType = true; break;
|
||||
case OpSamplerImageAddressingModeNV: *hasResult = false; *hasResultType = false; break;
|
||||
case OpSubgroupShuffleINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpSubgroupShuffleDownINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpSubgroupShuffleUpINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
@ -2036,8 +2274,15 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) {
|
||||
case OpUSubSatINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpIMul32x16INTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpUMul32x16INTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpFunctionPointerINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpConstantFunctionPointerINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpFunctionPointerCallINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpAsmTargetINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpAsmINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpAsmCallINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpAtomicFMinEXT: *hasResult = true; *hasResultType = true; break;
|
||||
case OpAtomicFMaxEXT: *hasResult = true; *hasResultType = true; break;
|
||||
case OpAssumeTrueKHR: *hasResult = false; *hasResultType = false; break;
|
||||
case OpExpectKHR: *hasResult = true; *hasResultType = true; break;
|
||||
case OpDecorateString: *hasResult = false; *hasResultType = false; break;
|
||||
case OpMemberDecorateString: *hasResult = false; *hasResultType = false; break;
|
||||
case OpVmeImageINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
@ -2158,7 +2403,64 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) {
|
||||
case OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpSubgroupAvcSicGetInterRawSadsINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpVariableLengthArrayINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpSaveMemoryINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpRestoreMemoryINTEL: *hasResult = false; *hasResultType = false; break;
|
||||
case OpArbitraryFloatSinCosPiINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpArbitraryFloatCastINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpArbitraryFloatCastFromIntINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpArbitraryFloatCastToIntINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpArbitraryFloatAddINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpArbitraryFloatSubINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpArbitraryFloatMulINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpArbitraryFloatDivINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpArbitraryFloatGTINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpArbitraryFloatGEINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpArbitraryFloatLTINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpArbitraryFloatLEINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpArbitraryFloatEQINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpArbitraryFloatRecipINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpArbitraryFloatRSqrtINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpArbitraryFloatCbrtINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpArbitraryFloatHypotINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpArbitraryFloatSqrtINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpArbitraryFloatLogINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpArbitraryFloatLog2INTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpArbitraryFloatLog10INTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpArbitraryFloatLog1pINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpArbitraryFloatExpINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpArbitraryFloatExp2INTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpArbitraryFloatExp10INTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpArbitraryFloatExpm1INTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpArbitraryFloatSinINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpArbitraryFloatCosINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpArbitraryFloatSinCosINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpArbitraryFloatSinPiINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpArbitraryFloatCosPiINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpArbitraryFloatASinINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpArbitraryFloatASinPiINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpArbitraryFloatACosINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpArbitraryFloatACosPiINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpArbitraryFloatATanINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpArbitraryFloatATanPiINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpArbitraryFloatATan2INTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpArbitraryFloatPowINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpArbitraryFloatPowRINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpArbitraryFloatPowNINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpLoopControlINTEL: *hasResult = false; *hasResultType = false; break;
|
||||
case OpFixedSqrtINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpFixedRecipINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpFixedRsqrtINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpFixedSinINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpFixedCosINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpFixedSinCosINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpFixedSinPiINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpFixedCosPiINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpFixedSinCosPiINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpFixedLogINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpFixedExpINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpPtrCastToCrossWorkgroupINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpCrossWorkgroupCastToPtrINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpReadPipeBlockingINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpWritePipeBlockingINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
case OpFPGARegINTEL: *hasResult = true; *hasResultType = true; break;
|
||||
@ -2180,6 +2482,10 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) {
|
||||
case OpRayQueryGetIntersectionObjectToWorldKHR: *hasResult = true; *hasResultType = true; break;
|
||||
case OpRayQueryGetIntersectionWorldToObjectKHR: *hasResult = true; *hasResultType = true; break;
|
||||
case OpAtomicFAddEXT: *hasResult = true; *hasResultType = true; break;
|
||||
case OpTypeBufferSurfaceINTEL: *hasResult = true; *hasResultType = false; break;
|
||||
case OpTypeStructContinuedINTEL: *hasResult = false; *hasResultType = false; break;
|
||||
case OpConstantCompositeContinuedINTEL: *hasResult = false; *hasResultType = false; break;
|
||||
case OpSpecConstantCompositeContinuedINTEL: *hasResult = false; *hasResultType = false; break;
|
||||
}
|
||||
}
|
||||
#endif /* SPV_ENABLE_UTILITY_CODE */
|
||||
|
1
3rdparty/spirv-cross/spirv_common.hpp
vendored
1
3rdparty/spirv-cross/spirv_common.hpp
vendored
@ -672,6 +672,7 @@ struct SPIREntryPoint
|
||||
struct WorkgroupSize
|
||||
{
|
||||
uint32_t x = 0, y = 0, z = 0;
|
||||
uint32_t id_x = 0, id_y = 0, id_z = 0;
|
||||
uint32_t constant = 0; // Workgroup size can be expressed as a constant/spec-constant instead.
|
||||
} workgroup_size;
|
||||
uint32_t invocations = 0;
|
||||
|
67
3rdparty/spirv-cross/spirv_cross.cpp
vendored
67
3rdparty/spirv-cross/spirv_cross.cpp
vendored
@ -1050,10 +1050,12 @@ void Compiler::parse_fixup()
|
||||
if (id.get_type() == TypeConstant)
|
||||
{
|
||||
auto &c = id.get<SPIRConstant>();
|
||||
if (ir.meta[c.self].decoration.builtin && ir.meta[c.self].decoration.builtin_type == BuiltInWorkgroupSize)
|
||||
if (has_decoration(c.self, DecorationBuiltIn) &&
|
||||
BuiltIn(get_decoration(c.self, DecorationBuiltIn)) == BuiltInWorkgroupSize)
|
||||
{
|
||||
// In current SPIR-V, there can be just one constant like this.
|
||||
// All entry points will receive the constant value.
|
||||
// WorkgroupSize take precedence over LocalSizeId.
|
||||
for (auto &entry : ir.entry_points)
|
||||
{
|
||||
entry.second.workgroup_size.constant = c.self;
|
||||
@ -2156,6 +2158,12 @@ void Compiler::set_execution_mode(ExecutionMode mode, uint32_t arg0, uint32_t ar
|
||||
execution.workgroup_size.z = arg2;
|
||||
break;
|
||||
|
||||
case ExecutionModeLocalSizeId:
|
||||
execution.workgroup_size.id_x = arg0;
|
||||
execution.workgroup_size.id_y = arg1;
|
||||
execution.workgroup_size.id_z = arg2;
|
||||
break;
|
||||
|
||||
case ExecutionModeInvocations:
|
||||
execution.invocations = arg0;
|
||||
break;
|
||||
@ -2183,6 +2191,7 @@ uint32_t Compiler::get_work_group_size_specialization_constants(SpecializationCo
|
||||
y = { 0, 0 };
|
||||
z = { 0, 0 };
|
||||
|
||||
// WorkgroupSize builtin takes precedence over LocalSize / LocalSizeId.
|
||||
if (execution.workgroup_size.constant != 0)
|
||||
{
|
||||
auto &c = get<SPIRConstant>(execution.workgroup_size.constant);
|
||||
@ -2205,6 +2214,29 @@ uint32_t Compiler::get_work_group_size_specialization_constants(SpecializationCo
|
||||
z.constant_id = get_decoration(c.m.c[0].id[2], DecorationSpecId);
|
||||
}
|
||||
}
|
||||
else if (execution.flags.get(ExecutionModeLocalSizeId))
|
||||
{
|
||||
auto &cx = get<SPIRConstant>(execution.workgroup_size.id_x);
|
||||
if (cx.specialization)
|
||||
{
|
||||
x.id = execution.workgroup_size.id_x;
|
||||
x.constant_id = get_decoration(execution.workgroup_size.id_x, DecorationSpecId);
|
||||
}
|
||||
|
||||
auto &cy = get<SPIRConstant>(execution.workgroup_size.id_y);
|
||||
if (cy.specialization)
|
||||
{
|
||||
y.id = execution.workgroup_size.id_y;
|
||||
y.constant_id = get_decoration(execution.workgroup_size.id_y, DecorationSpecId);
|
||||
}
|
||||
|
||||
auto &cz = get<SPIRConstant>(execution.workgroup_size.id_z);
|
||||
if (cz.specialization)
|
||||
{
|
||||
z.id = execution.workgroup_size.id_z;
|
||||
z.constant_id = get_decoration(execution.workgroup_size.id_z, DecorationSpecId);
|
||||
}
|
||||
}
|
||||
|
||||
return execution.workgroup_size.constant;
|
||||
}
|
||||
@ -2214,15 +2246,42 @@ uint32_t Compiler::get_execution_mode_argument(spv::ExecutionMode mode, uint32_t
|
||||
auto &execution = get_entry_point();
|
||||
switch (mode)
|
||||
{
|
||||
case ExecutionModeLocalSizeId:
|
||||
if (execution.flags.get(ExecutionModeLocalSizeId))
|
||||
{
|
||||
switch (index)
|
||||
{
|
||||
case 0:
|
||||
return execution.workgroup_size.id_x;
|
||||
case 1:
|
||||
return execution.workgroup_size.id_y;
|
||||
case 2:
|
||||
return execution.workgroup_size.id_z;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
return 0;
|
||||
|
||||
case ExecutionModeLocalSize:
|
||||
switch (index)
|
||||
{
|
||||
case 0:
|
||||
return execution.workgroup_size.x;
|
||||
if (execution.flags.get(ExecutionModeLocalSizeId) && execution.workgroup_size.id_x != 0)
|
||||
return get<SPIRConstant>(execution.workgroup_size.id_x).scalar();
|
||||
else
|
||||
return execution.workgroup_size.x;
|
||||
case 1:
|
||||
return execution.workgroup_size.y;
|
||||
if (execution.flags.get(ExecutionModeLocalSizeId) && execution.workgroup_size.id_y != 0)
|
||||
return get<SPIRConstant>(execution.workgroup_size.id_y).scalar();
|
||||
else
|
||||
return execution.workgroup_size.y;
|
||||
case 2:
|
||||
return execution.workgroup_size.z;
|
||||
if (execution.flags.get(ExecutionModeLocalSizeId) && execution.workgroup_size.id_z != 0)
|
||||
return get<SPIRConstant>(execution.workgroup_size.id_z).scalar();
|
||||
else
|
||||
return execution.workgroup_size.z;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
|
7
3rdparty/spirv-cross/spirv_cross.hpp
vendored
7
3rdparty/spirv-cross/spirv_cross.hpp
vendored
@ -357,8 +357,11 @@ public:
|
||||
void set_execution_mode(spv::ExecutionMode mode, uint32_t arg0 = 0, uint32_t arg1 = 0, uint32_t arg2 = 0);
|
||||
|
||||
// Gets argument for an execution mode (LocalSize, Invocations, OutputVertices).
|
||||
// For LocalSize, the index argument is used to select the dimension (X = 0, Y = 1, Z = 2).
|
||||
// For LocalSize or LocalSizeId, the index argument is used to select the dimension (X = 0, Y = 1, Z = 2).
|
||||
// For execution modes which do not have arguments, 0 is returned.
|
||||
// LocalSizeId query returns an ID. If LocalSizeId execution mode is not used, it returns 0.
|
||||
// LocalSize always returns a literal. If execution mode is LocalSizeId,
|
||||
// the literal (spec constant or not) is still returned.
|
||||
uint32_t get_execution_mode_argument(spv::ExecutionMode mode, uint32_t index = 0) const;
|
||||
spv::ExecutionModel get_execution_model() const;
|
||||
|
||||
@ -380,6 +383,8 @@ public:
|
||||
// If the component is not a specialization constant, a zeroed out struct will be written.
|
||||
// The return value is the constant ID of the builtin WorkGroupSize, but this is not expected to be useful
|
||||
// for most use cases.
|
||||
// If LocalSizeId is used, there is no uvec3 value representing the workgroup size, so the return value is 0,
|
||||
// but x, y and z are written as normal if the components are specialization constants.
|
||||
uint32_t get_work_group_size_specialization_constants(SpecializationConstant &x, SpecializationConstant &y,
|
||||
SpecializationConstant &z) const;
|
||||
|
||||
|
103
3rdparty/spirv-cross/spirv_glsl.cpp
vendored
103
3rdparty/spirv-cross/spirv_glsl.cpp
vendored
@ -637,6 +637,7 @@ string CompilerGLSL::compile()
|
||||
backend.force_gl_in_out_block = true;
|
||||
backend.supports_extensions = true;
|
||||
backend.use_array_constructor = true;
|
||||
backend.workgroup_size_is_hidden = true;
|
||||
|
||||
backend.support_precise_qualifier = (!options.es && options.version >= 400) || (options.es && options.version >= 320);
|
||||
|
||||
@ -707,6 +708,8 @@ void CompilerGLSL::build_workgroup_size(SmallVector<string> &arguments, const Sp
|
||||
const SpecializationConstant &wg_y, const SpecializationConstant &wg_z)
|
||||
{
|
||||
auto &execution = get_entry_point();
|
||||
bool builtin_workgroup = execution.workgroup_size.constant != 0;
|
||||
bool use_local_size_id = !builtin_workgroup && execution.flags.get(ExecutionModeLocalSizeId);
|
||||
|
||||
if (wg_x.id)
|
||||
{
|
||||
@ -715,6 +718,8 @@ void CompilerGLSL::build_workgroup_size(SmallVector<string> &arguments, const Sp
|
||||
else
|
||||
arguments.push_back(join("local_size_x = ", get<SPIRConstant>(wg_x.id).specialization_constant_macro_name));
|
||||
}
|
||||
else if (use_local_size_id && execution.workgroup_size.id_x)
|
||||
arguments.push_back(join("local_size_x = ", get<SPIRConstant>(execution.workgroup_size.id_x).scalar()));
|
||||
else
|
||||
arguments.push_back(join("local_size_x = ", execution.workgroup_size.x));
|
||||
|
||||
@ -725,6 +730,8 @@ void CompilerGLSL::build_workgroup_size(SmallVector<string> &arguments, const Sp
|
||||
else
|
||||
arguments.push_back(join("local_size_y = ", get<SPIRConstant>(wg_y.id).specialization_constant_macro_name));
|
||||
}
|
||||
else if (use_local_size_id && execution.workgroup_size.id_y)
|
||||
arguments.push_back(join("local_size_y = ", get<SPIRConstant>(execution.workgroup_size.id_y).scalar()));
|
||||
else
|
||||
arguments.push_back(join("local_size_y = ", execution.workgroup_size.y));
|
||||
|
||||
@ -735,6 +742,8 @@ void CompilerGLSL::build_workgroup_size(SmallVector<string> &arguments, const Sp
|
||||
else
|
||||
arguments.push_back(join("local_size_z = ", get<SPIRConstant>(wg_z.id).specialization_constant_macro_name));
|
||||
}
|
||||
else if (use_local_size_id && execution.workgroup_size.id_z)
|
||||
arguments.push_back(join("local_size_z = ", get<SPIRConstant>(execution.workgroup_size.id_z).scalar()));
|
||||
else
|
||||
arguments.push_back(join("local_size_z = ", execution.workgroup_size.z));
|
||||
}
|
||||
@ -1005,7 +1014,7 @@ void CompilerGLSL::emit_header()
|
||||
|
||||
case ExecutionModelGLCompute:
|
||||
{
|
||||
if (execution.workgroup_size.constant != 0)
|
||||
if (execution.workgroup_size.constant != 0 || execution.flags.get(ExecutionModeLocalSizeId))
|
||||
{
|
||||
SpecializationConstant wg_x, wg_y, wg_z;
|
||||
get_work_group_size_specialization_constants(wg_x, wg_y, wg_z);
|
||||
@ -2673,6 +2682,26 @@ void CompilerGLSL::emit_specialization_constant_op(const SPIRConstantOp &constan
|
||||
statement("const ", variable_decl(type, name), " = ", constant_op_expression(constant), ";");
|
||||
}
|
||||
|
||||
int CompilerGLSL::get_constant_mapping_to_workgroup_component(const SPIRConstant &c) const
|
||||
{
|
||||
auto &entry_point = get_entry_point();
|
||||
int index = -1;
|
||||
|
||||
// Need to redirect specialization constants which are used as WorkGroupSize to the builtin,
|
||||
// since the spec constant declarations are never explicitly declared.
|
||||
if (entry_point.workgroup_size.constant == 0 && entry_point.flags.get(ExecutionModeLocalSizeId))
|
||||
{
|
||||
if (c.self == entry_point.workgroup_size.id_x)
|
||||
index = 0;
|
||||
else if (c.self == entry_point.workgroup_size.id_y)
|
||||
index = 1;
|
||||
else if (c.self == entry_point.workgroup_size.id_z)
|
||||
index = 2;
|
||||
}
|
||||
|
||||
return index;
|
||||
}
|
||||
|
||||
void CompilerGLSL::emit_constant(const SPIRConstant &constant)
|
||||
{
|
||||
auto &type = get<SPIRType>(constant.constant_type);
|
||||
@ -3441,7 +3470,7 @@ void CompilerGLSL::emit_resources()
|
||||
// If the work group size depends on a specialization constant, we need to declare the layout() block
|
||||
// after constants (and their macros) have been declared.
|
||||
if (execution.model == ExecutionModelGLCompute && !options.vulkan_semantics &&
|
||||
execution.workgroup_size.constant != 0)
|
||||
(execution.workgroup_size.constant != 0 || execution.flags.get(ExecutionModeLocalSizeId)))
|
||||
{
|
||||
SpecializationConstant wg_x, wg_y, wg_z;
|
||||
get_work_group_size_specialization_constants(wg_x, wg_y, wg_z);
|
||||
@ -4620,11 +4649,24 @@ string CompilerGLSL::to_expression(uint32_t id, bool register_expression_read)
|
||||
auto &type = get<SPIRType>(c.constant_type);
|
||||
|
||||
// WorkGroupSize may be a constant.
|
||||
auto &dec = ir.meta[c.self].decoration;
|
||||
if (dec.builtin)
|
||||
return builtin_to_glsl(dec.builtin_type, StorageClassGeneric);
|
||||
if (has_decoration(c.self, DecorationBuiltIn))
|
||||
return builtin_to_glsl(BuiltIn(get_decoration(c.self, DecorationBuiltIn)), StorageClassGeneric);
|
||||
else if (c.specialization)
|
||||
{
|
||||
if (backend.workgroup_size_is_hidden)
|
||||
{
|
||||
int wg_index = get_constant_mapping_to_workgroup_component(c);
|
||||
if (wg_index >= 0)
|
||||
{
|
||||
auto wg_size = join(builtin_to_glsl(BuiltInWorkgroupSize, StorageClassInput), vector_swizzle(1, wg_index));
|
||||
if (type.basetype != SPIRType::UInt)
|
||||
wg_size = bitcast_expression(type, SPIRType::UInt, wg_size);
|
||||
return wg_size;
|
||||
}
|
||||
}
|
||||
|
||||
return to_name(id);
|
||||
}
|
||||
else if (c.is_used_as_lut)
|
||||
return to_name(id);
|
||||
else if (type.basetype == SPIRType::Struct && !backend.can_declare_struct_inline)
|
||||
@ -5266,7 +5308,7 @@ string CompilerGLSL::constant_expression_vector(const SPIRConstant &c, uint32_t
|
||||
for (uint32_t i = 0; i < c.vector_size(); i++)
|
||||
{
|
||||
if (c.vector_size() > 1 && c.specialization_constant_id(vector, i) != 0)
|
||||
res += to_name(c.specialization_constant_id(vector, i));
|
||||
res += to_expression(c.specialization_constant_id(vector, i));
|
||||
else
|
||||
res += convert_half_to_string(c, vector, i);
|
||||
|
||||
@ -5288,7 +5330,7 @@ string CompilerGLSL::constant_expression_vector(const SPIRConstant &c, uint32_t
|
||||
for (uint32_t i = 0; i < c.vector_size(); i++)
|
||||
{
|
||||
if (c.vector_size() > 1 && c.specialization_constant_id(vector, i) != 0)
|
||||
res += to_name(c.specialization_constant_id(vector, i));
|
||||
res += to_expression(c.specialization_constant_id(vector, i));
|
||||
else
|
||||
res += convert_float_to_string(c, vector, i);
|
||||
|
||||
@ -5310,7 +5352,7 @@ string CompilerGLSL::constant_expression_vector(const SPIRConstant &c, uint32_t
|
||||
for (uint32_t i = 0; i < c.vector_size(); i++)
|
||||
{
|
||||
if (c.vector_size() > 1 && c.specialization_constant_id(vector, i) != 0)
|
||||
res += to_name(c.specialization_constant_id(vector, i));
|
||||
res += to_expression(c.specialization_constant_id(vector, i));
|
||||
else
|
||||
res += convert_double_to_string(c, vector, i);
|
||||
|
||||
@ -5336,7 +5378,7 @@ string CompilerGLSL::constant_expression_vector(const SPIRConstant &c, uint32_t
|
||||
for (uint32_t i = 0; i < c.vector_size(); i++)
|
||||
{
|
||||
if (c.vector_size() > 1 && c.specialization_constant_id(vector, i) != 0)
|
||||
res += to_name(c.specialization_constant_id(vector, i));
|
||||
res += to_expression(c.specialization_constant_id(vector, i));
|
||||
else
|
||||
res += convert_to_string(c.scalar_i64(vector, i), int64_type, backend.long_long_literal_suffix);
|
||||
|
||||
@ -5361,7 +5403,7 @@ string CompilerGLSL::constant_expression_vector(const SPIRConstant &c, uint32_t
|
||||
for (uint32_t i = 0; i < c.vector_size(); i++)
|
||||
{
|
||||
if (c.vector_size() > 1 && c.specialization_constant_id(vector, i) != 0)
|
||||
res += to_name(c.specialization_constant_id(vector, i));
|
||||
res += to_expression(c.specialization_constant_id(vector, i));
|
||||
else
|
||||
{
|
||||
res += convert_to_string(c.scalar_u64(vector, i));
|
||||
@ -5396,7 +5438,7 @@ string CompilerGLSL::constant_expression_vector(const SPIRConstant &c, uint32_t
|
||||
for (uint32_t i = 0; i < c.vector_size(); i++)
|
||||
{
|
||||
if (c.vector_size() > 1 && c.specialization_constant_id(vector, i) != 0)
|
||||
res += to_name(c.specialization_constant_id(vector, i));
|
||||
res += to_expression(c.specialization_constant_id(vector, i));
|
||||
else
|
||||
{
|
||||
res += convert_to_string(c.scalar(vector, i));
|
||||
@ -5426,7 +5468,7 @@ string CompilerGLSL::constant_expression_vector(const SPIRConstant &c, uint32_t
|
||||
for (uint32_t i = 0; i < c.vector_size(); i++)
|
||||
{
|
||||
if (c.vector_size() > 1 && c.specialization_constant_id(vector, i) != 0)
|
||||
res += to_name(c.specialization_constant_id(vector, i));
|
||||
res += to_expression(c.specialization_constant_id(vector, i));
|
||||
else
|
||||
res += convert_to_string(c.scalar_i32(vector, i));
|
||||
if (i + 1 < c.vector_size())
|
||||
@ -5445,7 +5487,7 @@ string CompilerGLSL::constant_expression_vector(const SPIRConstant &c, uint32_t
|
||||
for (uint32_t i = 0; i < c.vector_size(); i++)
|
||||
{
|
||||
if (c.vector_size() > 1 && c.specialization_constant_id(vector, i) != 0)
|
||||
res += to_name(c.specialization_constant_id(vector, i));
|
||||
res += to_expression(c.specialization_constant_id(vector, i));
|
||||
else
|
||||
{
|
||||
if (*backend.uint16_t_literal_suffix)
|
||||
@ -5479,7 +5521,7 @@ string CompilerGLSL::constant_expression_vector(const SPIRConstant &c, uint32_t
|
||||
for (uint32_t i = 0; i < c.vector_size(); i++)
|
||||
{
|
||||
if (c.vector_size() > 1 && c.specialization_constant_id(vector, i) != 0)
|
||||
res += to_name(c.specialization_constant_id(vector, i));
|
||||
res += to_expression(c.specialization_constant_id(vector, i));
|
||||
else
|
||||
{
|
||||
if (*backend.int16_t_literal_suffix)
|
||||
@ -5513,7 +5555,7 @@ string CompilerGLSL::constant_expression_vector(const SPIRConstant &c, uint32_t
|
||||
for (uint32_t i = 0; i < c.vector_size(); i++)
|
||||
{
|
||||
if (c.vector_size() > 1 && c.specialization_constant_id(vector, i) != 0)
|
||||
res += to_name(c.specialization_constant_id(vector, i));
|
||||
res += to_expression(c.specialization_constant_id(vector, i));
|
||||
else
|
||||
{
|
||||
res += type_to_glsl(scalar_type);
|
||||
@ -5538,7 +5580,7 @@ string CompilerGLSL::constant_expression_vector(const SPIRConstant &c, uint32_t
|
||||
for (uint32_t i = 0; i < c.vector_size(); i++)
|
||||
{
|
||||
if (c.vector_size() > 1 && c.specialization_constant_id(vector, i) != 0)
|
||||
res += to_name(c.specialization_constant_id(vector, i));
|
||||
res += to_expression(c.specialization_constant_id(vector, i));
|
||||
else
|
||||
{
|
||||
res += type_to_glsl(scalar_type);
|
||||
@ -5561,7 +5603,7 @@ string CompilerGLSL::constant_expression_vector(const SPIRConstant &c, uint32_t
|
||||
for (uint32_t i = 0; i < c.vector_size(); i++)
|
||||
{
|
||||
if (c.vector_size() > 1 && c.specialization_constant_id(vector, i) != 0)
|
||||
res += to_name(c.specialization_constant_id(vector, i));
|
||||
res += to_expression(c.specialization_constant_id(vector, i));
|
||||
else
|
||||
res += c.scalar(vector, i) ? "true" : "false";
|
||||
|
||||
@ -8894,30 +8936,37 @@ string CompilerGLSL::access_chain_internal(uint32_t base, const uint32_t *indice
|
||||
is_packed);
|
||||
}
|
||||
|
||||
if (is_literal && !is_packed && !row_major_matrix_needs_conversion)
|
||||
if (is_literal)
|
||||
{
|
||||
expr += ".";
|
||||
expr += index_to_swizzle(index);
|
||||
bool out_of_bounds = (index >= type->vecsize);
|
||||
|
||||
if (!is_packed && !row_major_matrix_needs_conversion)
|
||||
{
|
||||
expr += ".";
|
||||
expr += index_to_swizzle(out_of_bounds ? 0 : index);
|
||||
}
|
||||
else
|
||||
{
|
||||
// For packed vectors, we can only access them as an array, not by swizzle.
|
||||
expr += join("[", out_of_bounds ? 0 : index, "]");
|
||||
}
|
||||
}
|
||||
else if (ir.ids[index].get_type() == TypeConstant && !is_packed && !row_major_matrix_needs_conversion)
|
||||
{
|
||||
auto &c = get<SPIRConstant>(index);
|
||||
bool out_of_bounds = (c.scalar() >= type->vecsize);
|
||||
|
||||
if (c.specialization)
|
||||
{
|
||||
// If the index is a spec constant, we cannot turn extract into a swizzle.
|
||||
expr += join("[", to_expression(index), "]");
|
||||
expr += join("[", out_of_bounds ? "0" : to_expression(index), "]");
|
||||
}
|
||||
else
|
||||
{
|
||||
expr += ".";
|
||||
expr += index_to_swizzle(c.scalar());
|
||||
expr += index_to_swizzle(out_of_bounds ? 0 : c.scalar());
|
||||
}
|
||||
}
|
||||
else if (is_literal)
|
||||
{
|
||||
// For packed vectors, we can only access them as an array, not by swizzle.
|
||||
expr += join("[", index, "]");
|
||||
}
|
||||
else
|
||||
{
|
||||
expr += "[";
|
||||
|
2
3rdparty/spirv-cross/spirv_glsl.hpp
vendored
2
3rdparty/spirv-cross/spirv_glsl.hpp
vendored
@ -587,6 +587,7 @@ protected:
|
||||
bool support_pointer_to_pointer = false;
|
||||
bool support_precise_qualifier = false;
|
||||
bool support_64bit_switch = false;
|
||||
bool workgroup_size_is_hidden = false;
|
||||
} backend;
|
||||
|
||||
void emit_struct(SPIRType &type);
|
||||
@ -610,6 +611,7 @@ protected:
|
||||
void emit_block_chain(SPIRBlock &block);
|
||||
void emit_hoisted_temporaries(SmallVector<std::pair<TypeID, ID>> &temporaries);
|
||||
std::string constant_value_macro_name(uint32_t id);
|
||||
int get_constant_mapping_to_workgroup_component(const SPIRConstant &constant) const;
|
||||
void emit_constant(const SPIRConstant &constant);
|
||||
void emit_specialization_constant_op(const SPIRConstantOp &constant);
|
||||
std::string emit_continue_block(uint32_t continue_block, bool follow_true_block, bool follow_false_block);
|
||||
|
30
3rdparty/spirv-cross/spirv_hlsl.cpp
vendored
30
3rdparty/spirv-cross/spirv_hlsl.cpp
vendored
@ -1215,14 +1215,20 @@ void CompilerHLSL::emit_specialization_constants_and_structs()
|
||||
auto &type = get<SPIRType>(c.constant_type);
|
||||
auto name = to_name(c.self);
|
||||
|
||||
// HLSL does not support specialization constants, so fallback to macros.
|
||||
c.specialization_constant_macro_name =
|
||||
constant_value_macro_name(get_decoration(c.self, DecorationSpecId));
|
||||
if (has_decoration(c.self, DecorationSpecId))
|
||||
{
|
||||
// HLSL does not support specialization constants, so fallback to macros.
|
||||
c.specialization_constant_macro_name =
|
||||
constant_value_macro_name(get_decoration(c.self, DecorationSpecId));
|
||||
|
||||
statement("#ifndef ", c.specialization_constant_macro_name);
|
||||
statement("#define ", c.specialization_constant_macro_name, " ", constant_expression(c));
|
||||
statement("#endif");
|
||||
statement("static const ", variable_decl(type, name), " = ", c.specialization_constant_macro_name, ";");
|
||||
}
|
||||
else
|
||||
statement("static const ", variable_decl(type, name), " = ", constant_expression(c), ";");
|
||||
|
||||
statement("#ifndef ", c.specialization_constant_macro_name);
|
||||
statement("#define ", c.specialization_constant_macro_name, " ", constant_expression(c));
|
||||
statement("#endif");
|
||||
statement("static const ", variable_decl(type, name), " = ", c.specialization_constant_macro_name, ";");
|
||||
emitted = true;
|
||||
}
|
||||
}
|
||||
@ -2431,6 +2437,16 @@ void CompilerHLSL::emit_hlsl_entry_point()
|
||||
uint32_t y = execution.workgroup_size.y;
|
||||
uint32_t z = execution.workgroup_size.z;
|
||||
|
||||
if (!execution.workgroup_size.constant && execution.flags.get(ExecutionModeLocalSizeId))
|
||||
{
|
||||
if (execution.workgroup_size.id_x)
|
||||
x = get<SPIRConstant>(execution.workgroup_size.id_x).scalar();
|
||||
if (execution.workgroup_size.id_y)
|
||||
y = get<SPIRConstant>(execution.workgroup_size.id_y).scalar();
|
||||
if (execution.workgroup_size.id_z)
|
||||
z = get<SPIRConstant>(execution.workgroup_size.id_z).scalar();
|
||||
}
|
||||
|
||||
auto x_expr = wg_x.id ? get<SPIRConstant>(wg_x.id).specialization_constant_macro_name : to_string(x);
|
||||
auto y_expr = wg_y.id ? get<SPIRConstant>(wg_y.id).specialization_constant_macro_name : to_string(y);
|
||||
auto z_expr = wg_z.id ? get<SPIRConstant>(wg_z.id).specialization_constant_macro_name : to_string(z);
|
||||
|
29
3rdparty/spirv-cross/spirv_msl.cpp
vendored
29
3rdparty/spirv-cross/spirv_msl.cpp
vendored
@ -8671,7 +8671,7 @@ void CompilerMSL::emit_array_copy(const string &lhs, uint32_t lhs_id, uint32_t r
|
||||
{
|
||||
is_constant = true;
|
||||
}
|
||||
else if (rhs_storage == StorageClassUniform)
|
||||
else if (rhs_storage == StorageClassUniform || rhs_storage == StorageClassUniformConstant)
|
||||
{
|
||||
is_constant = true;
|
||||
}
|
||||
@ -11449,7 +11449,13 @@ void CompilerMSL::entry_point_args_builtin(string &ep_args)
|
||||
|
||||
// Handle HLSL-style 0-based vertex/instance index.
|
||||
builtin_declaration = true;
|
||||
ep_args += builtin_type_decl(bi_type, var_id) + " " + to_expression(var_id);
|
||||
|
||||
// Handle different MSL gl_TessCoord types. (float2, float3)
|
||||
if (bi_type == BuiltInTessCoord && get_entry_point().flags.get(ExecutionModeQuads))
|
||||
ep_args += "float2 " + to_expression(var_id) + "In";
|
||||
else
|
||||
ep_args += builtin_type_decl(bi_type, var_id) + " " + to_expression(var_id);
|
||||
|
||||
ep_args += " [[" + builtin_qualifier(bi_type);
|
||||
if (bi_type == BuiltInSampleMask && get_entry_point().flags.get(ExecutionModePostDepthCoverage))
|
||||
{
|
||||
@ -12081,6 +12087,16 @@ void CompilerMSL::fix_up_shader_inputs_outputs()
|
||||
});
|
||||
break;
|
||||
case BuiltInTessCoord:
|
||||
if (get_entry_point().flags.get(ExecutionModeQuads))
|
||||
{
|
||||
// The entry point will only have a float2 TessCoord variable.
|
||||
// Pad to float3.
|
||||
entry_func.fixup_hooks_in.push_back([=]() {
|
||||
auto name = builtin_to_glsl(BuiltInTessCoord, StorageClassInput);
|
||||
statement("float3 " + name + " = float3(" + name + "In.x, " + name + "In.y, 0.0);");
|
||||
});
|
||||
}
|
||||
|
||||
// Emit a fixup to account for the shifted domain. Don't do this for triangles;
|
||||
// MoltenVK will just reverse the winding order instead.
|
||||
if (msl_options.tess_domain_origin_lower_left && !get_entry_point().flags.get(ExecutionModeTriangles))
|
||||
@ -14581,7 +14597,7 @@ string CompilerMSL::builtin_type_decl(BuiltIn builtin, uint32_t id)
|
||||
|
||||
// Tess. evaluation function in
|
||||
case BuiltInTessCoord:
|
||||
return execution.flags.get(ExecutionModeTriangles) ? "float3" : "float2";
|
||||
return "float3";
|
||||
|
||||
// Fragment function in
|
||||
case BuiltInFrontFacing:
|
||||
@ -15533,13 +15549,6 @@ void CompilerMSL::cast_from_variable_load(uint32_t source_id, std::string &expr,
|
||||
expr = bitcast_expression(expr_type, expected_type, expr);
|
||||
}
|
||||
}
|
||||
|
||||
if (builtin == BuiltInTessCoord && get_entry_point().flags.get(ExecutionModeQuads) && expr_type.vecsize == 3)
|
||||
{
|
||||
// In SPIR-V, this is always a vec3, even for quads. In Metal, though, it's a float2 for quads.
|
||||
// The code is expecting a float3, so we need to widen this.
|
||||
expr = join("float3(", expr, ", 0)");
|
||||
}
|
||||
}
|
||||
|
||||
void CompilerMSL::cast_to_variable_store(uint32_t target_id, std::string &expr, const SPIRType &expr_type)
|
||||
|
17
3rdparty/spirv-cross/spirv_parser.cpp
vendored
17
3rdparty/spirv-cross/spirv_parser.cpp
vendored
@ -68,6 +68,7 @@ static bool is_valid_spirv_version(uint32_t version)
|
||||
case 0x10300: // SPIR-V 1.3
|
||||
case 0x10400: // SPIR-V 1.4
|
||||
case 0x10500: // SPIR-V 1.5
|
||||
case 0x10600: // SPIR-V 1.6
|
||||
return true;
|
||||
|
||||
default:
|
||||
@ -344,6 +345,22 @@ void Parser::parse(const Instruction &instruction)
|
||||
break;
|
||||
}
|
||||
|
||||
case OpExecutionModeId:
|
||||
{
|
||||
auto &execution = ir.entry_points[ops[0]];
|
||||
auto mode = static_cast<ExecutionMode>(ops[1]);
|
||||
execution.flags.set(mode);
|
||||
|
||||
if (mode == ExecutionModeLocalSizeId)
|
||||
{
|
||||
execution.workgroup_size.id_x = ops[2];
|
||||
execution.workgroup_size.id_y = ops[3];
|
||||
execution.workgroup_size.id_z = ops[4];
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case OpName:
|
||||
{
|
||||
uint32_t id = ops[0];
|
||||
|
Loading…
Reference in New Issue
Block a user