Unverified Commit 2d70e98d by John Kessenich Committed by GitHub

Merge pull request #2028 from ShchchowAMD/constant_expressions_array_mod

GLSL: Support constant folding for mod
parents 656650f4 44e842cd
...@@ -7,6 +7,7 @@ float f;;; ...@@ -7,6 +7,7 @@ float f;;;
void main() void main()
{ {
bool b1; bool b1;
float array[int(mod(float (7.1), float (4.0)))];
b1 = anyInvocation(b1); b1 = anyInvocation(b1);
b1 = allInvocations(b1); b1 = allInvocations(b1);
b1 = allInvocationsEqual(b1); b1 = allInvocationsEqual(b1);
......
...@@ -4,18 +4,18 @@ Shader version: 460 ...@@ -4,18 +4,18 @@ Shader version: 460
0:7 Function Definition: main( ( global void) 0:7 Function Definition: main( ( global void)
0:7 Function Parameters: 0:7 Function Parameters:
0:? Sequence 0:? Sequence
0:10 move second child to first child ( temp bool)
0:10 'b1' ( temp bool)
0:10 anyInvocation ( global bool)
0:10 'b1' ( temp bool)
0:11 move second child to first child ( temp bool) 0:11 move second child to first child ( temp bool)
0:11 'b1' ( temp bool) 0:11 'b1' ( temp bool)
0:11 allInvocations ( global bool) 0:11 anyInvocation ( global bool)
0:11 'b1' ( temp bool) 0:11 'b1' ( temp bool)
0:12 move second child to first child ( temp bool) 0:12 move second child to first child ( temp bool)
0:12 'b1' ( temp bool) 0:12 'b1' ( temp bool)
0:12 allInvocationsEqual ( global bool) 0:12 allInvocations ( global bool)
0:12 'b1' ( temp bool) 0:12 'b1' ( temp bool)
0:13 move second child to first child ( temp bool)
0:13 'b1' ( temp bool)
0:13 allInvocationsEqual ( global bool)
0:13 'b1' ( temp bool)
0:? Linker Objects 0:? Linker Objects
0:? 'i' ( global int) 0:? 'i' ( global int)
0:? 'f' ( global float) 0:? 'f' ( global float)
...@@ -31,18 +31,18 @@ Shader version: 460 ...@@ -31,18 +31,18 @@ Shader version: 460
0:7 Function Definition: main( ( global void) 0:7 Function Definition: main( ( global void)
0:7 Function Parameters: 0:7 Function Parameters:
0:? Sequence 0:? Sequence
0:10 move second child to first child ( temp bool)
0:10 'b1' ( temp bool)
0:10 anyInvocation ( global bool)
0:10 'b1' ( temp bool)
0:11 move second child to first child ( temp bool) 0:11 move second child to first child ( temp bool)
0:11 'b1' ( temp bool) 0:11 'b1' ( temp bool)
0:11 allInvocations ( global bool) 0:11 anyInvocation ( global bool)
0:11 'b1' ( temp bool) 0:11 'b1' ( temp bool)
0:12 move second child to first child ( temp bool) 0:12 move second child to first child ( temp bool)
0:12 'b1' ( temp bool) 0:12 'b1' ( temp bool)
0:12 allInvocationsEqual ( global bool) 0:12 allInvocations ( global bool)
0:12 'b1' ( temp bool) 0:12 'b1' ( temp bool)
0:13 move second child to first child ( temp bool)
0:13 'b1' ( temp bool)
0:13 allInvocationsEqual ( global bool)
0:13 'b1' ( temp bool)
0:? Linker Objects 0:? Linker Objects
0:? 'i' ( global int) 0:? 'i' ( global int)
0:? 'f' ( global float) 0:? 'f' ( global float)
......
...@@ -1012,6 +1012,7 @@ TIntermTyped* TIntermediate::fold(TIntermAggregate* aggrNode) ...@@ -1012,6 +1012,7 @@ TIntermTyped* TIntermediate::fold(TIntermAggregate* aggrNode)
case EOpMin: case EOpMin:
case EOpMax: case EOpMax:
case EOpMix: case EOpMix:
case EOpMod:
case EOpClamp: case EOpClamp:
case EOpLessThan: case EOpLessThan:
case EOpGreaterThan: case EOpGreaterThan:
...@@ -1074,6 +1075,15 @@ TIntermTyped* TIntermediate::fold(TIntermAggregate* aggrNode) ...@@ -1074,6 +1075,15 @@ TIntermTyped* TIntermediate::fold(TIntermAggregate* aggrNode)
case EOpPow: case EOpPow:
newConstArray[comp].setDConst(pow(childConstUnions[0][arg0comp].getDConst(), childConstUnions[1][arg1comp].getDConst())); newConstArray[comp].setDConst(pow(childConstUnions[0][arg0comp].getDConst(), childConstUnions[1][arg1comp].getDConst()));
break; break;
case EOpMod:
{
double arg0 = childConstUnions[0][arg0comp].getDConst();
double arg1 = childConstUnions[1][arg1comp].getDConst();
assert(arg1 != 0.0);
double result = arg0 - arg1 * floor(arg0 / arg1);
newConstArray[comp].setDConst(result);
break;
}
case EOpMin: case EOpMin:
switch(children[0]->getAsTyped()->getBasicType()) { switch(children[0]->getAsTyped()->getBasicType()) {
case EbtFloat16: case EbtFloat16:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment