parent
cb2c7fd674
commit
230168d5d9
@ -102,18 +102,18 @@ Shader version: 450
|
||||
0:38 2 (const int)
|
||||
0:38 'sci2' ( specialization-constant const highp int)
|
||||
0:38 2 (const int)
|
||||
0:40 Construct vec2 ( temp 2-component vector of float)
|
||||
0:40 Construct vec2 ( specialization-constant const 2-component vector of float)
|
||||
0:40 'scf1' ( specialization-constant const highp float)
|
||||
0:40 1.000000
|
||||
0:40 'scf1' ( specialization-constant const highp float)
|
||||
0:40 1.000000
|
||||
0:41 Construct vec2 ( temp 2-element array of 2-component vector of float)
|
||||
0:41 Construct vec2 ( temp 2-component vector of float)
|
||||
0:41 Construct vec2 ( specialization-constant const 2-component vector of float)
|
||||
0:41 'scf1' ( specialization-constant const highp float)
|
||||
0:41 1.000000
|
||||
0:41 'scf1' ( specialization-constant const highp float)
|
||||
0:41 1.000000
|
||||
0:41 Construct vec2 ( temp 2-component vector of float)
|
||||
0:41 Construct vec2 ( specialization-constant const 2-component vector of float)
|
||||
0:41 'scf1' ( specialization-constant const highp float)
|
||||
0:41 1.000000
|
||||
0:41 'scf1' ( specialization-constant const highp float)
|
||||
@ -233,18 +233,18 @@ Shader version: 450
|
||||
0:38 2 (const int)
|
||||
0:38 'sci2' ( specialization-constant const highp int)
|
||||
0:38 2 (const int)
|
||||
0:40 Construct vec2 ( temp 2-component vector of float)
|
||||
0:40 Construct vec2 ( specialization-constant const 2-component vector of float)
|
||||
0:40 'scf1' ( specialization-constant const highp float)
|
||||
0:40 1.000000
|
||||
0:40 'scf1' ( specialization-constant const highp float)
|
||||
0:40 1.000000
|
||||
0:41 Construct vec2 ( temp 2-element array of 2-component vector of float)
|
||||
0:41 Construct vec2 ( temp 2-component vector of float)
|
||||
0:41 Construct vec2 ( specialization-constant const 2-component vector of float)
|
||||
0:41 'scf1' ( specialization-constant const highp float)
|
||||
0:41 1.000000
|
||||
0:41 'scf1' ( specialization-constant const highp float)
|
||||
0:41 1.000000
|
||||
0:41 Construct vec2 ( temp 2-component vector of float)
|
||||
0:41 Construct vec2 ( specialization-constant const 2-component vector of float)
|
||||
0:41 'scf1' ( specialization-constant const highp float)
|
||||
0:41 1.000000
|
||||
0:41 'scf1' ( specialization-constant const highp float)
|
||||
@ -303,6 +303,9 @@ Shader version: 450
|
||||
41: 14(int) Constant 2
|
||||
42: TypeArray 37(ivec2) 41
|
||||
44: TypeVector 6(float) 2
|
||||
45: 44(fvec2) SpecConstantComposite 7(scf1) 7(scf1)
|
||||
46: 44(fvec2) SpecConstantComposite 7(scf1) 7(scf1)
|
||||
47: 44(fvec2) SpecConstantComposite 7(scf1) 7(scf1)
|
||||
48: TypeArray 44(fvec2) 41
|
||||
4(main): 2 Function None 3
|
||||
5: Label
|
||||
@ -317,9 +320,6 @@ Shader version: 450
|
||||
32: 8(bool) FOrdGreaterThan 7(scf1) 7(scf1)
|
||||
34: 8(bool) FUnordNotEqual 7(scf1) 7(scf1)
|
||||
43: 42 CompositeConstruct 39 40
|
||||
45: 44(fvec2) CompositeConstruct 7(scf1) 7(scf1)
|
||||
46: 44(fvec2) CompositeConstruct 7(scf1) 7(scf1)
|
||||
47: 44(fvec2) CompositeConstruct 7(scf1) 7(scf1)
|
||||
49: 48 CompositeConstruct 46 47
|
||||
Return
|
||||
FunctionEnd
|
||||
|
@ -37,6 +37,6 @@ void main()
|
||||
ivec2(sci2, sci2); // spec-const
|
||||
ivec2[2](ivec2(sci2, sci2), ivec2(sci2, sci2)); // not a spec-const
|
||||
|
||||
vec2(scf1, scf1); // not spec-const
|
||||
vec2(scf1, scf1); // spec-const
|
||||
vec2[2](vec2(scf1, scf1), vec2(scf1, scf1)); // not a spec-const
|
||||
}
|
||||
|
@ -3115,6 +3115,7 @@ bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, T
|
||||
bool matrixInMatrix = false;
|
||||
bool arrayArg = false;
|
||||
bool floatArgument = false;
|
||||
bool intArgument = false;
|
||||
for (int arg = 0; arg < function.getParamCount(); ++arg) {
|
||||
if (function[arg].type->isArray()) {
|
||||
if (function[arg].type->isUnsizedArray()) {
|
||||
@ -3145,6 +3146,8 @@ bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, T
|
||||
specConstType = true;
|
||||
if (function[arg].type->isFloatingDomain())
|
||||
floatArgument = true;
|
||||
if (function[arg].type->isIntegerDomain())
|
||||
intArgument = true;
|
||||
if (type.isStruct()) {
|
||||
if (function[arg].type->contains16BitFloat()) {
|
||||
requireFloat16Arithmetic(loc, "constructor", "can't construct structure containing 16-bit type");
|
||||
@ -3250,6 +3253,15 @@ bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, T
|
||||
// and aren't making an array.
|
||||
makeSpecConst = ! floatArgument && ! type.isArray();
|
||||
break;
|
||||
|
||||
case EOpConstructVec2:
|
||||
case EOpConstructVec3:
|
||||
case EOpConstructVec4:
|
||||
// This was the list of valid ones, if they aren't converting from int
|
||||
// and aren't making an array.
|
||||
makeSpecConst = ! intArgument && !type.isArray();
|
||||
break;
|
||||
|
||||
default:
|
||||
// anything else wasn't white-listed in the spec as a conversion
|
||||
makeSpecConst = false;
|
||||
|
Loading…
x
Reference in New Issue
Block a user