diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index 6cdf2346..01f5dbce 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -1007,6 +1007,8 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI return spv::BuiltInRayTminKHR; case glslang::EbvRayTmax: return spv::BuiltInRayTmaxKHR; + case glslang::EbvCullMask: + return spv::BuiltInCullMaskKHR; case glslang::EbvInstanceCustomIndex: return spv::BuiltInInstanceCustomIndexKHR; case glslang::EbvHitT: @@ -1777,6 +1779,13 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion, builder.addCapability(spv::CapabilityRayTracingNV); builder.addExtension("SPV_NV_ray_tracing"); } + if (glslangIntermediate->getStage() != EShLangRayGen && glslangIntermediate->getStage() != EShLangCallable) + { + if (extensions.find("GL_EXT_ray_cull_mask") != extensions.end()) { + builder.addCapability(spv::CapabilityRayCullMaskKHR); + builder.addExtension("SPV_KHR_ray_cull_mask"); + } + } break; } case EShLangTaskNV: diff --git a/SPIRV/doc.cpp b/SPIRV/doc.cpp index 9a569e0d..6b85ccd2 100644 --- a/SPIRV/doc.cpp +++ b/SPIRV/doc.cpp @@ -392,6 +392,7 @@ const char* BuiltInString(int builtIn) case BuiltInObjectRayDirectionKHR: return "ObjectRayDirectionKHR"; case BuiltInRayTminKHR: return "RayTminKHR"; case BuiltInRayTmaxKHR: return "RayTmaxKHR"; + case BuiltInCullMaskKHR: return "CullMaskKHR"; case BuiltInInstanceCustomIndexKHR: return "InstanceCustomIndexKHR"; case BuiltInRayGeometryIndexKHR: return "RayGeometryIndexKHR"; case BuiltInObjectToWorldKHR: return "ObjectToWorldKHR"; @@ -925,6 +926,7 @@ const char* CapabilityString(int info) case CapabilityRayTracingNV: return "RayTracingNV"; case CapabilityRayTracingMotionBlurNV: return "RayTracingMotionBlurNV"; case CapabilityRayTracingKHR: return "RayTracingKHR"; + case CapabilityRayCullMaskKHR: return "RayCullMaskKHR"; case CapabilityRayQueryKHR: return "RayQueryKHR"; case CapabilityRayTracingProvisionalKHR: return "RayTracingProvisionalKHR"; case CapabilityRayTraversalPrimitiveCullingKHR: return "RayTraversalPrimitiveCullingKHR"; diff --git a/SPIRV/spirv.hpp b/SPIRV/spirv.hpp index a8642006..806b4ddc 100644 --- a/SPIRV/spirv.hpp +++ b/SPIRV/spirv.hpp @@ -673,6 +673,7 @@ enum BuiltIn { BuiltInSMCountNV = 5375, BuiltInWarpIDNV = 5376, BuiltInSMIDNV = 5377, + BuiltInCullMaskKHR = 6021, BuiltInMax = 0x7fffffff, }; @@ -1069,6 +1070,7 @@ enum Capability { CapabilityDotProductInput4x8BitPackedKHR = 6018, CapabilityDotProduct = 6019, CapabilityDotProductKHR = 6019, + CapabilityRayCullMaskKHR = 6020, CapabilityBitInstructions = 6025, CapabilityAtomicFloat32AddEXT = 6033, CapabilityAtomicFloat64AddEXT = 6034, diff --git a/Test/baseResults/spv.ext.AnyHitShader.rahit.out b/Test/baseResults/spv.ext.AnyHitShader.rahit.out index df779bdd..af228e28 100644 --- a/Test/baseResults/spv.ext.AnyHitShader.rahit.out +++ b/Test/baseResults/spv.ext.AnyHitShader.rahit.out @@ -1,15 +1,18 @@ spv.ext.AnyHitShader.rahit // Module Version 10400 // Generated by (magic number): 8000a -// Id's are bound by 107 +// Id's are bound by 110 Capability GroupNonUniform Capability RayTracingKHR + Capability RayCullMaskKHR + Extension "SPV_KHR_ray_cull_mask" Extension "SPV_KHR_ray_tracing" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint AnyHitKHR 4 "main" 11 14 20 23 26 33 36 39 42 47 50 53 58 64 67 70 76 80 84 98 + EntryPoint AnyHitKHR 4 "main" 11 14 20 23 26 33 36 39 42 47 50 53 58 64 67 70 76 80 84 87 101 Source GLSL 460 + SourceExtension "GL_EXT_ray_cull_mask" SourceExtension "GL_EXT_ray_tracing" SourceExtension "GL_KHR_shader_subgroup_basic" Name 4 "main" @@ -49,8 +52,10 @@ spv.ext.AnyHitShader.rahit Name 76 "gl_ObjectToWorld3x4EXT" Name 79 "v17" Name 80 "gl_WorldToObject3x4EXT" - Name 84 "incomingPayload" - Name 98 "gl_SubgroupSize" + Name 83 "v18" + Name 84 "gl_CullMaskEXT" + Name 87 "incomingPayload" + Name 101 "gl_SubgroupSize" Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR Decorate 14(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR Decorate 20(gl_PrimitiveID) BuiltIn PrimitiveId @@ -69,10 +74,11 @@ spv.ext.AnyHitShader.rahit Decorate 70(gl_GeometryIndexEXT) BuiltIn RayGeometryIndexKHR Decorate 76(gl_ObjectToWorld3x4EXT) BuiltIn ObjectToWorldKHR Decorate 80(gl_WorldToObject3x4EXT) BuiltIn WorldToObjectKHR - Decorate 98(gl_SubgroupSize) RelaxedPrecision - Decorate 98(gl_SubgroupSize) BuiltIn SubgroupSize - Decorate 99 RelaxedPrecision - Decorate 100 RelaxedPrecision + Decorate 84(gl_CullMaskEXT) BuiltIn CullMaskKHR + Decorate 101(gl_SubgroupSize) RelaxedPrecision + Decorate 101(gl_SubgroupSize) BuiltIn SubgroupSize + Decorate 102 RelaxedPrecision + Decorate 103 RelaxedPrecision 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 @@ -114,15 +120,16 @@ spv.ext.AnyHitShader.rahit 74: TypePointer Function 73 76(gl_ObjectToWorld3x4EXT): 63(ptr) Variable Input 80(gl_WorldToObject3x4EXT): 63(ptr) Variable Input - 83: TypePointer IncomingRayPayloadKHR 72(fvec4) -84(incomingPayload): 83(ptr) Variable IncomingRayPayloadKHR - 85: 28(float) Constant 1056964608 - 86: 72(fvec4) ConstantComposite 85 85 85 85 - 88: 16(int) Constant 1 - 89: TypeBool - 94: 6(int) Constant 0 -98(gl_SubgroupSize): 57(ptr) Variable Input - 101: TypePointer IncomingRayPayloadKHR 28(float) +84(gl_CullMaskEXT): 57(ptr) Variable Input + 86: TypePointer IncomingRayPayloadKHR 72(fvec4) +87(incomingPayload): 86(ptr) Variable IncomingRayPayloadKHR + 88: 28(float) Constant 1056964608 + 89: 72(fvec4) ConstantComposite 88 88 88 88 + 91: 16(int) Constant 1 + 92: TypeBool + 97: 6(int) Constant 0 +101(gl_SubgroupSize): 57(ptr) Variable Input + 104: TypePointer IncomingRayPayloadKHR 28(float) 4(main): 2 Function None 3 5: Label 9(v0): 8(ptr) Variable Function @@ -143,6 +150,7 @@ spv.ext.AnyHitShader.rahit 69(v15): 17(ptr) Variable Function 75(v16): 74(ptr) Variable Function 79(v17): 74(ptr) Variable Function + 83(v18): 55(ptr) Variable Function 12: 7(ivec3) Load 11(gl_LaunchIDEXT) Store 9(v0) 12 15: 7(ivec3) Load 14(gl_LaunchSizeEXT) @@ -181,20 +189,22 @@ spv.ext.AnyHitShader.rahit 81: 60 Load 80(gl_WorldToObject3x4EXT) 82: 73 Transpose 81 Store 79(v17) 82 - Store 84(incomingPayload) 86 - 87: 16(int) Load 18(v2) - 90: 89(bool) IEqual 87 88 - SelectionMerge 92 None - BranchConditional 90 91 92 - 91: Label + 85: 6(int) Load 84(gl_CullMaskEXT) + Store 83(v18) 85 + Store 87(incomingPayload) 89 + 90: 16(int) Load 18(v2) + 93: 92(bool) IEqual 90 91 + SelectionMerge 95 None + BranchConditional 93 94 95 + 94: Label IgnoreIntersectionKHR - 92: Label - 99: 6(int) Load 98(gl_SubgroupSize) - 100: 28(float) ConvertUToF 99 - 102: 101(ptr) AccessChain 84(incomingPayload) 94 - 103: 28(float) Load 102 - 104: 28(float) FAdd 103 100 - 105: 101(ptr) AccessChain 84(incomingPayload) 94 - Store 105 104 + 95: Label + 102: 6(int) Load 101(gl_SubgroupSize) + 103: 28(float) ConvertUToF 102 + 105: 104(ptr) AccessChain 87(incomingPayload) 97 + 106: 28(float) Load 105 + 107: 28(float) FAdd 106 103 + 108: 104(ptr) AccessChain 87(incomingPayload) 97 + Store 108 107 TerminateRayKHR FunctionEnd diff --git a/Test/baseResults/spv.ext.ClosestHitShader.rchit.out b/Test/baseResults/spv.ext.ClosestHitShader.rchit.out index 9a4eb288..1c1a9a0c 100644 --- a/Test/baseResults/spv.ext.ClosestHitShader.rchit.out +++ b/Test/baseResults/spv.ext.ClosestHitShader.rchit.out @@ -1,14 +1,17 @@ spv.ext.ClosestHitShader.rchit // Module Version 10400 // Generated by (magic number): 8000a -// Id's are bound by 101 +// Id's are bound by 104 Capability RayTracingKHR + Capability RayCullMaskKHR + Extension "SPV_KHR_ray_cull_mask" Extension "SPV_KHR_ray_tracing" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint ClosestHitKHR 4 "main" 11 14 20 23 26 33 36 39 42 47 50 53 58 64 67 70 76 80 85 98 100 + EntryPoint ClosestHitKHR 4 "main" 11 14 20 23 26 33 36 39 42 47 50 53 58 64 67 70 76 80 84 88 101 103 Source GLSL 460 + SourceExtension "GL_EXT_ray_cull_mask" SourceExtension "GL_EXT_ray_tracing" Name 4 "main" Name 9 "v0" @@ -47,9 +50,11 @@ spv.ext.ClosestHitShader.rchit Name 76 "gl_ObjectToWorld3x4EXT" Name 79 "v17" Name 80 "gl_WorldToObject3x4EXT" - Name 85 "accEXT" - Name 98 "incomingPayload" - Name 100 "localPayload" + Name 83 "v18" + Name 84 "gl_CullMaskEXT" + Name 88 "accEXT" + Name 101 "incomingPayload" + Name 103 "localPayload" Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR Decorate 14(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR Decorate 20(gl_PrimitiveID) BuiltIn PrimitiveId @@ -68,8 +73,9 @@ spv.ext.ClosestHitShader.rchit Decorate 70(gl_GeometryIndexEXT) BuiltIn RayGeometryIndexKHR Decorate 76(gl_ObjectToWorld3x4EXT) BuiltIn ObjectToWorldKHR Decorate 80(gl_WorldToObject3x4EXT) BuiltIn WorldToObjectKHR - Decorate 85(accEXT) DescriptorSet 0 - Decorate 85(accEXT) Binding 0 + Decorate 84(gl_CullMaskEXT) BuiltIn CullMaskKHR + Decorate 88(accEXT) DescriptorSet 0 + Decorate 88(accEXT) Binding 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 @@ -111,23 +117,24 @@ spv.ext.ClosestHitShader.rchit 74: TypePointer Function 73 76(gl_ObjectToWorld3x4EXT): 63(ptr) Variable Input 80(gl_WorldToObject3x4EXT): 63(ptr) Variable Input - 83: TypeAccelerationStructureKHR - 84: TypePointer UniformConstant 83 - 85(accEXT): 84(ptr) Variable UniformConstant - 87: 6(int) Constant 0 - 88: 6(int) Constant 1 - 89: 6(int) Constant 2 - 90: 6(int) Constant 3 - 91: 28(float) Constant 1056964608 - 92: 29(fvec3) ConstantComposite 91 91 91 - 93: 28(float) Constant 1065353216 - 94: 29(fvec3) ConstantComposite 93 93 93 - 95: 28(float) Constant 1061158912 - 96: 16(int) Constant 1 - 97: TypePointer IncomingRayPayloadKHR 72(fvec4) -98(incomingPayload): 97(ptr) Variable IncomingRayPayloadKHR - 99: TypePointer RayPayloadKHR 72(fvec4) -100(localPayload): 99(ptr) Variable RayPayloadKHR +84(gl_CullMaskEXT): 57(ptr) Variable Input + 86: TypeAccelerationStructureKHR + 87: TypePointer UniformConstant 86 + 88(accEXT): 87(ptr) Variable UniformConstant + 90: 6(int) Constant 0 + 91: 6(int) Constant 1 + 92: 6(int) Constant 2 + 93: 6(int) Constant 3 + 94: 28(float) Constant 1056964608 + 95: 29(fvec3) ConstantComposite 94 94 94 + 96: 28(float) Constant 1065353216 + 97: 29(fvec3) ConstantComposite 96 96 96 + 98: 28(float) Constant 1061158912 + 99: 16(int) Constant 1 + 100: TypePointer IncomingRayPayloadKHR 72(fvec4) +101(incomingPayload): 100(ptr) Variable IncomingRayPayloadKHR + 102: TypePointer RayPayloadKHR 72(fvec4) +103(localPayload): 102(ptr) Variable RayPayloadKHR 4(main): 2 Function None 3 5: Label 9(v0): 8(ptr) Variable Function @@ -148,6 +155,7 @@ spv.ext.ClosestHitShader.rchit 69(v15): 17(ptr) Variable Function 75(v16): 74(ptr) Variable Function 79(v17): 74(ptr) Variable Function + 83(v18): 55(ptr) Variable Function 12: 7(ivec3) Load 11(gl_LaunchIDEXT) Store 9(v0) 12 15: 7(ivec3) Load 14(gl_LaunchSizeEXT) @@ -186,7 +194,9 @@ spv.ext.ClosestHitShader.rchit 81: 60 Load 80(gl_WorldToObject3x4EXT) 82: 73 Transpose 81 Store 79(v17) 82 - 86: 83 Load 85(accEXT) - TraceRayKHR 86 87 88 89 90 87 92 91 94 95 98(incomingPayload) + 85: 6(int) Load 84(gl_CullMaskEXT) + Store 83(v18) 85 + 89: 86 Load 88(accEXT) + TraceRayKHR 89 90 91 92 93 90 95 94 97 98 101(incomingPayload) Return FunctionEnd diff --git a/Test/baseResults/spv.ext.IntersectShader.rint.out b/Test/baseResults/spv.ext.IntersectShader.rint.out index 2d389a0c..54b6d349 100644 --- a/Test/baseResults/spv.ext.IntersectShader.rint.out +++ b/Test/baseResults/spv.ext.IntersectShader.rint.out @@ -1,14 +1,17 @@ spv.ext.IntersectShader.rint // Module Version 10400 // Generated by (magic number): 8000a -// Id's are bound by 81 +// Id's are bound by 86 Capability RayTracingKHR + Capability RayCullMaskKHR + Extension "SPV_KHR_ray_cull_mask" Extension "SPV_KHR_ray_tracing" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint IntersectionKHR 4 "main" 11 14 20 23 26 33 36 39 42 47 50 56 59 65 69 73 + EntryPoint IntersectionKHR 4 "main" 11 14 20 23 26 33 36 39 42 47 50 56 59 65 69 75 78 Source GLSL 460 + SourceExtension "GL_EXT_ray_cull_mask" SourceExtension "GL_EXT_ray_tracing" Name 4 "main" Name 9 "v0" @@ -41,7 +44,9 @@ spv.ext.IntersectShader.rint Name 65 "gl_ObjectToWorld3x4EXT" Name 68 "v14" Name 69 "gl_WorldToObject3x4EXT" - Name 73 "iAttr" + Name 73 "v15" + Name 75 "gl_CullMaskEXT" + Name 78 "iAttr" Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR Decorate 14(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR Decorate 20(gl_PrimitiveID) BuiltIn PrimitiveId @@ -59,6 +64,7 @@ spv.ext.IntersectShader.rint Decorate 59(gl_WorldToObjectEXT) BuiltIn WorldToObjectKHR Decorate 65(gl_ObjectToWorld3x4EXT) BuiltIn ObjectToWorldKHR Decorate 69(gl_WorldToObject3x4EXT) BuiltIn WorldToObjectKHR + Decorate 75(gl_CullMaskEXT) BuiltIn CullMaskKHR 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 @@ -95,14 +101,17 @@ spv.ext.IntersectShader.rint 63: TypePointer Function 62 65(gl_ObjectToWorld3x4EXT): 55(ptr) Variable Input 69(gl_WorldToObject3x4EXT): 55(ptr) Variable Input - 72: TypePointer HitAttributeKHR 61(fvec4) - 73(iAttr): 72(ptr) Variable HitAttributeKHR - 74: 28(float) Constant 1056964608 - 75: 28(float) Constant 0 - 76: 28(float) Constant 1065353216 - 77: 61(fvec4) ConstantComposite 74 74 75 76 - 78: 6(int) Constant 1 - 79: TypeBool + 72: TypePointer Function 6(int) + 74: TypePointer Input 6(int) +75(gl_CullMaskEXT): 74(ptr) Variable Input + 77: TypePointer HitAttributeKHR 61(fvec4) + 78(iAttr): 77(ptr) Variable HitAttributeKHR + 79: 28(float) Constant 1056964608 + 80: 28(float) Constant 0 + 81: 28(float) Constant 1065353216 + 82: 61(fvec4) ConstantComposite 79 79 80 81 + 83: 6(int) Constant 1 + 84: TypeBool 4(main): 2 Function None 3 5: Label 9(v0): 8(ptr) Variable Function @@ -120,6 +129,7 @@ spv.ext.IntersectShader.rint 58(v12): 53(ptr) Variable Function 64(v13): 63(ptr) Variable Function 68(v14): 63(ptr) Variable Function + 73(v15): 72(ptr) Variable Function 12: 7(ivec3) Load 11(gl_LaunchIDEXT) Store 9(v0) 12 15: 7(ivec3) Load 14(gl_LaunchSizeEXT) @@ -152,7 +162,9 @@ spv.ext.IntersectShader.rint 70: 52 Load 69(gl_WorldToObject3x4EXT) 71: 62 Transpose 70 Store 68(v14) 71 - Store 73(iAttr) 77 - 80: 79(bool) ReportIntersectionKHR 74 78 + 76: 6(int) Load 75(gl_CullMaskEXT) + Store 73(v15) 76 + Store 78(iAttr) 82 + 85: 84(bool) ReportIntersectionKHR 79 83 Return FunctionEnd diff --git a/Test/baseResults/spv.ext.MissShader.rmiss.out b/Test/baseResults/spv.ext.MissShader.rmiss.out index 1acd5ae6..e4a5b88b 100644 --- a/Test/baseResults/spv.ext.MissShader.rmiss.out +++ b/Test/baseResults/spv.ext.MissShader.rmiss.out @@ -1,7 +1,7 @@ spv.ext.MissShader.rmiss // Module Version 10400 // Generated by (magic number): 8000a -// Id's are bound by 90 +// Id's are bound by 94 Capability MinLod Capability GroupNonUniform @@ -9,15 +9,18 @@ spv.ext.MissShader.rmiss Capability SubgroupBallotKHR Capability RayTracingKHR Capability ShaderSMBuiltinsNV + Capability RayCullMaskKHR + Extension "SPV_KHR_ray_cull_mask" Extension "SPV_KHR_ray_tracing" Extension "SPV_KHR_shader_ballot" Extension "SPV_NV_shader_sm_builtins" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint MissKHR 4 "main" 11 14 21 24 29 32 36 51 53 58 63 74 78 85 89 + EntryPoint MissKHR 4 "main" 11 14 21 24 29 32 37 41 56 57 62 67 78 82 89 93 Source GLSL 460 SourceExtension "GL_ARB_shader_ballot" SourceExtension "GL_ARB_sparse_texture_clamp" + SourceExtension "GL_EXT_ray_cull_mask" SourceExtension "GL_EXT_ray_tracing" SourceExtension "GL_KHR_shader_subgroup_ballot" SourceExtension "GL_KHR_shader_subgroup_basic" @@ -35,37 +38,40 @@ spv.ext.MissShader.rmiss Name 29 "gl_RayTminEXT" Name 31 "v5" Name 32 "gl_RayTmaxEXT" - Name 36 "accEXT" - Name 51 "incomingPayload" - Name 53 "gl_SubGroupSizeARB" - Name 58 "gl_SubgroupEqMask" - Name 63 "gl_WarpIDNV" - Name 70 "texel" - Name 74 "s2D" - Name 78 "c2" - Name 85 "lodClamp" - Name 89 "localPayload" + Name 35 "v6" + Name 37 "gl_CullMaskEXT" + Name 41 "accEXT" + Name 56 "incomingPayload" + Name 57 "gl_SubGroupSizeARB" + Name 62 "gl_SubgroupEqMask" + Name 67 "gl_WarpIDNV" + Name 74 "texel" + Name 78 "s2D" + Name 82 "c2" + Name 89 "lodClamp" + Name 93 "localPayload" Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR Decorate 14(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR Decorate 21(gl_WorldRayOriginEXT) BuiltIn WorldRayOriginKHR Decorate 24(gl_WorldRayDirectionEXT) BuiltIn WorldRayDirectionKHR Decorate 29(gl_RayTminEXT) BuiltIn RayTminKHR Decorate 32(gl_RayTmaxEXT) BuiltIn RayTmaxKHR - Decorate 36(accEXT) DescriptorSet 0 - Decorate 36(accEXT) Binding 0 - Decorate 53(gl_SubGroupSizeARB) BuiltIn SubgroupSize - Decorate 53(gl_SubGroupSizeARB) Volatile - Decorate 53(gl_SubGroupSizeARB) Coherent - Decorate 58(gl_SubgroupEqMask) BuiltIn SubgroupEqMaskKHR - Decorate 58(gl_SubgroupEqMask) Volatile - Decorate 58(gl_SubgroupEqMask) Coherent - Decorate 63(gl_WarpIDNV) BuiltIn WarpIDNV - Decorate 63(gl_WarpIDNV) Volatile - Decorate 63(gl_WarpIDNV) Coherent - Decorate 74(s2D) DescriptorSet 0 - Decorate 74(s2D) Binding 1 - Decorate 78(c2) Location 2 - Decorate 85(lodClamp) Location 3 + Decorate 37(gl_CullMaskEXT) BuiltIn CullMaskKHR + Decorate 41(accEXT) DescriptorSet 0 + Decorate 41(accEXT) Binding 0 + Decorate 57(gl_SubGroupSizeARB) BuiltIn SubgroupSize + Decorate 57(gl_SubGroupSizeARB) Volatile + Decorate 57(gl_SubGroupSizeARB) Coherent + Decorate 62(gl_SubgroupEqMask) BuiltIn SubgroupEqMaskKHR + Decorate 62(gl_SubgroupEqMask) Volatile + Decorate 62(gl_SubgroupEqMask) Coherent + Decorate 67(gl_WarpIDNV) BuiltIn WarpIDNV + Decorate 67(gl_WarpIDNV) Volatile + Decorate 67(gl_WarpIDNV) Coherent + Decorate 78(s2D) DescriptorSet 0 + Decorate 78(s2D) Binding 1 + Decorate 82(c2) Location 2 + Decorate 89(lodClamp) Location 3 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 @@ -84,44 +90,46 @@ spv.ext.MissShader.rmiss 28: TypePointer Input 16(float) 29(gl_RayTminEXT): 28(ptr) Variable Input 32(gl_RayTmaxEXT): 28(ptr) Variable Input - 34: TypeAccelerationStructureKHR - 35: TypePointer UniformConstant 34 - 36(accEXT): 35(ptr) Variable UniformConstant - 38: 6(int) Constant 0 - 39: 6(int) Constant 1 - 40: 6(int) Constant 2 - 41: 6(int) Constant 3 - 42: 16(float) Constant 1056964608 - 43: 17(fvec3) ConstantComposite 42 42 42 - 44: 16(float) Constant 1065353216 - 45: 17(fvec3) ConstantComposite 44 44 44 - 46: 16(float) Constant 1061158912 - 47: TypeInt 32 1 - 48: 47(int) Constant 1 - 49: TypeVector 16(float) 4 - 50: TypePointer IncomingRayPayloadKHR 49(fvec4) -51(incomingPayload): 50(ptr) Variable IncomingRayPayloadKHR - 52: TypePointer Input 6(int) -53(gl_SubGroupSizeARB): 52(ptr) Variable Input - 56: TypeVector 6(int) 4 - 57: TypePointer Input 56(ivec4) -58(gl_SubgroupEqMask): 57(ptr) Variable Input - 63(gl_WarpIDNV): 52(ptr) Variable Input - 67: TypePointer IncomingRayPayloadKHR 16(float) - 69: TypePointer Function 49(fvec4) - 71: TypeImage 16(float) 2D sampled format:Unknown - 72: TypeSampledImage 71 - 73: TypePointer UniformConstant 72 - 74(s2D): 73(ptr) Variable UniformConstant - 76: TypeVector 16(float) 2 - 77: TypePointer Input 76(fvec2) - 78(c2): 77(ptr) Variable Input - 82: TypeVector 47(int) 2 - 83: 47(int) Constant 5 - 84: 82(ivec2) ConstantComposite 83 83 - 85(lodClamp): 28(ptr) Variable Input - 88: TypePointer RayPayloadKHR 49(fvec4) -89(localPayload): 88(ptr) Variable RayPayloadKHR + 34: TypePointer Function 6(int) + 36: TypePointer Input 6(int) +37(gl_CullMaskEXT): 36(ptr) Variable Input + 39: TypeAccelerationStructureKHR + 40: TypePointer UniformConstant 39 + 41(accEXT): 40(ptr) Variable UniformConstant + 43: 6(int) Constant 0 + 44: 6(int) Constant 1 + 45: 6(int) Constant 2 + 46: 6(int) Constant 3 + 47: 16(float) Constant 1056964608 + 48: 17(fvec3) ConstantComposite 47 47 47 + 49: 16(float) Constant 1065353216 + 50: 17(fvec3) ConstantComposite 49 49 49 + 51: 16(float) Constant 1061158912 + 52: TypeInt 32 1 + 53: 52(int) Constant 1 + 54: TypeVector 16(float) 4 + 55: TypePointer IncomingRayPayloadKHR 54(fvec4) +56(incomingPayload): 55(ptr) Variable IncomingRayPayloadKHR +57(gl_SubGroupSizeARB): 36(ptr) Variable Input + 60: TypeVector 6(int) 4 + 61: TypePointer Input 60(ivec4) +62(gl_SubgroupEqMask): 61(ptr) Variable Input + 67(gl_WarpIDNV): 36(ptr) Variable Input + 71: TypePointer IncomingRayPayloadKHR 16(float) + 73: TypePointer Function 54(fvec4) + 75: TypeImage 16(float) 2D sampled format:Unknown + 76: TypeSampledImage 75 + 77: TypePointer UniformConstant 76 + 78(s2D): 77(ptr) Variable UniformConstant + 80: TypeVector 16(float) 2 + 81: TypePointer Input 80(fvec2) + 82(c2): 81(ptr) Variable Input + 86: TypeVector 52(int) 2 + 87: 52(int) Constant 5 + 88: 86(ivec2) ConstantComposite 87 87 + 89(lodClamp): 28(ptr) Variable Input + 92: TypePointer RayPayloadKHR 54(fvec4) +93(localPayload): 92(ptr) Variable RayPayloadKHR 4(main): 2 Function None 3 5: Label 9(v0): 8(ptr) Variable Function @@ -130,7 +138,8 @@ spv.ext.MissShader.rmiss 23(v3): 18(ptr) Variable Function 27(v4): 26(ptr) Variable Function 31(v5): 26(ptr) Variable Function - 70(texel): 69(ptr) Variable Function + 35(v6): 34(ptr) Variable Function + 74(texel): 73(ptr) Variable Function 12: 7(ivec3) Load 11(gl_LaunchIDEXT) Store 9(v0) 12 15: 7(ivec3) Load 14(gl_LaunchSizeEXT) @@ -143,25 +152,27 @@ spv.ext.MissShader.rmiss Store 27(v4) 30 33: 16(float) Load 32(gl_RayTmaxEXT) Store 31(v5) 33 - 37: 34 Load 36(accEXT) - TraceRayKHR 37 38 39 40 41 38 43 42 45 46 51(incomingPayload) - 54: 6(int) Load 53(gl_SubGroupSizeARB) - 55: 16(float) ConvertUToF 54 - 59: 56(ivec4) Load 58(gl_SubgroupEqMask) - 60: 49(fvec4) ConvertUToF 59 - 61: 16(float) CompositeExtract 60 0 - 62: 16(float) FAdd 55 61 - 64: 6(int) Load 63(gl_WarpIDNV) - 65: 16(float) ConvertUToF 64 - 66: 16(float) FAdd 62 65 - 68: 67(ptr) AccessChain 51(incomingPayload) 38 - Store 68 66 - 75: 72 Load 74(s2D) - 79: 76(fvec2) Load 78(c2) - 80: 76(fvec2) Load 78(c2) - 81: 76(fvec2) Load 78(c2) - 86: 16(float) Load 85(lodClamp) - 87: 49(fvec4) ImageSampleExplicitLod 75 79 Grad ConstOffset MinLod 80 81 84 86 - Store 70(texel) 87 + 38: 6(int) Load 37(gl_CullMaskEXT) + Store 35(v6) 38 + 42: 39 Load 41(accEXT) + TraceRayKHR 42 43 44 45 46 43 48 47 50 51 56(incomingPayload) + 58: 6(int) Load 57(gl_SubGroupSizeARB) + 59: 16(float) ConvertUToF 58 + 63: 60(ivec4) Load 62(gl_SubgroupEqMask) + 64: 54(fvec4) ConvertUToF 63 + 65: 16(float) CompositeExtract 64 0 + 66: 16(float) FAdd 59 65 + 68: 6(int) Load 67(gl_WarpIDNV) + 69: 16(float) ConvertUToF 68 + 70: 16(float) FAdd 66 69 + 72: 71(ptr) AccessChain 56(incomingPayload) 43 + Store 72 70 + 79: 76 Load 78(s2D) + 83: 80(fvec2) Load 82(c2) + 84: 80(fvec2) Load 82(c2) + 85: 80(fvec2) Load 82(c2) + 90: 16(float) Load 89(lodClamp) + 91: 54(fvec4) ImageSampleExplicitLod 79 83 Grad ConstOffset MinLod 84 85 88 90 + Store 74(texel) 91 Return FunctionEnd diff --git a/Test/spv.ext.AnyHitShader.rahit b/Test/spv.ext.AnyHitShader.rahit index 871f8fea..44c32d91 100644 --- a/Test/spv.ext.AnyHitShader.rahit +++ b/Test/spv.ext.AnyHitShader.rahit @@ -1,6 +1,8 @@ #version 460 #extension GL_EXT_ray_tracing : enable #extension GL_KHR_shader_subgroup_basic : enable +#extension GL_EXT_ray_cull_mask : enable + layout(location = 1) rayPayloadInEXT vec4 incomingPayload; void main() { @@ -22,6 +24,7 @@ void main() int v15 = gl_GeometryIndexEXT; mat3x4 v16 = gl_ObjectToWorld3x4EXT; mat3x4 v17 = gl_WorldToObject3x4EXT; + uint v18 = gl_CullMaskEXT; incomingPayload = vec4(0.5f); if (v2 == 1) { ignoreIntersectionEXT; diff --git a/Test/spv.ext.ClosestHitShader.rchit b/Test/spv.ext.ClosestHitShader.rchit index 3f9bbaa0..8b5f848f 100644 --- a/Test/spv.ext.ClosestHitShader.rchit +++ b/Test/spv.ext.ClosestHitShader.rchit @@ -1,5 +1,7 @@ #version 460 #extension GL_EXT_ray_tracing : enable +#extension GL_EXT_ray_cull_mask : enable + layout(binding = 0, set = 0) uniform accelerationStructureEXT accEXT; layout(location = 0) rayPayloadEXT vec4 localPayload; layout(location = 1) rayPayloadInEXT vec4 incomingPayload; @@ -23,5 +25,6 @@ void main() int v15 = gl_GeometryIndexEXT; mat3x4 v16 = gl_ObjectToWorld3x4EXT; mat3x4 v17 = gl_WorldToObject3x4EXT; + uint v18 = gl_CullMaskEXT; traceRayEXT(accEXT, 0u, 1u, 2u, 3u, 0u, vec3(0.5f), 0.5f, vec3(1.0f), 0.75f, 1); } diff --git a/Test/spv.ext.IntersectShader.rint b/Test/spv.ext.IntersectShader.rint index 4933ff5e..2138ea1a 100644 --- a/Test/spv.ext.IntersectShader.rint +++ b/Test/spv.ext.IntersectShader.rint @@ -1,5 +1,6 @@ #version 460 #extension GL_EXT_ray_tracing : enable +#extension GL_EXT_ray_cull_mask : enable hitAttributeEXT vec4 iAttr; void main() { @@ -18,6 +19,7 @@ void main() mat4x3 v12 = gl_WorldToObjectEXT; mat3x4 v13 = gl_ObjectToWorld3x4EXT; mat3x4 v14 = gl_WorldToObject3x4EXT; + uint v15 = gl_CullMaskEXT; iAttr = vec4(0.5f,0.5f,0.0f,1.0f); reportIntersectionEXT(0.5, 1U); } diff --git a/Test/spv.ext.MissShader.rmiss b/Test/spv.ext.MissShader.rmiss index 05311c9e..6ab1d1ab 100644 --- a/Test/spv.ext.MissShader.rmiss +++ b/Test/spv.ext.MissShader.rmiss @@ -5,6 +5,7 @@ #extension GL_ARB_shader_ballot : enable #extension GL_NV_shader_sm_builtins : enable #extension GL_ARB_sparse_texture_clamp: enable +#extension GL_EXT_ray_cull_mask : enable layout(binding = 0, set = 0) uniform accelerationStructureEXT accEXT; layout(location = 0) rayPayloadEXT vec4 localPayload; @@ -22,6 +23,7 @@ void main() vec3 v3 = gl_WorldRayDirectionEXT; float v4 = gl_RayTminEXT; float v5 = gl_RayTmaxEXT; + uint v6 = gl_CullMaskEXT; traceRayEXT(accEXT, 0u, 1u, 2u, 3u, 0u, vec3(0.5f), 0.5f, vec3(1.0f), 0.75f, 1); incomingPayload.x = float(gl_SubGroupSizeARB) + float(gl_SubgroupEqMask) + float(gl_WarpIDNV); vec4 texel = textureGradOffsetClampARB(s2D, c2, c2, c2, ivec2(5), lodClamp); diff --git a/glslang/Include/BaseTypes.h b/glslang/Include/BaseTypes.h index c8203c22..09177fbc 100644 --- a/glslang/Include/BaseTypes.h +++ b/glslang/Include/BaseTypes.h @@ -263,6 +263,7 @@ enum TBuiltInVariable { EbvObjectRayDirection, EbvRayTmin, EbvRayTmax, + EbvCullMask, EbvHitT, EbvHitKind, EbvObjectToWorld, diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp index 03fdce9f..0406da67 100644 --- a/glslang/MachineIndependent/Initialize.cpp +++ b/glslang/MachineIndependent/Initialize.cpp @@ -5857,6 +5857,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "in uint gl_IncomingRayFlagsNV;" "in uint gl_IncomingRayFlagsEXT;" "in float gl_CurrentRayTimeNV;" + "in uint gl_CullMaskEXT;" "\n"; const char *hitDecls = "in uvec3 gl_LaunchIDNV;" @@ -5893,6 +5894,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "in uint gl_IncomingRayFlagsNV;" "in uint gl_IncomingRayFlagsEXT;" "in float gl_CurrentRayTimeNV;" + "in uint gl_CullMaskEXT;" "\n"; const char *missDecls = "in uvec3 gl_LaunchIDNV;" @@ -5912,6 +5914,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "in uint gl_IncomingRayFlagsNV;" "in uint gl_IncomingRayFlagsEXT;" "in float gl_CurrentRayTimeNV;" + "in uint gl_CullMaskEXT;" "\n"; const char *callableDecls = @@ -8743,6 +8746,7 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.setVariableExtensions("gl_RayTminEXT", 1, &E_GL_EXT_ray_tracing); symbolTable.setVariableExtensions("gl_RayTmaxNV", 1, &E_GL_NV_ray_tracing); symbolTable.setVariableExtensions("gl_RayTmaxEXT", 1, &E_GL_EXT_ray_tracing); + symbolTable.setVariableExtensions("gl_CullMaskEXT", 1, &E_GL_EXT_ray_cull_mask); symbolTable.setVariableExtensions("gl_HitTNV", 1, &E_GL_NV_ray_tracing); symbolTable.setVariableExtensions("gl_HitTEXT", 1, &E_GL_EXT_ray_tracing); symbolTable.setVariableExtensions("gl_HitKindNV", 1, &E_GL_NV_ray_tracing); @@ -8792,6 +8796,7 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion BuiltInVariable("gl_RayTminEXT", EbvRayTmin, symbolTable); BuiltInVariable("gl_RayTmaxNV", EbvRayTmax, symbolTable); BuiltInVariable("gl_RayTmaxEXT", EbvRayTmax, symbolTable); + BuiltInVariable("gl_CullMaskEXT", EbvCullMask, symbolTable); BuiltInVariable("gl_HitTNV", EbvHitT, symbolTable); BuiltInVariable("gl_HitTEXT", EbvHitT, symbolTable); BuiltInVariable("gl_HitKindNV", EbvHitKind, symbolTable); diff --git a/glslang/MachineIndependent/Versions.cpp b/glslang/MachineIndependent/Versions.cpp index 8d96e0e1..f6bf7c3a 100644 --- a/glslang/MachineIndependent/Versions.cpp +++ b/glslang/MachineIndependent/Versions.cpp @@ -334,6 +334,7 @@ void TParseVersions::initializeExtensionBehavior() extensionBehavior[E_GL_EXT_ray_tracing] = EBhDisable; extensionBehavior[E_GL_EXT_ray_query] = EBhDisable; extensionBehavior[E_GL_EXT_ray_flags_primitive_culling] = EBhDisable; + extensionBehavior[E_GL_EXT_ray_cull_mask] = EBhDisable; extensionBehavior[E_GL_EXT_blend_func_extended] = EBhDisable; extensionBehavior[E_GL_EXT_shader_implicit_conversions] = EBhDisable; extensionBehavior[E_GL_EXT_fragment_shading_rate] = EBhDisable; @@ -505,6 +506,7 @@ void TParseVersions::getPreamble(std::string& preamble) "#define GL_EXT_ray_tracing 1\n" "#define GL_EXT_ray_query 1\n" "#define GL_EXT_ray_flags_primitive_culling 1\n" + "#define GL_EXT_ray_cull_mask 1\n" "#define GL_EXT_spirv_intrinsics 1\n" "#define GL_AMD_shader_ballot 1\n" diff --git a/glslang/MachineIndependent/Versions.h b/glslang/MachineIndependent/Versions.h index 96a6e1fc..3f7299d3 100644 --- a/glslang/MachineIndependent/Versions.h +++ b/glslang/MachineIndependent/Versions.h @@ -201,6 +201,7 @@ const char* const E_GL_EXT_debug_printf = "GL_EXT_debug_prin const char* const E_GL_EXT_ray_tracing = "GL_EXT_ray_tracing"; const char* const E_GL_EXT_ray_query = "GL_EXT_ray_query"; const char* const E_GL_EXT_ray_flags_primitive_culling = "GL_EXT_ray_flags_primitive_culling"; +const char* const E_GL_EXT_ray_cull_mask = "GL_EXT_ray_cull_mask"; const char* const E_GL_EXT_blend_func_extended = "GL_EXT_blend_func_extended"; const char* const E_GL_EXT_shader_implicit_conversions = "GL_EXT_shader_implicit_conversions"; const char* const E_GL_EXT_fragment_shading_rate = "GL_EXT_fragment_shading_rate";