diff --git a/Test/baseResults/constFold.frag.out b/Test/baseResults/constFold.frag.out index 12a94fcc..06fc0200 100644 --- a/Test/baseResults/constFold.frag.out +++ b/Test/baseResults/constFold.frag.out @@ -231,6 +231,32 @@ ERROR: node is still EOpNull! 0:118 'p' (int) 0:118 Constant: 0:118 -2147483647 (const int) +0:119 Sequence +0:119 move second child to first child (float) +0:119 'f' (float) +0:119 Constant: +0:119 1.444000 +0:120 move second child to first child (float) +0:120 'f' (float) +0:120 direct index (float) +0:120 Construct vec4 (4-component vector of float) +0:120 Test condition and select (float) +0:120 Condition +0:120 Compare Less Than (bool) +0:120 direct index (float) +0:120 'inv' (smooth in 4-component vector of float) +0:120 Constant: +0:120 0 (const int) +0:120 Constant: +0:120 2.400000 +0:120 true case +0:120 Constant: +0:120 -1.000000 +0:120 false case +0:120 Constant: +0:120 1.000000 +0:120 Constant: +0:120 3 (const int) 0:? Linker Objects 0:? 'a' (const int) 0:? 1 (const int) @@ -532,6 +558,32 @@ ERROR: node is still EOpNull! 0:118 'p' (int) 0:118 Constant: 0:118 -2147483647 (const int) +0:119 Sequence +0:119 move second child to first child (float) +0:119 'f' (float) +0:119 Constant: +0:119 1.444000 +0:120 move second child to first child (float) +0:120 'f' (float) +0:120 direct index (float) +0:120 Construct vec4 (4-component vector of float) +0:120 Test condition and select (float) +0:120 Condition +0:120 Compare Less Than (bool) +0:120 direct index (float) +0:120 'inv' (smooth in 4-component vector of float) +0:120 Constant: +0:120 0 (const int) +0:120 Constant: +0:120 2.400000 +0:120 true case +0:120 Constant: +0:120 -1.000000 +0:120 false case +0:120 Constant: +0:120 1.000000 +0:120 Constant: +0:120 3 (const int) 0:? Linker Objects 0:? 'a' (const int) 0:? 1 (const int) diff --git a/Test/constFold.frag b/Test/constFold.frag index aa8a94be..ae0817a6 100644 --- a/Test/constFold.frag +++ b/Test/constFold.frag @@ -116,4 +116,6 @@ void foo2() p = -2147483647 / -1; p = -2147483648 / -1; p = 2147483647 / -1; + float f = vec4(7.8 < 2.4 ? -1.333 : 1.444).a; + f = vec4(inv.x < 2.4 ? -1.0 : 1.0).a; // not folded, ensuring no propagation } diff --git a/glslang/MachineIndependent/Intermediate.cpp b/glslang/MachineIndependent/Intermediate.cpp index 7a9514b1..c3c06d4e 100644 --- a/glslang/MachineIndependent/Intermediate.cpp +++ b/glslang/MachineIndependent/Intermediate.cpp @@ -784,6 +784,7 @@ TIntermTyped* TIntermediate::addSelection(TIntermTyped* cond, TIntermTyped* true // Make a selection node. // TIntermSelection* node = new TIntermSelection(cond, trueBlock, falseBlock, trueBlock->getType()); + node->getQualifier().storage = EvqTemporary; node->setLoc(loc); node->getQualifier().precision = std::max(trueBlock->getQualifier().precision, falseBlock->getQualifier().precision);