Merge pull request #2028 from ShchchowAMD/constant_expressions_array_mod
GLSL: Support constant folding for mod
This commit is contained in:
commit
2d70e98dea
@ -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
|
|||||||
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
|
|||||||
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)
|
|||||||
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)
|
|||||||
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:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user