Skip to content

Instantly share code, notes, and snippets.

@devshgraphicsprogramming
Created October 27, 2023 18:05
Show Gist options
  • Save devshgraphicsprogramming/4c0bc99c508ec07205f203a989f45b7b to your computer and use it in GitHub Desktop.
Save devshgraphicsprogramming/4c0bc99c508ec07205f203a989f45b7b to your computer and use it in GitHub Desktop.
Is this HLSL?
# 0 "/app/example.cpp"
# 1 "/app//"
# 0 "<built-in>"
# 0 "<command-line>"
# 1 "/opt/compiler-explorer/arm64/gcc-trunk-20231027/aarch64-unknown-linux-gnu/aarch64-unknown-linux-gnu/sysroot/usr/include/stdc-predef.h" 1 3 4
# 0 "<command-line>" 2
# 1 "/app/example.cpp"
# 1 "/app/example.cpp"
# 1 "D:\\work\\Nabla\\examples_tests\\48.ArithmeticUnitTest\\hlsl\\shaderCommon.hlsl"
# 1 "D:\\work\\Nabla\\examples_tests\\48.ArithmeticUnitTest\\hlsl\\common.hlsl"
# 1 "nbl/builtin/hlsl/cpp_compat.hlsl"
# 1 "nbl/builtin/hlsl/macros.h"
# 19 "nbl/builtin/hlsl/cpp_compat.hlsl"
# 269 "nbl/builtin/hlsl/cpp_compat.hlsl"
namespace nbl
{
namespace hlsl
{
# 287 "nbl/builtin/hlsl/cpp_compat.hlsl"
}
}
# 16 "D:\\work\\Nabla\\examples_tests\\48.ArithmeticUnitTest\\hlsl\\common.hlsl"
# 1 "nbl/builtin/hlsl/functional.hlsl"
# 1 "nbl/builtin/hlsl/bit.hlsl"
# 1 "nbl/builtin/hlsl/cpp_compat.hlsl"
# 20 "nbl/builtin/hlsl/bit.hlsl"
# 1 "nbl/builtin/hlsl/spirv_intrinsics/core.hlsl"
# 1 "spirv/unified1/spirv.hpp"
# 50 "spirv/unified1/spirv.hpp"
namespace spv {
typedef unsigned int Id;
static const unsigned int MagicNumber = 0x07230203;
static const unsigned int Version = 0x00010600;
static const unsigned int Revision = 1;
static const unsigned int OpCodeMask = 0xffff;
static const unsigned int WordCountShift = 16;
enum SourceLanguage {
SourceLanguageUnknown = 0,
SourceLanguageESSL = 1,
SourceLanguageGLSL = 2,
SourceLanguageOpenCL_C = 3,
SourceLanguageOpenCL_CPP = 4,
SourceLanguageHLSL = 5,
SourceLanguageCPP_for_OpenCL = 6,
SourceLanguageSYCL = 7,
SourceLanguageHERO_C = 8,
SourceLanguageNZSL = 9,
SourceLanguageWGSL = 10,
SourceLanguageSlang = 11,
SourceLanguageMax = 0x7fffffff,
};
enum ExecutionModel {
ExecutionModelVertex = 0,
ExecutionModelTessellationControl = 1,
ExecutionModelTessellationEvaluation = 2,
ExecutionModelGeometry = 3,
ExecutionModelFragment = 4,
ExecutionModelGLCompute = 5,
ExecutionModelKernel = 6,
ExecutionModelTaskNV = 5267,
ExecutionModelMeshNV = 5268,
ExecutionModelRayGenerationKHR = 5313,
ExecutionModelRayGenerationNV = 5313,
ExecutionModelIntersectionKHR = 5314,
ExecutionModelIntersectionNV = 5314,
ExecutionModelAnyHitKHR = 5315,
ExecutionModelAnyHitNV = 5315,
ExecutionModelClosestHitKHR = 5316,
ExecutionModelClosestHitNV = 5316,
ExecutionModelMissKHR = 5317,
ExecutionModelMissNV = 5317,
ExecutionModelCallableKHR = 5318,
ExecutionModelCallableNV = 5318,
ExecutionModelTaskEXT = 5364,
ExecutionModelMeshEXT = 5365,
ExecutionModelMax = 0x7fffffff,
};
enum AddressingModel {
AddressingModelLogical = 0,
AddressingModelPhysical32 = 1,
AddressingModelPhysical64 = 2,
AddressingModelPhysicalStorageBuffer64 = 5348,
AddressingModelPhysicalStorageBuffer64EXT = 5348,
AddressingModelMax = 0x7fffffff,
};
enum MemoryModel {
MemoryModelSimple = 0,
MemoryModelGLSL450 = 1,
MemoryModelOpenCL = 2,
MemoryModelVulkan = 3,
MemoryModelVulkanKHR = 3,
MemoryModelMax = 0x7fffffff,
};
enum ExecutionMode {
ExecutionModeInvocations = 0,
ExecutionModeSpacingEqual = 1,
ExecutionModeSpacingFractionalEven = 2,
ExecutionModeSpacingFractionalOdd = 3,
ExecutionModeVertexOrderCw = 4,
ExecutionModeVertexOrderCcw = 5,
ExecutionModePixelCenterInteger = 6,
ExecutionModeOriginUpperLeft = 7,
ExecutionModeOriginLowerLeft = 8,
ExecutionModeEarlyFragmentTests = 9,
ExecutionModePointMode = 10,
ExecutionModeXfb = 11,
ExecutionModeDepthReplacing = 12,
ExecutionModeDepthGreater = 14,
ExecutionModeDepthLess = 15,
ExecutionModeDepthUnchanged = 16,
ExecutionModeLocalSize = 17,
ExecutionModeLocalSizeHint = 18,
ExecutionModeInputPoints = 19,
ExecutionModeInputLines = 20,
ExecutionModeInputLinesAdjacency = 21,
ExecutionModeTriangles = 22,
ExecutionModeInputTrianglesAdjacency = 23,
ExecutionModeQuads = 24,
ExecutionModeIsolines = 25,
ExecutionModeOutputVertices = 26,
ExecutionModeOutputPoints = 27,
ExecutionModeOutputLineStrip = 28,
ExecutionModeOutputTriangleStrip = 29,
ExecutionModeVecTypeHint = 30,
ExecutionModeContractionOff = 31,
ExecutionModeInitializer = 33,
ExecutionModeFinalizer = 34,
ExecutionModeSubgroupSize = 35,
ExecutionModeSubgroupsPerWorkgroup = 36,
ExecutionModeSubgroupsPerWorkgroupId = 37,
ExecutionModeLocalSizeId = 38,
ExecutionModeLocalSizeHintId = 39,
ExecutionModeNonCoherentColorAttachmentReadEXT = 4169,
ExecutionModeNonCoherentDepthAttachmentReadEXT = 4170,
ExecutionModeNonCoherentStencilAttachmentReadEXT = 4171,
ExecutionModeSubgroupUniformControlFlowKHR = 4421,
ExecutionModePostDepthCoverage = 4446,
ExecutionModeDenormPreserve = 4459,
ExecutionModeDenormFlushToZero = 4460,
ExecutionModeSignedZeroInfNanPreserve = 4461,
ExecutionModeRoundingModeRTE = 4462,
ExecutionModeRoundingModeRTZ = 4463,
ExecutionModeEarlyAndLateFragmentTestsAMD = 5017,
ExecutionModeStencilRefReplacingEXT = 5027,
ExecutionModeCoalescingAMDX = 5069,
ExecutionModeMaxNodeRecursionAMDX = 5071,
ExecutionModeStaticNumWorkgroupsAMDX = 5072,
ExecutionModeShaderIndexAMDX = 5073,
ExecutionModeMaxNumWorkgroupsAMDX = 5077,
ExecutionModeStencilRefUnchangedFrontAMD = 5079,
ExecutionModeStencilRefGreaterFrontAMD = 5080,
ExecutionModeStencilRefLessFrontAMD = 5081,
ExecutionModeStencilRefUnchangedBackAMD = 5082,
ExecutionModeStencilRefGreaterBackAMD = 5083,
ExecutionModeStencilRefLessBackAMD = 5084,
ExecutionModeOutputLinesEXT = 5269,
ExecutionModeOutputLinesNV = 5269,
ExecutionModeOutputPrimitivesEXT = 5270,
ExecutionModeOutputPrimitivesNV = 5270,
ExecutionModeDerivativeGroupQuadsNV = 5289,
ExecutionModeDerivativeGroupLinearNV = 5290,
ExecutionModeOutputTrianglesEXT = 5298,
ExecutionModeOutputTrianglesNV = 5298,
ExecutionModePixelInterlockOrderedEXT = 5366,
ExecutionModePixelInterlockUnorderedEXT = 5367,
ExecutionModeSampleInterlockOrderedEXT = 5368,
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,
ExecutionModeStreamingInterfaceINTEL = 6154,
ExecutionModeRegisterMapInterfaceINTEL = 6160,
ExecutionModeNamedBarrierCountINTEL = 6417,
ExecutionModeMax = 0x7fffffff,
};
enum StorageClass {
StorageClassUniformConstant = 0,
StorageClassInput = 1,
StorageClassUniform = 2,
StorageClassOutput = 3,
StorageClassWorkgroup = 4,
StorageClassCrossWorkgroup = 5,
StorageClassPrivate = 6,
StorageClassFunction = 7,
StorageClassGeneric = 8,
StorageClassPushConstant = 9,
StorageClassAtomicCounter = 10,
StorageClassImage = 11,
StorageClassStorageBuffer = 12,
StorageClassTileImageEXT = 4172,
StorageClassNodePayloadAMDX = 5068,
StorageClassNodeOutputPayloadAMDX = 5076,
StorageClassCallableDataKHR = 5328,
StorageClassCallableDataNV = 5328,
StorageClassIncomingCallableDataKHR = 5329,
StorageClassIncomingCallableDataNV = 5329,
StorageClassRayPayloadKHR = 5338,
StorageClassRayPayloadNV = 5338,
StorageClassHitAttributeKHR = 5339,
StorageClassHitAttributeNV = 5339,
StorageClassIncomingRayPayloadKHR = 5342,
StorageClassIncomingRayPayloadNV = 5342,
StorageClassShaderRecordBufferKHR = 5343,
StorageClassShaderRecordBufferNV = 5343,
StorageClassPhysicalStorageBuffer = 5349,
StorageClassPhysicalStorageBufferEXT = 5349,
StorageClassHitObjectAttributeNV = 5385,
StorageClassTaskPayloadWorkgroupEXT = 5402,
StorageClassCodeSectionINTEL = 5605,
StorageClassDeviceOnlyINTEL = 5936,
StorageClassHostOnlyINTEL = 5937,
StorageClassMax = 0x7fffffff,
};
enum Dim {
Dim1D = 0,
Dim2D = 1,
Dim3D = 2,
DimCube = 3,
DimRect = 4,
DimBuffer = 5,
DimSubpassData = 6,
DimTileImageDataEXT = 4173,
DimMax = 0x7fffffff,
};
enum SamplerAddressingMode {
SamplerAddressingModeNone = 0,
SamplerAddressingModeClampToEdge = 1,
SamplerAddressingModeClamp = 2,
SamplerAddressingModeRepeat = 3,
SamplerAddressingModeRepeatMirrored = 4,
SamplerAddressingModeMax = 0x7fffffff,
};
enum SamplerFilterMode {
SamplerFilterModeNearest = 0,
SamplerFilterModeLinear = 1,
SamplerFilterModeMax = 0x7fffffff,
};
enum ImageFormat {
ImageFormatUnknown = 0,
ImageFormatRgba32f = 1,
ImageFormatRgba16f = 2,
ImageFormatR32f = 3,
ImageFormatRgba8 = 4,
ImageFormatRgba8Snorm = 5,
ImageFormatRg32f = 6,
ImageFormatRg16f = 7,
ImageFormatR11fG11fB10f = 8,
ImageFormatR16f = 9,
ImageFormatRgba16 = 10,
ImageFormatRgb10A2 = 11,
ImageFormatRg16 = 12,
ImageFormatRg8 = 13,
ImageFormatR16 = 14,
ImageFormatR8 = 15,
ImageFormatRgba16Snorm = 16,
ImageFormatRg16Snorm = 17,
ImageFormatRg8Snorm = 18,
ImageFormatR16Snorm = 19,
ImageFormatR8Snorm = 20,
ImageFormatRgba32i = 21,
ImageFormatRgba16i = 22,
ImageFormatRgba8i = 23,
ImageFormatR32i = 24,
ImageFormatRg32i = 25,
ImageFormatRg16i = 26,
ImageFormatRg8i = 27,
ImageFormatR16i = 28,
ImageFormatR8i = 29,
ImageFormatRgba32ui = 30,
ImageFormatRgba16ui = 31,
ImageFormatRgba8ui = 32,
ImageFormatR32ui = 33,
ImageFormatRgb10a2ui = 34,
ImageFormatRg32ui = 35,
ImageFormatRg16ui = 36,
ImageFormatRg8ui = 37,
ImageFormatR16ui = 38,
ImageFormatR8ui = 39,
ImageFormatR64ui = 40,
ImageFormatR64i = 41,
ImageFormatMax = 0x7fffffff,
};
enum ImageChannelOrder {
ImageChannelOrderR = 0,
ImageChannelOrderA = 1,
ImageChannelOrderRG = 2,
ImageChannelOrderRA = 3,
ImageChannelOrderRGB = 4,
ImageChannelOrderRGBA = 5,
ImageChannelOrderBGRA = 6,
ImageChannelOrderARGB = 7,
ImageChannelOrderIntensity = 8,
ImageChannelOrderLuminance = 9,
ImageChannelOrderRx = 10,
ImageChannelOrderRGx = 11,
ImageChannelOrderRGBx = 12,
ImageChannelOrderDepth = 13,
ImageChannelOrderDepthStencil = 14,
ImageChannelOrdersRGB = 15,
ImageChannelOrdersRGBx = 16,
ImageChannelOrdersRGBA = 17,
ImageChannelOrdersBGRA = 18,
ImageChannelOrderABGR = 19,
ImageChannelOrderMax = 0x7fffffff,
};
enum ImageChannelDataType {
ImageChannelDataTypeSnormInt8 = 0,
ImageChannelDataTypeSnormInt16 = 1,
ImageChannelDataTypeUnormInt8 = 2,
ImageChannelDataTypeUnormInt16 = 3,
ImageChannelDataTypeUnormShort565 = 4,
ImageChannelDataTypeUnormShort555 = 5,
ImageChannelDataTypeUnormInt101010 = 6,
ImageChannelDataTypeSignedInt8 = 7,
ImageChannelDataTypeSignedInt16 = 8,
ImageChannelDataTypeSignedInt32 = 9,
ImageChannelDataTypeUnsignedInt8 = 10,
ImageChannelDataTypeUnsignedInt16 = 11,
ImageChannelDataTypeUnsignedInt32 = 12,
ImageChannelDataTypeHalfFloat = 13,
ImageChannelDataTypeFloat = 14,
ImageChannelDataTypeUnormInt24 = 15,
ImageChannelDataTypeUnormInt101010_2 = 16,
ImageChannelDataTypeUnsignedIntRaw10EXT = 19,
ImageChannelDataTypeUnsignedIntRaw12EXT = 20,
ImageChannelDataTypeMax = 0x7fffffff,
};
enum ImageOperandsShift {
ImageOperandsBiasShift = 0,
ImageOperandsLodShift = 1,
ImageOperandsGradShift = 2,
ImageOperandsConstOffsetShift = 3,
ImageOperandsOffsetShift = 4,
ImageOperandsConstOffsetsShift = 5,
ImageOperandsSampleShift = 6,
ImageOperandsMinLodShift = 7,
ImageOperandsMakeTexelAvailableShift = 8,
ImageOperandsMakeTexelAvailableKHRShift = 8,
ImageOperandsMakeTexelVisibleShift = 9,
ImageOperandsMakeTexelVisibleKHRShift = 9,
ImageOperandsNonPrivateTexelShift = 10,
ImageOperandsNonPrivateTexelKHRShift = 10,
ImageOperandsVolatileTexelShift = 11,
ImageOperandsVolatileTexelKHRShift = 11,
ImageOperandsSignExtendShift = 12,
ImageOperandsZeroExtendShift = 13,
ImageOperandsNontemporalShift = 14,
ImageOperandsOffsetsShift = 16,
ImageOperandsMax = 0x7fffffff,
};
enum ImageOperandsMask {
ImageOperandsMaskNone = 0,
ImageOperandsBiasMask = 0x00000001,
ImageOperandsLodMask = 0x00000002,
ImageOperandsGradMask = 0x00000004,
ImageOperandsConstOffsetMask = 0x00000008,
ImageOperandsOffsetMask = 0x00000010,
ImageOperandsConstOffsetsMask = 0x00000020,
ImageOperandsSampleMask = 0x00000040,
ImageOperandsMinLodMask = 0x00000080,
ImageOperandsMakeTexelAvailableMask = 0x00000100,
ImageOperandsMakeTexelAvailableKHRMask = 0x00000100,
ImageOperandsMakeTexelVisibleMask = 0x00000200,
ImageOperandsMakeTexelVisibleKHRMask = 0x00000200,
ImageOperandsNonPrivateTexelMask = 0x00000400,
ImageOperandsNonPrivateTexelKHRMask = 0x00000400,
ImageOperandsVolatileTexelMask = 0x00000800,
ImageOperandsVolatileTexelKHRMask = 0x00000800,
ImageOperandsSignExtendMask = 0x00001000,
ImageOperandsZeroExtendMask = 0x00002000,
ImageOperandsNontemporalMask = 0x00004000,
ImageOperandsOffsetsMask = 0x00010000,
};
enum FPFastMathModeShift {
FPFastMathModeNotNaNShift = 0,
FPFastMathModeNotInfShift = 1,
FPFastMathModeNSZShift = 2,
FPFastMathModeAllowRecipShift = 3,
FPFastMathModeFastShift = 4,
FPFastMathModeAllowContractFastINTELShift = 16,
FPFastMathModeAllowReassocINTELShift = 17,
FPFastMathModeMax = 0x7fffffff,
};
enum FPFastMathModeMask {
FPFastMathModeMaskNone = 0,
FPFastMathModeNotNaNMask = 0x00000001,
FPFastMathModeNotInfMask = 0x00000002,
FPFastMathModeNSZMask = 0x00000004,
FPFastMathModeAllowRecipMask = 0x00000008,
FPFastMathModeFastMask = 0x00000010,
FPFastMathModeAllowContractFastINTELMask = 0x00010000,
FPFastMathModeAllowReassocINTELMask = 0x00020000,
};
enum FPRoundingMode {
FPRoundingModeRTE = 0,
FPRoundingModeRTZ = 1,
FPRoundingModeRTP = 2,
FPRoundingModeRTN = 3,
FPRoundingModeMax = 0x7fffffff,
};
enum LinkageType {
LinkageTypeExport = 0,
LinkageTypeImport = 1,
LinkageTypeLinkOnceODR = 2,
LinkageTypeMax = 0x7fffffff,
};
enum AccessQualifier {
AccessQualifierReadOnly = 0,
AccessQualifierWriteOnly = 1,
AccessQualifierReadWrite = 2,
AccessQualifierMax = 0x7fffffff,
};
enum FunctionParameterAttribute {
FunctionParameterAttributeZext = 0,
FunctionParameterAttributeSext = 1,
FunctionParameterAttributeByVal = 2,
FunctionParameterAttributeSret = 3,
FunctionParameterAttributeNoAlias = 4,
FunctionParameterAttributeNoCapture = 5,
FunctionParameterAttributeNoWrite = 6,
FunctionParameterAttributeNoReadWrite = 7,
FunctionParameterAttributeRuntimeAlignedINTEL = 5940,
FunctionParameterAttributeMax = 0x7fffffff,
};
enum Decoration {
DecorationRelaxedPrecision = 0,
DecorationSpecId = 1,
DecorationBlock = 2,
DecorationBufferBlock = 3,
DecorationRowMajor = 4,
DecorationColMajor = 5,
DecorationArrayStride = 6,
DecorationMatrixStride = 7,
DecorationGLSLShared = 8,
DecorationGLSLPacked = 9,
DecorationCPacked = 10,
DecorationBuiltIn = 11,
DecorationNoPerspective = 13,
DecorationFlat = 14,
DecorationPatch = 15,
DecorationCentroid = 16,
DecorationSample = 17,
DecorationInvariant = 18,
DecorationRestrict = 19,
DecorationAliased = 20,
DecorationVolatile = 21,
DecorationConstant = 22,
DecorationCoherent = 23,
DecorationNonWritable = 24,
DecorationNonReadable = 25,
DecorationUniform = 26,
DecorationUniformId = 27,
DecorationSaturatedConversion = 28,
DecorationStream = 29,
DecorationLocation = 30,
DecorationComponent = 31,
DecorationIndex = 32,
DecorationBinding = 33,
DecorationDescriptorSet = 34,
DecorationOffset = 35,
DecorationXfbBuffer = 36,
DecorationXfbStride = 37,
DecorationFuncParamAttr = 38,
DecorationFPRoundingMode = 39,
DecorationFPFastMathMode = 40,
DecorationLinkageAttributes = 41,
DecorationNoContraction = 42,
DecorationInputAttachmentIndex = 43,
DecorationAlignment = 44,
DecorationMaxByteOffset = 45,
DecorationAlignmentId = 46,
DecorationMaxByteOffsetId = 47,
DecorationNoSignedWrap = 4469,
DecorationNoUnsignedWrap = 4470,
DecorationWeightTextureQCOM = 4487,
DecorationBlockMatchTextureQCOM = 4488,
DecorationExplicitInterpAMD = 4999,
DecorationNodeSharesPayloadLimitsWithAMDX = 5019,
DecorationNodeMaxPayloadsAMDX = 5020,
DecorationTrackFinishWritingAMDX = 5078,
DecorationPayloadNodeNameAMDX = 5091,
DecorationOverrideCoverageNV = 5248,
DecorationPassthroughNV = 5250,
DecorationViewportRelativeNV = 5252,
DecorationSecondaryViewportRelativeNV = 5256,
DecorationPerPrimitiveEXT = 5271,
DecorationPerPrimitiveNV = 5271,
DecorationPerViewNV = 5272,
DecorationPerTaskNV = 5273,
DecorationPerVertexKHR = 5285,
DecorationPerVertexNV = 5285,
DecorationNonUniform = 5300,
DecorationNonUniformEXT = 5300,
DecorationRestrictPointer = 5355,
DecorationRestrictPointerEXT = 5355,
DecorationAliasedPointer = 5356,
DecorationAliasedPointerEXT = 5356,
DecorationHitObjectShaderRecordBufferNV = 5386,
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,
DecorationBankwidthINTEL = 5828,
DecorationMaxPrivateCopiesINTEL = 5829,
DecorationSinglepumpINTEL = 5830,
DecorationDoublepumpINTEL = 5831,
DecorationMaxReplicatesINTEL = 5832,
DecorationSimpleDualPortINTEL = 5833,
DecorationMergeINTEL = 5834,
DecorationBankBitsINTEL = 5835,
DecorationForcePow2DepthINTEL = 5836,
DecorationStridesizeINTEL = 5883,
DecorationWordsizeINTEL = 5884,
DecorationTrueDualPortINTEL = 5885,
DecorationBurstCoalesceINTEL = 5899,
DecorationCacheSizeINTEL = 5900,
DecorationDontStaticallyCoalesceINTEL = 5901,
DecorationPrefetchINTEL = 5902,
DecorationStallEnableINTEL = 5905,
DecorationFuseLoopsInFunctionINTEL = 5907,
DecorationMathOpDSPModeINTEL = 5909,
DecorationAliasScopeINTEL = 5914,
DecorationNoAliasINTEL = 5915,
DecorationInitiationIntervalINTEL = 5917,
DecorationMaxConcurrencyINTEL = 5918,
DecorationPipelineEnableINTEL = 5919,
DecorationBufferLocationINTEL = 5921,
DecorationIOPipeStorageINTEL = 5944,
DecorationFunctionFloatingPointModeINTEL = 6080,
DecorationSingleElementVectorINTEL = 6085,
DecorationVectorComputeCallableFunctionINTEL = 6087,
DecorationMediaBlockIOINTEL = 6140,
DecorationInitModeINTEL = 6147,
DecorationImplementInRegisterMapINTEL = 6148,
DecorationHostAccessINTEL = 6168,
DecorationFPMaxErrorDecorationINTEL = 6170,
DecorationLatencyControlLabelINTEL = 6172,
DecorationLatencyControlConstraintINTEL = 6173,
DecorationConduitKernelArgumentINTEL = 6175,
DecorationRegisterMapKernelArgumentINTEL = 6176,
DecorationMMHostInterfaceAddressWidthINTEL = 6177,
DecorationMMHostInterfaceDataWidthINTEL = 6178,
DecorationMMHostInterfaceLatencyINTEL = 6179,
DecorationMMHostInterfaceReadWriteModeINTEL = 6180,
DecorationMMHostInterfaceMaxBurstINTEL = 6181,
DecorationMMHostInterfaceWaitRequestINTEL = 6182,
DecorationStableKernelArgumentINTEL = 6183,
DecorationCacheControlLoadINTEL = 6442,
DecorationCacheControlStoreINTEL = 6443,
DecorationMax = 0x7fffffff,
};
enum BuiltIn {
BuiltInPosition = 0,
BuiltInPointSize = 1,
BuiltInClipDistance = 3,
BuiltInCullDistance = 4,
BuiltInVertexId = 5,
BuiltInInstanceId = 6,
BuiltInPrimitiveId = 7,
BuiltInInvocationId = 8,
BuiltInLayer = 9,
BuiltInViewportIndex = 10,
BuiltInTessLevelOuter = 11,
BuiltInTessLevelInner = 12,
BuiltInTessCoord = 13,
BuiltInPatchVertices = 14,
BuiltInFragCoord = 15,
BuiltInPointCoord = 16,
BuiltInFrontFacing = 17,
BuiltInSampleId = 18,
BuiltInSamplePosition = 19,
BuiltInSampleMask = 20,
BuiltInFragDepth = 22,
BuiltInHelperInvocation = 23,
BuiltInNumWorkgroups = 24,
BuiltInWorkgroupSize = 25,
BuiltInWorkgroupId = 26,
BuiltInLocalInvocationId = 27,
BuiltInGlobalInvocationId = 28,
BuiltInLocalInvocationIndex = 29,
BuiltInWorkDim = 30,
BuiltInGlobalSize = 31,
BuiltInEnqueuedWorkgroupSize = 32,
BuiltInGlobalOffset = 33,
BuiltInGlobalLinearId = 34,
BuiltInSubgroupSize = 36,
BuiltInSubgroupMaxSize = 37,
BuiltInNumSubgroups = 38,
BuiltInNumEnqueuedSubgroups = 39,
BuiltInSubgroupId = 40,
BuiltInSubgroupLocalInvocationId = 41,
BuiltInVertexIndex = 42,
BuiltInInstanceIndex = 43,
BuiltInCoreIDARM = 4160,
BuiltInCoreCountARM = 4161,
BuiltInCoreMaxIDARM = 4162,
BuiltInWarpIDARM = 4163,
BuiltInWarpMaxIDARM = 4164,
BuiltInSubgroupEqMask = 4416,
BuiltInSubgroupEqMaskKHR = 4416,
BuiltInSubgroupGeMask = 4417,
BuiltInSubgroupGeMaskKHR = 4417,
BuiltInSubgroupGtMask = 4418,
BuiltInSubgroupGtMaskKHR = 4418,
BuiltInSubgroupLeMask = 4419,
BuiltInSubgroupLeMaskKHR = 4419,
BuiltInSubgroupLtMask = 4420,
BuiltInSubgroupLtMaskKHR = 4420,
BuiltInBaseVertex = 4424,
BuiltInBaseInstance = 4425,
BuiltInDrawIndex = 4426,
BuiltInPrimitiveShadingRateKHR = 4432,
BuiltInDeviceIndex = 4438,
BuiltInViewIndex = 4440,
BuiltInShadingRateKHR = 4444,
BuiltInBaryCoordNoPerspAMD = 4992,
BuiltInBaryCoordNoPerspCentroidAMD = 4993,
BuiltInBaryCoordNoPerspSampleAMD = 4994,
BuiltInBaryCoordSmoothAMD = 4995,
BuiltInBaryCoordSmoothCentroidAMD = 4996,
BuiltInBaryCoordSmoothSampleAMD = 4997,
BuiltInBaryCoordPullModelAMD = 4998,
BuiltInFragStencilRefEXT = 5014,
BuiltInCoalescedInputCountAMDX = 5021,
BuiltInShaderIndexAMDX = 5073,
BuiltInViewportMaskNV = 5253,
BuiltInSecondaryPositionNV = 5257,
BuiltInSecondaryViewportMaskNV = 5258,
BuiltInPositionPerViewNV = 5261,
BuiltInViewportMaskPerViewNV = 5262,
BuiltInFullyCoveredEXT = 5264,
BuiltInTaskCountNV = 5274,
BuiltInPrimitiveCountNV = 5275,
BuiltInPrimitiveIndicesNV = 5276,
BuiltInClipDistancePerViewNV = 5277,
BuiltInCullDistancePerViewNV = 5278,
BuiltInLayerPerViewNV = 5279,
BuiltInMeshViewCountNV = 5280,
BuiltInMeshViewIndicesNV = 5281,
BuiltInBaryCoordKHR = 5286,
BuiltInBaryCoordNV = 5286,
BuiltInBaryCoordNoPerspKHR = 5287,
BuiltInBaryCoordNoPerspNV = 5287,
BuiltInFragSizeEXT = 5292,
BuiltInFragmentSizeNV = 5292,
BuiltInFragInvocationCountEXT = 5293,
BuiltInInvocationsPerPixelNV = 5293,
BuiltInPrimitivePointIndicesEXT = 5294,
BuiltInPrimitiveLineIndicesEXT = 5295,
BuiltInPrimitiveTriangleIndicesEXT = 5296,
BuiltInCullPrimitiveEXT = 5299,
BuiltInLaunchIdKHR = 5319,
BuiltInLaunchIdNV = 5319,
BuiltInLaunchSizeKHR = 5320,
BuiltInLaunchSizeNV = 5320,
BuiltInWorldRayOriginKHR = 5321,
BuiltInWorldRayOriginNV = 5321,
BuiltInWorldRayDirectionKHR = 5322,
BuiltInWorldRayDirectionNV = 5322,
BuiltInObjectRayOriginKHR = 5323,
BuiltInObjectRayOriginNV = 5323,
BuiltInObjectRayDirectionKHR = 5324,
BuiltInObjectRayDirectionNV = 5324,
BuiltInRayTminKHR = 5325,
BuiltInRayTminNV = 5325,
BuiltInRayTmaxKHR = 5326,
BuiltInRayTmaxNV = 5326,
BuiltInInstanceCustomIndexKHR = 5327,
BuiltInInstanceCustomIndexNV = 5327,
BuiltInObjectToWorldKHR = 5330,
BuiltInObjectToWorldNV = 5330,
BuiltInWorldToObjectKHR = 5331,
BuiltInWorldToObjectNV = 5331,
BuiltInHitTNV = 5332,
BuiltInHitKindKHR = 5333,
BuiltInHitKindNV = 5333,
BuiltInCurrentRayTimeNV = 5334,
BuiltInHitTriangleVertexPositionsKHR = 5335,
BuiltInHitMicroTriangleVertexPositionsNV = 5337,
BuiltInHitMicroTriangleVertexBarycentricsNV = 5344,
BuiltInIncomingRayFlagsKHR = 5351,
BuiltInIncomingRayFlagsNV = 5351,
BuiltInRayGeometryIndexKHR = 5352,
BuiltInWarpsPerSMNV = 5374,
BuiltInSMCountNV = 5375,
BuiltInWarpIDNV = 5376,
BuiltInSMIDNV = 5377,
BuiltInHitKindFrontFacingMicroTriangleNV = 5405,
BuiltInHitKindBackFacingMicroTriangleNV = 5406,
BuiltInCullMaskKHR = 6021,
BuiltInMax = 0x7fffffff,
};
enum SelectionControlShift {
SelectionControlFlattenShift = 0,
SelectionControlDontFlattenShift = 1,
SelectionControlMax = 0x7fffffff,
};
enum SelectionControlMask {
SelectionControlMaskNone = 0,
SelectionControlFlattenMask = 0x00000001,
SelectionControlDontFlattenMask = 0x00000002,
};
enum LoopControlShift {
LoopControlUnrollShift = 0,
LoopControlDontUnrollShift = 1,
LoopControlDependencyInfiniteShift = 2,
LoopControlDependencyLengthShift = 3,
LoopControlMinIterationsShift = 4,
LoopControlMaxIterationsShift = 5,
LoopControlIterationMultipleShift = 6,
LoopControlPeelCountShift = 7,
LoopControlPartialCountShift = 8,
LoopControlInitiationIntervalINTELShift = 16,
LoopControlMaxConcurrencyINTELShift = 17,
LoopControlDependencyArrayINTELShift = 18,
LoopControlPipelineEnableINTELShift = 19,
LoopControlLoopCoalesceINTELShift = 20,
LoopControlMaxInterleavingINTELShift = 21,
LoopControlSpeculatedIterationsINTELShift = 22,
LoopControlNoFusionINTELShift = 23,
LoopControlLoopCountINTELShift = 24,
LoopControlMaxReinvocationDelayINTELShift = 25,
LoopControlMax = 0x7fffffff,
};
enum LoopControlMask {
LoopControlMaskNone = 0,
LoopControlUnrollMask = 0x00000001,
LoopControlDontUnrollMask = 0x00000002,
LoopControlDependencyInfiniteMask = 0x00000004,
LoopControlDependencyLengthMask = 0x00000008,
LoopControlMinIterationsMask = 0x00000010,
LoopControlMaxIterationsMask = 0x00000020,
LoopControlIterationMultipleMask = 0x00000040,
LoopControlPeelCountMask = 0x00000080,
LoopControlPartialCountMask = 0x00000100,
LoopControlInitiationIntervalINTELMask = 0x00010000,
LoopControlMaxConcurrencyINTELMask = 0x00020000,
LoopControlDependencyArrayINTELMask = 0x00040000,
LoopControlPipelineEnableINTELMask = 0x00080000,
LoopControlLoopCoalesceINTELMask = 0x00100000,
LoopControlMaxInterleavingINTELMask = 0x00200000,
LoopControlSpeculatedIterationsINTELMask = 0x00400000,
LoopControlNoFusionINTELMask = 0x00800000,
LoopControlLoopCountINTELMask = 0x01000000,
LoopControlMaxReinvocationDelayINTELMask = 0x02000000,
};
enum FunctionControlShift {
FunctionControlInlineShift = 0,
FunctionControlDontInlineShift = 1,
FunctionControlPureShift = 2,
FunctionControlConstShift = 3,
FunctionControlOptNoneINTELShift = 16,
FunctionControlMax = 0x7fffffff,
};
enum FunctionControlMask {
FunctionControlMaskNone = 0,
FunctionControlInlineMask = 0x00000001,
FunctionControlDontInlineMask = 0x00000002,
FunctionControlPureMask = 0x00000004,
FunctionControlConstMask = 0x00000008,
FunctionControlOptNoneINTELMask = 0x00010000,
};
enum MemorySemanticsShift {
MemorySemanticsAcquireShift = 1,
MemorySemanticsReleaseShift = 2,
MemorySemanticsAcquireReleaseShift = 3,
MemorySemanticsSequentiallyConsistentShift = 4,
MemorySemanticsUniformMemoryShift = 6,
MemorySemanticsSubgroupMemoryShift = 7,
MemorySemanticsWorkgroupMemoryShift = 8,
MemorySemanticsCrossWorkgroupMemoryShift = 9,
MemorySemanticsAtomicCounterMemoryShift = 10,
MemorySemanticsImageMemoryShift = 11,
MemorySemanticsOutputMemoryShift = 12,
MemorySemanticsOutputMemoryKHRShift = 12,
MemorySemanticsMakeAvailableShift = 13,
MemorySemanticsMakeAvailableKHRShift = 13,
MemorySemanticsMakeVisibleShift = 14,
MemorySemanticsMakeVisibleKHRShift = 14,
MemorySemanticsVolatileShift = 15,
MemorySemanticsMax = 0x7fffffff,
};
enum MemorySemanticsMask {
MemorySemanticsMaskNone = 0,
MemorySemanticsAcquireMask = 0x00000002,
MemorySemanticsReleaseMask = 0x00000004,
MemorySemanticsAcquireReleaseMask = 0x00000008,
MemorySemanticsSequentiallyConsistentMask = 0x00000010,
MemorySemanticsUniformMemoryMask = 0x00000040,
MemorySemanticsSubgroupMemoryMask = 0x00000080,
MemorySemanticsWorkgroupMemoryMask = 0x00000100,
MemorySemanticsCrossWorkgroupMemoryMask = 0x00000200,
MemorySemanticsAtomicCounterMemoryMask = 0x00000400,
MemorySemanticsImageMemoryMask = 0x00000800,
MemorySemanticsOutputMemoryMask = 0x00001000,
MemorySemanticsOutputMemoryKHRMask = 0x00001000,
MemorySemanticsMakeAvailableMask = 0x00002000,
MemorySemanticsMakeAvailableKHRMask = 0x00002000,
MemorySemanticsMakeVisibleMask = 0x00004000,
MemorySemanticsMakeVisibleKHRMask = 0x00004000,
MemorySemanticsVolatileMask = 0x00008000,
};
enum MemoryAccessShift {
MemoryAccessVolatileShift = 0,
MemoryAccessAlignedShift = 1,
MemoryAccessNontemporalShift = 2,
MemoryAccessMakePointerAvailableShift = 3,
MemoryAccessMakePointerAvailableKHRShift = 3,
MemoryAccessMakePointerVisibleShift = 4,
MemoryAccessMakePointerVisibleKHRShift = 4,
MemoryAccessNonPrivatePointerShift = 5,
MemoryAccessNonPrivatePointerKHRShift = 5,
MemoryAccessAliasScopeINTELMaskShift = 16,
MemoryAccessNoAliasINTELMaskShift = 17,
MemoryAccessMax = 0x7fffffff,
};
enum MemoryAccessMask {
MemoryAccessMaskNone = 0,
MemoryAccessVolatileMask = 0x00000001,
MemoryAccessAlignedMask = 0x00000002,
MemoryAccessNontemporalMask = 0x00000004,
MemoryAccessMakePointerAvailableMask = 0x00000008,
MemoryAccessMakePointerAvailableKHRMask = 0x00000008,
MemoryAccessMakePointerVisibleMask = 0x00000010,
MemoryAccessMakePointerVisibleKHRMask = 0x00000010,
MemoryAccessNonPrivatePointerMask = 0x00000020,
MemoryAccessNonPrivatePointerKHRMask = 0x00000020,
MemoryAccessAliasScopeINTELMaskMask = 0x00010000,
MemoryAccessNoAliasINTELMaskMask = 0x00020000,
};
enum Scope {
ScopeCrossDevice = 0,
ScopeDevice = 1,
ScopeWorkgroup = 2,
ScopeSubgroup = 3,
ScopeInvocation = 4,
ScopeQueueFamily = 5,
ScopeQueueFamilyKHR = 5,
ScopeShaderCallKHR = 6,
ScopeMax = 0x7fffffff,
};
enum GroupOperation {
GroupOperationReduce = 0,
GroupOperationInclusiveScan = 1,
GroupOperationExclusiveScan = 2,
GroupOperationClusteredReduce = 3,
GroupOperationPartitionedReduceNV = 6,
GroupOperationPartitionedInclusiveScanNV = 7,
GroupOperationPartitionedExclusiveScanNV = 8,
GroupOperationMax = 0x7fffffff,
};
enum KernelEnqueueFlags {
KernelEnqueueFlagsNoWait = 0,
KernelEnqueueFlagsWaitKernel = 1,
KernelEnqueueFlagsWaitWorkGroup = 2,
KernelEnqueueFlagsMax = 0x7fffffff,
};
enum KernelProfilingInfoShift {
KernelProfilingInfoCmdExecTimeShift = 0,
KernelProfilingInfoMax = 0x7fffffff,
};
enum KernelProfilingInfoMask {
KernelProfilingInfoMaskNone = 0,
KernelProfilingInfoCmdExecTimeMask = 0x00000001,
};
enum Capability {
CapabilityMatrix = 0,
CapabilityShader = 1,
CapabilityGeometry = 2,
CapabilityTessellation = 3,
CapabilityAddresses = 4,
CapabilityLinkage = 5,
CapabilityKernel = 6,
CapabilityVector16 = 7,
CapabilityFloat16Buffer = 8,
CapabilityFloat16 = 9,
CapabilityFloat64 = 10,
CapabilityInt64 = 11,
CapabilityInt64Atomics = 12,
CapabilityImageBasic = 13,
CapabilityImageReadWrite = 14,
CapabilityImageMipmap = 15,
CapabilityPipes = 17,
CapabilityGroups = 18,
CapabilityDeviceEnqueue = 19,
CapabilityLiteralSampler = 20,
CapabilityAtomicStorage = 21,
CapabilityInt16 = 22,
CapabilityTessellationPointSize = 23,
CapabilityGeometryPointSize = 24,
CapabilityImageGatherExtended = 25,
CapabilityStorageImageMultisample = 27,
CapabilityUniformBufferArrayDynamicIndexing = 28,
CapabilitySampledImageArrayDynamicIndexing = 29,
CapabilityStorageBufferArrayDynamicIndexing = 30,
CapabilityStorageImageArrayDynamicIndexing = 31,
CapabilityClipDistance = 32,
CapabilityCullDistance = 33,
CapabilityImageCubeArray = 34,
CapabilitySampleRateShading = 35,
CapabilityImageRect = 36,
CapabilitySampledRect = 37,
CapabilityGenericPointer = 38,
CapabilityInt8 = 39,
CapabilityInputAttachment = 40,
CapabilitySparseResidency = 41,
CapabilityMinLod = 42,
CapabilitySampled1D = 43,
CapabilityImage1D = 44,
CapabilitySampledCubeArray = 45,
CapabilitySampledBuffer = 46,
CapabilityImageBuffer = 47,
CapabilityImageMSArray = 48,
CapabilityStorageImageExtendedFormats = 49,
CapabilityImageQuery = 50,
CapabilityDerivativeControl = 51,
CapabilityInterpolationFunction = 52,
CapabilityTransformFeedback = 53,
CapabilityGeometryStreams = 54,
CapabilityStorageImageReadWithoutFormat = 55,
CapabilityStorageImageWriteWithoutFormat = 56,
CapabilityMultiViewport = 57,
CapabilitySubgroupDispatch = 58,
CapabilityNamedBarrier = 59,
CapabilityPipeStorage = 60,
CapabilityGroupNonUniform = 61,
CapabilityGroupNonUniformVote = 62,
CapabilityGroupNonUniformArithmetic = 63,
CapabilityGroupNonUniformBallot = 64,
CapabilityGroupNonUniformShuffle = 65,
CapabilityGroupNonUniformShuffleRelative = 66,
CapabilityGroupNonUniformClustered = 67,
CapabilityGroupNonUniformQuad = 68,
CapabilityShaderLayer = 69,
CapabilityShaderViewportIndex = 70,
CapabilityUniformDecoration = 71,
CapabilityCoreBuiltinsARM = 4165,
CapabilityTileImageColorReadAccessEXT = 4166,
CapabilityTileImageDepthReadAccessEXT = 4167,
CapabilityTileImageStencilReadAccessEXT = 4168,
CapabilityFragmentShadingRateKHR = 4422,
CapabilitySubgroupBallotKHR = 4423,
CapabilityDrawParameters = 4427,
CapabilityWorkgroupMemoryExplicitLayoutKHR = 4428,
CapabilityWorkgroupMemoryExplicitLayout8BitAccessKHR = 4429,
CapabilityWorkgroupMemoryExplicitLayout16BitAccessKHR = 4430,
CapabilitySubgroupVoteKHR = 4431,
CapabilityStorageBuffer16BitAccess = 4433,
CapabilityStorageUniformBufferBlock16 = 4433,
CapabilityStorageUniform16 = 4434,
CapabilityUniformAndStorageBuffer16BitAccess = 4434,
CapabilityStoragePushConstant16 = 4435,
CapabilityStorageInputOutput16 = 4436,
CapabilityDeviceGroup = 4437,
CapabilityMultiView = 4439,
CapabilityVariablePointersStorageBuffer = 4441,
CapabilityVariablePointers = 4442,
CapabilityAtomicStorageOps = 4445,
CapabilitySampleMaskPostDepthCoverage = 4447,
CapabilityStorageBuffer8BitAccess = 4448,
CapabilityUniformAndStorageBuffer8BitAccess = 4449,
CapabilityStoragePushConstant8 = 4450,
CapabilityDenormPreserve = 4464,
CapabilityDenormFlushToZero = 4465,
CapabilitySignedZeroInfNanPreserve = 4466,
CapabilityRoundingModeRTE = 4467,
CapabilityRoundingModeRTZ = 4468,
CapabilityRayQueryProvisionalKHR = 4471,
CapabilityRayQueryKHR = 4472,
CapabilityRayTraversalPrimitiveCullingKHR = 4478,
CapabilityRayTracingKHR = 4479,
CapabilityTextureSampleWeightedQCOM = 4484,
CapabilityTextureBoxFilterQCOM = 4485,
CapabilityTextureBlockMatchQCOM = 4486,
CapabilityFloat16ImageAMD = 5008,
CapabilityImageGatherBiasLodAMD = 5009,
CapabilityFragmentMaskAMD = 5010,
CapabilityStencilExportEXT = 5013,
CapabilityImageReadWriteLodAMD = 5015,
CapabilityInt64ImageEXT = 5016,
CapabilityShaderClockKHR = 5055,
CapabilityShaderEnqueueAMDX = 5067,
CapabilitySampleMaskOverrideCoverageNV = 5249,
CapabilityGeometryShaderPassthroughNV = 5251,
CapabilityShaderViewportIndexLayerEXT = 5254,
CapabilityShaderViewportIndexLayerNV = 5254,
CapabilityShaderViewportMaskNV = 5255,
CapabilityShaderStereoViewNV = 5259,
CapabilityPerViewAttributesNV = 5260,
CapabilityFragmentFullyCoveredEXT = 5265,
CapabilityMeshShadingNV = 5266,
CapabilityImageFootprintNV = 5282,
CapabilityMeshShadingEXT = 5283,
CapabilityFragmentBarycentricKHR = 5284,
CapabilityFragmentBarycentricNV = 5284,
CapabilityComputeDerivativeGroupQuadsNV = 5288,
CapabilityFragmentDensityEXT = 5291,
CapabilityShadingRateNV = 5291,
CapabilityGroupNonUniformPartitionedNV = 5297,
CapabilityShaderNonUniform = 5301,
CapabilityShaderNonUniformEXT = 5301,
CapabilityRuntimeDescriptorArray = 5302,
CapabilityRuntimeDescriptorArrayEXT = 5302,
CapabilityInputAttachmentArrayDynamicIndexing = 5303,
CapabilityInputAttachmentArrayDynamicIndexingEXT = 5303,
CapabilityUniformTexelBufferArrayDynamicIndexing = 5304,
CapabilityUniformTexelBufferArrayDynamicIndexingEXT = 5304,
CapabilityStorageTexelBufferArrayDynamicIndexing = 5305,
CapabilityStorageTexelBufferArrayDynamicIndexingEXT = 5305,
CapabilityUniformBufferArrayNonUniformIndexing = 5306,
CapabilityUniformBufferArrayNonUniformIndexingEXT = 5306,
CapabilitySampledImageArrayNonUniformIndexing = 5307,
CapabilitySampledImageArrayNonUniformIndexingEXT = 5307,
CapabilityStorageBufferArrayNonUniformIndexing = 5308,
CapabilityStorageBufferArrayNonUniformIndexingEXT = 5308,
CapabilityStorageImageArrayNonUniformIndexing = 5309,
CapabilityStorageImageArrayNonUniformIndexingEXT = 5309,
CapabilityInputAttachmentArrayNonUniformIndexing = 5310,
CapabilityInputAttachmentArrayNonUniformIndexingEXT = 5310,
CapabilityUniformTexelBufferArrayNonUniformIndexing = 5311,
CapabilityUniformTexelBufferArrayNonUniformIndexingEXT = 5311,
CapabilityStorageTexelBufferArrayNonUniformIndexing = 5312,
CapabilityStorageTexelBufferArrayNonUniformIndexingEXT = 5312,
CapabilityRayTracingPositionFetchKHR = 5336,
CapabilityRayTracingNV = 5340,
CapabilityRayTracingMotionBlurNV = 5341,
CapabilityVulkanMemoryModel = 5345,
CapabilityVulkanMemoryModelKHR = 5345,
CapabilityVulkanMemoryModelDeviceScope = 5346,
CapabilityVulkanMemoryModelDeviceScopeKHR = 5346,
CapabilityPhysicalStorageBufferAddresses = 5347,
CapabilityPhysicalStorageBufferAddressesEXT = 5347,
CapabilityComputeDerivativeGroupLinearNV = 5350,
CapabilityRayTracingProvisionalKHR = 5353,
CapabilityCooperativeMatrixNV = 5357,
CapabilityFragmentShaderSampleInterlockEXT = 5363,
CapabilityFragmentShaderShadingRateInterlockEXT = 5372,
CapabilityShaderSMBuiltinsNV = 5373,
CapabilityFragmentShaderPixelInterlockEXT = 5378,
CapabilityDemoteToHelperInvocation = 5379,
CapabilityDemoteToHelperInvocationEXT = 5379,
CapabilityDisplacementMicromapNV = 5380,
CapabilityRayTracingOpacityMicromapEXT = 5381,
CapabilityShaderInvocationReorderNV = 5383,
CapabilityBindlessTextureNV = 5390,
CapabilityRayQueryPositionFetchKHR = 5391,
CapabilityRayTracingDisplacementMicromapNV = 5409,
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,
CapabilityFPGADSPControlINTEL = 5908,
CapabilityMemoryAccessAliasingINTEL = 5910,
CapabilityFPGAInvocationPipeliningAttributesINTEL = 5916,
CapabilityFPGABufferLocationINTEL = 5920,
CapabilityArbitraryPrecisionFixedPointINTEL = 5922,
CapabilityUSMStorageClassesINTEL = 5935,
CapabilityRuntimeAlignedAttributeINTEL = 5939,
CapabilityIOPipesINTEL = 5943,
CapabilityBlockingPipesINTEL = 5945,
CapabilityFPGARegINTEL = 5948,
CapabilityDotProductInputAll = 6016,
CapabilityDotProductInputAllKHR = 6016,
CapabilityDotProductInput4x8Bit = 6017,
CapabilityDotProductInput4x8BitKHR = 6017,
CapabilityDotProductInput4x8BitPacked = 6018,
CapabilityDotProductInput4x8BitPackedKHR = 6018,
CapabilityDotProduct = 6019,
CapabilityDotProductKHR = 6019,
CapabilityRayCullMaskKHR = 6020,
CapabilityCooperativeMatrixKHR = 6022,
CapabilityBitInstructions = 6025,
CapabilityGroupNonUniformRotateKHR = 6026,
CapabilityAtomicFloat32AddEXT = 6033,
CapabilityAtomicFloat64AddEXT = 6034,
CapabilityLongConstantCompositeINTEL = 6089,
CapabilityOptNoneINTEL = 6094,
CapabilityAtomicFloat16AddEXT = 6095,
CapabilityDebugInfoModuleINTEL = 6114,
CapabilityBFloat16ConversionINTEL = 6115,
CapabilitySplitBarrierINTEL = 6141,
CapabilityGlobalVariableFPGADecorationsINTEL = 6146,
CapabilityFPGAKernelAttributesv2INTEL = 6161,
CapabilityGlobalVariableHostAccessINTEL = 6167,
CapabilityFPMaxErrorINTEL = 6169,
CapabilityFPGALatencyControlINTEL = 6171,
CapabilityFPGAArgumentInterfacesINTEL = 6174,
CapabilityGroupUniformArithmeticKHR = 6400,
CapabilityCacheControlsINTEL = 6441,
CapabilityMax = 0x7fffffff,
};
enum RayFlagsShift {
RayFlagsOpaqueKHRShift = 0,
RayFlagsNoOpaqueKHRShift = 1,
RayFlagsTerminateOnFirstHitKHRShift = 2,
RayFlagsSkipClosestHitShaderKHRShift = 3,
RayFlagsCullBackFacingTrianglesKHRShift = 4,
RayFlagsCullFrontFacingTrianglesKHRShift = 5,
RayFlagsCullOpaqueKHRShift = 6,
RayFlagsCullNoOpaqueKHRShift = 7,
RayFlagsSkipTrianglesKHRShift = 8,
RayFlagsSkipAABBsKHRShift = 9,
RayFlagsForceOpacityMicromap2StateEXTShift = 10,
RayFlagsMax = 0x7fffffff,
};
enum RayFlagsMask {
RayFlagsMaskNone = 0,
RayFlagsOpaqueKHRMask = 0x00000001,
RayFlagsNoOpaqueKHRMask = 0x00000002,
RayFlagsTerminateOnFirstHitKHRMask = 0x00000004,
RayFlagsSkipClosestHitShaderKHRMask = 0x00000008,
RayFlagsCullBackFacingTrianglesKHRMask = 0x00000010,
RayFlagsCullFrontFacingTrianglesKHRMask = 0x00000020,
RayFlagsCullOpaqueKHRMask = 0x00000040,
RayFlagsCullNoOpaqueKHRMask = 0x00000080,
RayFlagsSkipTrianglesKHRMask = 0x00000100,
RayFlagsSkipAABBsKHRMask = 0x00000200,
RayFlagsForceOpacityMicromap2StateEXTMask = 0x00000400,
};
enum RayQueryIntersection {
RayQueryIntersectionRayQueryCandidateIntersectionKHR = 0,
RayQueryIntersectionRayQueryCommittedIntersectionKHR = 1,
RayQueryIntersectionMax = 0x7fffffff,
};
enum RayQueryCommittedIntersectionType {
RayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionNoneKHR = 0,
RayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionTriangleKHR = 1,
RayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionGeneratedKHR = 2,
RayQueryCommittedIntersectionTypeMax = 0x7fffffff,
};
enum RayQueryCandidateIntersectionType {
RayQueryCandidateIntersectionTypeRayQueryCandidateIntersectionTriangleKHR = 0,
RayQueryCandidateIntersectionTypeRayQueryCandidateIntersectionAABBKHR = 1,
RayQueryCandidateIntersectionTypeMax = 0x7fffffff,
};
enum FragmentShadingRateShift {
FragmentShadingRateVertical2PixelsShift = 0,
FragmentShadingRateVertical4PixelsShift = 1,
FragmentShadingRateHorizontal2PixelsShift = 2,
FragmentShadingRateHorizontal4PixelsShift = 3,
FragmentShadingRateMax = 0x7fffffff,
};
enum FragmentShadingRateMask {
FragmentShadingRateMaskNone = 0,
FragmentShadingRateVertical2PixelsMask = 0x00000001,
FragmentShadingRateVertical4PixelsMask = 0x00000002,
FragmentShadingRateHorizontal2PixelsMask = 0x00000004,
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 CooperativeMatrixOperandsShift {
CooperativeMatrixOperandsMatrixASignedComponentsKHRShift = 0,
CooperativeMatrixOperandsMatrixBSignedComponentsKHRShift = 1,
CooperativeMatrixOperandsMatrixCSignedComponentsKHRShift = 2,
CooperativeMatrixOperandsMatrixResultSignedComponentsKHRShift = 3,
CooperativeMatrixOperandsSaturatingAccumulationKHRShift = 4,
CooperativeMatrixOperandsMax = 0x7fffffff,
};
enum CooperativeMatrixOperandsMask {
CooperativeMatrixOperandsMaskNone = 0,
CooperativeMatrixOperandsMatrixASignedComponentsKHRMask = 0x00000001,
CooperativeMatrixOperandsMatrixBSignedComponentsKHRMask = 0x00000002,
CooperativeMatrixOperandsMatrixCSignedComponentsKHRMask = 0x00000004,
CooperativeMatrixOperandsMatrixResultSignedComponentsKHRMask = 0x00000008,
CooperativeMatrixOperandsSaturatingAccumulationKHRMask = 0x00000010,
};
enum CooperativeMatrixLayout {
CooperativeMatrixLayoutRowMajorKHR = 0,
CooperativeMatrixLayoutColumnMajorKHR = 1,
CooperativeMatrixLayoutMax = 0x7fffffff,
};
enum CooperativeMatrixUse {
CooperativeMatrixUseMatrixAKHR = 0,
CooperativeMatrixUseMatrixBKHR = 1,
CooperativeMatrixUseMatrixAccumulatorKHR = 2,
CooperativeMatrixUseMax = 0x7fffffff,
};
enum InitializationModeQualifier {
InitializationModeQualifierInitOnDeviceReprogramINTEL = 0,
InitializationModeQualifierInitOnDeviceResetINTEL = 1,
InitializationModeQualifierMax = 0x7fffffff,
};
enum HostAccessQualifier {
HostAccessQualifierNoneINTEL = 0,
HostAccessQualifierReadINTEL = 1,
HostAccessQualifierWriteINTEL = 2,
HostAccessQualifierReadWriteINTEL = 3,
HostAccessQualifierMax = 0x7fffffff,
};
enum LoadCacheControl {
LoadCacheControlUncachedINTEL = 0,
LoadCacheControlCachedINTEL = 1,
LoadCacheControlStreamingINTEL = 2,
LoadCacheControlInvalidateAfterReadINTEL = 3,
LoadCacheControlConstCachedINTEL = 4,
LoadCacheControlMax = 0x7fffffff,
};
enum StoreCacheControl {
StoreCacheControlUncachedINTEL = 0,
StoreCacheControlWriteThroughINTEL = 1,
StoreCacheControlWriteBackINTEL = 2,
StoreCacheControlStreamingINTEL = 3,
StoreCacheControlMax = 0x7fffffff,
};
enum Op {
OpNop = 0,
OpUndef = 1,
OpSourceContinued = 2,
OpSource = 3,
OpSourceExtension = 4,
OpName = 5,
OpMemberName = 6,
OpString = 7,
OpLine = 8,
OpExtension = 10,
OpExtInstImport = 11,
OpExtInst = 12,
OpMemoryModel = 14,
OpEntryPoint = 15,
OpExecutionMode = 16,
OpCapability = 17,
OpTypeVoid = 19,
OpTypeBool = 20,
OpTypeInt = 21,
OpTypeFloat = 22,
OpTypeVector = 23,
OpTypeMatrix = 24,
OpTypeImage = 25,
OpTypeSampler = 26,
OpTypeSampledImage = 27,
OpTypeArray = 28,
OpTypeRuntimeArray = 29,
OpTypeStruct = 30,
OpTypeOpaque = 31,
OpTypePointer = 32,
OpTypeFunction = 33,
OpTypeEvent = 34,
OpTypeDeviceEvent = 35,
OpTypeReserveId = 36,
OpTypeQueue = 37,
OpTypePipe = 38,
OpTypeForwardPointer = 39,
OpConstantTrue = 41,
OpConstantFalse = 42,
OpConstant = 43,
OpConstantComposite = 44,
OpConstantSampler = 45,
OpConstantNull = 46,
OpSpecConstantTrue = 48,
OpSpecConstantFalse = 49,
OpSpecConstant = 50,
OpSpecConstantComposite = 51,
OpSpecConstantOp = 52,
OpFunction = 54,
OpFunctionParameter = 55,
OpFunctionEnd = 56,
OpFunctionCall = 57,
OpVariable = 59,
OpImageTexelPointer = 60,
OpLoad = 61,
OpStore = 62,
OpCopyMemory = 63,
OpCopyMemorySized = 64,
OpAccessChain = 65,
OpInBoundsAccessChain = 66,
OpPtrAccessChain = 67,
OpArrayLength = 68,
OpGenericPtrMemSemantics = 69,
OpInBoundsPtrAccessChain = 70,
OpDecorate = 71,
OpMemberDecorate = 72,
OpDecorationGroup = 73,
OpGroupDecorate = 74,
OpGroupMemberDecorate = 75,
OpVectorExtractDynamic = 77,
OpVectorInsertDynamic = 78,
OpVectorShuffle = 79,
OpCompositeConstruct = 80,
OpCompositeExtract = 81,
OpCompositeInsert = 82,
OpCopyObject = 83,
OpTranspose = 84,
OpSampledImage = 86,
OpImageSampleImplicitLod = 87,
OpImageSampleExplicitLod = 88,
OpImageSampleDrefImplicitLod = 89,
OpImageSampleDrefExplicitLod = 90,
OpImageSampleProjImplicitLod = 91,
OpImageSampleProjExplicitLod = 92,
OpImageSampleProjDrefImplicitLod = 93,
OpImageSampleProjDrefExplicitLod = 94,
OpImageFetch = 95,
OpImageGather = 96,
OpImageDrefGather = 97,
OpImageRead = 98,
OpImageWrite = 99,
OpImage = 100,
OpImageQueryFormat = 101,
OpImageQueryOrder = 102,
OpImageQuerySizeLod = 103,
OpImageQuerySize = 104,
OpImageQueryLod = 105,
OpImageQueryLevels = 106,
OpImageQuerySamples = 107,
OpConvertFToU = 109,
OpConvertFToS = 110,
OpConvertSToF = 111,
OpConvertUToF = 112,
OpUConvert = 113,
OpSConvert = 114,
OpFConvert = 115,
OpQuantizeToF16 = 116,
OpConvertPtrToU = 117,
OpSatConvertSToU = 118,
OpSatConvertUToS = 119,
OpConvertUToPtr = 120,
OpPtrCastToGeneric = 121,
OpGenericCastToPtr = 122,
OpGenericCastToPtrExplicit = 123,
OpBitcast = 124,
OpSNegate = 126,
OpFNegate = 127,
OpIAdd = 128,
OpFAdd = 129,
OpISub = 130,
OpFSub = 131,
OpIMul = 132,
OpFMul = 133,
OpUDiv = 134,
OpSDiv = 135,
OpFDiv = 136,
OpUMod = 137,
OpSRem = 138,
OpSMod = 139,
OpFRem = 140,
OpFMod = 141,
OpVectorTimesScalar = 142,
OpMatrixTimesScalar = 143,
OpVectorTimesMatrix = 144,
OpMatrixTimesVector = 145,
OpMatrixTimesMatrix = 146,
OpOuterProduct = 147,
OpDot = 148,
OpIAddCarry = 149,
OpISubBorrow = 150,
OpUMulExtended = 151,
OpSMulExtended = 152,
OpAny = 154,
OpAll = 155,
OpIsNan = 156,
OpIsInf = 157,
OpIsFinite = 158,
OpIsNormal = 159,
OpSignBitSet = 160,
OpLessOrGreater = 161,
OpOrdered = 162,
OpUnordered = 163,
OpLogicalEqual = 164,
OpLogicalNotEqual = 165,
OpLogicalOr = 166,
OpLogicalAnd = 167,
OpLogicalNot = 168,
OpSelect = 169,
OpIEqual = 170,
OpINotEqual = 171,
OpUGreaterThan = 172,
OpSGreaterThan = 173,
OpUGreaterThanEqual = 174,
OpSGreaterThanEqual = 175,
OpULessThan = 176,
OpSLessThan = 177,
OpULessThanEqual = 178,
OpSLessThanEqual = 179,
OpFOrdEqual = 180,
OpFUnordEqual = 181,
OpFOrdNotEqual = 182,
OpFUnordNotEqual = 183,
OpFOrdLessThan = 184,
OpFUnordLessThan = 185,
OpFOrdGreaterThan = 186,
OpFUnordGreaterThan = 187,
OpFOrdLessThanEqual = 188,
OpFUnordLessThanEqual = 189,
OpFOrdGreaterThanEqual = 190,
OpFUnordGreaterThanEqual = 191,
OpShiftRightLogical = 194,
OpShiftRightArithmetic = 195,
OpShiftLeftLogical = 196,
OpBitwiseOr = 197,
OpBitwiseXor = 198,
OpBitwiseAnd = 199,
OpNot = 200,
OpBitFieldInsert = 201,
OpBitFieldSExtract = 202,
OpBitFieldUExtract = 203,
OpBitReverse = 204,
OpBitCount = 205,
OpDPdx = 207,
OpDPdy = 208,
OpFwidth = 209,
OpDPdxFine = 210,
OpDPdyFine = 211,
OpFwidthFine = 212,
OpDPdxCoarse = 213,
OpDPdyCoarse = 214,
OpFwidthCoarse = 215,
OpEmitVertex = 218,
OpEndPrimitive = 219,
OpEmitStreamVertex = 220,
OpEndStreamPrimitive = 221,
OpControlBarrier = 224,
OpMemoryBarrier = 225,
OpAtomicLoad = 227,
OpAtomicStore = 228,
OpAtomicExchange = 229,
OpAtomicCompareExchange = 230,
OpAtomicCompareExchangeWeak = 231,
OpAtomicIIncrement = 232,
OpAtomicIDecrement = 233,
OpAtomicIAdd = 234,
OpAtomicISub = 235,
OpAtomicSMin = 236,
OpAtomicUMin = 237,
OpAtomicSMax = 238,
OpAtomicUMax = 239,
OpAtomicAnd = 240,
OpAtomicOr = 241,
OpAtomicXor = 242,
OpPhi = 245,
OpLoopMerge = 246,
OpSelectionMerge = 247,
OpLabel = 248,
OpBranch = 249,
OpBranchConditional = 250,
OpSwitch = 251,
OpKill = 252,
OpReturn = 253,
OpReturnValue = 254,
OpUnreachable = 255,
OpLifetimeStart = 256,
OpLifetimeStop = 257,
OpGroupAsyncCopy = 259,
OpGroupWaitEvents = 260,
OpGroupAll = 261,
OpGroupAny = 262,
OpGroupBroadcast = 263,
OpGroupIAdd = 264,
OpGroupFAdd = 265,
OpGroupFMin = 266,
OpGroupUMin = 267,
OpGroupSMin = 268,
OpGroupFMax = 269,
OpGroupUMax = 270,
OpGroupSMax = 271,
OpReadPipe = 274,
OpWritePipe = 275,
OpReservedReadPipe = 276,
OpReservedWritePipe = 277,
OpReserveReadPipePackets = 278,
OpReserveWritePipePackets = 279,
OpCommitReadPipe = 280,
OpCommitWritePipe = 281,
OpIsValidReserveId = 282,
OpGetNumPipePackets = 283,
OpGetMaxPipePackets = 284,
OpGroupReserveReadPipePackets = 285,
OpGroupReserveWritePipePackets = 286,
OpGroupCommitReadPipe = 287,
OpGroupCommitWritePipe = 288,
OpEnqueueMarker = 291,
OpEnqueueKernel = 292,
OpGetKernelNDrangeSubGroupCount = 293,
OpGetKernelNDrangeMaxSubGroupSize = 294,
OpGetKernelWorkGroupSize = 295,
OpGetKernelPreferredWorkGroupSizeMultiple = 296,
OpRetainEvent = 297,
OpReleaseEvent = 298,
OpCreateUserEvent = 299,
OpIsValidEvent = 300,
OpSetUserEventStatus = 301,
OpCaptureEventProfilingInfo = 302,
OpGetDefaultQueue = 303,
OpBuildNDRange = 304,
OpImageSparseSampleImplicitLod = 305,
OpImageSparseSampleExplicitLod = 306,
OpImageSparseSampleDrefImplicitLod = 307,
OpImageSparseSampleDrefExplicitLod = 308,
OpImageSparseSampleProjImplicitLod = 309,
OpImageSparseSampleProjExplicitLod = 310,
OpImageSparseSampleProjDrefImplicitLod = 311,
OpImageSparseSampleProjDrefExplicitLod = 312,
OpImageSparseFetch = 313,
OpImageSparseGather = 314,
OpImageSparseDrefGather = 315,
OpImageSparseTexelsResident = 316,
OpNoLine = 317,
OpAtomicFlagTestAndSet = 318,
OpAtomicFlagClear = 319,
OpImageSparseRead = 320,
OpSizeOf = 321,
OpTypePipeStorage = 322,
OpConstantPipeStorage = 323,
OpCreatePipeFromPipeStorage = 324,
OpGetKernelLocalSizeForSubgroupCount = 325,
OpGetKernelMaxNumSubgroups = 326,
OpTypeNamedBarrier = 327,
OpNamedBarrierInitialize = 328,
OpMemoryNamedBarrier = 329,
OpModuleProcessed = 330,
OpExecutionModeId = 331,
OpDecorateId = 332,
OpGroupNonUniformElect = 333,
OpGroupNonUniformAll = 334,
OpGroupNonUniformAny = 335,
OpGroupNonUniformAllEqual = 336,
OpGroupNonUniformBroadcast = 337,
OpGroupNonUniformBroadcastFirst = 338,
OpGroupNonUniformBallot = 339,
OpGroupNonUniformInverseBallot = 340,
OpGroupNonUniformBallotBitExtract = 341,
OpGroupNonUniformBallotBitCount = 342,
OpGroupNonUniformBallotFindLSB = 343,
OpGroupNonUniformBallotFindMSB = 344,
OpGroupNonUniformShuffle = 345,
OpGroupNonUniformShuffleXor = 346,
OpGroupNonUniformShuffleUp = 347,
OpGroupNonUniformShuffleDown = 348,
OpGroupNonUniformIAdd = 349,
OpGroupNonUniformFAdd = 350,
OpGroupNonUniformIMul = 351,
OpGroupNonUniformFMul = 352,
OpGroupNonUniformSMin = 353,
OpGroupNonUniformUMin = 354,
OpGroupNonUniformFMin = 355,
OpGroupNonUniformSMax = 356,
OpGroupNonUniformUMax = 357,
OpGroupNonUniformFMax = 358,
OpGroupNonUniformBitwiseAnd = 359,
OpGroupNonUniformBitwiseOr = 360,
OpGroupNonUniformBitwiseXor = 361,
OpGroupNonUniformLogicalAnd = 362,
OpGroupNonUniformLogicalOr = 363,
OpGroupNonUniformLogicalXor = 364,
OpGroupNonUniformQuadBroadcast = 365,
OpGroupNonUniformQuadSwap = 366,
OpCopyLogical = 400,
OpPtrEqual = 401,
OpPtrNotEqual = 402,
OpPtrDiff = 403,
OpColorAttachmentReadEXT = 4160,
OpDepthAttachmentReadEXT = 4161,
OpStencilAttachmentReadEXT = 4162,
OpTerminateInvocation = 4416,
OpSubgroupBallotKHR = 4421,
OpSubgroupFirstInvocationKHR = 4422,
OpSubgroupAllKHR = 4428,
OpSubgroupAnyKHR = 4429,
OpSubgroupAllEqualKHR = 4430,
OpGroupNonUniformRotateKHR = 4431,
OpSubgroupReadInvocationKHR = 4432,
OpTraceRayKHR = 4445,
OpExecuteCallableKHR = 4446,
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,
OpTypeCooperativeMatrixKHR = 4456,
OpCooperativeMatrixLoadKHR = 4457,
OpCooperativeMatrixStoreKHR = 4458,
OpCooperativeMatrixMulAddKHR = 4459,
OpCooperativeMatrixLengthKHR = 4460,
OpTypeRayQueryKHR = 4472,
OpRayQueryInitializeKHR = 4473,
OpRayQueryTerminateKHR = 4474,
OpRayQueryGenerateIntersectionKHR = 4475,
OpRayQueryConfirmIntersectionKHR = 4476,
OpRayQueryProceedKHR = 4477,
OpRayQueryGetIntersectionTypeKHR = 4479,
OpImageSampleWeightedQCOM = 4480,
OpImageBoxFilterQCOM = 4481,
OpImageBlockMatchSSDQCOM = 4482,
OpImageBlockMatchSADQCOM = 4483,
OpGroupIAddNonUniformAMD = 5000,
OpGroupFAddNonUniformAMD = 5001,
OpGroupFMinNonUniformAMD = 5002,
OpGroupUMinNonUniformAMD = 5003,
OpGroupSMinNonUniformAMD = 5004,
OpGroupFMaxNonUniformAMD = 5005,
OpGroupUMaxNonUniformAMD = 5006,
OpGroupSMaxNonUniformAMD = 5007,
OpFragmentMaskFetchAMD = 5011,
OpFragmentFetchAMD = 5012,
OpReadClockKHR = 5056,
OpFinalizeNodePayloadsAMDX = 5075,
OpFinishWritingNodePayloadAMDX = 5078,
OpInitializeNodePayloadsAMDX = 5090,
OpHitObjectRecordHitMotionNV = 5249,
OpHitObjectRecordHitWithIndexMotionNV = 5250,
OpHitObjectRecordMissMotionNV = 5251,
OpHitObjectGetWorldToObjectNV = 5252,
OpHitObjectGetObjectToWorldNV = 5253,
OpHitObjectGetObjectRayDirectionNV = 5254,
OpHitObjectGetObjectRayOriginNV = 5255,
OpHitObjectTraceRayMotionNV = 5256,
OpHitObjectGetShaderRecordBufferHandleNV = 5257,
OpHitObjectGetShaderBindingTableRecordIndexNV = 5258,
OpHitObjectRecordEmptyNV = 5259,
OpHitObjectTraceRayNV = 5260,
OpHitObjectRecordHitNV = 5261,
OpHitObjectRecordHitWithIndexNV = 5262,
OpHitObjectRecordMissNV = 5263,
OpHitObjectExecuteShaderNV = 5264,
OpHitObjectGetCurrentTimeNV = 5265,
OpHitObjectGetAttributesNV = 5266,
OpHitObjectGetHitKindNV = 5267,
OpHitObjectGetPrimitiveIndexNV = 5268,
OpHitObjectGetGeometryIndexNV = 5269,
OpHitObjectGetInstanceIdNV = 5270,
OpHitObjectGetInstanceCustomIndexNV = 5271,
OpHitObjectGetWorldRayDirectionNV = 5272,
OpHitObjectGetWorldRayOriginNV = 5273,
OpHitObjectGetRayTMaxNV = 5274,
OpHitObjectGetRayTMinNV = 5275,
OpHitObjectIsEmptyNV = 5276,
OpHitObjectIsHitNV = 5277,
OpHitObjectIsMissNV = 5278,
OpReorderThreadWithHitObjectNV = 5279,
OpReorderThreadWithHintNV = 5280,
OpTypeHitObjectNV = 5281,
OpImageSampleFootprintNV = 5283,
OpEmitMeshTasksEXT = 5294,
OpSetMeshOutputsEXT = 5295,
OpGroupNonUniformPartitionNV = 5296,
OpWritePackedPrimitiveIndices4x8NV = 5299,
OpFetchMicroTriangleVertexPositionNV = 5300,
OpFetchMicroTriangleVertexBarycentricNV = 5301,
OpReportIntersectionKHR = 5334,
OpReportIntersectionNV = 5334,
OpIgnoreIntersectionNV = 5335,
OpTerminateRayNV = 5336,
OpTraceNV = 5337,
OpTraceMotionNV = 5338,
OpTraceRayMotionNV = 5339,
OpRayQueryGetIntersectionTriangleVertexPositionsKHR = 5340,
OpTypeAccelerationStructureKHR = 5341,
OpTypeAccelerationStructureNV = 5341,
OpExecuteCallableNV = 5344,
OpTypeCooperativeMatrixNV = 5358,
OpCooperativeMatrixLoadNV = 5359,
OpCooperativeMatrixStoreNV = 5360,
OpCooperativeMatrixMulAddNV = 5361,
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,
OpSubgroupShuffleXorINTEL = 5574,
OpSubgroupBlockReadINTEL = 5575,
OpSubgroupBlockWriteINTEL = 5576,
OpSubgroupImageBlockReadINTEL = 5577,
OpSubgroupImageBlockWriteINTEL = 5578,
OpSubgroupImageMediaBlockReadINTEL = 5580,
OpSubgroupImageMediaBlockWriteINTEL = 5581,
OpUCountLeadingZerosINTEL = 5585,
OpUCountTrailingZerosINTEL = 5586,
OpAbsISubINTEL = 5587,
OpAbsUSubINTEL = 5588,
OpIAddSatINTEL = 5589,
OpUAddSatINTEL = 5590,
OpIAverageINTEL = 5591,
OpUAverageINTEL = 5592,
OpIAverageRoundedINTEL = 5593,
OpUAverageRoundedINTEL = 5594,
OpISubSatINTEL = 5595,
OpUSubSatINTEL = 5596,
OpIMul32x16INTEL = 5597,
OpUMul32x16INTEL = 5598,
OpConstantFunctionPointerINTEL = 5600,
OpFunctionPointerCallINTEL = 5601,
OpAsmTargetINTEL = 5609,
OpAsmINTEL = 5610,
OpAsmCallINTEL = 5611,
OpAtomicFMinEXT = 5614,
OpAtomicFMaxEXT = 5615,
OpAssumeTrueKHR = 5630,
OpExpectKHR = 5631,
OpDecorateString = 5632,
OpDecorateStringGOOGLE = 5632,
OpMemberDecorateString = 5633,
OpMemberDecorateStringGOOGLE = 5633,
OpVmeImageINTEL = 5699,
OpTypeVmeImageINTEL = 5700,
OpTypeAvcImePayloadINTEL = 5701,
OpTypeAvcRefPayloadINTEL = 5702,
OpTypeAvcSicPayloadINTEL = 5703,
OpTypeAvcMcePayloadINTEL = 5704,
OpTypeAvcMceResultINTEL = 5705,
OpTypeAvcImeResultINTEL = 5706,
OpTypeAvcImeResultSingleReferenceStreamoutINTEL = 5707,
OpTypeAvcImeResultDualReferenceStreamoutINTEL = 5708,
OpTypeAvcImeSingleReferenceStreaminINTEL = 5709,
OpTypeAvcImeDualReferenceStreaminINTEL = 5710,
OpTypeAvcRefResultINTEL = 5711,
OpTypeAvcSicResultINTEL = 5712,
OpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL = 5713,
OpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL = 5714,
OpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL = 5715,
OpSubgroupAvcMceSetInterShapePenaltyINTEL = 5716,
OpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL = 5717,
OpSubgroupAvcMceSetInterDirectionPenaltyINTEL = 5718,
OpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL = 5719,
OpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL = 5720,
OpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL = 5721,
OpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL = 5722,
OpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL = 5723,
OpSubgroupAvcMceSetMotionVectorCostFunctionINTEL = 5724,
OpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL = 5725,
OpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL = 5726,
OpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL = 5727,
OpSubgroupAvcMceSetAcOnlyHaarINTEL = 5728,
OpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL = 5729,
OpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL = 5730,
OpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL = 5731,
OpSubgroupAvcMceConvertToImePayloadINTEL = 5732,
OpSubgroupAvcMceConvertToImeResultINTEL = 5733,
OpSubgroupAvcMceConvertToRefPayloadINTEL = 5734,
OpSubgroupAvcMceConvertToRefResultINTEL = 5735,
OpSubgroupAvcMceConvertToSicPayloadINTEL = 5736,
OpSubgroupAvcMceConvertToSicResultINTEL = 5737,
OpSubgroupAvcMceGetMotionVectorsINTEL = 5738,
OpSubgroupAvcMceGetInterDistortionsINTEL = 5739,
OpSubgroupAvcMceGetBestInterDistortionsINTEL = 5740,
OpSubgroupAvcMceGetInterMajorShapeINTEL = 5741,
OpSubgroupAvcMceGetInterMinorShapeINTEL = 5742,
OpSubgroupAvcMceGetInterDirectionsINTEL = 5743,
OpSubgroupAvcMceGetInterMotionVectorCountINTEL = 5744,
OpSubgroupAvcMceGetInterReferenceIdsINTEL = 5745,
OpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL = 5746,
OpSubgroupAvcImeInitializeINTEL = 5747,
OpSubgroupAvcImeSetSingleReferenceINTEL = 5748,
OpSubgroupAvcImeSetDualReferenceINTEL = 5749,
OpSubgroupAvcImeRefWindowSizeINTEL = 5750,
OpSubgroupAvcImeAdjustRefOffsetINTEL = 5751,
OpSubgroupAvcImeConvertToMcePayloadINTEL = 5752,
OpSubgroupAvcImeSetMaxMotionVectorCountINTEL = 5753,
OpSubgroupAvcImeSetUnidirectionalMixDisableINTEL = 5754,
OpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL = 5755,
OpSubgroupAvcImeSetWeightedSadINTEL = 5756,
OpSubgroupAvcImeEvaluateWithSingleReferenceINTEL = 5757,
OpSubgroupAvcImeEvaluateWithDualReferenceINTEL = 5758,
OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL = 5759,
OpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL = 5760,
OpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL = 5761,
OpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL = 5762,
OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL = 5763,
OpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL = 5764,
OpSubgroupAvcImeConvertToMceResultINTEL = 5765,
OpSubgroupAvcImeGetSingleReferenceStreaminINTEL = 5766,
OpSubgroupAvcImeGetDualReferenceStreaminINTEL = 5767,
OpSubgroupAvcImeStripSingleReferenceStreamoutINTEL = 5768,
OpSubgroupAvcImeStripDualReferenceStreamoutINTEL = 5769,
OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL = 5770,
OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL = 5771,
OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL = 5772,
OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL = 5773,
OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL = 5774,
OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL = 5775,
OpSubgroupAvcImeGetBorderReachedINTEL = 5776,
OpSubgroupAvcImeGetTruncatedSearchIndicationINTEL = 5777,
OpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL = 5778,
OpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL = 5779,
OpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL = 5780,
OpSubgroupAvcFmeInitializeINTEL = 5781,
OpSubgroupAvcBmeInitializeINTEL = 5782,
OpSubgroupAvcRefConvertToMcePayloadINTEL = 5783,
OpSubgroupAvcRefSetBidirectionalMixDisableINTEL = 5784,
OpSubgroupAvcRefSetBilinearFilterEnableINTEL = 5785,
OpSubgroupAvcRefEvaluateWithSingleReferenceINTEL = 5786,
OpSubgroupAvcRefEvaluateWithDualReferenceINTEL = 5787,
OpSubgroupAvcRefEvaluateWithMultiReferenceINTEL = 5788,
OpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL = 5789,
OpSubgroupAvcRefConvertToMceResultINTEL = 5790,
OpSubgroupAvcSicInitializeINTEL = 5791,
OpSubgroupAvcSicConfigureSkcINTEL = 5792,
OpSubgroupAvcSicConfigureIpeLumaINTEL = 5793,
OpSubgroupAvcSicConfigureIpeLumaChromaINTEL = 5794,
OpSubgroupAvcSicGetMotionVectorMaskINTEL = 5795,
OpSubgroupAvcSicConvertToMcePayloadINTEL = 5796,
OpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL = 5797,
OpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL = 5798,
OpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL = 5799,
OpSubgroupAvcSicSetBilinearFilterEnableINTEL = 5800,
OpSubgroupAvcSicSetSkcForwardTransformEnableINTEL = 5801,
OpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL = 5802,
OpSubgroupAvcSicEvaluateIpeINTEL = 5803,
OpSubgroupAvcSicEvaluateWithSingleReferenceINTEL = 5804,
OpSubgroupAvcSicEvaluateWithDualReferenceINTEL = 5805,
OpSubgroupAvcSicEvaluateWithMultiReferenceINTEL = 5806,
OpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL = 5807,
OpSubgroupAvcSicConvertToMceResultINTEL = 5808,
OpSubgroupAvcSicGetIpeLumaShapeINTEL = 5809,
OpSubgroupAvcSicGetBestIpeLumaDistortionINTEL = 5810,
OpSubgroupAvcSicGetBestIpeChromaDistortionINTEL = 5811,
OpSubgroupAvcSicGetPackedIpeLumaModesINTEL = 5812,
OpSubgroupAvcSicGetIpeChromaModeINTEL = 5813,
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,
OpAliasDomainDeclINTEL = 5911,
OpAliasScopeDeclINTEL = 5912,
OpAliasScopeListDeclINTEL = 5913,
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,
OpRayQueryGetRayTMinKHR = 6016,
OpRayQueryGetRayFlagsKHR = 6017,
OpRayQueryGetIntersectionTKHR = 6018,
OpRayQueryGetIntersectionInstanceCustomIndexKHR = 6019,
OpRayQueryGetIntersectionInstanceIdKHR = 6020,
OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR = 6021,
OpRayQueryGetIntersectionGeometryIndexKHR = 6022,
OpRayQueryGetIntersectionPrimitiveIndexKHR = 6023,
OpRayQueryGetIntersectionBarycentricsKHR = 6024,
OpRayQueryGetIntersectionFrontFaceKHR = 6025,
OpRayQueryGetIntersectionCandidateAABBOpaqueKHR = 6026,
OpRayQueryGetIntersectionObjectRayDirectionKHR = 6027,
OpRayQueryGetIntersectionObjectRayOriginKHR = 6028,
OpRayQueryGetWorldRayDirectionKHR = 6029,
OpRayQueryGetWorldRayOriginKHR = 6030,
OpRayQueryGetIntersectionObjectToWorldKHR = 6031,
OpRayQueryGetIntersectionWorldToObjectKHR = 6032,
OpAtomicFAddEXT = 6035,
OpTypeBufferSurfaceINTEL = 6086,
OpTypeStructContinuedINTEL = 6090,
OpConstantCompositeContinuedINTEL = 6091,
OpSpecConstantCompositeContinuedINTEL = 6092,
OpConvertFToBF16INTEL = 6116,
OpConvertBF16ToFINTEL = 6117,
OpControlBarrierArriveINTEL = 6142,
OpControlBarrierWaitINTEL = 6143,
OpGroupIMulKHR = 6401,
OpGroupFMulKHR = 6402,
OpGroupBitwiseAndKHR = 6403,
OpGroupBitwiseOrKHR = 6404,
OpGroupBitwiseXorKHR = 6405,
OpGroupLogicalAndKHR = 6406,
OpGroupLogicalOrKHR = 6407,
OpGroupLogicalXorKHR = 6408,
OpMax = 0x7fffffff,
};
# 2877 "spirv/unified1/spirv.hpp"
}
# 24 "nbl/builtin/hlsl/spirv_intrinsics/core.hlsl"
namespace nbl
{
namespace hlsl
{
namespace spirv
{
#pragma region ATOMICS
template<typename T>
T atomicAdd([[vk::ext_reference]] T ptr, uint32_t memoryScope, uint32_t memorySemantics, T value);
template<>
[[vk::ext_instruction(spv::OpAtomicIAdd)]]
int32_t atomicAdd([[vk::ext_reference]] int32_t ptr, uint32_t memoryScope, uint32_t memorySemantics, int32_t value);
template<>
[[vk::ext_instruction( spv::OpAtomicIAdd )]]
uint32_t atomicAdd([[vk::ext_reference]] uint32_t ptr, uint32_t memoryScope, uint32_t memorySemantics, uint32_t value);
template<typename T>
T atomicAnd([[vk::ext_reference]] T ptr, uint32_t memoryScope, uint32_t memorySemantics, T value);
template<>
[[vk::ext_instruction( spv::OpAtomicAnd )]]
int32_t atomicAnd([[vk::ext_reference]] int32_t ptr, uint32_t memoryScope, uint32_t memorySemantics, int32_t value);
template<>
[[vk::ext_instruction( spv::OpAtomicAnd )]]
uint32_t atomicAnd([[vk::ext_reference]] uint32_t ptr, uint32_t memoryScope, uint32_t memorySemantics, uint32_t value);
template<typename T>
T atomicOr([[vk::ext_reference]] T ptr, uint32_t memoryScope, uint32_t memorySemantics, T value);
template<>
[[vk::ext_instruction( spv::OpAtomicOr )]]
int32_t atomicOr([[vk::ext_reference]] int32_t ptr, uint32_t memoryScope, uint32_t memorySemantics, int32_t value);
template<>
[[vk::ext_instruction( spv::OpAtomicOr )]]
uint32_t atomicOr([[vk::ext_reference]] uint32_t ptr, uint32_t memoryScope, uint32_t memorySemantics, uint32_t value);
template<typename T>
T atomicXor([[vk::ext_reference]] T ptr, uint32_t memoryScope, uint32_t memorySemantics, T value);
template<>
[[vk::ext_instruction( spv::OpAtomicXor )]]
int32_t atomicXor([[vk::ext_reference]] int32_t ptr, uint32_t memoryScope, uint32_t memorySemantics, int32_t value);
template<>
[[vk::ext_instruction( spv::OpAtomicXor )]]
uint32_t atomicXor([[vk::ext_reference]] uint32_t ptr, uint32_t memoryScope, uint32_t memorySemantics, uint32_t value);
template<typename T>
T atomicMin([[vk::ext_reference]] T ptr, uint32_t memoryScope, uint32_t memorySemantics, T value);
template<>
[[vk::ext_instruction( spv::OpAtomicSMin )]]
int32_t atomicMin([[vk::ext_reference]] int32_t ptr, uint32_t memoryScope, uint32_t memorySemantics, int32_t value);
template<>
[[vk::ext_instruction( spv::OpAtomicSMin )]]
uint32_t atomicMin([[vk::ext_reference]] uint32_t ptr, uint32_t memoryScope, uint32_t memorySemantics, uint32_t value);
template<typename T>
T atomicMax([[vk::ext_reference]] T ptr, uint32_t memoryScope, uint32_t memorySemantics, T value);
template<>
[[vk::ext_instruction( spv::OpAtomicSMax )]]
int32_t atomicMax([[vk::ext_reference]] int32_t ptr, uint32_t memoryScope, uint32_t memorySemantics, int32_t value);
template<>
[[vk::ext_instruction( spv::OpAtomicSMax )]]
uint32_t atomicMax([[vk::ext_reference]] uint32_t ptr, uint32_t memoryScope, uint32_t memorySemantics, uint32_t value);
template<typename T>
T atomicExchange([[vk::ext_reference]] T ptr, uint32_t memoryScope, uint32_t memorySemantics, T value);
template<>
[[vk::ext_instruction( spv::OpAtomicExchange )]]
int32_t atomicExchange([[vk::ext_reference]] int32_t ptr, uint32_t memoryScope, uint32_t memorySemantics, int32_t value);
template<>
[[vk::ext_instruction( spv::OpAtomicExchange )]]
uint32_t atomicExchange([[vk::ext_reference]] uint32_t ptr, uint32_t memoryScope, uint32_t memorySemantics, uint32_t value);
template<>
[[vk::ext_instruction( spv::OpAtomicExchange )]]
float32_t atomicExchange([[vk::ext_reference]] float32_t ptr, uint32_t memoryScope, uint32_t memorySemantics, float32_t value);
template<typename T>
T atomicCompSwap([[vk::ext_reference]] T ptr, uint32_t memoryScope, uint32_t memSemanticsEqual, uint32_t memSemanticsUnequal, T value, T comparator);
template<>
[[vk::ext_instruction( spv::OpAtomicCompareExchange )]]
int32_t atomicCompSwap([[vk::ext_reference]] int32_t ptr, uint32_t memoryScope, uint32_t memSemanticsEqual, uint32_t memSemanticsUnequal, int32_t value, int32_t comparator);
template<>
[[vk::ext_instruction( spv::OpAtomicCompareExchange )]]
uint32_t atomicCompSwap([[vk::ext_reference]] uint32_t ptr, uint32_t memoryScope, uint32_t memSemanticsEqual, uint32_t memSemanticsUnequal, uint32_t value, uint32_t comparator);
#pragma endregion ATOMICS
#pragma region BARRIERS
[[vk::ext_instruction( spv::OpControlBarrier )]]
void controlBarrier(uint32_t executionScope, uint32_t memoryScope, uint32_t memorySemantics);
[[vk::ext_instruction( spv::OpMemoryBarrier )]]
void memoryBarrier(uint32_t memoryScope, uint32_t memorySemantics);
#pragma endregion BARRIERS
#pragma region CONVERSION
template<class T, class U>
[[vk::ext_instruction(spv::OpBitcast)]]
T bitcast(U);
#pragma endregion CONVERSION
}
}
}
# 540 "nbl/builtin/hlsl/bit.hlsl"
namespace nbl
{
namespace hlsl
{
template<class T, class U>
T bit_cast(U val)
{
_Static_assert(sizeof(T) <= sizeof(U));
return spirv::bitcast<T, U>(val);
}
template<typename T, typename S>
T rotl(T x, S s);
template<typename T, typename S>
T rotr(T x, S s);
template<typename T, typename S>
T rotl(T x, S s)
{
const T N = 32u;
const S r = s % N;
if(r >= 0)
{
return (x << r) | (x >> (N - r));
}
else
{
return (x >> (-r)) | (x << (N - (-r)));
}
}
template<typename T, typename S>
T rotr(T x, S s)
{
const T N = 32u;
const S r = s % N;
if(r >= 0)
{
return (x >> r) | (x << (N - r));
}
else
{
return (x << (-r)) | (x >> (N - (-r)));
}
}
namespace impl
{
template<uint16_t bits>
uint16_t clz(uint64_t N)
{
static const uint64_t SHIFT = bits>>1;
static const uint64_t LO_MASK = (1ull<<SHIFT)-1;
const bool CHOOSE_HIGH = N & (LO_MASK<<SHIFT);
const uint64_t NEXT = (CHOOSE_HIGH ? (N>>SHIFT):N)&LO_MASK;
const uint16_t value = uint16_t(clz<SHIFT>(NEXT) + (CHOOSE_HIGH ? 0:SHIFT));
return value;
}
template<>
uint16_t clz<1>(uint64_t N) { return uint16_t(1u-N&1); }
}
template<typename T>
uint16_t countl_zero(T n)
{
return impl::clz<sizeof(T)*8>(n);
}
}
}
# 23 "nbl/builtin/hlsl/functional.hlsl"
# 1 "nbl/builtin/hlsl/limits.hlsl"
# 1 "nbl/builtin/hlsl/type_traits.hlsl"
# 1 "nbl/builtin/hlsl/cpp_compat.hlsl"
# 29 "nbl/builtin/hlsl/type_traits.hlsl"
# 167 "nbl/builtin/hlsl/type_traits.hlsl"
namespace nbl
{
namespace hlsl
{
namespace impl
{
template<template<class> class Trait, class T>
struct base_type_forwarder : Trait<T> {};
template<template<class> class Trait, class T, uint16_t N>
struct base_type_forwarder<Trait,vector<T,N> > : Trait<T> {};
template<template<class> class Trait, class T, uint16_t N, uint16_t M>
struct base_type_forwarder<Trait,matrix<T,N,M> > : Trait<T> {};
}
template<class T>
struct type_identity
{
using type = T;
};
namespace impl
{
template<class> struct remove_reference;
}
template<class T> struct remove_const : type_identity<T> {};
template<class T> struct remove_const<const T> : type_identity<T> {};
template<class T> struct remove_volatile : type_identity<T> {};
template<class T> struct remove_volatile<volatile T> : type_identity<T> {};
template<class T> struct remove_cv : type_identity<T> {};
template<class T> struct remove_cv<const T> : type_identity<T> {};
template<class T> struct remove_cv<volatile T> : type_identity<T> {};
template<class T> struct remove_cv<const volatile T> : type_identity<T> {};
template<class T> struct remove_cvref : remove_cv<typename impl::remove_reference<T>::type> {};
template<class T> struct add_const : type_identity<const T> {};
template<class T> struct add_volatile : type_identity<volatile T> {};
template<class T> struct add_cv : type_identity<const volatile T> {};
template<class T, T val>
struct integral_constant {
const static T value = val;
using value_type = T;
};
template<bool val>
struct bool_constant : integral_constant<bool, val> {};
struct true_type : bool_constant<true> {};
struct false_type : bool_constant<true> {};
template<bool C, class T, class F>
struct conditional : type_identity<T> {};
template<class T, class F>
struct conditional<false, T, F> : type_identity<F> {};
template<class A, class B>
struct is_same : bool_constant<false> {};
template<class A>
struct is_same<A,A> : bool_constant<true> {};
template<class T>
struct is_void : bool_constant<is_same<typename remove_cv<T>::type, void>::value> {};
template<class T>
struct is_bounded_array : bool_constant<false> {};
template<class T, uint32_t count>
struct is_bounded_array<T[count]> : bool_constant<true>{};
template<class T>
struct is_unbounded_array : bool_constant<false>{};
template<class T>
struct is_unbounded_array<T[]> : bool_constant<true>{};
template<class T>
struct is_array : bool_constant<is_bounded_array<T>::value || is_unbounded_array<T>::value> {};
namespace impl
{
template<typename T>
struct typeid_t;
template<typename T, T v>
struct function_info : type_identity<void> {};
template<class T>
struct is_unsigned : bool_constant<
is_same<T, bool>::value ||
is_same<T, uint16_t>::value ||
is_same<T, uint32_t>::value ||
is_same<T, uint64_t>::value
> {};
template<class T>
struct is_integral : bool_constant<
is_same<T, bool>::value ||
is_same<T, uint16_t>::value ||
is_same<T, uint32_t>::value ||
is_same<T, uint64_t>::value ||
is_same<T, int16_t>::value ||
is_same<T, int32_t>::value ||
is_same<T, int64_t>::value
> {};
template<class T>
struct is_floating_point : bool_constant<
is_same<T, half>::value ||
is_same<T, float>::value ||
is_same<T, double>::value
> {};
template<class T>
struct is_signed : bool_constant<
is_same<T, int16_t>::value ||
is_same<T, int32_t>::value ||
is_same<T, int64_t>::value ||
is_floating_point<T>::value
> {};
}
template<class T>
struct is_unsigned : impl::base_type_forwarder<impl::is_unsigned, typename remove_cv<T>::type> {};
template<class T>
struct is_integral : impl::base_type_forwarder<impl::is_integral, T> {};
template<class T>
struct is_floating_point : impl::base_type_forwarder<impl::is_floating_point, typename remove_cv<T>::type> {};
template<class T>
struct is_signed : impl::base_type_forwarder<impl::is_signed, typename remove_cv<T>::type> {};
template<class T>
struct is_scalar : bool_constant<
impl::is_integral<typename remove_cv<T>::type>::value ||
impl::is_floating_point<typename remove_cv<T>::type>::value
> {};
template<class T>
struct is_const : bool_constant<false> {};
template<class T>
struct is_const<const T> : bool_constant<true> {};
template<class T>
struct is_volatile : bool_constant<false> {};
template<class T>
struct is_volatile<volatile T> : bool_constant<true> {};
template<class>
struct is_trivial : bool_constant<true> {};
template<class>
struct is_trivially_copyable : bool_constant<true> {};
template<class T>
struct is_empty : bool_constant<0==sizeof(T)> {};
template<class>
struct is_polymorphic : bool_constant<false> {};
template<class>
struct is_abstract : bool_constant<false> {};
template<class>
struct is_final : bool_constant<false> {};
template <class T>
struct is_fundamental : bool_constant<
is_scalar<T>::value ||
is_void<T>::value
> {};
template <class T>
struct is_compound : bool_constant<!is_fundamental<T>::value> {};
template <class T>
struct is_aggregate : is_compound<T> {};
template<class T>
struct rank : integral_constant<uint64_t, 0> { };
template<class T, uint64_t N>
struct rank<T[N]> : integral_constant<uint64_t, 1 + rank<T>::value> { };
template<class T>
struct rank<T[]> : integral_constant<uint64_t, 1 + rank<T>::value> { };
template<class T, uint32_t I = 0>
struct extent : integral_constant<uint64_t, 0> {};
template<class T, uint64_t N>
struct extent<T[N], 0> : integral_constant<uint64_t, N> {};
template<class T, uint64_t N, uint32_t I>
struct extent<T[N], I> : integral_constant<uint64_t,extent<T, I - 1>::value> {};
template<class T, uint32_t I>
struct extent<T[], I> : integral_constant<uint64_t,extent<T, I - 1>::value> {};
template<bool B, class T = void>
struct enable_if {};
template<class T>
struct enable_if<true, T> : type_identity<T> {};
template<class T>
struct alignment_of;
template<class>
struct make_void { using type = void; };
namespace impl
{
template<typename,class=void>
struct is_reference : bool_constant<true> { };
template<typename T>
struct is_reference<T,typename make_void<T[1]>::type> : bool_constant<false> { };
template<class T, bool = is_reference<T>::value>
struct add_reference_helper : type_identity<T> {};
template<class T>
struct add_reference_helper<T, false>
{
static T member[1];
using type = __decltype(member[0]);
};
template<class T>
struct add_lvalue_reference : add_reference_helper<T> {};
template<typename T>
T remove_reference_impl(T v)
{
return v;
}
template<typename T, bool = is_reference<T>::value>
struct remove_reference_helper : type_identity<T> {};
template<typename T>
struct remove_reference_helper<T, true>
{
static T member;
using type = __decltype(remove_reference_impl(member));
};
template<typename T>
struct remove_reference : remove_reference_helper<T> {};
}
template<class T> struct remove_extent : type_identity<T> {};
template<class T, uint32_t I> struct remove_extent<T[I]> : type_identity<T> {};
template<class T> struct remove_extent<T[]> : type_identity<T> {};
template <class T>
struct remove_all_extents : type_identity<T> {};
template <class T, uint32_t I>
struct remove_all_extents<T[I]> : type_identity<typename remove_all_extents<T>::type> {};
template <class T>
struct remove_all_extents<T[]> : type_identity<typename remove_all_extents<T>::type> {};
namespace impl
{
template<uint32_t sz> struct int_type :
conditional<8==sz, int64_t, typename conditional<4==sz, int32_t, int16_t>::type>{};
template<uint32_t sz> struct uint_type :
type_identity<unsigned typename int_type<sz>::type> {};
}
template<class T>
struct make_signed : impl::int_type<sizeof(T)>
{
_Static_assert(is_integral<T>::value && !is_same<typename remove_cv<T>::type, bool>::value,
"make_signed<T> requires that T shall be a (possibly cv-qualified) "
"integral type or enumeration but not a bool type.");
};
template<class T>
struct make_unsigned : impl::uint_type<sizeof(T)>
{
_Static_assert(is_integral<T>::value && !is_same<typename remove_cv<T>::type, bool>::value,
"make_unsigned<T> requires that T shall be a (possibly cv-qualified) "
"integral type or enumeration but not a bool type.");
};
# 598 "nbl/builtin/hlsl/type_traits.hlsl"
template<bool C, typename T, T A, T B>
struct conditional_value
{
const static T value = C ? A : B;
};
template<class T>
struct is_vector : bool_constant<false> {};
template<class T>
struct is_matrix : bool_constant<false> {};
template<class T, uint32_t N>
struct is_vector<vector<T, N> > : bool_constant<true> {};
template<class T, uint32_t N, uint32_t M>
struct is_matrix<matrix<T, N, M> > : bool_constant<true> {};
template<typename T,bool=is_scalar<T>::value>
struct scalar_type
{
using type = void;
};
template<typename T>
struct scalar_type<T,true>
{
using type = T;
};
template<typename T, uint16_t N>
struct scalar_type<vector<T,N>,false>
{
using type = T;
};
template<typename T, uint16_t N, uint16_t M>
struct scalar_type<matrix<T,N,M>,false>
{
using type = T;
};
template<uint16_t bytesize>
struct unsigned_integer_of_size
{
using type = void;
};
template<>
struct unsigned_integer_of_size<2>
{
using type = uint16_t;
};
template<>
struct unsigned_integer_of_size<4>
{
using type = uint32_t;
};
template<>
struct unsigned_integer_of_size<8>
{
using type = uint64_t;
};
}
}
# 691 "nbl/builtin/hlsl/type_traits.hlsl"
namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<int16_t> : integral_constant<uint32_t,0> {}; } template<> struct alignment_of<int16_t> : integral_constant<uint32_t,sizeof(int16_t)> {}; template<> struct alignment_of<const int16_t> : integral_constant<uint32_t,sizeof(int16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<int16_t>::type> : integral_constant<uint32_t,sizeof(int16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const int16_t>::type> : integral_constant<uint32_t,sizeof(int16_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<int16_t1> : integral_constant<uint32_t,1> {}; } template<> struct alignment_of<int16_t1> : integral_constant<uint32_t,sizeof(int16_t)> {}; template<> struct alignment_of<const int16_t1> : integral_constant<uint32_t,sizeof(int16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<int16_t1>::type> : integral_constant<uint32_t,sizeof(int16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const int16_t1>::type> : integral_constant<uint32_t,sizeof(int16_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<int16_t2> : integral_constant<uint32_t,2> {}; } template<> struct alignment_of<int16_t2> : integral_constant<uint32_t,sizeof(int16_t)> {}; template<> struct alignment_of<const int16_t2> : integral_constant<uint32_t,sizeof(int16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<int16_t2>::type> : integral_constant<uint32_t,sizeof(int16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const int16_t2>::type> : integral_constant<uint32_t,sizeof(int16_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<int16_t2x4> : integral_constant<uint32_t,3> {}; } template<> struct alignment_of<int16_t2x4> : integral_constant<uint32_t,sizeof(int16_t)> {}; template<> struct alignment_of<const int16_t2x4> : integral_constant<uint32_t,sizeof(int16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<int16_t2x4>::type> : integral_constant<uint32_t,sizeof(int16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const int16_t2x4>::type> : integral_constant<uint32_t,sizeof(int16_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<int16_t2x3> : integral_constant<uint32_t,4> {}; } template<> struct alignment_of<int16_t2x3> : integral_constant<uint32_t,sizeof(int16_t)> {}; template<> struct alignment_of<const int16_t2x3> : integral_constant<uint32_t,sizeof(int16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<int16_t2x3>::type> : integral_constant<uint32_t,sizeof(int16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const int16_t2x3>::type> : integral_constant<uint32_t,sizeof(int16_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<int16_t2x2> : integral_constant<uint32_t,5> {}; } template<> struct alignment_of<int16_t2x2> : integral_constant<uint32_t,sizeof(int16_t)> {}; template<> struct alignment_of<const int16_t2x2> : integral_constant<uint32_t,sizeof(int16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<int16_t2x2>::type> : integral_constant<uint32_t,sizeof(int16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const int16_t2x2>::type> : integral_constant<uint32_t,sizeof(int16_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<int16_t3> : integral_constant<uint32_t,6> {}; } template<> struct alignment_of<int16_t3> : integral_constant<uint32_t,sizeof(int16_t)> {}; template<> struct alignment_of<const int16_t3> : integral_constant<uint32_t,sizeof(int16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<int16_t3>::type> : integral_constant<uint32_t,sizeof(int16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const int16_t3>::type> : integral_constant<uint32_t,sizeof(int16_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<int16_t3x4> : integral_constant<uint32_t,7> {}; } template<> struct alignment_of<int16_t3x4> : integral_constant<uint32_t,sizeof(int16_t)> {}; template<> struct alignment_of<const int16_t3x4> : integral_constant<uint32_t,sizeof(int16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<int16_t3x4>::type> : integral_constant<uint32_t,sizeof(int16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const int16_t3x4>::type> : integral_constant<uint32_t,sizeof(int16_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<int16_t3x3> : integral_constant<uint32_t,8> {}; } template<> struct alignment_of<int16_t3x3> : integral_constant<uint32_t,sizeof(int16_t)> {}; template<> struct alignment_of<const int16_t3x3> : integral_constant<uint32_t,sizeof(int16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<int16_t3x3>::type> : integral_constant<uint32_t,sizeof(int16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const int16_t3x3>::type> : integral_constant<uint32_t,sizeof(int16_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<int16_t3x2> : integral_constant<uint32_t,9> {}; } template<> struct alignment_of<int16_t3x2> : integral_constant<uint32_t,sizeof(int16_t)> {}; template<> struct alignment_of<const int16_t3x2> : integral_constant<uint32_t,sizeof(int16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<int16_t3x2>::type> : integral_constant<uint32_t,sizeof(int16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const int16_t3x2>::type> : integral_constant<uint32_t,sizeof(int16_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<int16_t4> : integral_constant<uint32_t,10> {}; } template<> struct alignment_of<int16_t4> : integral_constant<uint32_t,sizeof(int16_t)> {}; template<> struct alignment_of<const int16_t4> : integral_constant<uint32_t,sizeof(int16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<int16_t4>::type> : integral_constant<uint32_t,sizeof(int16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const int16_t4>::type> : integral_constant<uint32_t,sizeof(int16_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<int16_t4x4> : integral_constant<uint32_t,11> {}; } template<> struct alignment_of<int16_t4x4> : integral_constant<uint32_t,sizeof(int16_t)> {}; template<> struct alignment_of<const int16_t4x4> : integral_constant<uint32_t,sizeof(int16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<int16_t4x4>::type> : integral_constant<uint32_t,sizeof(int16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const int16_t4x4>::type> : integral_constant<uint32_t,sizeof(int16_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<int16_t4x3> : integral_constant<uint32_t,12> {}; } template<> struct alignment_of<int16_t4x3> : integral_constant<uint32_t,sizeof(int16_t)> {}; template<> struct alignment_of<const int16_t4x3> : integral_constant<uint32_t,sizeof(int16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<int16_t4x3>::type> : integral_constant<uint32_t,sizeof(int16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const int16_t4x3>::type> : integral_constant<uint32_t,sizeof(int16_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<int16_t4x2> : integral_constant<uint32_t,13> {}; } template<> struct alignment_of<int16_t4x2> : integral_constant<uint32_t,sizeof(int16_t)> {}; template<> struct alignment_of<const int16_t4x2> : integral_constant<uint32_t,sizeof(int16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<int16_t4x2>::type> : integral_constant<uint32_t,sizeof(int16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const int16_t4x2>::type> : integral_constant<uint32_t,sizeof(int16_t)> {};}}
namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<int32_t> : integral_constant<uint32_t,14> {}; } template<> struct alignment_of<int32_t> : integral_constant<uint32_t,sizeof(int32_t)> {}; template<> struct alignment_of<const int32_t> : integral_constant<uint32_t,sizeof(int32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<int32_t>::type> : integral_constant<uint32_t,sizeof(int32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const int32_t>::type> : integral_constant<uint32_t,sizeof(int32_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<int32_t1> : integral_constant<uint32_t,15> {}; } template<> struct alignment_of<int32_t1> : integral_constant<uint32_t,sizeof(int32_t)> {}; template<> struct alignment_of<const int32_t1> : integral_constant<uint32_t,sizeof(int32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<int32_t1>::type> : integral_constant<uint32_t,sizeof(int32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const int32_t1>::type> : integral_constant<uint32_t,sizeof(int32_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<int32_t2> : integral_constant<uint32_t,16> {}; } template<> struct alignment_of<int32_t2> : integral_constant<uint32_t,sizeof(int32_t)> {}; template<> struct alignment_of<const int32_t2> : integral_constant<uint32_t,sizeof(int32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<int32_t2>::type> : integral_constant<uint32_t,sizeof(int32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const int32_t2>::type> : integral_constant<uint32_t,sizeof(int32_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<int32_t2x4> : integral_constant<uint32_t,17> {}; } template<> struct alignment_of<int32_t2x4> : integral_constant<uint32_t,sizeof(int32_t)> {}; template<> struct alignment_of<const int32_t2x4> : integral_constant<uint32_t,sizeof(int32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<int32_t2x4>::type> : integral_constant<uint32_t,sizeof(int32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const int32_t2x4>::type> : integral_constant<uint32_t,sizeof(int32_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<int32_t2x3> : integral_constant<uint32_t,18> {}; } template<> struct alignment_of<int32_t2x3> : integral_constant<uint32_t,sizeof(int32_t)> {}; template<> struct alignment_of<const int32_t2x3> : integral_constant<uint32_t,sizeof(int32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<int32_t2x3>::type> : integral_constant<uint32_t,sizeof(int32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const int32_t2x3>::type> : integral_constant<uint32_t,sizeof(int32_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<int32_t2x2> : integral_constant<uint32_t,19> {}; } template<> struct alignment_of<int32_t2x2> : integral_constant<uint32_t,sizeof(int32_t)> {}; template<> struct alignment_of<const int32_t2x2> : integral_constant<uint32_t,sizeof(int32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<int32_t2x2>::type> : integral_constant<uint32_t,sizeof(int32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const int32_t2x2>::type> : integral_constant<uint32_t,sizeof(int32_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<int32_t3> : integral_constant<uint32_t,20> {}; } template<> struct alignment_of<int32_t3> : integral_constant<uint32_t,sizeof(int32_t)> {}; template<> struct alignment_of<const int32_t3> : integral_constant<uint32_t,sizeof(int32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<int32_t3>::type> : integral_constant<uint32_t,sizeof(int32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const int32_t3>::type> : integral_constant<uint32_t,sizeof(int32_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<int32_t3x4> : integral_constant<uint32_t,21> {}; } template<> struct alignment_of<int32_t3x4> : integral_constant<uint32_t,sizeof(int32_t)> {}; template<> struct alignment_of<const int32_t3x4> : integral_constant<uint32_t,sizeof(int32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<int32_t3x4>::type> : integral_constant<uint32_t,sizeof(int32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const int32_t3x4>::type> : integral_constant<uint32_t,sizeof(int32_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<int32_t3x3> : integral_constant<uint32_t,22> {}; } template<> struct alignment_of<int32_t3x3> : integral_constant<uint32_t,sizeof(int32_t)> {}; template<> struct alignment_of<const int32_t3x3> : integral_constant<uint32_t,sizeof(int32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<int32_t3x3>::type> : integral_constant<uint32_t,sizeof(int32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const int32_t3x3>::type> : integral_constant<uint32_t,sizeof(int32_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<int32_t3x2> : integral_constant<uint32_t,23> {}; } template<> struct alignment_of<int32_t3x2> : integral_constant<uint32_t,sizeof(int32_t)> {}; template<> struct alignment_of<const int32_t3x2> : integral_constant<uint32_t,sizeof(int32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<int32_t3x2>::type> : integral_constant<uint32_t,sizeof(int32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const int32_t3x2>::type> : integral_constant<uint32_t,sizeof(int32_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<int32_t4> : integral_constant<uint32_t,24> {}; } template<> struct alignment_of<int32_t4> : integral_constant<uint32_t,sizeof(int32_t)> {}; template<> struct alignment_of<const int32_t4> : integral_constant<uint32_t,sizeof(int32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<int32_t4>::type> : integral_constant<uint32_t,sizeof(int32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const int32_t4>::type> : integral_constant<uint32_t,sizeof(int32_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<int32_t4x4> : integral_constant<uint32_t,25> {}; } template<> struct alignment_of<int32_t4x4> : integral_constant<uint32_t,sizeof(int32_t)> {}; template<> struct alignment_of<const int32_t4x4> : integral_constant<uint32_t,sizeof(int32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<int32_t4x4>::type> : integral_constant<uint32_t,sizeof(int32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const int32_t4x4>::type> : integral_constant<uint32_t,sizeof(int32_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<int32_t4x3> : integral_constant<uint32_t,26> {}; } template<> struct alignment_of<int32_t4x3> : integral_constant<uint32_t,sizeof(int32_t)> {}; template<> struct alignment_of<const int32_t4x3> : integral_constant<uint32_t,sizeof(int32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<int32_t4x3>::type> : integral_constant<uint32_t,sizeof(int32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const int32_t4x3>::type> : integral_constant<uint32_t,sizeof(int32_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<int32_t4x2> : integral_constant<uint32_t,27> {}; } template<> struct alignment_of<int32_t4x2> : integral_constant<uint32_t,sizeof(int32_t)> {}; template<> struct alignment_of<const int32_t4x2> : integral_constant<uint32_t,sizeof(int32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<int32_t4x2>::type> : integral_constant<uint32_t,sizeof(int32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const int32_t4x2>::type> : integral_constant<uint32_t,sizeof(int32_t)> {};}}
namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<int64_t> : integral_constant<uint32_t,28> {}; } template<> struct alignment_of<int64_t> : integral_constant<uint32_t,sizeof(int64_t)> {}; template<> struct alignment_of<const int64_t> : integral_constant<uint32_t,sizeof(int64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<int64_t>::type> : integral_constant<uint32_t,sizeof(int64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const int64_t>::type> : integral_constant<uint32_t,sizeof(int64_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<int64_t1> : integral_constant<uint32_t,29> {}; } template<> struct alignment_of<int64_t1> : integral_constant<uint32_t,sizeof(int64_t)> {}; template<> struct alignment_of<const int64_t1> : integral_constant<uint32_t,sizeof(int64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<int64_t1>::type> : integral_constant<uint32_t,sizeof(int64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const int64_t1>::type> : integral_constant<uint32_t,sizeof(int64_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<int64_t2> : integral_constant<uint32_t,30> {}; } template<> struct alignment_of<int64_t2> : integral_constant<uint32_t,sizeof(int64_t)> {}; template<> struct alignment_of<const int64_t2> : integral_constant<uint32_t,sizeof(int64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<int64_t2>::type> : integral_constant<uint32_t,sizeof(int64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const int64_t2>::type> : integral_constant<uint32_t,sizeof(int64_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<int64_t2x4> : integral_constant<uint32_t,31> {}; } template<> struct alignment_of<int64_t2x4> : integral_constant<uint32_t,sizeof(int64_t)> {}; template<> struct alignment_of<const int64_t2x4> : integral_constant<uint32_t,sizeof(int64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<int64_t2x4>::type> : integral_constant<uint32_t,sizeof(int64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const int64_t2x4>::type> : integral_constant<uint32_t,sizeof(int64_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<int64_t2x3> : integral_constant<uint32_t,32> {}; } template<> struct alignment_of<int64_t2x3> : integral_constant<uint32_t,sizeof(int64_t)> {}; template<> struct alignment_of<const int64_t2x3> : integral_constant<uint32_t,sizeof(int64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<int64_t2x3>::type> : integral_constant<uint32_t,sizeof(int64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const int64_t2x3>::type> : integral_constant<uint32_t,sizeof(int64_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<int64_t2x2> : integral_constant<uint32_t,33> {}; } template<> struct alignment_of<int64_t2x2> : integral_constant<uint32_t,sizeof(int64_t)> {}; template<> struct alignment_of<const int64_t2x2> : integral_constant<uint32_t,sizeof(int64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<int64_t2x2>::type> : integral_constant<uint32_t,sizeof(int64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const int64_t2x2>::type> : integral_constant<uint32_t,sizeof(int64_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<int64_t3> : integral_constant<uint32_t,34> {}; } template<> struct alignment_of<int64_t3> : integral_constant<uint32_t,sizeof(int64_t)> {}; template<> struct alignment_of<const int64_t3> : integral_constant<uint32_t,sizeof(int64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<int64_t3>::type> : integral_constant<uint32_t,sizeof(int64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const int64_t3>::type> : integral_constant<uint32_t,sizeof(int64_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<int64_t3x4> : integral_constant<uint32_t,35> {}; } template<> struct alignment_of<int64_t3x4> : integral_constant<uint32_t,sizeof(int64_t)> {}; template<> struct alignment_of<const int64_t3x4> : integral_constant<uint32_t,sizeof(int64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<int64_t3x4>::type> : integral_constant<uint32_t,sizeof(int64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const int64_t3x4>::type> : integral_constant<uint32_t,sizeof(int64_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<int64_t3x3> : integral_constant<uint32_t,36> {}; } template<> struct alignment_of<int64_t3x3> : integral_constant<uint32_t,sizeof(int64_t)> {}; template<> struct alignment_of<const int64_t3x3> : integral_constant<uint32_t,sizeof(int64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<int64_t3x3>::type> : integral_constant<uint32_t,sizeof(int64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const int64_t3x3>::type> : integral_constant<uint32_t,sizeof(int64_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<int64_t3x2> : integral_constant<uint32_t,37> {}; } template<> struct alignment_of<int64_t3x2> : integral_constant<uint32_t,sizeof(int64_t)> {}; template<> struct alignment_of<const int64_t3x2> : integral_constant<uint32_t,sizeof(int64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<int64_t3x2>::type> : integral_constant<uint32_t,sizeof(int64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const int64_t3x2>::type> : integral_constant<uint32_t,sizeof(int64_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<int64_t4> : integral_constant<uint32_t,38> {}; } template<> struct alignment_of<int64_t4> : integral_constant<uint32_t,sizeof(int64_t)> {}; template<> struct alignment_of<const int64_t4> : integral_constant<uint32_t,sizeof(int64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<int64_t4>::type> : integral_constant<uint32_t,sizeof(int64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const int64_t4>::type> : integral_constant<uint32_t,sizeof(int64_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<int64_t4x4> : integral_constant<uint32_t,39> {}; } template<> struct alignment_of<int64_t4x4> : integral_constant<uint32_t,sizeof(int64_t)> {}; template<> struct alignment_of<const int64_t4x4> : integral_constant<uint32_t,sizeof(int64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<int64_t4x4>::type> : integral_constant<uint32_t,sizeof(int64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const int64_t4x4>::type> : integral_constant<uint32_t,sizeof(int64_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<int64_t4x3> : integral_constant<uint32_t,40> {}; } template<> struct alignment_of<int64_t4x3> : integral_constant<uint32_t,sizeof(int64_t)> {}; template<> struct alignment_of<const int64_t4x3> : integral_constant<uint32_t,sizeof(int64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<int64_t4x3>::type> : integral_constant<uint32_t,sizeof(int64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const int64_t4x3>::type> : integral_constant<uint32_t,sizeof(int64_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<int64_t4x2> : integral_constant<uint32_t,41> {}; } template<> struct alignment_of<int64_t4x2> : integral_constant<uint32_t,sizeof(int64_t)> {}; template<> struct alignment_of<const int64_t4x2> : integral_constant<uint32_t,sizeof(int64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<int64_t4x2>::type> : integral_constant<uint32_t,sizeof(int64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const int64_t4x2>::type> : integral_constant<uint32_t,sizeof(int64_t)> {};}}
namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<uint16_t> : integral_constant<uint32_t,42> {}; } template<> struct alignment_of<uint16_t> : integral_constant<uint32_t,sizeof(uint16_t)> {}; template<> struct alignment_of<const uint16_t> : integral_constant<uint32_t,sizeof(uint16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<uint16_t>::type> : integral_constant<uint32_t,sizeof(uint16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const uint16_t>::type> : integral_constant<uint32_t,sizeof(uint16_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<uint16_t1> : integral_constant<uint32_t,43> {}; } template<> struct alignment_of<uint16_t1> : integral_constant<uint32_t,sizeof(uint16_t)> {}; template<> struct alignment_of<const uint16_t1> : integral_constant<uint32_t,sizeof(uint16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<uint16_t1>::type> : integral_constant<uint32_t,sizeof(uint16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const uint16_t1>::type> : integral_constant<uint32_t,sizeof(uint16_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<uint16_t2> : integral_constant<uint32_t,44> {}; } template<> struct alignment_of<uint16_t2> : integral_constant<uint32_t,sizeof(uint16_t)> {}; template<> struct alignment_of<const uint16_t2> : integral_constant<uint32_t,sizeof(uint16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<uint16_t2>::type> : integral_constant<uint32_t,sizeof(uint16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const uint16_t2>::type> : integral_constant<uint32_t,sizeof(uint16_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<uint16_t2x4> : integral_constant<uint32_t,45> {}; } template<> struct alignment_of<uint16_t2x4> : integral_constant<uint32_t,sizeof(uint16_t)> {}; template<> struct alignment_of<const uint16_t2x4> : integral_constant<uint32_t,sizeof(uint16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<uint16_t2x4>::type> : integral_constant<uint32_t,sizeof(uint16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const uint16_t2x4>::type> : integral_constant<uint32_t,sizeof(uint16_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<uint16_t2x3> : integral_constant<uint32_t,46> {}; } template<> struct alignment_of<uint16_t2x3> : integral_constant<uint32_t,sizeof(uint16_t)> {}; template<> struct alignment_of<const uint16_t2x3> : integral_constant<uint32_t,sizeof(uint16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<uint16_t2x3>::type> : integral_constant<uint32_t,sizeof(uint16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const uint16_t2x3>::type> : integral_constant<uint32_t,sizeof(uint16_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<uint16_t2x2> : integral_constant<uint32_t,47> {}; } template<> struct alignment_of<uint16_t2x2> : integral_constant<uint32_t,sizeof(uint16_t)> {}; template<> struct alignment_of<const uint16_t2x2> : integral_constant<uint32_t,sizeof(uint16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<uint16_t2x2>::type> : integral_constant<uint32_t,sizeof(uint16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const uint16_t2x2>::type> : integral_constant<uint32_t,sizeof(uint16_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<uint16_t3> : integral_constant<uint32_t,48> {}; } template<> struct alignment_of<uint16_t3> : integral_constant<uint32_t,sizeof(uint16_t)> {}; template<> struct alignment_of<const uint16_t3> : integral_constant<uint32_t,sizeof(uint16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<uint16_t3>::type> : integral_constant<uint32_t,sizeof(uint16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const uint16_t3>::type> : integral_constant<uint32_t,sizeof(uint16_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<uint16_t3x4> : integral_constant<uint32_t,49> {}; } template<> struct alignment_of<uint16_t3x4> : integral_constant<uint32_t,sizeof(uint16_t)> {}; template<> struct alignment_of<const uint16_t3x4> : integral_constant<uint32_t,sizeof(uint16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<uint16_t3x4>::type> : integral_constant<uint32_t,sizeof(uint16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const uint16_t3x4>::type> : integral_constant<uint32_t,sizeof(uint16_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<uint16_t3x3> : integral_constant<uint32_t,50> {}; } template<> struct alignment_of<uint16_t3x3> : integral_constant<uint32_t,sizeof(uint16_t)> {}; template<> struct alignment_of<const uint16_t3x3> : integral_constant<uint32_t,sizeof(uint16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<uint16_t3x3>::type> : integral_constant<uint32_t,sizeof(uint16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const uint16_t3x3>::type> : integral_constant<uint32_t,sizeof(uint16_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<uint16_t3x2> : integral_constant<uint32_t,51> {}; } template<> struct alignment_of<uint16_t3x2> : integral_constant<uint32_t,sizeof(uint16_t)> {}; template<> struct alignment_of<const uint16_t3x2> : integral_constant<uint32_t,sizeof(uint16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<uint16_t3x2>::type> : integral_constant<uint32_t,sizeof(uint16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const uint16_t3x2>::type> : integral_constant<uint32_t,sizeof(uint16_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<uint16_t4> : integral_constant<uint32_t,52> {}; } template<> struct alignment_of<uint16_t4> : integral_constant<uint32_t,sizeof(uint16_t)> {}; template<> struct alignment_of<const uint16_t4> : integral_constant<uint32_t,sizeof(uint16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<uint16_t4>::type> : integral_constant<uint32_t,sizeof(uint16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const uint16_t4>::type> : integral_constant<uint32_t,sizeof(uint16_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<uint16_t4x4> : integral_constant<uint32_t,53> {}; } template<> struct alignment_of<uint16_t4x4> : integral_constant<uint32_t,sizeof(uint16_t)> {}; template<> struct alignment_of<const uint16_t4x4> : integral_constant<uint32_t,sizeof(uint16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<uint16_t4x4>::type> : integral_constant<uint32_t,sizeof(uint16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const uint16_t4x4>::type> : integral_constant<uint32_t,sizeof(uint16_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<uint16_t4x3> : integral_constant<uint32_t,54> {}; } template<> struct alignment_of<uint16_t4x3> : integral_constant<uint32_t,sizeof(uint16_t)> {}; template<> struct alignment_of<const uint16_t4x3> : integral_constant<uint32_t,sizeof(uint16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<uint16_t4x3>::type> : integral_constant<uint32_t,sizeof(uint16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const uint16_t4x3>::type> : integral_constant<uint32_t,sizeof(uint16_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<uint16_t4x2> : integral_constant<uint32_t,55> {}; } template<> struct alignment_of<uint16_t4x2> : integral_constant<uint32_t,sizeof(uint16_t)> {}; template<> struct alignment_of<const uint16_t4x2> : integral_constant<uint32_t,sizeof(uint16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<uint16_t4x2>::type> : integral_constant<uint32_t,sizeof(uint16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const uint16_t4x2>::type> : integral_constant<uint32_t,sizeof(uint16_t)> {};}}
namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<uint32_t> : integral_constant<uint32_t,56> {}; } template<> struct alignment_of<uint32_t> : integral_constant<uint32_t,sizeof(uint32_t)> {}; template<> struct alignment_of<const uint32_t> : integral_constant<uint32_t,sizeof(uint32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<uint32_t>::type> : integral_constant<uint32_t,sizeof(uint32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const uint32_t>::type> : integral_constant<uint32_t,sizeof(uint32_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<uint32_t1> : integral_constant<uint32_t,57> {}; } template<> struct alignment_of<uint32_t1> : integral_constant<uint32_t,sizeof(uint32_t)> {}; template<> struct alignment_of<const uint32_t1> : integral_constant<uint32_t,sizeof(uint32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<uint32_t1>::type> : integral_constant<uint32_t,sizeof(uint32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const uint32_t1>::type> : integral_constant<uint32_t,sizeof(uint32_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<uint32_t2> : integral_constant<uint32_t,58> {}; } template<> struct alignment_of<uint32_t2> : integral_constant<uint32_t,sizeof(uint32_t)> {}; template<> struct alignment_of<const uint32_t2> : integral_constant<uint32_t,sizeof(uint32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<uint32_t2>::type> : integral_constant<uint32_t,sizeof(uint32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const uint32_t2>::type> : integral_constant<uint32_t,sizeof(uint32_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<uint32_t2x4> : integral_constant<uint32_t,59> {}; } template<> struct alignment_of<uint32_t2x4> : integral_constant<uint32_t,sizeof(uint32_t)> {}; template<> struct alignment_of<const uint32_t2x4> : integral_constant<uint32_t,sizeof(uint32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<uint32_t2x4>::type> : integral_constant<uint32_t,sizeof(uint32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const uint32_t2x4>::type> : integral_constant<uint32_t,sizeof(uint32_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<uint32_t2x3> : integral_constant<uint32_t,60> {}; } template<> struct alignment_of<uint32_t2x3> : integral_constant<uint32_t,sizeof(uint32_t)> {}; template<> struct alignment_of<const uint32_t2x3> : integral_constant<uint32_t,sizeof(uint32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<uint32_t2x3>::type> : integral_constant<uint32_t,sizeof(uint32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const uint32_t2x3>::type> : integral_constant<uint32_t,sizeof(uint32_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<uint32_t2x2> : integral_constant<uint32_t,61> {}; } template<> struct alignment_of<uint32_t2x2> : integral_constant<uint32_t,sizeof(uint32_t)> {}; template<> struct alignment_of<const uint32_t2x2> : integral_constant<uint32_t,sizeof(uint32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<uint32_t2x2>::type> : integral_constant<uint32_t,sizeof(uint32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const uint32_t2x2>::type> : integral_constant<uint32_t,sizeof(uint32_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<uint32_t3> : integral_constant<uint32_t,62> {}; } template<> struct alignment_of<uint32_t3> : integral_constant<uint32_t,sizeof(uint32_t)> {}; template<> struct alignment_of<const uint32_t3> : integral_constant<uint32_t,sizeof(uint32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<uint32_t3>::type> : integral_constant<uint32_t,sizeof(uint32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const uint32_t3>::type> : integral_constant<uint32_t,sizeof(uint32_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<uint32_t3x4> : integral_constant<uint32_t,63> {}; } template<> struct alignment_of<uint32_t3x4> : integral_constant<uint32_t,sizeof(uint32_t)> {}; template<> struct alignment_of<const uint32_t3x4> : integral_constant<uint32_t,sizeof(uint32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<uint32_t3x4>::type> : integral_constant<uint32_t,sizeof(uint32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const uint32_t3x4>::type> : integral_constant<uint32_t,sizeof(uint32_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<uint32_t3x3> : integral_constant<uint32_t,64> {}; } template<> struct alignment_of<uint32_t3x3> : integral_constant<uint32_t,sizeof(uint32_t)> {}; template<> struct alignment_of<const uint32_t3x3> : integral_constant<uint32_t,sizeof(uint32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<uint32_t3x3>::type> : integral_constant<uint32_t,sizeof(uint32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const uint32_t3x3>::type> : integral_constant<uint32_t,sizeof(uint32_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<uint32_t3x2> : integral_constant<uint32_t,65> {}; } template<> struct alignment_of<uint32_t3x2> : integral_constant<uint32_t,sizeof(uint32_t)> {}; template<> struct alignment_of<const uint32_t3x2> : integral_constant<uint32_t,sizeof(uint32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<uint32_t3x2>::type> : integral_constant<uint32_t,sizeof(uint32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const uint32_t3x2>::type> : integral_constant<uint32_t,sizeof(uint32_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<uint32_t4> : integral_constant<uint32_t,66> {}; } template<> struct alignment_of<uint32_t4> : integral_constant<uint32_t,sizeof(uint32_t)> {}; template<> struct alignment_of<const uint32_t4> : integral_constant<uint32_t,sizeof(uint32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<uint32_t4>::type> : integral_constant<uint32_t,sizeof(uint32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const uint32_t4>::type> : integral_constant<uint32_t,sizeof(uint32_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<uint32_t4x4> : integral_constant<uint32_t,67> {}; } template<> struct alignment_of<uint32_t4x4> : integral_constant<uint32_t,sizeof(uint32_t)> {}; template<> struct alignment_of<const uint32_t4x4> : integral_constant<uint32_t,sizeof(uint32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<uint32_t4x4>::type> : integral_constant<uint32_t,sizeof(uint32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const uint32_t4x4>::type> : integral_constant<uint32_t,sizeof(uint32_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<uint32_t4x3> : integral_constant<uint32_t,68> {}; } template<> struct alignment_of<uint32_t4x3> : integral_constant<uint32_t,sizeof(uint32_t)> {}; template<> struct alignment_of<const uint32_t4x3> : integral_constant<uint32_t,sizeof(uint32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<uint32_t4x3>::type> : integral_constant<uint32_t,sizeof(uint32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const uint32_t4x3>::type> : integral_constant<uint32_t,sizeof(uint32_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<uint32_t4x2> : integral_constant<uint32_t,69> {}; } template<> struct alignment_of<uint32_t4x2> : integral_constant<uint32_t,sizeof(uint32_t)> {}; template<> struct alignment_of<const uint32_t4x2> : integral_constant<uint32_t,sizeof(uint32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<uint32_t4x2>::type> : integral_constant<uint32_t,sizeof(uint32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const uint32_t4x2>::type> : integral_constant<uint32_t,sizeof(uint32_t)> {};}}
namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<uint64_t> : integral_constant<uint32_t,70> {}; } template<> struct alignment_of<uint64_t> : integral_constant<uint32_t,sizeof(uint64_t)> {}; template<> struct alignment_of<const uint64_t> : integral_constant<uint32_t,sizeof(uint64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<uint64_t>::type> : integral_constant<uint32_t,sizeof(uint64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const uint64_t>::type> : integral_constant<uint32_t,sizeof(uint64_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<uint64_t1> : integral_constant<uint32_t,71> {}; } template<> struct alignment_of<uint64_t1> : integral_constant<uint32_t,sizeof(uint64_t)> {}; template<> struct alignment_of<const uint64_t1> : integral_constant<uint32_t,sizeof(uint64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<uint64_t1>::type> : integral_constant<uint32_t,sizeof(uint64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const uint64_t1>::type> : integral_constant<uint32_t,sizeof(uint64_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<uint64_t2> : integral_constant<uint32_t,72> {}; } template<> struct alignment_of<uint64_t2> : integral_constant<uint32_t,sizeof(uint64_t)> {}; template<> struct alignment_of<const uint64_t2> : integral_constant<uint32_t,sizeof(uint64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<uint64_t2>::type> : integral_constant<uint32_t,sizeof(uint64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const uint64_t2>::type> : integral_constant<uint32_t,sizeof(uint64_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<uint64_t2x4> : integral_constant<uint32_t,73> {}; } template<> struct alignment_of<uint64_t2x4> : integral_constant<uint32_t,sizeof(uint64_t)> {}; template<> struct alignment_of<const uint64_t2x4> : integral_constant<uint32_t,sizeof(uint64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<uint64_t2x4>::type> : integral_constant<uint32_t,sizeof(uint64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const uint64_t2x4>::type> : integral_constant<uint32_t,sizeof(uint64_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<uint64_t2x3> : integral_constant<uint32_t,74> {}; } template<> struct alignment_of<uint64_t2x3> : integral_constant<uint32_t,sizeof(uint64_t)> {}; template<> struct alignment_of<const uint64_t2x3> : integral_constant<uint32_t,sizeof(uint64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<uint64_t2x3>::type> : integral_constant<uint32_t,sizeof(uint64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const uint64_t2x3>::type> : integral_constant<uint32_t,sizeof(uint64_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<uint64_t2x2> : integral_constant<uint32_t,75> {}; } template<> struct alignment_of<uint64_t2x2> : integral_constant<uint32_t,sizeof(uint64_t)> {}; template<> struct alignment_of<const uint64_t2x2> : integral_constant<uint32_t,sizeof(uint64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<uint64_t2x2>::type> : integral_constant<uint32_t,sizeof(uint64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const uint64_t2x2>::type> : integral_constant<uint32_t,sizeof(uint64_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<uint64_t3> : integral_constant<uint32_t,76> {}; } template<> struct alignment_of<uint64_t3> : integral_constant<uint32_t,sizeof(uint64_t)> {}; template<> struct alignment_of<const uint64_t3> : integral_constant<uint32_t,sizeof(uint64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<uint64_t3>::type> : integral_constant<uint32_t,sizeof(uint64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const uint64_t3>::type> : integral_constant<uint32_t,sizeof(uint64_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<uint64_t3x4> : integral_constant<uint32_t,77> {}; } template<> struct alignment_of<uint64_t3x4> : integral_constant<uint32_t,sizeof(uint64_t)> {}; template<> struct alignment_of<const uint64_t3x4> : integral_constant<uint32_t,sizeof(uint64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<uint64_t3x4>::type> : integral_constant<uint32_t,sizeof(uint64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const uint64_t3x4>::type> : integral_constant<uint32_t,sizeof(uint64_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<uint64_t3x3> : integral_constant<uint32_t,78> {}; } template<> struct alignment_of<uint64_t3x3> : integral_constant<uint32_t,sizeof(uint64_t)> {}; template<> struct alignment_of<const uint64_t3x3> : integral_constant<uint32_t,sizeof(uint64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<uint64_t3x3>::type> : integral_constant<uint32_t,sizeof(uint64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const uint64_t3x3>::type> : integral_constant<uint32_t,sizeof(uint64_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<uint64_t3x2> : integral_constant<uint32_t,79> {}; } template<> struct alignment_of<uint64_t3x2> : integral_constant<uint32_t,sizeof(uint64_t)> {}; template<> struct alignment_of<const uint64_t3x2> : integral_constant<uint32_t,sizeof(uint64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<uint64_t3x2>::type> : integral_constant<uint32_t,sizeof(uint64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const uint64_t3x2>::type> : integral_constant<uint32_t,sizeof(uint64_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<uint64_t4> : integral_constant<uint32_t,80> {}; } template<> struct alignment_of<uint64_t4> : integral_constant<uint32_t,sizeof(uint64_t)> {}; template<> struct alignment_of<const uint64_t4> : integral_constant<uint32_t,sizeof(uint64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<uint64_t4>::type> : integral_constant<uint32_t,sizeof(uint64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const uint64_t4>::type> : integral_constant<uint32_t,sizeof(uint64_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<uint64_t4x4> : integral_constant<uint32_t,81> {}; } template<> struct alignment_of<uint64_t4x4> : integral_constant<uint32_t,sizeof(uint64_t)> {}; template<> struct alignment_of<const uint64_t4x4> : integral_constant<uint32_t,sizeof(uint64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<uint64_t4x4>::type> : integral_constant<uint32_t,sizeof(uint64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const uint64_t4x4>::type> : integral_constant<uint32_t,sizeof(uint64_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<uint64_t4x3> : integral_constant<uint32_t,82> {}; } template<> struct alignment_of<uint64_t4x3> : integral_constant<uint32_t,sizeof(uint64_t)> {}; template<> struct alignment_of<const uint64_t4x3> : integral_constant<uint32_t,sizeof(uint64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<uint64_t4x3>::type> : integral_constant<uint32_t,sizeof(uint64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const uint64_t4x3>::type> : integral_constant<uint32_t,sizeof(uint64_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<uint64_t4x2> : integral_constant<uint32_t,83> {}; } template<> struct alignment_of<uint64_t4x2> : integral_constant<uint32_t,sizeof(uint64_t)> {}; template<> struct alignment_of<const uint64_t4x2> : integral_constant<uint32_t,sizeof(uint64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<uint64_t4x2>::type> : integral_constant<uint32_t,sizeof(uint64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const uint64_t4x2>::type> : integral_constant<uint32_t,sizeof(uint64_t)> {};}}
namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<bool> : integral_constant<uint32_t,84> {}; } template<> struct alignment_of<bool> : integral_constant<uint32_t,sizeof(bool)> {}; template<> struct alignment_of<const bool> : integral_constant<uint32_t,sizeof(bool)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<bool>::type> : integral_constant<uint32_t,sizeof(bool)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const bool>::type> : integral_constant<uint32_t,sizeof(bool)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<bool1> : integral_constant<uint32_t,85> {}; } template<> struct alignment_of<bool1> : integral_constant<uint32_t,sizeof(bool)> {}; template<> struct alignment_of<const bool1> : integral_constant<uint32_t,sizeof(bool)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<bool1>::type> : integral_constant<uint32_t,sizeof(bool)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const bool1>::type> : integral_constant<uint32_t,sizeof(bool)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<bool2> : integral_constant<uint32_t,86> {}; } template<> struct alignment_of<bool2> : integral_constant<uint32_t,sizeof(bool)> {}; template<> struct alignment_of<const bool2> : integral_constant<uint32_t,sizeof(bool)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<bool2>::type> : integral_constant<uint32_t,sizeof(bool)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const bool2>::type> : integral_constant<uint32_t,sizeof(bool)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<bool2x4> : integral_constant<uint32_t,87> {}; } template<> struct alignment_of<bool2x4> : integral_constant<uint32_t,sizeof(bool)> {}; template<> struct alignment_of<const bool2x4> : integral_constant<uint32_t,sizeof(bool)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<bool2x4>::type> : integral_constant<uint32_t,sizeof(bool)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const bool2x4>::type> : integral_constant<uint32_t,sizeof(bool)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<bool2x3> : integral_constant<uint32_t,88> {}; } template<> struct alignment_of<bool2x3> : integral_constant<uint32_t,sizeof(bool)> {}; template<> struct alignment_of<const bool2x3> : integral_constant<uint32_t,sizeof(bool)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<bool2x3>::type> : integral_constant<uint32_t,sizeof(bool)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const bool2x3>::type> : integral_constant<uint32_t,sizeof(bool)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<bool2x2> : integral_constant<uint32_t,89> {}; } template<> struct alignment_of<bool2x2> : integral_constant<uint32_t,sizeof(bool)> {}; template<> struct alignment_of<const bool2x2> : integral_constant<uint32_t,sizeof(bool)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<bool2x2>::type> : integral_constant<uint32_t,sizeof(bool)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const bool2x2>::type> : integral_constant<uint32_t,sizeof(bool)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<bool3> : integral_constant<uint32_t,90> {}; } template<> struct alignment_of<bool3> : integral_constant<uint32_t,sizeof(bool)> {}; template<> struct alignment_of<const bool3> : integral_constant<uint32_t,sizeof(bool)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<bool3>::type> : integral_constant<uint32_t,sizeof(bool)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const bool3>::type> : integral_constant<uint32_t,sizeof(bool)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<bool3x4> : integral_constant<uint32_t,91> {}; } template<> struct alignment_of<bool3x4> : integral_constant<uint32_t,sizeof(bool)> {}; template<> struct alignment_of<const bool3x4> : integral_constant<uint32_t,sizeof(bool)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<bool3x4>::type> : integral_constant<uint32_t,sizeof(bool)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const bool3x4>::type> : integral_constant<uint32_t,sizeof(bool)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<bool3x3> : integral_constant<uint32_t,92> {}; } template<> struct alignment_of<bool3x3> : integral_constant<uint32_t,sizeof(bool)> {}; template<> struct alignment_of<const bool3x3> : integral_constant<uint32_t,sizeof(bool)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<bool3x3>::type> : integral_constant<uint32_t,sizeof(bool)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const bool3x3>::type> : integral_constant<uint32_t,sizeof(bool)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<bool3x2> : integral_constant<uint32_t,93> {}; } template<> struct alignment_of<bool3x2> : integral_constant<uint32_t,sizeof(bool)> {}; template<> struct alignment_of<const bool3x2> : integral_constant<uint32_t,sizeof(bool)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<bool3x2>::type> : integral_constant<uint32_t,sizeof(bool)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const bool3x2>::type> : integral_constant<uint32_t,sizeof(bool)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<bool4> : integral_constant<uint32_t,94> {}; } template<> struct alignment_of<bool4> : integral_constant<uint32_t,sizeof(bool)> {}; template<> struct alignment_of<const bool4> : integral_constant<uint32_t,sizeof(bool)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<bool4>::type> : integral_constant<uint32_t,sizeof(bool)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const bool4>::type> : integral_constant<uint32_t,sizeof(bool)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<bool4x4> : integral_constant<uint32_t,95> {}; } template<> struct alignment_of<bool4x4> : integral_constant<uint32_t,sizeof(bool)> {}; template<> struct alignment_of<const bool4x4> : integral_constant<uint32_t,sizeof(bool)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<bool4x4>::type> : integral_constant<uint32_t,sizeof(bool)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const bool4x4>::type> : integral_constant<uint32_t,sizeof(bool)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<bool4x3> : integral_constant<uint32_t,96> {}; } template<> struct alignment_of<bool4x3> : integral_constant<uint32_t,sizeof(bool)> {}; template<> struct alignment_of<const bool4x3> : integral_constant<uint32_t,sizeof(bool)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<bool4x3>::type> : integral_constant<uint32_t,sizeof(bool)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const bool4x3>::type> : integral_constant<uint32_t,sizeof(bool)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<bool4x2> : integral_constant<uint32_t,97> {}; } template<> struct alignment_of<bool4x2> : integral_constant<uint32_t,sizeof(bool)> {}; template<> struct alignment_of<const bool4x2> : integral_constant<uint32_t,sizeof(bool)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<bool4x2>::type> : integral_constant<uint32_t,sizeof(bool)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const bool4x2>::type> : integral_constant<uint32_t,sizeof(bool)> {};}}
namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<float16_t> : integral_constant<uint32_t,98> {}; } template<> struct alignment_of<float16_t> : integral_constant<uint32_t,sizeof(float16_t)> {}; template<> struct alignment_of<const float16_t> : integral_constant<uint32_t,sizeof(float16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<float16_t>::type> : integral_constant<uint32_t,sizeof(float16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const float16_t>::type> : integral_constant<uint32_t,sizeof(float16_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<float16_t1> : integral_constant<uint32_t,99> {}; } template<> struct alignment_of<float16_t1> : integral_constant<uint32_t,sizeof(float16_t)> {}; template<> struct alignment_of<const float16_t1> : integral_constant<uint32_t,sizeof(float16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<float16_t1>::type> : integral_constant<uint32_t,sizeof(float16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const float16_t1>::type> : integral_constant<uint32_t,sizeof(float16_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<float16_t2> : integral_constant<uint32_t,100> {}; } template<> struct alignment_of<float16_t2> : integral_constant<uint32_t,sizeof(float16_t)> {}; template<> struct alignment_of<const float16_t2> : integral_constant<uint32_t,sizeof(float16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<float16_t2>::type> : integral_constant<uint32_t,sizeof(float16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const float16_t2>::type> : integral_constant<uint32_t,sizeof(float16_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<float16_t2x4> : integral_constant<uint32_t,101> {}; } template<> struct alignment_of<float16_t2x4> : integral_constant<uint32_t,sizeof(float16_t)> {}; template<> struct alignment_of<const float16_t2x4> : integral_constant<uint32_t,sizeof(float16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<float16_t2x4>::type> : integral_constant<uint32_t,sizeof(float16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const float16_t2x4>::type> : integral_constant<uint32_t,sizeof(float16_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<float16_t2x3> : integral_constant<uint32_t,102> {}; } template<> struct alignment_of<float16_t2x3> : integral_constant<uint32_t,sizeof(float16_t)> {}; template<> struct alignment_of<const float16_t2x3> : integral_constant<uint32_t,sizeof(float16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<float16_t2x3>::type> : integral_constant<uint32_t,sizeof(float16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const float16_t2x3>::type> : integral_constant<uint32_t,sizeof(float16_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<float16_t2x2> : integral_constant<uint32_t,103> {}; } template<> struct alignment_of<float16_t2x2> : integral_constant<uint32_t,sizeof(float16_t)> {}; template<> struct alignment_of<const float16_t2x2> : integral_constant<uint32_t,sizeof(float16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<float16_t2x2>::type> : integral_constant<uint32_t,sizeof(float16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const float16_t2x2>::type> : integral_constant<uint32_t,sizeof(float16_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<float16_t3> : integral_constant<uint32_t,104> {}; } template<> struct alignment_of<float16_t3> : integral_constant<uint32_t,sizeof(float16_t)> {}; template<> struct alignment_of<const float16_t3> : integral_constant<uint32_t,sizeof(float16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<float16_t3>::type> : integral_constant<uint32_t,sizeof(float16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const float16_t3>::type> : integral_constant<uint32_t,sizeof(float16_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<float16_t3x4> : integral_constant<uint32_t,105> {}; } template<> struct alignment_of<float16_t3x4> : integral_constant<uint32_t,sizeof(float16_t)> {}; template<> struct alignment_of<const float16_t3x4> : integral_constant<uint32_t,sizeof(float16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<float16_t3x4>::type> : integral_constant<uint32_t,sizeof(float16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const float16_t3x4>::type> : integral_constant<uint32_t,sizeof(float16_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<float16_t3x3> : integral_constant<uint32_t,106> {}; } template<> struct alignment_of<float16_t3x3> : integral_constant<uint32_t,sizeof(float16_t)> {}; template<> struct alignment_of<const float16_t3x3> : integral_constant<uint32_t,sizeof(float16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<float16_t3x3>::type> : integral_constant<uint32_t,sizeof(float16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const float16_t3x3>::type> : integral_constant<uint32_t,sizeof(float16_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<float16_t3x2> : integral_constant<uint32_t,107> {}; } template<> struct alignment_of<float16_t3x2> : integral_constant<uint32_t,sizeof(float16_t)> {}; template<> struct alignment_of<const float16_t3x2> : integral_constant<uint32_t,sizeof(float16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<float16_t3x2>::type> : integral_constant<uint32_t,sizeof(float16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const float16_t3x2>::type> : integral_constant<uint32_t,sizeof(float16_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<float16_t4> : integral_constant<uint32_t,108> {}; } template<> struct alignment_of<float16_t4> : integral_constant<uint32_t,sizeof(float16_t)> {}; template<> struct alignment_of<const float16_t4> : integral_constant<uint32_t,sizeof(float16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<float16_t4>::type> : integral_constant<uint32_t,sizeof(float16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const float16_t4>::type> : integral_constant<uint32_t,sizeof(float16_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<float16_t4x4> : integral_constant<uint32_t,109> {}; } template<> struct alignment_of<float16_t4x4> : integral_constant<uint32_t,sizeof(float16_t)> {}; template<> struct alignment_of<const float16_t4x4> : integral_constant<uint32_t,sizeof(float16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<float16_t4x4>::type> : integral_constant<uint32_t,sizeof(float16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const float16_t4x4>::type> : integral_constant<uint32_t,sizeof(float16_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<float16_t4x3> : integral_constant<uint32_t,110> {}; } template<> struct alignment_of<float16_t4x3> : integral_constant<uint32_t,sizeof(float16_t)> {}; template<> struct alignment_of<const float16_t4x3> : integral_constant<uint32_t,sizeof(float16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<float16_t4x3>::type> : integral_constant<uint32_t,sizeof(float16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const float16_t4x3>::type> : integral_constant<uint32_t,sizeof(float16_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<float16_t4x2> : integral_constant<uint32_t,111> {}; } template<> struct alignment_of<float16_t4x2> : integral_constant<uint32_t,sizeof(float16_t)> {}; template<> struct alignment_of<const float16_t4x2> : integral_constant<uint32_t,sizeof(float16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<float16_t4x2>::type> : integral_constant<uint32_t,sizeof(float16_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const float16_t4x2>::type> : integral_constant<uint32_t,sizeof(float16_t)> {};}}
namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<float32_t> : integral_constant<uint32_t,112> {}; } template<> struct alignment_of<float32_t> : integral_constant<uint32_t,sizeof(float32_t)> {}; template<> struct alignment_of<const float32_t> : integral_constant<uint32_t,sizeof(float32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<float32_t>::type> : integral_constant<uint32_t,sizeof(float32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const float32_t>::type> : integral_constant<uint32_t,sizeof(float32_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<float32_t1> : integral_constant<uint32_t,113> {}; } template<> struct alignment_of<float32_t1> : integral_constant<uint32_t,sizeof(float32_t)> {}; template<> struct alignment_of<const float32_t1> : integral_constant<uint32_t,sizeof(float32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<float32_t1>::type> : integral_constant<uint32_t,sizeof(float32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const float32_t1>::type> : integral_constant<uint32_t,sizeof(float32_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<float32_t2> : integral_constant<uint32_t,114> {}; } template<> struct alignment_of<float32_t2> : integral_constant<uint32_t,sizeof(float32_t)> {}; template<> struct alignment_of<const float32_t2> : integral_constant<uint32_t,sizeof(float32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<float32_t2>::type> : integral_constant<uint32_t,sizeof(float32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const float32_t2>::type> : integral_constant<uint32_t,sizeof(float32_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<float32_t2x4> : integral_constant<uint32_t,115> {}; } template<> struct alignment_of<float32_t2x4> : integral_constant<uint32_t,sizeof(float32_t)> {}; template<> struct alignment_of<const float32_t2x4> : integral_constant<uint32_t,sizeof(float32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<float32_t2x4>::type> : integral_constant<uint32_t,sizeof(float32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const float32_t2x4>::type> : integral_constant<uint32_t,sizeof(float32_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<float32_t2x3> : integral_constant<uint32_t,116> {}; } template<> struct alignment_of<float32_t2x3> : integral_constant<uint32_t,sizeof(float32_t)> {}; template<> struct alignment_of<const float32_t2x3> : integral_constant<uint32_t,sizeof(float32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<float32_t2x3>::type> : integral_constant<uint32_t,sizeof(float32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const float32_t2x3>::type> : integral_constant<uint32_t,sizeof(float32_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<float32_t2x2> : integral_constant<uint32_t,117> {}; } template<> struct alignment_of<float32_t2x2> : integral_constant<uint32_t,sizeof(float32_t)> {}; template<> struct alignment_of<const float32_t2x2> : integral_constant<uint32_t,sizeof(float32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<float32_t2x2>::type> : integral_constant<uint32_t,sizeof(float32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const float32_t2x2>::type> : integral_constant<uint32_t,sizeof(float32_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<float32_t3> : integral_constant<uint32_t,118> {}; } template<> struct alignment_of<float32_t3> : integral_constant<uint32_t,sizeof(float32_t)> {}; template<> struct alignment_of<const float32_t3> : integral_constant<uint32_t,sizeof(float32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<float32_t3>::type> : integral_constant<uint32_t,sizeof(float32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const float32_t3>::type> : integral_constant<uint32_t,sizeof(float32_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<float32_t3x4> : integral_constant<uint32_t,119> {}; } template<> struct alignment_of<float32_t3x4> : integral_constant<uint32_t,sizeof(float32_t)> {}; template<> struct alignment_of<const float32_t3x4> : integral_constant<uint32_t,sizeof(float32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<float32_t3x4>::type> : integral_constant<uint32_t,sizeof(float32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const float32_t3x4>::type> : integral_constant<uint32_t,sizeof(float32_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<float32_t3x3> : integral_constant<uint32_t,120> {}; } template<> struct alignment_of<float32_t3x3> : integral_constant<uint32_t,sizeof(float32_t)> {}; template<> struct alignment_of<const float32_t3x3> : integral_constant<uint32_t,sizeof(float32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<float32_t3x3>::type> : integral_constant<uint32_t,sizeof(float32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const float32_t3x3>::type> : integral_constant<uint32_t,sizeof(float32_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<float32_t3x2> : integral_constant<uint32_t,121> {}; } template<> struct alignment_of<float32_t3x2> : integral_constant<uint32_t,sizeof(float32_t)> {}; template<> struct alignment_of<const float32_t3x2> : integral_constant<uint32_t,sizeof(float32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<float32_t3x2>::type> : integral_constant<uint32_t,sizeof(float32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const float32_t3x2>::type> : integral_constant<uint32_t,sizeof(float32_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<float32_t4> : integral_constant<uint32_t,122> {}; } template<> struct alignment_of<float32_t4> : integral_constant<uint32_t,sizeof(float32_t)> {}; template<> struct alignment_of<const float32_t4> : integral_constant<uint32_t,sizeof(float32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<float32_t4>::type> : integral_constant<uint32_t,sizeof(float32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const float32_t4>::type> : integral_constant<uint32_t,sizeof(float32_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<float32_t4x4> : integral_constant<uint32_t,123> {}; } template<> struct alignment_of<float32_t4x4> : integral_constant<uint32_t,sizeof(float32_t)> {}; template<> struct alignment_of<const float32_t4x4> : integral_constant<uint32_t,sizeof(float32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<float32_t4x4>::type> : integral_constant<uint32_t,sizeof(float32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const float32_t4x4>::type> : integral_constant<uint32_t,sizeof(float32_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<float32_t4x3> : integral_constant<uint32_t,124> {}; } template<> struct alignment_of<float32_t4x3> : integral_constant<uint32_t,sizeof(float32_t)> {}; template<> struct alignment_of<const float32_t4x3> : integral_constant<uint32_t,sizeof(float32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<float32_t4x3>::type> : integral_constant<uint32_t,sizeof(float32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const float32_t4x3>::type> : integral_constant<uint32_t,sizeof(float32_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<float32_t4x2> : integral_constant<uint32_t,125> {}; } template<> struct alignment_of<float32_t4x2> : integral_constant<uint32_t,sizeof(float32_t)> {}; template<> struct alignment_of<const float32_t4x2> : integral_constant<uint32_t,sizeof(float32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<float32_t4x2>::type> : integral_constant<uint32_t,sizeof(float32_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const float32_t4x2>::type> : integral_constant<uint32_t,sizeof(float32_t)> {};}}
namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<float64_t> : integral_constant<uint32_t,126> {}; } template<> struct alignment_of<float64_t> : integral_constant<uint32_t,sizeof(float64_t)> {}; template<> struct alignment_of<const float64_t> : integral_constant<uint32_t,sizeof(float64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<float64_t>::type> : integral_constant<uint32_t,sizeof(float64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const float64_t>::type> : integral_constant<uint32_t,sizeof(float64_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<float64_t1> : integral_constant<uint32_t,127> {}; } template<> struct alignment_of<float64_t1> : integral_constant<uint32_t,sizeof(float64_t)> {}; template<> struct alignment_of<const float64_t1> : integral_constant<uint32_t,sizeof(float64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<float64_t1>::type> : integral_constant<uint32_t,sizeof(float64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const float64_t1>::type> : integral_constant<uint32_t,sizeof(float64_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<float64_t2> : integral_constant<uint32_t,128> {}; } template<> struct alignment_of<float64_t2> : integral_constant<uint32_t,sizeof(float64_t)> {}; template<> struct alignment_of<const float64_t2> : integral_constant<uint32_t,sizeof(float64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<float64_t2>::type> : integral_constant<uint32_t,sizeof(float64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const float64_t2>::type> : integral_constant<uint32_t,sizeof(float64_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<float64_t2x4> : integral_constant<uint32_t,129> {}; } template<> struct alignment_of<float64_t2x4> : integral_constant<uint32_t,sizeof(float64_t)> {}; template<> struct alignment_of<const float64_t2x4> : integral_constant<uint32_t,sizeof(float64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<float64_t2x4>::type> : integral_constant<uint32_t,sizeof(float64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const float64_t2x4>::type> : integral_constant<uint32_t,sizeof(float64_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<float64_t2x3> : integral_constant<uint32_t,130> {}; } template<> struct alignment_of<float64_t2x3> : integral_constant<uint32_t,sizeof(float64_t)> {}; template<> struct alignment_of<const float64_t2x3> : integral_constant<uint32_t,sizeof(float64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<float64_t2x3>::type> : integral_constant<uint32_t,sizeof(float64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const float64_t2x3>::type> : integral_constant<uint32_t,sizeof(float64_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<float64_t2x2> : integral_constant<uint32_t,131> {}; } template<> struct alignment_of<float64_t2x2> : integral_constant<uint32_t,sizeof(float64_t)> {}; template<> struct alignment_of<const float64_t2x2> : integral_constant<uint32_t,sizeof(float64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<float64_t2x2>::type> : integral_constant<uint32_t,sizeof(float64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const float64_t2x2>::type> : integral_constant<uint32_t,sizeof(float64_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<float64_t3> : integral_constant<uint32_t,132> {}; } template<> struct alignment_of<float64_t3> : integral_constant<uint32_t,sizeof(float64_t)> {}; template<> struct alignment_of<const float64_t3> : integral_constant<uint32_t,sizeof(float64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<float64_t3>::type> : integral_constant<uint32_t,sizeof(float64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const float64_t3>::type> : integral_constant<uint32_t,sizeof(float64_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<float64_t3x4> : integral_constant<uint32_t,133> {}; } template<> struct alignment_of<float64_t3x4> : integral_constant<uint32_t,sizeof(float64_t)> {}; template<> struct alignment_of<const float64_t3x4> : integral_constant<uint32_t,sizeof(float64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<float64_t3x4>::type> : integral_constant<uint32_t,sizeof(float64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const float64_t3x4>::type> : integral_constant<uint32_t,sizeof(float64_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<float64_t3x3> : integral_constant<uint32_t,134> {}; } template<> struct alignment_of<float64_t3x3> : integral_constant<uint32_t,sizeof(float64_t)> {}; template<> struct alignment_of<const float64_t3x3> : integral_constant<uint32_t,sizeof(float64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<float64_t3x3>::type> : integral_constant<uint32_t,sizeof(float64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const float64_t3x3>::type> : integral_constant<uint32_t,sizeof(float64_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<float64_t3x2> : integral_constant<uint32_t,135> {}; } template<> struct alignment_of<float64_t3x2> : integral_constant<uint32_t,sizeof(float64_t)> {}; template<> struct alignment_of<const float64_t3x2> : integral_constant<uint32_t,sizeof(float64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<float64_t3x2>::type> : integral_constant<uint32_t,sizeof(float64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const float64_t3x2>::type> : integral_constant<uint32_t,sizeof(float64_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<float64_t4> : integral_constant<uint32_t,136> {}; } template<> struct alignment_of<float64_t4> : integral_constant<uint32_t,sizeof(float64_t)> {}; template<> struct alignment_of<const float64_t4> : integral_constant<uint32_t,sizeof(float64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<float64_t4>::type> : integral_constant<uint32_t,sizeof(float64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const float64_t4>::type> : integral_constant<uint32_t,sizeof(float64_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<float64_t4x4> : integral_constant<uint32_t,137> {}; } template<> struct alignment_of<float64_t4x4> : integral_constant<uint32_t,sizeof(float64_t)> {}; template<> struct alignment_of<const float64_t4x4> : integral_constant<uint32_t,sizeof(float64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<float64_t4x4>::type> : integral_constant<uint32_t,sizeof(float64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const float64_t4x4>::type> : integral_constant<uint32_t,sizeof(float64_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<float64_t4x3> : integral_constant<uint32_t,138> {}; } template<> struct alignment_of<float64_t4x3> : integral_constant<uint32_t,sizeof(float64_t)> {}; template<> struct alignment_of<const float64_t4x3> : integral_constant<uint32_t,sizeof(float64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<float64_t4x3>::type> : integral_constant<uint32_t,sizeof(float64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const float64_t4x3>::type> : integral_constant<uint32_t,sizeof(float64_t)> {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t<float64_t4x2> : integral_constant<uint32_t,139> {}; } template<> struct alignment_of<float64_t4x2> : integral_constant<uint32_t,sizeof(float64_t)> {}; template<> struct alignment_of<const float64_t4x2> : integral_constant<uint32_t,sizeof(float64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<float64_t4x2>::type> : integral_constant<uint32_t,sizeof(float64_t)> {}; template<> struct alignment_of<typename impl::add_lvalue_reference<const float64_t4x2>::type> : integral_constant<uint32_t,sizeof(float64_t)> {};}}
# 22 "nbl/builtin/hlsl/limits.hlsl"
# 1 "nbl/builtin/hlsl/bit.hlsl"
# 623 "nbl/builtin/hlsl/limits.hlsl"
# 666 "nbl/builtin/hlsl/limits.hlsl"
namespace nbl
{
namespace hlsl
{
enum float_denorm_style {
denorm_indeterminate = -1,
denorm_absent = 0,
denorm_present = 1
};
enum float_round_style {
round_indeterminate = -1,
round_toward_zero = 0,
round_to_nearest = 1,
round_toward_infinity = 2,
round_toward_neg_infinity = 3
};
# 697 "nbl/builtin/hlsl/limits.hlsl"
namespace impl
{
template<class T>
struct num_base : type_identity<T>
{
const static int32_t size = sizeof(T);
const static int32_t S8 = size;
const static int32_t S16 = size / 2;
const static int32_t S32 = size / 4;
const static int32_t S64 = size / 8;
const static int32_t float_digits = 11*S16 + 2*S32 + 5*S64;
const static int32_t float_decimal_digits = 3*(S16 + S64);
const static int32_t float_decimal_max_digits = 5*S16 - S32 - S64;
const static int32_t float_min_decimal_exponent = -4*S16 - 29*S32 - 233*S64;
const static int32_t float_max_decimal_exponent = 4*S16 + 30*S32 + 232*S64;
const static int32_t float_exponent_bits = 8 * size - float_digits - 1;
const static int32_t float_max_exponent = 1l << float_exponent_bits;
const static int32_t float_min_exponent = 3 - float_max_exponent;
const static bool is_bool = is_same<T, bool>::value;
const static bool is_specialized = true;
const static bool is_signed = nbl::hlsl::is_signed<T>::value;
const static bool is_integer = is_integral<T>::value;
const static bool is_exact = is_integer;
const static bool has_infinity = !is_integer;
const static bool has_quiet_NaN = !is_integer;
const static bool has_signaling_NaN = !is_integer;
const static float_denorm_style has_denorm = is_integer ? float_denorm_style::denorm_absent : float_denorm_style::denorm_present;
const static bool has_denorm_loss = false;
const static float_round_style round_style = is_integer ? float_round_style::round_toward_zero : float_round_style::round_to_nearest;
const static bool is_iec559 = !is_integer;
const static bool is_bounded = true;
const static bool is_modulo = is_integer && !is_signed && !is_bool;
const static int32_t digits = is_integer ? (is_bool? 1 : 8*size - is_signed) : float_digits;
const static int32_t digits10 = is_integer ? (is_bool ? 0 : S8 * 2 + S32 + int32_t(!is_signed) * S64) : float_decimal_digits;
const static int32_t max_digits10 = !is_integer ? float_decimal_max_digits : 0;
const static int32_t radix = 2;
const static int32_t min_exponent = !is_integer ? float_min_exponent : 0;
const static int32_t min_exponent10 = !is_integer ? float_min_decimal_exponent : 0;
const static int32_t max_exponent = !is_integer ? float_max_exponent : 0;
const static int32_t max_exponent10 = !is_integer ? float_max_decimal_exponent : 0;
const static bool traps = false;
const static bool tinyness_before = false;
};
template<class T>
struct num_traits : num_base<T>
{
const static T min = T(num_base<T>::is_signed)<<(num_base<T>::is_signed ? num_base<T>::digits:0);
const static T max = ~(T(num_base<T>::is_signed)<<num_base<T>::digits);
const static T denorm_min = T(0);
const static T quiet_NaN = T(0);
const static T signaling_NaN = T(0);
const static T infinity = T(0);
};
template<>
struct num_traits<float16_t> : num_base<float16_t>
{
using type =
float32_t
;
const static type min = 6.103515e-05F;
const static type max = 65504.0F;
const static type denorm_min = 5.96046448e-08F;
const static uint16_t quiet_NaN = 0x7FFF;
const static uint16_t signaling_NaN = 0x7DFF;
const static uint16_t infinity = 0x7C00;
};
template<>
struct num_traits<float32_t> : num_base<float32_t>
{
const static float32_t max = 3.402823466e+38F;
const static float32_t min = 1.175494351e-38F;
const static float32_t denorm_min = 1.401298464e-45F;
const static uint32_t quiet_NaN = 0x7FC00000u;
const static uint32_t signaling_NaN = 0x7FC00001u;
const static uint32_t infinity = 0x7F800000u;
};
template<>
struct num_traits<float64_t> : num_base<float64_t>
{
const static float64_t max = 1.7976931348623158e+308;
const static float64_t min = 2.2250738585072014e-308;
const static float64_t denorm_min = 4.9406564584124654e-324;
const static uint64_t quiet_NaN = 0x7FF8000000000000ull;
const static uint64_t signaling_NaN = 0x7FF0000000000001ull;
const static uint64_t infinity = 0x7FF0000000000000ull;
};
template<class T>
struct numeric_limits : num_traits<T>
{
using type = typename num_traits<T>::type;
const static type lowest = num_traits<T>::is_integer ? num_traits<T>::min : -num_traits<T>::max;
const static type epsilon = num_traits<T>::is_integer ? type(0) : (type(1) / type(1ull<<(num_traits<T>::float_digits-1)));
const static type round_error = type(num_traits<T>::is_iec559)/type(2.0);
};
}
template<class T>
struct numeric_limits : impl::numeric_limits<T> {};
# 897 "nbl/builtin/hlsl/limits.hlsl"
}
}
# 3701 "nbl/builtin/hlsl/functional.hlsl"
namespace nbl
{
namespace hlsl
{
template<typename T> struct bit_and { using type_t = T; T operator()(const in T lhs, const in T rhs) { return lhs & rhs; }
using scalar_t = typename scalar_type<T>::type;
using bitfield_t = typename unsigned_integer_of_size<sizeof(scalar_t)>::type;
_Static_assert(!is_floating_point<T>::value,"We cannot define the identity element properly, you can thank https//github.com/microsoft/DirectXShaderCompiler/issues/5868 !");
const static T identity = ~bitfield_t(0);
};
template<typename T> struct bit_or { using type_t = T; T operator()(const in T lhs, const in T rhs) { return lhs | rhs; }
const static T identity = T(0);
};
template<typename T> struct bit_xor { using type_t = T; T operator()(const in T lhs, const in T rhs) { return lhs ^ rhs; }
const static T identity = T(0);
};
template<typename T> struct plus { using type_t = T; T operator()(const in T lhs, const in T rhs) { return lhs + rhs; }
const static T identity = T(0);
};
template<typename T> struct multiplies { using type_t = T; T operator()(const in T lhs, const in T rhs) { return lhs * rhs; }
const static T identity = T(1);
};
template<typename T> struct greater { using type_t = T; T operator()(const in T lhs, const in T rhs) { return lhs > rhs; } };
template<typename T> struct less { using type_t = T; T operator()(const in T lhs, const in T rhs) { return lhs < rhs; } };
template<typename T> struct greater_equal { using type_t = T; T operator()(const in T lhs, const in T rhs) { return lhs >= rhs; } };
template<typename T> struct less_equal { using type_t = T; T operator()(const in T lhs, const in T rhs) { return lhs <= rhs; } };
template<typename T>
struct minimum
{
using type_t = T;
using scalar_t = typename scalar_type<T>::type;
T operator()(const in T lhs, const in T rhs)
{
return rhs<lhs ? rhs:lhs;
}
const static T identity = numeric_limits<scalar_t>::max;
};
template<typename T>
struct maximum
{
using type_t = T;
using scalar_t = typename scalar_type<T>::type;
T operator()(const in T lhs, const in T rhs)
{
return lhs<rhs ? rhs:lhs;
}
const static T identity = numeric_limits<scalar_t>::lowest;
};
}
}
# 512 "D:\\work\\Nabla\\examples_tests\\48.ArithmeticUnitTest\\hlsl\\common.hlsl"
template<uint32_t kScanDwordCount=256*1024>
struct Output
{
const static uint32_t ScanDwordCount = kScanDwordCount;
uint32_t subgroupSize;
uint32_t output[ScanDwordCount];
};
# 4 "D:\\work\\Nabla\\examples_tests\\48.ArithmeticUnitTest\\hlsl\\shaderCommon.hlsl"
# 1 "nbl/builtin/hlsl/glsl_compat/core.hlsl"
# 1 "nbl/builtin/hlsl/cpp_compat.hlsl"
# 22 "nbl/builtin/hlsl/glsl_compat/core.hlsl"
# 1 "nbl/builtin/hlsl/spirv_intrinsics/core.hlsl"
# 518 "nbl/builtin/hlsl/glsl_compat/core.hlsl"
namespace nbl
{
namespace hlsl
{
namespace glsl
{
template<typename T>
T atomicAdd(inout T ptr, T value)
{
return spirv::atomicAdd<T>(ptr, 1, 0, value);
}
template<typename T>
T atomicAnd(inout T ptr, T value)
{
return spirv::atomicAnd<T>(ptr, 1, 0, value);
}
template<typename T>
T atomicOr(inout T ptr, T value)
{
return spirv::atomicOr<T>(ptr, 1, 0, value);
}
template<typename T>
T atomicXor(inout T ptr, T value)
{
return spirv::atomicXor<T>(ptr, 1, 0, value);
}
template<typename T>
T atomicMin(inout T ptr, T value)
{
return spirv::atomicMin<T>(ptr, 1, 0, value);
}
template<typename T>
T atomicMax(inout T ptr, T value)
{
return spirv::atomicMax<T>(ptr, 1, 0, value);
}
template<typename T>
T atomicExchange(inout T ptr, T value)
{
return spirv::atomicExchange<T>(ptr, 1, 0, value);
}
template<typename T>
T atomicCompSwap(inout T ptr, T comparator, T value)
{
return spirv::atomicCompSwap<T>(ptr, 1, 0, 0, value, comparator);
}
uint32_t gl_LocalInvocationIndex();
uint32_t3 gl_GlobalInvocationID();
uint32_t3 gl_WorkGroupID();
void barrier() {
spirv::controlBarrier(spv::ScopeWorkgroup, spv::ScopeWorkgroup, spv::MemorySemanticsAcquireReleaseMask | spv::MemorySemanticsWorkgroupMemoryMask);
}
void tess_ctrl_barrier() {
spirv::controlBarrier(spv::ScopeWorkgroup, spv::ScopeInvocation, 0);
}
void memoryBarrierShared() {
spirv::memoryBarrier(spv::ScopeDevice, spv::MemorySemanticsAcquireReleaseMask | spv::MemorySemanticsWorkgroupMemoryMask);
}
}
}
}
# 10054 "D:\\work\\Nabla\\examples_tests\\48.ArithmeticUnitTest\\hlsl\\shaderCommon.hlsl"
# 1 "nbl/builtin/hlsl/subgroup/basic.hlsl"
# 1 "nbl/builtin/hlsl/glsl_compat/subgroup_basic.hlsl"
# 1 "nbl/builtin/hlsl/glsl_compat/core.hlsl"
# 22 "nbl/builtin/hlsl/glsl_compat/subgroup_basic.hlsl"
# 1 "nbl/builtin/hlsl/spirv_intrinsics/subgroup_basic.hlsl"
# 1 "nbl/builtin/hlsl/spirv_intrinsics/core.hlsl"
# 23 "nbl/builtin/hlsl/spirv_intrinsics/subgroup_basic.hlsl"
namespace nbl
{
namespace hlsl
{
namespace spirv
{
[[vk::ext_instruction( spv::OpGroupNonUniformElect )]]
bool subgroupElect(uint32_t executionScope);
}
}
}
# 3699 "nbl/builtin/hlsl/glsl_compat/subgroup_basic.hlsl"
namespace nbl
{
namespace hlsl
{
namespace glsl
{
uint32_t gl_SubgroupSize() {
return WaveGetLaneCount();
}
uint32_t gl_SubgroupSizeLog2() {
return firstbithigh(gl_SubgroupSize());
}
uint32_t gl_SubgroupInvocationID() {
return WaveGetLaneIndex();
}
uint32_t gl_SubgroupID() {
return gl_LocalInvocationIndex() >> gl_SubgroupSizeLog2();
}
bool subgroupElect() {
return spirv::subgroupElect(spv::ScopeSubgroup);
}
void subgroupBarrier() {
spirv::controlBarrier(spv::ScopeSubgroup, spv::ScopeSubgroup, spv::MemorySemanticsImageMemoryMask | spv::MemorySemanticsWorkgroupMemoryMask | spv::MemorySemanticsUniformMemoryMask | spv::MemorySemanticsAcquireReleaseMask);
}
void subgroupMemoryBarrier() {
spirv::memoryBarrier(spv::ScopeSubgroup, spv::MemorySemanticsImageMemoryMask | spv::MemorySemanticsWorkgroupMemoryMask | spv::MemorySemanticsUniformMemoryMask | spv::MemorySemanticsAcquireReleaseMask);
}
void subgroupMemoryBarrierBuffer() {
spirv::memoryBarrier(spv::ScopeSubgroup, spv::MemorySemanticsAcquireReleaseMask | spv::MemorySemanticsUniformMemoryMask);
}
void subgroupMemoryBarrierShared() {
spirv::memoryBarrier(spv::ScopeSubgroup, spv::MemorySemanticsAcquireReleaseMask | spv::MemorySemanticsWorkgroupMemoryMask);
}
void subgroupMemoryBarrierImage() {
spirv::memoryBarrier(spv::ScopeSubgroup, spv::MemorySemanticsAcquireReleaseMask | spv::MemorySemanticsImageMemoryMask);
}
}
}
}
# 22 "nbl/builtin/hlsl/subgroup/basic.hlsl"
namespace nbl
{
namespace hlsl
{
namespace subgroup
{
static const uint32_t MinSubgroupSizeLog2 = 3u;
static const uint32_t MinSubgroupSize = 0x1u<<MinSubgroupSizeLog2;
static const uint32_t MaxSubgroupSizeLog2 = 6u;
static const uint32_t MaxSubgroupSize = 0x1u<<MaxSubgroupSizeLog2;
}
}
}
# 13731 "D:\\work\\Nabla\\examples_tests\\48.ArithmeticUnitTest\\hlsl\\shaderCommon.hlsl"
# 1 "nbl/builtin/hlsl/subgroup/arithmetic_portability.hlsl"
# 1 "nbl/builtin/hlsl/subgroup/basic.hlsl"
# 23 "nbl/builtin/hlsl/subgroup/arithmetic_portability.hlsl"
# 1 "nbl/builtin/hlsl/subgroup/arithmetic_portability_impl.hlsl"
# 1 "nbl/builtin/hlsl/glsl_compat/subgroup_shuffle.hlsl"
# 1 "nbl/builtin/hlsl/spirv_intrinsics/subgroup_shuffle.hlsl"
# 1 "nbl/builtin/hlsl/spirv_intrinsics/core.hlsl"
# 23 "nbl/builtin/hlsl/spirv_intrinsics/subgroup_shuffle.hlsl"
namespace nbl
{
namespace hlsl
{
namespace spirv
{
template<typename T>
[[vk::ext_instruction( spv::OpGroupNonUniformShuffle )]]
T groupShuffle(uint32_t executionScope, T value, uint32_t invocationId);
# 46 "nbl/builtin/hlsl/spirv_intrinsics/subgroup_shuffle.hlsl"
}
}
}
# 22 "nbl/builtin/hlsl/glsl_compat/subgroup_shuffle.hlsl"
namespace nbl
{
namespace hlsl
{
namespace glsl
{
template<typename T>
T subgroupShuffle(T value, uint32_t invocationId)
{
return spirv::groupShuffle<T>(spv::ScopeSubgroup, value, invocationId);
}
template<typename T>
T subgroupShuffleUp(T value, uint32_t delta)
{
return spirv::groupShuffle<T>(spv::ScopeSubgroup, value, gl_SubgroupInvocationID() - delta);
}
template<typename T>
T subgroupShuffleDown(T value, uint32_t delta)
{
return spirv::groupShuffle<T>(spv::ScopeSubgroup, value, gl_SubgroupInvocationID() + delta);
}
}
}
}
# 23 "nbl/builtin/hlsl/subgroup/arithmetic_portability_impl.hlsl"
# 1 "nbl/builtin/hlsl/glsl_compat/subgroup_arithmetic.hlsl"
# 1 "nbl/builtin/hlsl/spirv_intrinsics/subgroup_arithmetic.hlsl"
# 10 "nbl/builtin/hlsl/spirv_intrinsics/subgroup_arithmetic.hlsl"
namespace nbl
{
namespace hlsl
{
namespace spirv
{
[[vk::ext_capability( spv::CapabilityGroupNonUniformArithmetic )]]
[[vk::ext_instruction( spv::OpGroupNonUniformIAdd )]]
int32_t groupAdd(uint32_t groupScope, [[vk::ext_literal]] uint32_t operation, int32_t value);
[[vk::ext_capability( spv::CapabilityGroupNonUniformArithmetic )]]
[[vk::ext_instruction( spv::OpGroupNonUniformIAdd )]]
uint32_t groupAdd(uint32_t groupScope, [[vk::ext_literal]] uint32_t operation, uint32_t value);
[[vk::ext_capability( spv::CapabilityGroupNonUniformArithmetic )]]
[[vk::ext_instruction( spv::OpGroupNonUniformFAdd )]]
float32_t groupAdd(uint32_t groupScope, [[vk::ext_literal]] uint32_t operation, float32_t value);
[[vk::ext_capability( spv::CapabilityGroupNonUniformArithmetic )]]
[[vk::ext_instruction( spv::OpGroupNonUniformIMul )]]
int32_t groupMul(uint32_t groupScope, [[vk::ext_literal]] uint32_t operation, int32_t value);
[[vk::ext_capability( spv::CapabilityGroupNonUniformArithmetic )]]
[[vk::ext_instruction( spv::OpGroupNonUniformIMul )]]
uint32_t groupMul(uint32_t groupScope, [[vk::ext_literal]] uint32_t operation, uint32_t value);
[[vk::ext_capability( spv::CapabilityGroupNonUniformArithmetic )]]
[[vk::ext_instruction( spv::OpGroupNonUniformFMul )]]
float32_t groupMul(uint32_t groupScope, [[vk::ext_literal]] uint32_t operation, float32_t value);
template<typename T>
[[vk::ext_capability( spv::CapabilityGroupNonUniformArithmetic )]]
[[vk::ext_instruction( spv::OpGroupNonUniformBitwiseAnd )]]
T groupBitwiseAnd(uint32_t groupScope, [[vk::ext_literal]] uint32_t operation, T value);
template<typename T>
[[vk::ext_capability( spv::CapabilityGroupNonUniformArithmetic )]]
[[vk::ext_instruction( spv::OpGroupNonUniformBitwiseOr )]]
T groupBitwiseOr(uint32_t groupScope, [[vk::ext_literal]] uint32_t operation, T value);
template<typename T>
[[vk::ext_capability( spv::CapabilityGroupNonUniformArithmetic )]]
[[vk::ext_instruction( spv::OpGroupNonUniformBitwiseXor )]]
T groupBitwiseXor(uint32_t groupScope, [[vk::ext_literal]] uint32_t operation, T value);
[[vk::ext_capability( spv::CapabilityGroupNonUniformArithmetic )]]
[[vk::ext_instruction( spv::OpGroupNonUniformSMin )]]
int32_t groupBitwiseMin(uint32_t groupScope, [[vk::ext_literal]] uint32_t operation, int32_t value);
[[vk::ext_capability( spv::CapabilityGroupNonUniformArithmetic )]]
[[vk::ext_instruction( spv::OpGroupNonUniformUMin )]]
uint32_t groupBitwiseMin(uint32_t groupScope, [[vk::ext_literal]] uint32_t operation, uint32_t value);
[[vk::ext_capability( spv::CapabilityGroupNonUniformArithmetic )]]
[[vk::ext_instruction( spv::OpGroupNonUniformFMin )]]
float32_t groupBitwiseMin(uint32_t groupScope, [[vk::ext_literal]] uint32_t operation, float32_t value);
[[vk::ext_capability( spv::CapabilityGroupNonUniformArithmetic )]]
[[vk::ext_instruction( spv::OpGroupNonUniformSMax )]]
int32_t groupBitwiseMax(uint32_t groupScope, [[vk::ext_literal]] uint32_t operation, int32_t value);
[[vk::ext_capability( spv::CapabilityGroupNonUniformArithmetic )]]
[[vk::ext_instruction( spv::OpGroupNonUniformUMax )]]
uint32_t groupBitwiseMax(uint32_t groupScope, [[vk::ext_literal]] uint32_t operation, uint32_t value);
[[vk::ext_capability( spv::CapabilityGroupNonUniformArithmetic )]]
[[vk::ext_instruction( spv::OpGroupNonUniformFMax )]]
float32_t groupBitwiseMax(uint32_t groupScope, [[vk::ext_literal]] uint32_t operation, float32_t value);
}
}
}
# 22 "nbl/builtin/hlsl/glsl_compat/subgroup_arithmetic.hlsl"
namespace nbl
{
namespace hlsl
{
namespace glsl
{
template<typename T>
T subgroupAdd(T value) {
return spirv::groupAdd(spv::ScopeSubgroup, spv::GroupOperationReduce, value);
}
template<typename T>
T subgroupInclusiveAdd(T value) {
return spirv::groupAdd(spv::ScopeSubgroup, spv::GroupOperationInclusiveScan, value);
}
template<typename T>
T subgroupExclusiveAdd(T value) {
return spirv::groupAdd(spv::ScopeSubgroup, spv::GroupOperationExclusiveScan, value);
}
template<typename T>
T subgroupMul(T value) {
return spirv::groupMul(3, 0, value);
}
template<typename T>
T subgroupInclusiveMul(T value) {
return spirv::groupMul(3, 1, value);
}
template<typename T>
T subgroupExclusiveMul(T value) {
return spirv::groupMul(3, 2, value);
}
template<typename T>
T subgroupAnd(T value) {
return spirv::groupBitwiseAnd(3, 0, value);
}
template<typename T>
T subgroupInclusiveAnd(T value) {
return spirv::groupBitwiseAnd(3, 1, value);
}
template<typename T>
T subgroupExclusiveAnd(T value) {
return spirv::groupBitwiseAnd(3, 2, value);
}
template<typename T>
T subgroupOr(T value) {
return spirv::groupBitwiseOr(3, 0, value);
}
template<typename T>
T subgroupInclusiveOr(T value) {
return spirv::groupBitwiseOr(3, 1, value);
}
template<typename T>
T subgroupExclusiveOr(T value) {
return spirv::groupBitwiseOr(3, 2, value);
}
template<typename T>
T subgroupXor(T value) {
return spirv::groupBitwiseXor(3, 0, value);
}
template<typename T>
T subgroupInclusiveXor(T value) {
return spirv::groupBitwiseXor(3, 1, value);
}
template<typename T>
T subgroupExclusiveXor(T value) {
return spirv::groupBitwiseXor(3, 2, value);
}
template<typename T>
T subgroupMin(T value) {
return spirv::groupBitwiseMin(3, 0, value);
}
template<typename T>
T subgroupInclusiveMin(T value) {
return spirv::groupBitwiseMin(3, 1, value);
}
template<typename T>
T subgroupExclusiveMin(T value) {
return spirv::groupBitwiseMin(3, 2, value);
}
template<typename T>
T subgroupMax(T value) {
return spirv::groupBitwiseMax(3, 0, value);
}
template<typename T>
T subgroupInclusiveMax(T value) {
return spirv::groupBitwiseMax(3, 1, value);
}
template<typename T>
T subgroupExclusiveMax(T value) {
return spirv::groupBitwiseMax(3, 2, value);
}
}
}
}
# 3171 "nbl/builtin/hlsl/subgroup/arithmetic_portability_impl.hlsl"
# 1 "nbl/builtin/hlsl/subgroup/ballot.hlsl"
# 1 "nbl/builtin/hlsl/glsl_compat/subgroup_ballot.hlsl"
# 1 "nbl/builtin/hlsl/spirv_intrinsics/subgroup_ballot.hlsl"
# 1 "nbl/builtin/hlsl/spirv_intrinsics/core.hlsl"
# 23 "nbl/builtin/hlsl/spirv_intrinsics/subgroup_ballot.hlsl"
# 1 "nbl/builtin/hlsl/spirv_intrinsics/subgroup_basic.hlsl"
# 2939 "nbl/builtin/hlsl/spirv_intrinsics/subgroup_ballot.hlsl"
namespace nbl
{
namespace hlsl
{
namespace spirv
{
template<typename T>
[[vk::ext_capability( spv::CapabilityGroupNonUniformBallot )]]
[[vk::ext_instruction( spv::OpGroupNonUniformBroadcastFirst )]]
T subgroupBroadcastFirst(uint32_t executionScope, T value);
template<typename T>
[[vk::ext_capability( spv::CapabilityGroupNonUniformBallot )]]
[[vk::ext_instruction( spv::OpGroupNonUniformBroadcast )]]
T subgroupBroadcast(uint32_t executionScope, T value, uint32_t invocationId);
[[vk::ext_capability( spv::CapabilityGroupNonUniformBallot )]]
[[vk::ext_instruction( spv::OpGroupNonUniformBallot )]]
uint32_t4 subgroupBallot(uint32_t executionScope, bool value);
[[vk::ext_capability( spv::CapabilityGroupNonUniformBallot )]]
[[vk::ext_instruction( spv::OpGroupNonUniformInverseBallot )]]
bool subgroupInverseBallot(uint32_t executionScope, uint32_t4 value);
[[vk::ext_capability( spv::CapabilityGroupNonUniformBallot )]]
[[vk::ext_instruction( spv::OpGroupNonUniformBallotBitExtract )]]
bool subgroupBallotBitExtract(uint32_t executionScope, uint32_t4 value, uint32_t id);
[[vk::ext_capability( spv::CapabilityGroupNonUniformBallot )]]
[[vk::ext_instruction( spv::OpGroupNonUniformBallotBitCount )]]
uint32_t subgroupBallotBitCount(uint32_t executionScope, [[vk::ext_literal]] uint32_t operation, uint32_t4 value);
[[vk::ext_capability(spv::CapabilityGroupNonUniformBallot)]]
[[vk::ext_instruction(spv::OpGroupNonUniformBallotFindLSB)]]
uint32_t subgroupBallotFindLSB(uint32_t executionScope, uint32_t4 value);
[[vk::ext_capability(spv::CapabilityGroupNonUniformBallot)]]
[[vk::ext_instruction(spv::OpGroupNonUniformBallotFindMSB)]]
uint32_t subgroupBallotFindMSB(uint32_t executionScope, uint32_t4 value);
}
}
}
# 22 "nbl/builtin/hlsl/glsl_compat/subgroup_ballot.hlsl"
# 1 "nbl/builtin/hlsl/glsl_compat/subgroup_basic.hlsl"
# 6236 "nbl/builtin/hlsl/glsl_compat/subgroup_ballot.hlsl"
namespace nbl
{
namespace hlsl
{
namespace glsl
{
uint32_t4 gl_SubgroupEqMask() {
return uint32_t4(0, 0, 0, 1) << gl_SubgroupInvocationID();
}
uint32_t4 gl_SubgroupGeMask() {
return uint32_t4(0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu) << gl_SubgroupInvocationID();
}
uint32_t4 gl_SubgroupGtMask() {
return gl_SubgroupGeMask() << 1;
}
uint32_t4 gl_SubgroupLeMask() {
return ~gl_SubgroupGtMask();
}
uint32_t4 gl_SubgroupLtMask() {
return ~gl_SubgroupGeMask();
}
template<typename T>
T subgroupBroadcastFirst(T value)
{
return spirv::subgroupBroadcastFirst<T>(spv::ScopeSubgroup, value);
}
template<typename T>
T subgroupBroadcast(T value, const uint32_t invocationId)
{
return spirv::subgroupBroadcast<T>(spv::ScopeSubgroup, value, invocationId);
}
uint32_t4 subgroupBallot(bool value)
{
return spirv::subgroupBallot(spv::ScopeSubgroup, value);
}
bool subgroupInverseBallot(uint32_t4 value)
{
return spirv::subgroupInverseBallot(spv::ScopeSubgroup, value);
}
bool subgroupBallotBitExtract(uint32_t4 value, uint32_t index)
{
return spirv::subgroupBallotBitExtract(spv::ScopeSubgroup, value, index);
}
uint32_t subgroupBallotBitCount(uint32_t4 value)
{
return spirv::subgroupBallotBitCount(spv::ScopeSubgroup, spv::GroupOperationReduce, value);
}
uint32_t subgroupBallotInclusiveBitCount(uint32_t4 value)
{
return spirv::subgroupBallotBitCount(spv::ScopeSubgroup, spv::GroupOperationInclusiveScan, value);
}
uint32_t subgroupBallotExclusiveBitCount(uint32_t4 value)
{
return spirv::subgroupBallotBitCount(spv::ScopeSubgroup, spv::GroupOperationExclusiveScan, value);
}
uint32_t subgroupBallotFindLSB(uint32_t4 value)
{
return spirv::subgroupBallotFindLSB(spv::ScopeSubgroup, value);
}
uint32_t subgroupBallotFindMSB(uint32_t4 value)
{
return spirv::subgroupBallotFindMSB(spv::ScopeSubgroup, value);
}
}
}
}
# 22 "nbl/builtin/hlsl/subgroup/ballot.hlsl"
# 1 "nbl/builtin/hlsl/subgroup/basic.hlsl"
# 13353 "nbl/builtin/hlsl/subgroup/ballot.hlsl"
namespace nbl
{
namespace hlsl
{
namespace subgroup
{
uint32_t LastSubgroupInvocation()
{
return glsl::subgroupBallotFindMSB(glsl::subgroupBallot(true));
}
bool ElectLast()
{
return glsl::gl_SubgroupInvocationID()==LastSubgroupInvocation();
}
template<typename T>
T BroadcastLast(T value)
{
return glsl::subgroupBroadcast<T>(value,LastSubgroupInvocation());
}
uint32_t ElectedSubgroupInvocationID() {
return glsl::subgroupBroadcastFirst<uint32_t>(glsl::gl_SubgroupInvocationID());
}
}
}
}
# 3285 "nbl/builtin/hlsl/subgroup/arithmetic_portability_impl.hlsl"
# 1 "nbl/builtin/hlsl/functional.hlsl"
# 23827 "nbl/builtin/hlsl/subgroup/arithmetic_portability_impl.hlsl"
namespace nbl
{
namespace hlsl
{
namespace subgroup
{
namespace native
{
template<class Binop, typename T=typename Binop::type_t>
struct reduction;
template<class Binop, typename T=typename Binop::type_t>
struct inclusive_scan;
template<class Binop, typename T=typename Binop::type_t>
struct exclusive_scan;
template<typename T> struct reduction<bit_and<T>,T>{ using type_t = T; type_t operator()(const in type_t v) {return glsl::subgroupAnd<type_t>(v);}}; template<typename T> struct inclusive_scan<bit_and<T>,T>{ using type_t = T; type_t operator()(const in type_t v) {return glsl::subgroupInclusiveAnd<type_t>(v);}}; template<typename T> struct exclusive_scan<bit_and<T>,T>{ using type_t = T; type_t operator()(const in type_t v) {return glsl::subgroupExclusiveAnd<type_t>(v);}};;
template<typename T> struct reduction<bit_or<T>,T>{ using type_t = T; type_t operator()(const in type_t v) {return glsl::subgroupOr<type_t>(v);}}; template<typename T> struct inclusive_scan<bit_or<T>,T>{ using type_t = T; type_t operator()(const in type_t v) {return glsl::subgroupInclusiveOr<type_t>(v);}}; template<typename T> struct exclusive_scan<bit_or<T>,T>{ using type_t = T; type_t operator()(const in type_t v) {return glsl::subgroupExclusiveOr<type_t>(v);}};;
template<typename T> struct reduction<bit_xor<T>,T>{ using type_t = T; type_t operator()(const in type_t v) {return glsl::subgroupXor<type_t>(v);}}; template<typename T> struct inclusive_scan<bit_xor<T>,T>{ using type_t = T; type_t operator()(const in type_t v) {return glsl::subgroupInclusiveXor<type_t>(v);}}; template<typename T> struct exclusive_scan<bit_xor<T>,T>{ using type_t = T; type_t operator()(const in type_t v) {return glsl::subgroupExclusiveXor<type_t>(v);}};;
template<typename T> struct reduction<plus<T>,T>{ using type_t = T; type_t operator()(const in type_t v) {return glsl::subgroupAdd<type_t>(v);}}; template<typename T> struct inclusive_scan<plus<T>,T>{ using type_t = T; type_t operator()(const in type_t v) {return glsl::subgroupInclusiveAdd<type_t>(v);}}; template<typename T> struct exclusive_scan<plus<T>,T>{ using type_t = T; type_t operator()(const in type_t v) {return glsl::subgroupExclusiveAdd<type_t>(v);}};;
template<typename T> struct reduction<multiplies<T>,T>{ using type_t = T; type_t operator()(const in type_t v) {return glsl::subgroupMul<type_t>(v);}}; template<typename T> struct inclusive_scan<multiplies<T>,T>{ using type_t = T; type_t operator()(const in type_t v) {return glsl::subgroupInclusiveMul<type_t>(v);}}; template<typename T> struct exclusive_scan<multiplies<T>,T>{ using type_t = T; type_t operator()(const in type_t v) {return glsl::subgroupExclusiveMul<type_t>(v);}};;
template<typename T> struct reduction<minimum<T>,T>{ using type_t = T; type_t operator()(const in type_t v) {return glsl::subgroupMin<type_t>(v);}}; template<typename T> struct inclusive_scan<minimum<T>,T>{ using type_t = T; type_t operator()(const in type_t v) {return glsl::subgroupInclusiveMin<type_t>(v);}}; template<typename T> struct exclusive_scan<minimum<T>,T>{ using type_t = T; type_t operator()(const in type_t v) {return glsl::subgroupExclusiveMin<type_t>(v);}};;
template<typename T> struct reduction<maximum<T>,T>{ using type_t = T; type_t operator()(const in type_t v) {return glsl::subgroupMax<type_t>(v);}}; template<typename T> struct inclusive_scan<maximum<T>,T>{ using type_t = T; type_t operator()(const in type_t v) {return glsl::subgroupInclusiveMax<type_t>(v);}}; template<typename T> struct exclusive_scan<maximum<T>,T>{ using type_t = T; type_t operator()(const in type_t v) {return glsl::subgroupExclusiveMax<type_t>(v);}};;
}
namespace portability
{
template<class Binop>
struct inclusive_scan
{
using type_t = typename Binop::type_t;
type_t operator()(type_t value)
{
return __call(value);
}
static type_t __call(type_t value)
{
Binop op;
const uint subgroupInvocation = glsl::gl_SubgroupInvocationID();
const uint halfSubgroupSize = glsl::gl_SubgroupSize() >> 1u;
uint rhs = glsl::subgroupShuffleUp<type_t>(value, 1u);
value = op(value, subgroupInvocation<1u ? Binop::identity:rhs);
[[unroll(MinSubgroupSizeLog2-1)]]
for (uint step=2u; step<=halfSubgroupSize; step <<= 1u)
{
rhs = glsl::subgroupShuffleUp<type_t>(value, step);
value = op(value, subgroupInvocation<step ? Binop::identity:rhs);
}
return value;
}
};
template<class Binop>
struct exclusive_scan
{
using type_t = typename Binop::type_t;
type_t operator()(type_t value)
{
value = inclusive_scan<Binop>::__call(value);
type_t left = glsl::subgroupShuffleUp<type_t>(value,1);
return bool(glsl::gl_SubgroupInvocationID()) ? left:Binop::identity;
}
};
template<class Binop>
struct reduction
{
using type_t = typename Binop::type_t;
type_t operator()(const in type_t value)
{
return BroadcastLast<type_t>(inclusive_scan<Binop>::__call(value));
}
};
}
}
}
}
# 7053 "nbl/builtin/hlsl/subgroup/arithmetic_portability.hlsl"
namespace nbl
{
namespace hlsl
{
namespace subgroup
{
template<class Binop>
struct reduction : native::reduction<Binop> {};
template<class Binop>
struct inclusive_scan : native::inclusive_scan<Binop> {};
template<class Binop>
struct exclusive_scan : native::exclusive_scan<Binop> {};
}
}
}
# 20760 "D:\\work\\Nabla\\examples_tests\\48.ArithmeticUnitTest\\hlsl\\shaderCommon.hlsl"
static uint32_t __gl_LocalInvocationIndex;
uint32_t nbl::hlsl::glsl::gl_LocalInvocationIndex() {return __gl_LocalInvocationIndex;}
static uint32_t3 __gl_GlobalInvocationID;
uint32_t3 nbl::hlsl::glsl::gl_GlobalInvocationID() {return __gl_GlobalInvocationID;}
[[vk::binding(0, 0)]] static StructuredBuffer<uint32_t> inputValue;
[[vk::binding(1, 0)]] RWStructuredBuffer<Output> outand;
[[vk::binding(2, 0)]] RWStructuredBuffer<Output> outxor;
[[vk::binding(3, 0)]] RWStructuredBuffer<Output> outor;
[[vk::binding(4, 0)]] RWStructuredBuffer<Output> outadd;
[[vk::binding(5, 0)]] RWStructuredBuffer<Output> outmul;
[[vk::binding(6, 0)]] RWStructuredBuffer<Output> outmin;
[[vk::binding(7, 0)]] RWStructuredBuffer<Output> outmax;
[[vk::binding(8, 0)]] RWStructuredBuffer<Output> outbitcount;
template<template<class> class operation_t>
struct test
{
static void run()
{
const uint32_t globalIx = nbl::hlsl::glsl::gl_GlobalInvocationID().x;
const uint32_t sourceVal = inputValue[globalIx];
outand[0].subgroupSize
= outxor[0].subgroupSize
= outor[0].subgroupSize
= outadd[0].subgroupSize
= outmul[0].subgroupSize
= outmin[0].subgroupSize
= outmax[0].subgroupSize
= nbl::hlsl::glsl::gl_SubgroupSize();
# 20818 "D:\\work\\Nabla\\examples_tests\\48.ArithmeticUnitTest\\hlsl\\shaderCommon.hlsl"
}
};
# 2 "D:/work/Nabla/examples_tests/48.ArithmeticUnitTest/hlsl/testSubgroup.comp.hlsl"
[numthreads(32, 1, 1)]
void main(uint32_t invIdx : SV_GroupIndex, uint32_t3 globalId : SV_DispatchThreadID)
{
__gl_LocalInvocationIndex = invIdx;
__gl_GlobalInvocationID = globalId;
test<nbl::hlsl::subgroup::reduction>::run();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment