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
	 John Kessenich
						John Kessenich