diff --git a/Test/baseResults/hlsl.entry-in.frag.out b/Test/baseResults/hlsl.entry-in.frag.out index 81441cb9..1c3b3cd2 100755 --- a/Test/baseResults/hlsl.entry-in.frag.out +++ b/Test/baseResults/hlsl.entry-in.frag.out @@ -58,7 +58,7 @@ gl_FragCoord origin is upper left 0:13 Constant: 0:13 0 (const int) 0:13 v: direct index for structure ( temp 2-component vector of float) -0:13 'i' (layout( location=0) in structure{ temp 2-component vector of float v, temp 2-component vector of int i2}) +0:13 'i' (layout( location=0) in structure{ temp 2-component vector of float v, flat temp 2-component vector of int i2}) 0:13 Constant: 0:13 0 (const int) 0:13 move second child to first child ( temp 4-component vector of float) @@ -72,8 +72,8 @@ gl_FragCoord origin is upper left 0:? 'i' ( temp structure{ temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2}) 0:13 Constant: 0:13 2 (const int) -0:13 i2: direct index for structure ( temp 2-component vector of int) -0:13 'i' (layout( location=0) in structure{ temp 2-component vector of float v, temp 2-component vector of int i2}) +0:13 i2: direct index for structure ( flat temp 2-component vector of int) +0:13 'i' (layout( location=0) in structure{ temp 2-component vector of float v, flat temp 2-component vector of int i2}) 0:13 Constant: 0:13 1 (const int) 0:13 move second child to first child ( temp 4-component vector of float) @@ -82,7 +82,7 @@ gl_FragCoord origin is upper left 0:? 'i' ( temp structure{ temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2}) 0:? Linker Objects 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) -0:? 'i' (layout( location=0) in structure{ temp 2-component vector of float v, temp 2-component vector of int i2}) +0:? 'i' (layout( location=0) in structure{ temp 2-component vector of float v, flat temp 2-component vector of int i2}) 0:? 'i_fragCoord' ( in 4-component vector of float FragCoord) @@ -148,7 +148,7 @@ gl_FragCoord origin is upper left 0:13 Constant: 0:13 0 (const int) 0:13 v: direct index for structure ( temp 2-component vector of float) -0:13 'i' (layout( location=0) in structure{ temp 2-component vector of float v, temp 2-component vector of int i2}) +0:13 'i' (layout( location=0) in structure{ temp 2-component vector of float v, flat temp 2-component vector of int i2}) 0:13 Constant: 0:13 0 (const int) 0:13 move second child to first child ( temp 4-component vector of float) @@ -162,8 +162,8 @@ gl_FragCoord origin is upper left 0:? 'i' ( temp structure{ temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2}) 0:13 Constant: 0:13 2 (const int) -0:13 i2: direct index for structure ( temp 2-component vector of int) -0:13 'i' (layout( location=0) in structure{ temp 2-component vector of float v, temp 2-component vector of int i2}) +0:13 i2: direct index for structure ( flat temp 2-component vector of int) +0:13 'i' (layout( location=0) in structure{ temp 2-component vector of float v, flat temp 2-component vector of int i2}) 0:13 Constant: 0:13 1 (const int) 0:13 move second child to first child ( temp 4-component vector of float) @@ -172,7 +172,7 @@ gl_FragCoord origin is upper left 0:? 'i' ( temp structure{ temp 2-component vector of float v, temp 4-component vector of float fragCoord, temp 2-component vector of int i2}) 0:? Linker Objects 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) -0:? 'i' (layout( location=0) in structure{ temp 2-component vector of float v, temp 2-component vector of int i2}) +0:? 'i' (layout( location=0) in structure{ temp 2-component vector of float v, flat temp 2-component vector of int i2}) 0:? 'i_fragCoord' ( in 4-component vector of float FragCoord) // Module Version 10000 @@ -207,6 +207,7 @@ gl_FragCoord origin is upper left Name 63 "i_fragCoord" Name 73 "@entryPointOutput" Name 74 "param" + MemberDecorate 54(InParam) 1 Flat Decorate 56(i) Location 0 Decorate 63(i_fragCoord) BuiltIn FragCoord Decorate 73(@entryPointOutput) Location 0 diff --git a/Test/baseResults/hlsl.struct.frag.out b/Test/baseResults/hlsl.struct.frag.out index 6798bae7..5926833f 100755 --- a/Test/baseResults/hlsl.struct.frag.out +++ b/Test/baseResults/hlsl.struct.frag.out @@ -44,7 +44,7 @@ gl_FragCoord origin is upper left 0:40 Constant: 0:40 0 (const int) 0:40 a: direct index for structure ( smooth temp 4-component vector of float) -0:40 's' (layout( location=1) in structure{ smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4}) +0:40 's' (layout( location=1) in structure{ smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, flat temp bool ff2, flat temp bool ff3, temp 4-component vector of float ff4}) 0:40 Constant: 0:40 0 (const int) 0:40 move second child to first child ( temp bool) @@ -53,7 +53,7 @@ gl_FragCoord origin is upper left 0:40 Constant: 0:40 1 (const int) 0:40 b: direct index for structure ( flat temp bool) -0:40 's' (layout( location=1) in structure{ smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4}) +0:40 's' (layout( location=1) in structure{ smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, flat temp bool ff2, flat temp bool ff3, temp 4-component vector of float ff4}) 0:40 Constant: 0:40 1 (const int) 0:40 move second child to first child ( temp 1-component vector of float) @@ -62,7 +62,7 @@ gl_FragCoord origin is upper left 0:40 Constant: 0:40 2 (const int) 0:40 c: direct index for structure ( centroid noperspective temp 1-component vector of float) -0:40 's' (layout( location=1) in structure{ smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4}) +0:40 's' (layout( location=1) in structure{ smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, flat temp bool ff2, flat temp bool ff3, temp 4-component vector of float ff4}) 0:40 Constant: 0:40 2 (const int) 0:40 move second child to first child ( temp 2-component vector of float) @@ -71,7 +71,7 @@ gl_FragCoord origin is upper left 0:40 Constant: 0:40 3 (const int) 0:40 d: direct index for structure ( centroid sample temp 2-component vector of float) -0:40 's' (layout( location=1) in structure{ smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4}) +0:40 's' (layout( location=1) in structure{ smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, flat temp bool ff2, flat temp bool ff3, temp 4-component vector of float ff4}) 0:40 Constant: 0:40 3 (const int) 0:40 move second child to first child ( temp bool) @@ -85,8 +85,8 @@ gl_FragCoord origin is upper left 0:? 's' ( temp structure{ temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4}) 0:40 Constant: 0:40 5 (const int) -0:40 ff2: direct index for structure ( temp bool) -0:40 's' (layout( location=1) in structure{ smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4}) +0:40 ff2: direct index for structure ( flat temp bool) +0:40 's' (layout( location=1) in structure{ smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, flat temp bool ff2, flat temp bool ff3, temp 4-component vector of float ff4}) 0:40 Constant: 0:40 4 (const int) 0:40 move second child to first child ( temp bool) @@ -94,8 +94,8 @@ gl_FragCoord origin is upper left 0:? 's' ( temp structure{ temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4}) 0:40 Constant: 0:40 6 (const int) -0:40 ff3: direct index for structure ( temp bool) -0:40 's' (layout( location=1) in structure{ smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4}) +0:40 ff3: direct index for structure ( flat temp bool) +0:40 's' (layout( location=1) in structure{ smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, flat temp bool ff2, flat temp bool ff3, temp 4-component vector of float ff4}) 0:40 Constant: 0:40 5 (const int) 0:40 move second child to first child ( temp 4-component vector of float) @@ -104,7 +104,7 @@ gl_FragCoord origin is upper left 0:40 Constant: 0:40 7 (const int) 0:40 ff4: direct index for structure ( temp 4-component vector of float) -0:40 's' (layout( location=1) in structure{ smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4}) +0:40 's' (layout( location=1) in structure{ smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, flat temp bool ff2, flat temp bool ff3, temp 4-component vector of float ff4}) 0:40 Constant: 0:40 6 (const int) 0:40 move second child to first child ( temp 4-component vector of float) @@ -117,7 +117,7 @@ gl_FragCoord origin is upper left 0:? 's2' ( global structure{ temp 4-component vector of float i}) 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) 0:? 'input' (layout( location=0) in 4-component vector of float) -0:? 's' (layout( location=1) in structure{ smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4}) +0:? 's' (layout( location=1) in structure{ smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, flat temp bool ff2, flat temp bool ff3, temp 4-component vector of float ff4}) 0:? 's_ff1' ( in bool Face) @@ -165,7 +165,7 @@ gl_FragCoord origin is upper left 0:40 Constant: 0:40 0 (const int) 0:40 a: direct index for structure ( smooth temp 4-component vector of float) -0:40 's' (layout( location=1) in structure{ smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4}) +0:40 's' (layout( location=1) in structure{ smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, flat temp bool ff2, flat temp bool ff3, temp 4-component vector of float ff4}) 0:40 Constant: 0:40 0 (const int) 0:40 move second child to first child ( temp bool) @@ -174,7 +174,7 @@ gl_FragCoord origin is upper left 0:40 Constant: 0:40 1 (const int) 0:40 b: direct index for structure ( flat temp bool) -0:40 's' (layout( location=1) in structure{ smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4}) +0:40 's' (layout( location=1) in structure{ smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, flat temp bool ff2, flat temp bool ff3, temp 4-component vector of float ff4}) 0:40 Constant: 0:40 1 (const int) 0:40 move second child to first child ( temp 1-component vector of float) @@ -183,7 +183,7 @@ gl_FragCoord origin is upper left 0:40 Constant: 0:40 2 (const int) 0:40 c: direct index for structure ( centroid noperspective temp 1-component vector of float) -0:40 's' (layout( location=1) in structure{ smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4}) +0:40 's' (layout( location=1) in structure{ smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, flat temp bool ff2, flat temp bool ff3, temp 4-component vector of float ff4}) 0:40 Constant: 0:40 2 (const int) 0:40 move second child to first child ( temp 2-component vector of float) @@ -192,7 +192,7 @@ gl_FragCoord origin is upper left 0:40 Constant: 0:40 3 (const int) 0:40 d: direct index for structure ( centroid sample temp 2-component vector of float) -0:40 's' (layout( location=1) in structure{ smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4}) +0:40 's' (layout( location=1) in structure{ smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, flat temp bool ff2, flat temp bool ff3, temp 4-component vector of float ff4}) 0:40 Constant: 0:40 3 (const int) 0:40 move second child to first child ( temp bool) @@ -206,8 +206,8 @@ gl_FragCoord origin is upper left 0:? 's' ( temp structure{ temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4}) 0:40 Constant: 0:40 5 (const int) -0:40 ff2: direct index for structure ( temp bool) -0:40 's' (layout( location=1) in structure{ smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4}) +0:40 ff2: direct index for structure ( flat temp bool) +0:40 's' (layout( location=1) in structure{ smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, flat temp bool ff2, flat temp bool ff3, temp 4-component vector of float ff4}) 0:40 Constant: 0:40 4 (const int) 0:40 move second child to first child ( temp bool) @@ -215,8 +215,8 @@ gl_FragCoord origin is upper left 0:? 's' ( temp structure{ temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4}) 0:40 Constant: 0:40 6 (const int) -0:40 ff3: direct index for structure ( temp bool) -0:40 's' (layout( location=1) in structure{ smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4}) +0:40 ff3: direct index for structure ( flat temp bool) +0:40 's' (layout( location=1) in structure{ smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, flat temp bool ff2, flat temp bool ff3, temp 4-component vector of float ff4}) 0:40 Constant: 0:40 5 (const int) 0:40 move second child to first child ( temp 4-component vector of float) @@ -225,7 +225,7 @@ gl_FragCoord origin is upper left 0:40 Constant: 0:40 7 (const int) 0:40 ff4: direct index for structure ( temp 4-component vector of float) -0:40 's' (layout( location=1) in structure{ smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4}) +0:40 's' (layout( location=1) in structure{ smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, flat temp bool ff2, flat temp bool ff3, temp 4-component vector of float ff4}) 0:40 Constant: 0:40 6 (const int) 0:40 move second child to first child ( temp 4-component vector of float) @@ -238,7 +238,7 @@ gl_FragCoord origin is upper left 0:? 's2' ( global structure{ temp 4-component vector of float i}) 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) 0:? 'input' (layout( location=0) in 4-component vector of float) -0:? 's' (layout( location=1) in structure{ smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4}) +0:? 's' (layout( location=1) in structure{ smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, flat temp bool ff2, flat temp bool ff3, temp 4-component vector of float ff4}) 0:? 's_ff1' ( in bool Face) // Module Version 10000 @@ -306,6 +306,8 @@ gl_FragCoord origin is upper left MemberDecorate 54(IN_S) 2 NoPerspective MemberDecorate 54(IN_S) 2 Centroid MemberDecorate 54(IN_S) 3 Centroid + MemberDecorate 54(IN_S) 4 Flat + MemberDecorate 54(IN_S) 5 Flat Decorate 56(s) Location 1 Decorate 79(s_ff1) BuiltIn FrontFacing Decorate 94(@entryPointOutput) Location 0 diff --git a/glslang/Include/Types.h b/glslang/Include/Types.h index 81268dfe..00e20b53 100644 --- a/glslang/Include/Types.h +++ b/glslang/Include/Types.h @@ -1349,7 +1349,6 @@ public: case EbtInt16: case EbtUint16: #endif - case EbtBool: case EbtAtomicUint: return true; default: @@ -1469,9 +1468,9 @@ public: case EbtUint16: #endif case EbtBool: - return true; + return true; default: - return false; + return false; } }; diff --git a/hlsl/hlslParseHelper.cpp b/hlsl/hlslParseHelper.cpp index bd3994d4..bc4cca8d 100755 --- a/hlsl/hlslParseHelper.cpp +++ b/hlsl/hlslParseHelper.cpp @@ -791,7 +791,7 @@ TIntermTyped* HlslParseContext::handleBracketDereference(const TSourceLoc& loc, index = makeIntegerIndex(index); if (index == nullptr) { - error(loc, " unknown undex type ", "", ""); + error(loc, " unknown index type ", "", ""); return nullptr; } @@ -1554,11 +1554,20 @@ void HlslParseContext::assignToInterface(TVariable& variable) nextOutLocation += size; } } - // Going into the fragment stage, integer-based stuff must be flat/nointerpolation - if (type.isIntegerDomain() && qualifier.builtIn == EbvNone && - qualifier.storage == EvqVaryingIn && language == EShLangFragment) { - qualifier.clearInterpolation(); - qualifier.flat = true; + if (qualifier.storage == EvqVaryingIn && language == EShLangFragment) { + // Going into the fragment stage, integer-based stuff must be flat/nointerpolation + const auto fixQualifier = [](TType& type) { + if (type.getQualifier().builtIn == EbvNone && + (type.isIntegerDomain() || type.getBasicType() == EbtBool)) { + type.getQualifier().clearInterpolation(); + type.getQualifier().flat = true; + } + }; + if (type.isStruct()) + for (auto mem = (*type.getStruct()).begin(); mem != (*type.getStruct()).end(); ++mem) + fixQualifier(*mem->type); + else + fixQualifier(type); } trackLinkage(variable); }