# 0 "/app/example.cpp" # 1 "/app//" # 0 "" # 0 "" # 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 "" 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 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 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 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 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 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 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 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 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 [[vk::ext_instruction(spv::OpBitcast)]] T bitcast(U); #pragma endregion CONVERSION } } } # 540 "nbl/builtin/hlsl/bit.hlsl" namespace nbl { namespace hlsl { template T bit_cast(U val) { _Static_assert(sizeof(T) <= sizeof(U)); return spirv::bitcast(val); } template T rotl(T x, S s); template T rotr(T x, S s); template 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 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 clz(uint64_t N) { static const uint64_t SHIFT = bits>>1; static const uint64_t LO_MASK = (1ull<>SHIFT):N)&LO_MASK; const uint16_t value = uint16_t(clz(NEXT) + (CHOOSE_HIGH ? 0:SHIFT)); return value; } template<> uint16_t clz<1>(uint64_t N) { return uint16_t(1u-N&1); } } template uint16_t countl_zero(T n) { return impl::clz(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 class Trait, class T> struct base_type_forwarder : Trait {}; template class Trait, class T, uint16_t N> struct base_type_forwarder > : Trait {}; template class Trait, class T, uint16_t N, uint16_t M> struct base_type_forwarder > : Trait {}; } template struct type_identity { using type = T; }; namespace impl { template struct remove_reference; } template struct remove_const : type_identity {}; template struct remove_const : type_identity {}; template struct remove_volatile : type_identity {}; template struct remove_volatile : type_identity {}; template struct remove_cv : type_identity {}; template struct remove_cv : type_identity {}; template struct remove_cv : type_identity {}; template struct remove_cv : type_identity {}; template struct remove_cvref : remove_cv::type> {}; template struct add_const : type_identity {}; template struct add_volatile : type_identity {}; template struct add_cv : type_identity {}; template struct integral_constant { const static T value = val; using value_type = T; }; template struct bool_constant : integral_constant {}; struct true_type : bool_constant {}; struct false_type : bool_constant {}; template struct conditional : type_identity {}; template struct conditional : type_identity {}; template struct is_same : bool_constant {}; template struct is_same : bool_constant {}; template struct is_void : bool_constant::type, void>::value> {}; template struct is_bounded_array : bool_constant {}; template struct is_bounded_array : bool_constant{}; template struct is_unbounded_array : bool_constant{}; template struct is_unbounded_array : bool_constant{}; template struct is_array : bool_constant::value || is_unbounded_array::value> {}; namespace impl { template struct typeid_t; template struct function_info : type_identity {}; template struct is_unsigned : bool_constant< is_same::value || is_same::value || is_same::value || is_same::value > {}; template struct is_integral : bool_constant< is_same::value || is_same::value || is_same::value || is_same::value || is_same::value || is_same::value || is_same::value > {}; template struct is_floating_point : bool_constant< is_same::value || is_same::value || is_same::value > {}; template struct is_signed : bool_constant< is_same::value || is_same::value || is_same::value || is_floating_point::value > {}; } template struct is_unsigned : impl::base_type_forwarder::type> {}; template struct is_integral : impl::base_type_forwarder {}; template struct is_floating_point : impl::base_type_forwarder::type> {}; template struct is_signed : impl::base_type_forwarder::type> {}; template struct is_scalar : bool_constant< impl::is_integral::type>::value || impl::is_floating_point::type>::value > {}; template struct is_const : bool_constant {}; template struct is_const : bool_constant {}; template struct is_volatile : bool_constant {}; template struct is_volatile : bool_constant {}; template struct is_trivial : bool_constant {}; template struct is_trivially_copyable : bool_constant {}; template struct is_empty : bool_constant<0==sizeof(T)> {}; template struct is_polymorphic : bool_constant {}; template struct is_abstract : bool_constant {}; template struct is_final : bool_constant {}; template struct is_fundamental : bool_constant< is_scalar::value || is_void::value > {}; template struct is_compound : bool_constant::value> {}; template struct is_aggregate : is_compound {}; template struct rank : integral_constant { }; template struct rank : integral_constant::value> { }; template struct rank : integral_constant::value> { }; template struct extent : integral_constant {}; template struct extent : integral_constant {}; template struct extent : integral_constant::value> {}; template struct extent : integral_constant::value> {}; template struct enable_if {}; template struct enable_if : type_identity {}; template struct alignment_of; template struct make_void { using type = void; }; namespace impl { template struct is_reference : bool_constant { }; template struct is_reference::type> : bool_constant { }; template::value> struct add_reference_helper : type_identity {}; template struct add_reference_helper { static T member[1]; using type = __decltype(member[0]); }; template struct add_lvalue_reference : add_reference_helper {}; template T remove_reference_impl(T v) { return v; } template::value> struct remove_reference_helper : type_identity {}; template struct remove_reference_helper { static T member; using type = __decltype(remove_reference_impl(member)); }; template struct remove_reference : remove_reference_helper {}; } template struct remove_extent : type_identity {}; template struct remove_extent : type_identity {}; template struct remove_extent : type_identity {}; template struct remove_all_extents : type_identity {}; template struct remove_all_extents : type_identity::type> {}; template struct remove_all_extents : type_identity::type> {}; namespace impl { template struct int_type : conditional<8==sz, int64_t, typename conditional<4==sz, int32_t, int16_t>::type>{}; template struct uint_type : type_identity::type> {}; } template struct make_signed : impl::int_type { _Static_assert(is_integral::value && !is_same::type, bool>::value, "make_signed requires that T shall be a (possibly cv-qualified) " "integral type or enumeration but not a bool type."); }; template struct make_unsigned : impl::uint_type { _Static_assert(is_integral::value && !is_same::type, bool>::value, "make_unsigned 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 struct conditional_value { const static T value = C ? A : B; }; template struct is_vector : bool_constant {}; template struct is_matrix : bool_constant {}; template struct is_vector > : bool_constant {}; template struct is_matrix > : bool_constant {}; template::value> struct scalar_type { using type = void; }; template struct scalar_type { using type = T; }; template struct scalar_type,false> { using type = T; }; template struct scalar_type,false> { using type = T; }; template 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 : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} namespace nbl { namespace hlsl { namespace impl { template<> struct typeid_t : integral_constant {}; } template<> struct alignment_of : integral_constant {}; template<> struct alignment_of : integral_constant {}; template<> struct alignment_of::type> : integral_constant {}; template<> struct alignment_of::type> : integral_constant {};}} # 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 struct num_base : type_identity { 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::value; const static bool is_specialized = true; const static bool is_signed = nbl::hlsl::is_signed::value; const static bool is_integer = is_integral::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 struct num_traits : num_base { const static T min = T(num_base::is_signed)<<(num_base::is_signed ? num_base::digits:0); const static T max = ~(T(num_base::is_signed)<::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 : num_base { 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 : num_base { 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 : num_base { 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 struct numeric_limits : num_traits { using type = typename num_traits::type; const static type lowest = num_traits::is_integer ? num_traits::min : -num_traits::max; const static type epsilon = num_traits::is_integer ? type(0) : (type(1) / type(1ull<<(num_traits::float_digits-1))); const static type round_error = type(num_traits::is_iec559)/type(2.0); }; } template struct numeric_limits : impl::numeric_limits {}; # 897 "nbl/builtin/hlsl/limits.hlsl" } } # 3701 "nbl/builtin/hlsl/functional.hlsl" namespace nbl { namespace hlsl { template 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::type; using bitfield_t = typename unsigned_integer_of_size::type; _Static_assert(!is_floating_point::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 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 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 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 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 struct greater { using type_t = T; T operator()(const in T lhs, const in T rhs) { return lhs > rhs; } }; template struct less { using type_t = T; T operator()(const in T lhs, const in T rhs) { return lhs < rhs; } }; template struct greater_equal { using type_t = T; T operator()(const in T lhs, const in T rhs) { return lhs >= rhs; } }; template struct less_equal { using type_t = T; T operator()(const in T lhs, const in T rhs) { return lhs <= rhs; } }; template struct minimum { using type_t = T; using scalar_t = typename scalar_type::type; T operator()(const in T lhs, const in T rhs) { return rhs::max; }; template struct maximum { using type_t = T; using scalar_t = typename scalar_type::type; T operator()(const in T lhs, const in T rhs) { return lhs::lowest; }; } } # 512 "D:\\work\\Nabla\\examples_tests\\48.ArithmeticUnitTest\\hlsl\\common.hlsl" template 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 T atomicAdd(inout T ptr, T value) { return spirv::atomicAdd(ptr, 1, 0, value); } template T atomicAnd(inout T ptr, T value) { return spirv::atomicAnd(ptr, 1, 0, value); } template T atomicOr(inout T ptr, T value) { return spirv::atomicOr(ptr, 1, 0, value); } template T atomicXor(inout T ptr, T value) { return spirv::atomicXor(ptr, 1, 0, value); } template T atomicMin(inout T ptr, T value) { return spirv::atomicMin(ptr, 1, 0, value); } template T atomicMax(inout T ptr, T value) { return spirv::atomicMax(ptr, 1, 0, value); } template T atomicExchange(inout T ptr, T value) { return spirv::atomicExchange(ptr, 1, 0, value); } template T atomicCompSwap(inout T ptr, T comparator, T value) { return spirv::atomicCompSwap(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< [[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 T subgroupShuffle(T value, uint32_t invocationId) { return spirv::groupShuffle(spv::ScopeSubgroup, value, invocationId); } template T subgroupShuffleUp(T value, uint32_t delta) { return spirv::groupShuffle(spv::ScopeSubgroup, value, gl_SubgroupInvocationID() - delta); } template T subgroupShuffleDown(T value, uint32_t delta) { return spirv::groupShuffle(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 [[vk::ext_capability( spv::CapabilityGroupNonUniformArithmetic )]] [[vk::ext_instruction( spv::OpGroupNonUniformBitwiseAnd )]] T groupBitwiseAnd(uint32_t groupScope, [[vk::ext_literal]] uint32_t operation, T value); template [[vk::ext_capability( spv::CapabilityGroupNonUniformArithmetic )]] [[vk::ext_instruction( spv::OpGroupNonUniformBitwiseOr )]] T groupBitwiseOr(uint32_t groupScope, [[vk::ext_literal]] uint32_t operation, T value); template [[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 T subgroupAdd(T value) { return spirv::groupAdd(spv::ScopeSubgroup, spv::GroupOperationReduce, value); } template T subgroupInclusiveAdd(T value) { return spirv::groupAdd(spv::ScopeSubgroup, spv::GroupOperationInclusiveScan, value); } template T subgroupExclusiveAdd(T value) { return spirv::groupAdd(spv::ScopeSubgroup, spv::GroupOperationExclusiveScan, value); } template T subgroupMul(T value) { return spirv::groupMul(3, 0, value); } template T subgroupInclusiveMul(T value) { return spirv::groupMul(3, 1, value); } template T subgroupExclusiveMul(T value) { return spirv::groupMul(3, 2, value); } template T subgroupAnd(T value) { return spirv::groupBitwiseAnd(3, 0, value); } template T subgroupInclusiveAnd(T value) { return spirv::groupBitwiseAnd(3, 1, value); } template T subgroupExclusiveAnd(T value) { return spirv::groupBitwiseAnd(3, 2, value); } template T subgroupOr(T value) { return spirv::groupBitwiseOr(3, 0, value); } template T subgroupInclusiveOr(T value) { return spirv::groupBitwiseOr(3, 1, value); } template T subgroupExclusiveOr(T value) { return spirv::groupBitwiseOr(3, 2, value); } template T subgroupXor(T value) { return spirv::groupBitwiseXor(3, 0, value); } template T subgroupInclusiveXor(T value) { return spirv::groupBitwiseXor(3, 1, value); } template T subgroupExclusiveXor(T value) { return spirv::groupBitwiseXor(3, 2, value); } template T subgroupMin(T value) { return spirv::groupBitwiseMin(3, 0, value); } template T subgroupInclusiveMin(T value) { return spirv::groupBitwiseMin(3, 1, value); } template T subgroupExclusiveMin(T value) { return spirv::groupBitwiseMin(3, 2, value); } template T subgroupMax(T value) { return spirv::groupBitwiseMax(3, 0, value); } template T subgroupInclusiveMax(T value) { return spirv::groupBitwiseMax(3, 1, value); } template 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 [[vk::ext_capability( spv::CapabilityGroupNonUniformBallot )]] [[vk::ext_instruction( spv::OpGroupNonUniformBroadcastFirst )]] T subgroupBroadcastFirst(uint32_t executionScope, T value); template [[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 T subgroupBroadcastFirst(T value) { return spirv::subgroupBroadcastFirst(spv::ScopeSubgroup, value); } template T subgroupBroadcast(T value, const uint32_t invocationId) { return spirv::subgroupBroadcast(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 T BroadcastLast(T value) { return glsl::subgroupBroadcast(value,LastSubgroupInvocation()); } uint32_t ElectedSubgroupInvocationID() { return glsl::subgroupBroadcastFirst(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 struct reduction; template struct inclusive_scan; template struct exclusive_scan; template struct reduction,T>{ using type_t = T; type_t operator()(const in type_t v) {return glsl::subgroupAnd(v);}}; template struct inclusive_scan,T>{ using type_t = T; type_t operator()(const in type_t v) {return glsl::subgroupInclusiveAnd(v);}}; template struct exclusive_scan,T>{ using type_t = T; type_t operator()(const in type_t v) {return glsl::subgroupExclusiveAnd(v);}};; template struct reduction,T>{ using type_t = T; type_t operator()(const in type_t v) {return glsl::subgroupOr(v);}}; template struct inclusive_scan,T>{ using type_t = T; type_t operator()(const in type_t v) {return glsl::subgroupInclusiveOr(v);}}; template struct exclusive_scan,T>{ using type_t = T; type_t operator()(const in type_t v) {return glsl::subgroupExclusiveOr(v);}};; template struct reduction,T>{ using type_t = T; type_t operator()(const in type_t v) {return glsl::subgroupXor(v);}}; template struct inclusive_scan,T>{ using type_t = T; type_t operator()(const in type_t v) {return glsl::subgroupInclusiveXor(v);}}; template struct exclusive_scan,T>{ using type_t = T; type_t operator()(const in type_t v) {return glsl::subgroupExclusiveXor(v);}};; template struct reduction,T>{ using type_t = T; type_t operator()(const in type_t v) {return glsl::subgroupAdd(v);}}; template struct inclusive_scan,T>{ using type_t = T; type_t operator()(const in type_t v) {return glsl::subgroupInclusiveAdd(v);}}; template struct exclusive_scan,T>{ using type_t = T; type_t operator()(const in type_t v) {return glsl::subgroupExclusiveAdd(v);}};; template struct reduction,T>{ using type_t = T; type_t operator()(const in type_t v) {return glsl::subgroupMul(v);}}; template struct inclusive_scan,T>{ using type_t = T; type_t operator()(const in type_t v) {return glsl::subgroupInclusiveMul(v);}}; template struct exclusive_scan,T>{ using type_t = T; type_t operator()(const in type_t v) {return glsl::subgroupExclusiveMul(v);}};; template struct reduction,T>{ using type_t = T; type_t operator()(const in type_t v) {return glsl::subgroupMin(v);}}; template struct inclusive_scan,T>{ using type_t = T; type_t operator()(const in type_t v) {return glsl::subgroupInclusiveMin(v);}}; template struct exclusive_scan,T>{ using type_t = T; type_t operator()(const in type_t v) {return glsl::subgroupExclusiveMin(v);}};; template struct reduction,T>{ using type_t = T; type_t operator()(const in type_t v) {return glsl::subgroupMax(v);}}; template struct inclusive_scan,T>{ using type_t = T; type_t operator()(const in type_t v) {return glsl::subgroupInclusiveMax(v);}}; template struct exclusive_scan,T>{ using type_t = T; type_t operator()(const in type_t v) {return glsl::subgroupExclusiveMax(v);}};; } namespace portability { template 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(value, 1u); value = op(value, subgroupInvocation<1u ? Binop::identity:rhs); [[unroll(MinSubgroupSizeLog2-1)]] for (uint step=2u; step<=halfSubgroupSize; step <<= 1u) { rhs = glsl::subgroupShuffleUp(value, step); value = op(value, subgroupInvocation struct exclusive_scan { using type_t = typename Binop::type_t; type_t operator()(type_t value) { value = inclusive_scan::__call(value); type_t left = glsl::subgroupShuffleUp(value,1); return bool(glsl::gl_SubgroupInvocationID()) ? left:Binop::identity; } }; template struct reduction { using type_t = typename Binop::type_t; type_t operator()(const in type_t value) { return BroadcastLast(inclusive_scan::__call(value)); } }; } } } } # 7053 "nbl/builtin/hlsl/subgroup/arithmetic_portability.hlsl" namespace nbl { namespace hlsl { namespace subgroup { template struct reduction : native::reduction {}; template struct inclusive_scan : native::inclusive_scan {}; template struct exclusive_scan : native::exclusive_scan {}; } } } # 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 inputValue; [[vk::binding(1, 0)]] RWStructuredBuffer outand; [[vk::binding(2, 0)]] RWStructuredBuffer outxor; [[vk::binding(3, 0)]] RWStructuredBuffer outor; [[vk::binding(4, 0)]] RWStructuredBuffer outadd; [[vk::binding(5, 0)]] RWStructuredBuffer outmul; [[vk::binding(6, 0)]] RWStructuredBuffer outmin; [[vk::binding(7, 0)]] RWStructuredBuffer outmax; [[vk::binding(8, 0)]] RWStructuredBuffer outbitcount; template 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::run(); }