HLSL: Force flat interpolation for structure members. Fixes #940.
This commit is contained in:
parent
be1085cb88
commit
f0bc598dd7
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user