From e306f0292713961eaf3463c2a3e86c56e0bd00df Mon Sep 17 00:00:00 2001 From: Ashwin Lele Date: Mon, 6 Dec 2021 13:09:03 -0800 Subject: [PATCH] Do not output location decoration for certain variables in ray tracing storage classes. --- SPIRV/GlslangToSpv.cpp | 14 ++++++++++++-- .../spv.ClosestHitShaderMotion.rchit.out | 1 - Test/baseResults/spv.MissShaderMotion.rmiss.out | 1 - Test/baseResults/spv.RayGenShaderMotion.rgen.out | 1 - Test/baseResults/spv.ext.AnyHitShader.rahit.out | 1 - .../baseResults/spv.ext.ClosestHitShader.rchit.out | 2 -- .../spv.ext.ClosestHitShader_Subgroup.rchit.out | 1 - Test/baseResults/spv.ext.MissShader.rmiss.out | 2 -- Test/baseResults/spv.ext.RayCallable.rcall.out | 2 -- Test/baseResults/spv.ext.RayConstants.rgen.out | 1 - Test/baseResults/spv.ext.RayGenSBTlayout.rgen.out | 1 - .../spv.ext.RayGenSBTlayout140.rgen.out | 1 - .../spv.ext.RayGenSBTlayout430.rgen.out | 1 - .../spv.ext.RayGenSBTlayoutscalar.rgen.out | 1 - Test/baseResults/spv.ext.RayGenShader.rgen.out | 1 - Test/baseResults/spv.ext.RayGenShader11.rgen.out | 1 - .../baseResults/spv.ext.RayGenShaderArray.rgen.out | 1 - Test/baseResults/spv.ext.World3x4.rahit.out | 1 - 18 files changed, 12 insertions(+), 22 deletions(-) diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index e471b9ff..2a83b925 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -8716,8 +8716,18 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol builder.addDecoration(id, spv::DecorationOffset, symbol->getQualifier().layoutOffset); } - if (symbol->getQualifier().hasLocation()) - builder.addDecoration(id, spv::DecorationLocation, symbol->getQualifier().layoutLocation); + if (symbol->getQualifier().hasLocation()) { + if (!(glslangIntermediate->isRayTracingStage() && glslangIntermediate->IsRequestedExtension(glslang::E_GL_EXT_ray_tracing) + && (builder.getStorageClass(id) == spv::StorageClassRayPayloadKHR || + builder.getStorageClass(id) == spv::StorageClassIncomingRayPayloadKHR || + builder.getStorageClass(id) == spv::StorageClassCallableDataKHR || + builder.getStorageClass(id) == spv::StorageClassIncomingCallableDataKHR))) { + // Location values are used to link TraceRayKHR and ExecuteCallableKHR to corresponding variables + // but are not valid in SPIRV since they are supported only for Input/Output Storage classes. + builder.addDecoration(id, spv::DecorationLocation, symbol->getQualifier().layoutLocation); + } + } + builder.addDecoration(id, TranslateInvariantDecoration(symbol->getType().getQualifier())); if (symbol->getQualifier().hasStream() && glslangIntermediate->isMultiStream()) { builder.addCapability(spv::CapabilityGeometryStreams); diff --git a/Test/baseResults/spv.ClosestHitShaderMotion.rchit.out b/Test/baseResults/spv.ClosestHitShaderMotion.rchit.out index e89abb45..45679eb0 100644 --- a/Test/baseResults/spv.ClosestHitShaderMotion.rchit.out +++ b/Test/baseResults/spv.ClosestHitShaderMotion.rchit.out @@ -21,7 +21,6 @@ spv.ClosestHitShaderMotion.rchit Decorate 10(gl_CurrentRayTimeNV) BuiltIn CurrentRayTimeNV Decorate 16(accEXT) DescriptorSet 0 Decorate 16(accEXT) Binding 0 - Decorate 32(incomingPayloadEXT) Location 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.MissShaderMotion.rmiss.out b/Test/baseResults/spv.MissShaderMotion.rmiss.out index 2f183381..185c934b 100644 --- a/Test/baseResults/spv.MissShaderMotion.rmiss.out +++ b/Test/baseResults/spv.MissShaderMotion.rmiss.out @@ -21,7 +21,6 @@ spv.MissShaderMotion.rmiss Decorate 10(gl_CurrentRayTimeNV) BuiltIn CurrentRayTimeNV Decorate 16(accEXT) DescriptorSet 0 Decorate 16(accEXT) Binding 0 - Decorate 32(localPayloadEXT) Location 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.RayGenShaderMotion.rgen.out b/Test/baseResults/spv.RayGenShaderMotion.rgen.out index f9b9fa5f..a6af2365 100644 --- a/Test/baseResults/spv.RayGenShaderMotion.rgen.out +++ b/Test/baseResults/spv.RayGenShaderMotion.rgen.out @@ -26,7 +26,6 @@ spv.RayGenShaderMotion.rgen Decorate 21(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR Decorate 29(accEXT) DescriptorSet 0 Decorate 29(accEXT) Binding 0 - Decorate 46(payloadEXT) Location 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 diff --git a/Test/baseResults/spv.ext.AnyHitShader.rahit.out b/Test/baseResults/spv.ext.AnyHitShader.rahit.out index 880be339..df779bdd 100644 --- a/Test/baseResults/spv.ext.AnyHitShader.rahit.out +++ b/Test/baseResults/spv.ext.AnyHitShader.rahit.out @@ -69,7 +69,6 @@ spv.ext.AnyHitShader.rahit Decorate 70(gl_GeometryIndexEXT) BuiltIn RayGeometryIndexKHR Decorate 76(gl_ObjectToWorld3x4EXT) BuiltIn ObjectToWorldKHR Decorate 80(gl_WorldToObject3x4EXT) BuiltIn WorldToObjectKHR - Decorate 84(incomingPayload) Location 1 Decorate 98(gl_SubgroupSize) RelaxedPrecision Decorate 98(gl_SubgroupSize) BuiltIn SubgroupSize Decorate 99 RelaxedPrecision diff --git a/Test/baseResults/spv.ext.ClosestHitShader.rchit.out b/Test/baseResults/spv.ext.ClosestHitShader.rchit.out index 40903e60..9a4eb288 100644 --- a/Test/baseResults/spv.ext.ClosestHitShader.rchit.out +++ b/Test/baseResults/spv.ext.ClosestHitShader.rchit.out @@ -70,8 +70,6 @@ spv.ext.ClosestHitShader.rchit Decorate 80(gl_WorldToObject3x4EXT) BuiltIn WorldToObjectKHR Decorate 85(accEXT) DescriptorSet 0 Decorate 85(accEXT) Binding 0 - Decorate 98(incomingPayload) Location 1 - Decorate 100(localPayload) Location 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 diff --git a/Test/baseResults/spv.ext.ClosestHitShader_Subgroup.rchit.out b/Test/baseResults/spv.ext.ClosestHitShader_Subgroup.rchit.out index 7f5af89d..24ab4f46 100644 --- a/Test/baseResults/spv.ext.ClosestHitShader_Subgroup.rchit.out +++ b/Test/baseResults/spv.ext.ClosestHitShader_Subgroup.rchit.out @@ -34,7 +34,6 @@ spv.ext.ClosestHitShader_Subgroup.rchit Name 61 "gl_SMIDNV" Decorate 8(accEXT) DescriptorSet 0 Decorate 8(accEXT) Binding 0 - Decorate 26(incomingPayload) Location 1 Decorate 28(gl_SubgroupInvocationID) RelaxedPrecision Decorate 28(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId Decorate 29 RelaxedPrecision diff --git a/Test/baseResults/spv.ext.MissShader.rmiss.out b/Test/baseResults/spv.ext.MissShader.rmiss.out index d2dfc176..1acd5ae6 100644 --- a/Test/baseResults/spv.ext.MissShader.rmiss.out +++ b/Test/baseResults/spv.ext.MissShader.rmiss.out @@ -53,7 +53,6 @@ spv.ext.MissShader.rmiss Decorate 32(gl_RayTmaxEXT) BuiltIn RayTmaxKHR Decorate 36(accEXT) DescriptorSet 0 Decorate 36(accEXT) Binding 0 - Decorate 51(incomingPayload) Location 1 Decorate 53(gl_SubGroupSizeARB) BuiltIn SubgroupSize Decorate 53(gl_SubGroupSizeARB) Volatile Decorate 53(gl_SubGroupSizeARB) Coherent @@ -67,7 +66,6 @@ spv.ext.MissShader.rmiss Decorate 74(s2D) Binding 1 Decorate 78(c2) Location 2 Decorate 85(lodClamp) Location 3 - Decorate 89(localPayload) Location 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 diff --git a/Test/baseResults/spv.ext.RayCallable.rcall.out b/Test/baseResults/spv.ext.RayCallable.rcall.out index d429116c..50e7fd8f 100644 --- a/Test/baseResults/spv.ext.RayCallable.rcall.out +++ b/Test/baseResults/spv.ext.RayCallable.rcall.out @@ -22,8 +22,6 @@ spv.ext.RayCallable.rcall Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR Decorate 14(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR Decorate 16(dataBlock) Block - Decorate 18 Location 1 - Decorate 29(data0) Location 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 diff --git a/Test/baseResults/spv.ext.RayConstants.rgen.out b/Test/baseResults/spv.ext.RayConstants.rgen.out index afd50833..6ef9dd4d 100644 --- a/Test/baseResults/spv.ext.RayConstants.rgen.out +++ b/Test/baseResults/spv.ext.RayConstants.rgen.out @@ -15,7 +15,6 @@ spv.ext.RayConstants.rgen Name 26 "payload" Decorate 8(accEXT) DescriptorSet 0 Decorate 8(accEXT) Binding 0 - Decorate 26(payload) Location 1 2: TypeVoid 3: TypeFunction 2 6: TypeAccelerationStructureKHR diff --git a/Test/baseResults/spv.ext.RayGenSBTlayout.rgen.out b/Test/baseResults/spv.ext.RayGenSBTlayout.rgen.out index 95d92136..88e3c004 100644 --- a/Test/baseResults/spv.ext.RayGenSBTlayout.rgen.out +++ b/Test/baseResults/spv.ext.RayGenSBTlayout.rgen.out @@ -49,7 +49,6 @@ spv.ext.RayGenSBTlayout.rgen MemberDecorate 36(block) 9 Offset 120 MemberDecorate 36(block) 10 Offset 128 Decorate 36(block) Block - Decorate 60(payload) Location 1 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 diff --git a/Test/baseResults/spv.ext.RayGenSBTlayout140.rgen.out b/Test/baseResults/spv.ext.RayGenSBTlayout140.rgen.out index f5e32c13..ce5c3063 100644 --- a/Test/baseResults/spv.ext.RayGenSBTlayout140.rgen.out +++ b/Test/baseResults/spv.ext.RayGenSBTlayout140.rgen.out @@ -49,7 +49,6 @@ spv.ext.RayGenSBTlayout140.rgen MemberDecorate 36(block) 9 Offset 136 MemberDecorate 36(block) 10 Offset 144 Decorate 36(block) Block - Decorate 60(payload) Location 1 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 diff --git a/Test/baseResults/spv.ext.RayGenSBTlayout430.rgen.out b/Test/baseResults/spv.ext.RayGenSBTlayout430.rgen.out index d952adfd..7462abd9 100644 --- a/Test/baseResults/spv.ext.RayGenSBTlayout430.rgen.out +++ b/Test/baseResults/spv.ext.RayGenSBTlayout430.rgen.out @@ -49,7 +49,6 @@ spv.ext.RayGenSBTlayout430.rgen MemberDecorate 36(block) 9 Offset 120 MemberDecorate 36(block) 10 Offset 128 Decorate 36(block) Block - Decorate 60(payload) Location 1 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 diff --git a/Test/baseResults/spv.ext.RayGenSBTlayoutscalar.rgen.out b/Test/baseResults/spv.ext.RayGenSBTlayoutscalar.rgen.out index c6d65304..35734556 100644 --- a/Test/baseResults/spv.ext.RayGenSBTlayoutscalar.rgen.out +++ b/Test/baseResults/spv.ext.RayGenSBTlayoutscalar.rgen.out @@ -50,7 +50,6 @@ spv.ext.RayGenSBTlayoutscalar.rgen MemberDecorate 36(block) 9 Offset 96 MemberDecorate 36(block) 10 Offset 104 Decorate 36(block) Block - Decorate 60(payload) Location 1 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 diff --git a/Test/baseResults/spv.ext.RayGenShader.rgen.out b/Test/baseResults/spv.ext.RayGenShader.rgen.out index bfaf64b1..46f920ac 100644 --- a/Test/baseResults/spv.ext.RayGenShader.rgen.out +++ b/Test/baseResults/spv.ext.RayGenShader.rgen.out @@ -34,7 +34,6 @@ spv.ext.RayGenShader.rgen MemberDecorate 38(block) 0 Offset 0 MemberDecorate 38(block) 1 Offset 16 Decorate 38(block) Block - Decorate 53(payload) Location 1 Decorate 54(accEXT1) DescriptorSet 0 Decorate 54(accEXT1) Binding 1 Decorate 57(imageu) DescriptorSet 0 diff --git a/Test/baseResults/spv.ext.RayGenShader11.rgen.out b/Test/baseResults/spv.ext.RayGenShader11.rgen.out index 048b02b2..b31ebd9a 100644 --- a/Test/baseResults/spv.ext.RayGenShader11.rgen.out +++ b/Test/baseResults/spv.ext.RayGenShader11.rgen.out @@ -30,7 +30,6 @@ spv.ext.RayGenShader11.rgen MemberDecorate 37(block) 0 Offset 0 MemberDecorate 37(block) 1 Offset 16 Decorate 37(block) Block - Decorate 52(payload) Location 1 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 diff --git a/Test/baseResults/spv.ext.RayGenShaderArray.rgen.out b/Test/baseResults/spv.ext.RayGenShaderArray.rgen.out index ee39e358..08f72b28 100644 --- a/Test/baseResults/spv.ext.RayGenShaderArray.rgen.out +++ b/Test/baseResults/spv.ext.RayGenShaderArray.rgen.out @@ -43,7 +43,6 @@ spv.ext.RayGenShaderArray.rgen MemberDecorate 36(block) 3 Offset 32 MemberDecorate 36(block) 4 Offset 40 Decorate 36(block) Block - Decorate 61(payload) Location 1 Decorate 65(accEXT1) DescriptorSet 0 Decorate 65(accEXT1) Binding 1 Decorate 80 DecorationNonUniformEXT diff --git a/Test/baseResults/spv.ext.World3x4.rahit.out b/Test/baseResults/spv.ext.World3x4.rahit.out index 40d73d1b..8c60912c 100644 --- a/Test/baseResults/spv.ext.World3x4.rahit.out +++ b/Test/baseResults/spv.ext.World3x4.rahit.out @@ -28,7 +28,6 @@ spv.ext.World3x4.rahit Decorate 60(gl_WorldToObject3x4EXT) BuiltIn WorldToObjectKHR Decorate 78(result) DescriptorSet 0 Decorate 78(result) Binding 0 - Decorate 89(hitValue) Location 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32