From 286ca432cfc7b0f12129c4a9f3c2e96935ce9a27 Mon Sep 17 00:00:00 2001 From: Rex Xu <rex.xu@amd.com> Date: Thu, 27 Jul 2017 14:33:16 +0800 Subject: [PATCH] SPV: Memory qualifiers should decorate top-level block members --- SPIRV/GlslangToSpv.cpp | 4 +++- Test/baseResults/hlsl.structbuffer.coherent.frag.out | 2 -- Test/baseResults/hlsl.structbuffer.frag.out | 3 --- Test/baseResults/spv.memoryQualifier.frag.out | 2 -- Test/baseResults/spv.ssbo.autoassign.frag.out | 2 -- 5 files changed, 3 insertions(+), 10 deletions(-) diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index 50d53d5f0..36b27075a 100755 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -2531,7 +2531,9 @@ void TGlslangToSpvTraverser::decorateStructType(const glslang::TType& type, } addMemberDecoration(spvType, member, TranslateInvariantDecoration(memberQualifier)); - if (qualifier.storage == glslang::EvqBuffer) { + if (type.getBasicType() == glslang::EbtBlock && + qualifier.storage == glslang::EvqBuffer) { + // Add memory decorations only to top-level members of shader storage block std::vector<spv::Decoration> memory; TranslateMemoryDecoration(memberQualifier, memory); for (unsigned int i = 0; i < memory.size(); ++i) diff --git a/Test/baseResults/hlsl.structbuffer.coherent.frag.out b/Test/baseResults/hlsl.structbuffer.coherent.frag.out index c3e5e730f..702d92c6e 100644 --- a/Test/baseResults/hlsl.structbuffer.coherent.frag.out +++ b/Test/baseResults/hlsl.structbuffer.coherent.frag.out @@ -208,9 +208,7 @@ gl_FragCoord origin is upper left MemberDecorate 15(sbuf2) 0 Offset 0 Decorate 15(sbuf2) BufferBlock Decorate 17(sbuf2) DescriptorSet 0 - MemberDecorate 28(sb_t) 0 Coherent MemberDecorate 28(sb_t) 0 Offset 0 - MemberDecorate 28(sb_t) 1 Coherent MemberDecorate 28(sb_t) 1 Offset 12 Decorate 29 ArrayStride 16 MemberDecorate 30(sbuf) 0 Coherent diff --git a/Test/baseResults/hlsl.structbuffer.frag.out b/Test/baseResults/hlsl.structbuffer.frag.out index d13b9752d..a60ce80aa 100644 --- a/Test/baseResults/hlsl.structbuffer.frag.out +++ b/Test/baseResults/hlsl.structbuffer.frag.out @@ -221,11 +221,8 @@ gl_FragCoord origin is upper left Name 89 "pos" Name 92 "@entryPointOutput" Name 93 "param" - MemberDecorate 19(sb_t) 0 NonWritable MemberDecorate 19(sb_t) 0 Offset 0 - MemberDecorate 19(sb_t) 1 NonWritable MemberDecorate 19(sb_t) 1 Offset 12 - MemberDecorate 19(sb_t) 2 NonWritable MemberDecorate 19(sb_t) 2 Offset 16 Decorate 20 ArrayStride 32 MemberDecorate 21(sbuf) 0 NonWritable diff --git a/Test/baseResults/spv.memoryQualifier.frag.out b/Test/baseResults/spv.memoryQualifier.frag.out index d4841a413..00608680d 100644 --- a/Test/baseResults/spv.memoryQualifier.frag.out +++ b/Test/baseResults/spv.memoryQualifier.frag.out @@ -44,9 +44,7 @@ spv.memoryQualifier.frag Decorate 44(iCube) DescriptorSet 0 Decorate 44(iCube) Binding 3 Decorate 44(iCube) NonReadable - MemberDecorate 49(Data) 0 Coherent MemberDecorate 49(Data) 0 Offset 0 - MemberDecorate 49(Data) 1 Coherent MemberDecorate 49(Data) 1 Offset 8 MemberDecorate 50(Buffer) 0 Coherent MemberDecorate 50(Buffer) 0 Volatile diff --git a/Test/baseResults/spv.ssbo.autoassign.frag.out b/Test/baseResults/spv.ssbo.autoassign.frag.out index ca282c60a..6b7c723e2 100644 --- a/Test/baseResults/spv.ssbo.autoassign.frag.out +++ b/Test/baseResults/spv.ssbo.autoassign.frag.out @@ -30,9 +30,7 @@ spv.ssbo.autoassign.frag Name 92 "pos" Name 95 "@entryPointOutput" Name 96 "param" - MemberDecorate 14(BufType) 0 NonWritable MemberDecorate 14(BufType) 0 Offset 0 - MemberDecorate 14(BufType) 1 NonWritable MemberDecorate 14(BufType) 1 Offset 16 Decorate 15 ArrayStride 32 MemberDecorate 16(SB0) 0 NonWritable -- GitLab