Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SPV: Do not decorate struct members with location or nested members with interpolation qualifiers #269

Merged
merged 1 commit into from May 17, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 14 additions & 1 deletion SPIRV/GlslangToSpv.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1862,7 +1862,11 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty
builder.addMemberName(spvType, member, glslangType.getFieldName().c_str());
addMemberDecoration(spvType, member, TranslateLayoutDecoration(glslangType, subQualifier.layoutMatrix));
addMemberDecoration(spvType, member, TranslatePrecisionDecoration(glslangType));
addMemberDecoration(spvType, member, TranslateInterpolationDecoration(subQualifier));
// Add interpolation decorations only to top-level members of Input and Output storage classes
if (type.getQualifier().storage == glslang::EvqVaryingIn || type.getQualifier().storage == glslang::EvqVaryingOut)
{
addMemberDecoration(spvType, member, TranslateInterpolationDecoration(subQualifier));
}
addMemberDecoration(spvType, member, TranslateInvariantDecoration(subQualifier));

if (qualifier.storage == glslang::EvqBuffer) {
Expand All @@ -1878,7 +1882,16 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty
// answer sitting already distributed throughout the individual member locations.
int location = -1; // will only decorate if present or inherited
if (subQualifier.hasLocation()) // no inheritance, or override of inheritance
{
// struct members should not have explicit locations
assert(type.getBasicType() != glslang::EbtStruct);
location = subQualifier.layoutLocation;
}
else if (type.getBasicType() != glslang::EbtBlock)
{
// If it is a not a Block, (...) Its members are assigned consecutive locations (...)
// The members, and their nested types, must not themselves have Location decorations.
}
else if (qualifier.hasLocation()) // inheritance
location = qualifier.layoutLocation + locationOffset;
if (qualifier.hasLocation()) // track for upcoming inheritance
Expand Down
9 changes: 0 additions & 9 deletions Test/baseResults/spv.430.vert.out
Original file line number Diff line number Diff line change
Expand Up @@ -63,18 +63,9 @@ Linked vertex stage:
Decorate 55(sampb2) Binding 5
Decorate 56(sampb4) DescriptorSet 0
Decorate 56(sampb4) Binding 31
MemberDecorate 59(S) 0 Flat
MemberDecorate 59(S) 0 Location 1
MemberDecorate 59(S) 1 Flat
MemberDecorate 59(S) 1 Location 2
MemberDecorate 59(S) 2 Flat
MemberDecorate 59(S) 2 Location 3
MemberDecorate 60(SS) 0 Flat
MemberDecorate 60(SS) 0 Location 0
MemberDecorate 60(SS) 1 Flat
MemberDecorate 60(SS) 1 Location 1
MemberDecorate 60(SS) 2 Flat
MemberDecorate 60(SS) 2 Location 4
MemberDecorate 63(MS) 0 Location 17
Decorate 63(MS) Block
2: TypeVoid
Expand Down
10 changes: 0 additions & 10 deletions Test/baseResults/spv.localAggregates.frag.out
Original file line number Diff line number Diff line change
Expand Up @@ -66,14 +66,6 @@ Linked fragment stage:
MemberName 140(s2) 2 "s1_1"
MemberName 140(s2) 3 "bleh"
Name 142 "foo2"
MemberDecorate 13(s1) 0 Flat
MemberDecorate 13(s1) 1 Flat
MemberDecorate 14(s2) 0 Flat
MemberDecorate 14(s2) 1 Flat
MemberDecorate 14(s2) 2 Flat
MemberDecorate 14(s2) 3 Flat
MemberDecorate 15(s1) 0 Flat
MemberDecorate 15(s1) 1 Flat
MemberDecorate 16(s3) 0 Flat
MemberDecorate 16(s3) 1 Flat
MemberDecorate 16(s3) 2 Flat
Expand All @@ -82,8 +74,6 @@ Linked fragment stage:
Decorate 131(samp2D) DescriptorSet 0
MemberDecorate 136(s1) 0 Flat
MemberDecorate 136(s1) 1 Flat
MemberDecorate 139(s1) 0 Flat
MemberDecorate 139(s1) 1 Flat
MemberDecorate 140(s2) 0 Flat
MemberDecorate 140(s2) 1 Flat
MemberDecorate 140(s2) 2 Flat
Expand Down
9 changes: 0 additions & 9 deletions Test/baseResults/spv.variableArrayIndex.frag.out
Original file line number Diff line number Diff line change
Expand Up @@ -52,19 +52,10 @@ Linked fragment stage:
Name 67 "coord"
Name 73 "constructed"
Decorate 10(Count) Flat
MemberDecorate 13(lunarStruct1) 0 Flat
MemberDecorate 13(lunarStruct1) 1 Flat
MemberDecorate 14(lunarStruct2) 0 Flat
MemberDecorate 14(lunarStruct2) 1 Flat
MemberDecorate 14(lunarStruct2) 2 Flat
MemberDecorate 18(lunarStruct1) 0 Flat
MemberDecorate 18(lunarStruct1) 1 Flat
MemberDecorate 19(lunarStruct3) 0 Flat
MemberDecorate 19(lunarStruct3) 1 Flat
MemberDecorate 19(lunarStruct3) 2 Flat
MemberDecorate 19(lunarStruct3) 3 Flat
MemberDecorate 32(lunarStruct1) 0 Flat
MemberDecorate 32(lunarStruct1) 1 Flat
MemberDecorate 33(lunarStruct2) 0 Flat
MemberDecorate 33(lunarStruct2) 1 Flat
MemberDecorate 33(lunarStruct2) 2 Flat
Expand Down