| uniform half4 colorRed, colorGreen; |
| |
| // Should return 5 |
| float return_loop() { |
| for (float i = 0; i < 10; ++i) { |
| if (i == 5) { return i; } |
| } |
| return 0; |
| } |
| |
| // Should return 35 |
| float continue_loop() { |
| float sum = 0; |
| for (float i = 0; i < 10; ++i) { |
| if (i < 5) { continue; } |
| sum += i; |
| } |
| return sum; |
| } |
| |
| // Should return 15 |
| float break_loop() { |
| float sum = 0; |
| for (float i = 0; i < 10; ++i) { |
| if (i > 5) { break; } |
| sum += i; |
| } |
| return sum; |
| } |
| |
| // Should return a value close to zero |
| float float_loop() { |
| float sum = 0; |
| for (float i = 0.123; i < 0.6; i += 0.111) { |
| sum += i; |
| } |
| return sum - 1.725; |
| } |
| |
| bool loop_operator_le() { |
| // These loops are inside-out and execute zero times. |
| for (float i = 3; i <= 1; ++i) { return false; } |
| for (float i = 3; i <= 1; --i) { return false; } |
| |
| float4 result = float4(9); |
| for (float i = 1; i <= 3; ++i) { |
| result = float4(result.yzw, i); |
| } |
| return result == float4(9, 1, 2, 3); |
| } |
| |
| bool loop_operator_lt() { |
| // These loops are inside-out and execute zero times. |
| for (float i = 4; i < 1; ++i) { return false; } |
| for (float i = 4; i < 1; --i) { return false; } |
| |
| float4 result = float4(9); |
| for (float i = 1; i < 4; ++i) { |
| result = float4(result.yzw, i); |
| } |
| return result == float4(9, 1, 2, 3); |
| } |
| |
| bool loop_operator_ge() { |
| // These loops are inside-out and execute zero times. |
| for (float i = 1; i >= 3; ++i) { return false; } |
| for (float i = 1; i >= 3; --i) { return false; } |
| |
| float4 result = float4(9); |
| for (float i = 3; i >= 1; --i) { |
| result = float4(result.yzw, i); |
| } |
| return result == float4(9, 3, 2, 1); |
| } |
| |
| bool loop_operator_gt() { |
| // These loops are inside-out and execute zero times. |
| for (float i = 0; i > 3; ++i) { return false; } |
| for (float i = 0; i > 3; --i) { return false; } |
| |
| float4 result = float4(9); |
| for (float i = 3; i > 0; --i) { |
| result = float4(result.yzw, i); |
| } |
| return result == float4(9, 3, 2, 1); |
| } |
| |
| bool loop_operator_ne() { |
| // This loop executes zero times. |
| for (int i = 1; i != 1; ++i) { return false; } |
| |
| float4 result = float4(9); |
| for (float i = 1; i != 4; ++i) { |
| result = float4(result.yzw, i); |
| } |
| return result == float4(9, 1, 2, 3); |
| } |
| |
| bool loop_operator_eq() { |
| // This loops mismatches and executes zero times. |
| for (float i = 1; i == 2; ++i) { return false; } |
| |
| float4 result = float4(9); |
| for (float i = 1; i == 1; ++i) { |
| result = float4(result.yzw, i); |
| } |
| return result == float4(9, 9, 9, 1); |
| } |
| |
| half4 main(float2 xy) { |
| return (return_loop() == 5 && continue_loop() == 35 && |
| break_loop() == 15 && abs(float_loop()) < 0.025 && |
| loop_operator_le() && loop_operator_lt() && |
| loop_operator_ge() && loop_operator_gt() && |
| loop_operator_eq() && loop_operator_ne()) ? colorGreen : colorRed; |
| } |