| group custom "Custom loop tests" |
| |
| case continue_in_fragment_for_loop |
| version 300 es |
| vertex "" |
| #version 300 es |
| ${VERTEX_DECLARATIONS} |
| void main() |
| { |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| fragment "" |
| #version 300 es |
| ${FRAGMENT_DECLARATIONS} |
| void main() |
| { |
| int count1 = 0; |
| for(int i=0;i<4;i++) |
| { |
| if (count1 == 2) |
| continue; |
| } |
| ${FRAG_COLOR} = vec4(1.0); |
| } |
| "" |
| end |
| |
| end # custom |
| |
| # https://github.com/KhronosGroup/WebGL/blob/master/sdk/tests/conformance2/glsl3/short-circuiting-in-loop-condition.html |
| group short_circuit "Short-circuiting operator in a loop using a function call with side effects" |
| |
| case while |
| version 300 es |
| values |
| { |
| input bool in0 = [ false | true ]; |
| output int sideEffectCounter = [ 0 | 10 ]; |
| } |
| |
| both "" |
| #version 300 es |
| precision mediump float; |
| precision mediump int; |
| |
| ${DECLARATIONS} |
| |
| bool foo() { |
| ++sideEffectCounter; |
| return true; |
| } |
| |
| void main() |
| { |
| ${SETUP} |
| sideEffectCounter = 0; |
| int iterations = 0; |
| while (in0 && foo()) { |
| ++iterations; |
| if (iterations >= 10) { |
| break; |
| } |
| } |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case for |
| version 300 es |
| values |
| { |
| input bool in0 = [ false | true ]; |
| output int sideEffectCounter = [ 0 | 10 ]; |
| } |
| |
| both "" |
| #version 300 es |
| precision mediump float; |
| precision mediump int; |
| |
| ${DECLARATIONS} |
| |
| bool foo() { |
| ++sideEffectCounter; |
| return true; |
| } |
| |
| void main() |
| { |
| ${SETUP} |
| sideEffectCounter = 0; |
| for (int iterations = 0; true; in0 && foo()) { |
| ++iterations; |
| if (iterations > 10) { |
| break; |
| } |
| } |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case do_while |
| version 300 es |
| values |
| { |
| input bool in0 = [ false | true ]; |
| output int sideEffectCounter = [ 0 | 10 ]; |
| } |
| |
| both "" |
| #version 300 es |
| precision mediump float; |
| precision mediump int; |
| |
| ${DECLARATIONS} |
| |
| bool foo() { |
| ++sideEffectCounter; |
| return true; |
| } |
| |
| void main() |
| { |
| ${SETUP} |
| sideEffectCounter = 0; |
| int iterations = 0; |
| do { |
| ++iterations; |
| if (iterations > 10) { |
| break; |
| } |
| } while (in0 && foo()); |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| case while_sequence |
| version 300 es |
| values |
| { |
| input bool in0 = [ false | true ]; |
| output int sideEffectCounter = [ 0 | 10 ]; |
| } |
| |
| both "" |
| #version 300 es |
| precision mediump float; |
| precision mediump int; |
| |
| ${DECLARATIONS} |
| |
| bool foo() { |
| ++sideEffectCounter; |
| return true; |
| } |
| |
| void main() |
| { |
| ${SETUP} |
| sideEffectCounter = 0; |
| int iterations = 0; |
| while ((in0, in0 && foo())) { |
| ++iterations; |
| if (iterations >= 10) { |
| break; |
| } |
| } |
| ${OUTPUT} |
| } |
| "" |
| end |
| |
| end # short_circuit |