diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index 50d53d5f02ecfffdf067d613b500a02ba88987ca..36b27075a67af6ae20190f777bb4245b6d935d97 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 c3e5e730ff31a0607978eee2cd43006e3fb22d44..702d92c6eac0dffdcb8666dc59629635eb137903 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 d13b9752d02259dbc6d6a7551df3a69286dce7f6..a60ce80aac6207808c4c5ec9894bbe7ce14b1733 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 d4841a413d88214195e7db1815182a3fc5d229ee..00608680d884956816bfc5f76144fe7e663d2108 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 ca282c60a982fd2f2292ff49ce9f4c5f33af55da..6b7c723e2f6a4ff2fd08b075a3c4dc6874b0eef0 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