1e5c31af7Sopenharmony_cigroup custom "Custom loop tests" 2e5c31af7Sopenharmony_ci 3e5c31af7Sopenharmony_ci case continue_in_fragment_for_loop 4e5c31af7Sopenharmony_ci version 300 es 5e5c31af7Sopenharmony_ci vertex "" 6e5c31af7Sopenharmony_ci #version 300 es 7e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 8e5c31af7Sopenharmony_ci void main() 9e5c31af7Sopenharmony_ci { 10e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 11e5c31af7Sopenharmony_ci } 12e5c31af7Sopenharmony_ci "" 13e5c31af7Sopenharmony_ci fragment "" 14e5c31af7Sopenharmony_ci #version 300 es 15e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 16e5c31af7Sopenharmony_ci void main() 17e5c31af7Sopenharmony_ci { 18e5c31af7Sopenharmony_ci int count1 = 0; 19e5c31af7Sopenharmony_ci for(int i=0;i<4;i++) 20e5c31af7Sopenharmony_ci { 21e5c31af7Sopenharmony_ci if (count1 == 2) 22e5c31af7Sopenharmony_ci continue; 23e5c31af7Sopenharmony_ci } 24e5c31af7Sopenharmony_ci ${FRAG_COLOR} = vec4(1.0); 25e5c31af7Sopenharmony_ci } 26e5c31af7Sopenharmony_ci "" 27e5c31af7Sopenharmony_ci end 28e5c31af7Sopenharmony_ci 29e5c31af7Sopenharmony_ciend # custom 30e5c31af7Sopenharmony_ci 31e5c31af7Sopenharmony_ci# https://github.com/KhronosGroup/WebGL/blob/master/sdk/tests/conformance2/glsl3/short-circuiting-in-loop-condition.html 32e5c31af7Sopenharmony_cigroup short_circuit "Short-circuiting operator in a loop using a function call with side effects" 33e5c31af7Sopenharmony_ci 34e5c31af7Sopenharmony_ci case while 35e5c31af7Sopenharmony_ci version 300 es 36e5c31af7Sopenharmony_ci values 37e5c31af7Sopenharmony_ci { 38e5c31af7Sopenharmony_ci input bool in0 = [ false | true ]; 39e5c31af7Sopenharmony_ci output int sideEffectCounter = [ 0 | 10 ]; 40e5c31af7Sopenharmony_ci } 41e5c31af7Sopenharmony_ci 42e5c31af7Sopenharmony_ci both "" 43e5c31af7Sopenharmony_ci #version 300 es 44e5c31af7Sopenharmony_ci precision mediump float; 45e5c31af7Sopenharmony_ci precision mediump int; 46e5c31af7Sopenharmony_ci 47e5c31af7Sopenharmony_ci ${DECLARATIONS} 48e5c31af7Sopenharmony_ci 49e5c31af7Sopenharmony_ci bool foo() { 50e5c31af7Sopenharmony_ci ++sideEffectCounter; 51e5c31af7Sopenharmony_ci return true; 52e5c31af7Sopenharmony_ci } 53e5c31af7Sopenharmony_ci 54e5c31af7Sopenharmony_ci void main() 55e5c31af7Sopenharmony_ci { 56e5c31af7Sopenharmony_ci ${SETUP} 57e5c31af7Sopenharmony_ci sideEffectCounter = 0; 58e5c31af7Sopenharmony_ci int iterations = 0; 59e5c31af7Sopenharmony_ci while (in0 && foo()) { 60e5c31af7Sopenharmony_ci ++iterations; 61e5c31af7Sopenharmony_ci if (iterations >= 10) { 62e5c31af7Sopenharmony_ci break; 63e5c31af7Sopenharmony_ci } 64e5c31af7Sopenharmony_ci } 65e5c31af7Sopenharmony_ci ${OUTPUT} 66e5c31af7Sopenharmony_ci } 67e5c31af7Sopenharmony_ci "" 68e5c31af7Sopenharmony_ci end 69e5c31af7Sopenharmony_ci 70e5c31af7Sopenharmony_ci case for 71e5c31af7Sopenharmony_ci version 300 es 72e5c31af7Sopenharmony_ci values 73e5c31af7Sopenharmony_ci { 74e5c31af7Sopenharmony_ci input bool in0 = [ false | true ]; 75e5c31af7Sopenharmony_ci output int sideEffectCounter = [ 0 | 10 ]; 76e5c31af7Sopenharmony_ci } 77e5c31af7Sopenharmony_ci 78e5c31af7Sopenharmony_ci both "" 79e5c31af7Sopenharmony_ci #version 300 es 80e5c31af7Sopenharmony_ci precision mediump float; 81e5c31af7Sopenharmony_ci precision mediump int; 82e5c31af7Sopenharmony_ci 83e5c31af7Sopenharmony_ci ${DECLARATIONS} 84e5c31af7Sopenharmony_ci 85e5c31af7Sopenharmony_ci bool foo() { 86e5c31af7Sopenharmony_ci ++sideEffectCounter; 87e5c31af7Sopenharmony_ci return true; 88e5c31af7Sopenharmony_ci } 89e5c31af7Sopenharmony_ci 90e5c31af7Sopenharmony_ci void main() 91e5c31af7Sopenharmony_ci { 92e5c31af7Sopenharmony_ci ${SETUP} 93e5c31af7Sopenharmony_ci sideEffectCounter = 0; 94e5c31af7Sopenharmony_ci for (int iterations = 0; true; in0 && foo()) { 95e5c31af7Sopenharmony_ci ++iterations; 96e5c31af7Sopenharmony_ci if (iterations > 10) { 97e5c31af7Sopenharmony_ci break; 98e5c31af7Sopenharmony_ci } 99e5c31af7Sopenharmony_ci } 100e5c31af7Sopenharmony_ci ${OUTPUT} 101e5c31af7Sopenharmony_ci } 102e5c31af7Sopenharmony_ci "" 103e5c31af7Sopenharmony_ci end 104e5c31af7Sopenharmony_ci 105e5c31af7Sopenharmony_ci case do_while 106e5c31af7Sopenharmony_ci version 300 es 107e5c31af7Sopenharmony_ci values 108e5c31af7Sopenharmony_ci { 109e5c31af7Sopenharmony_ci input bool in0 = [ false | true ]; 110e5c31af7Sopenharmony_ci output int sideEffectCounter = [ 0 | 10 ]; 111e5c31af7Sopenharmony_ci } 112e5c31af7Sopenharmony_ci 113e5c31af7Sopenharmony_ci both "" 114e5c31af7Sopenharmony_ci #version 300 es 115e5c31af7Sopenharmony_ci precision mediump float; 116e5c31af7Sopenharmony_ci precision mediump int; 117e5c31af7Sopenharmony_ci 118e5c31af7Sopenharmony_ci ${DECLARATIONS} 119e5c31af7Sopenharmony_ci 120e5c31af7Sopenharmony_ci bool foo() { 121e5c31af7Sopenharmony_ci ++sideEffectCounter; 122e5c31af7Sopenharmony_ci return true; 123e5c31af7Sopenharmony_ci } 124e5c31af7Sopenharmony_ci 125e5c31af7Sopenharmony_ci void main() 126e5c31af7Sopenharmony_ci { 127e5c31af7Sopenharmony_ci ${SETUP} 128e5c31af7Sopenharmony_ci sideEffectCounter = 0; 129e5c31af7Sopenharmony_ci int iterations = 0; 130e5c31af7Sopenharmony_ci do { 131e5c31af7Sopenharmony_ci ++iterations; 132e5c31af7Sopenharmony_ci if (iterations > 10) { 133e5c31af7Sopenharmony_ci break; 134e5c31af7Sopenharmony_ci } 135e5c31af7Sopenharmony_ci } while (in0 && foo()); 136e5c31af7Sopenharmony_ci ${OUTPUT} 137e5c31af7Sopenharmony_ci } 138e5c31af7Sopenharmony_ci "" 139e5c31af7Sopenharmony_ci end 140e5c31af7Sopenharmony_ci 141e5c31af7Sopenharmony_ci case while_sequence 142e5c31af7Sopenharmony_ci version 300 es 143e5c31af7Sopenharmony_ci values 144e5c31af7Sopenharmony_ci { 145e5c31af7Sopenharmony_ci input bool in0 = [ false | true ]; 146e5c31af7Sopenharmony_ci output int sideEffectCounter = [ 0 | 10 ]; 147e5c31af7Sopenharmony_ci } 148e5c31af7Sopenharmony_ci 149e5c31af7Sopenharmony_ci both "" 150e5c31af7Sopenharmony_ci #version 300 es 151e5c31af7Sopenharmony_ci precision mediump float; 152e5c31af7Sopenharmony_ci precision mediump int; 153e5c31af7Sopenharmony_ci 154e5c31af7Sopenharmony_ci ${DECLARATIONS} 155e5c31af7Sopenharmony_ci 156e5c31af7Sopenharmony_ci bool foo() { 157e5c31af7Sopenharmony_ci ++sideEffectCounter; 158e5c31af7Sopenharmony_ci return true; 159e5c31af7Sopenharmony_ci } 160e5c31af7Sopenharmony_ci 161e5c31af7Sopenharmony_ci void main() 162e5c31af7Sopenharmony_ci { 163e5c31af7Sopenharmony_ci ${SETUP} 164e5c31af7Sopenharmony_ci sideEffectCounter = 0; 165e5c31af7Sopenharmony_ci int iterations = 0; 166e5c31af7Sopenharmony_ci while ((in0, in0 && foo())) { 167e5c31af7Sopenharmony_ci ++iterations; 168e5c31af7Sopenharmony_ci if (iterations >= 10) { 169e5c31af7Sopenharmony_ci break; 170e5c31af7Sopenharmony_ci } 171e5c31af7Sopenharmony_ci } 172e5c31af7Sopenharmony_ci ${OUTPUT} 173e5c31af7Sopenharmony_ci } 174e5c31af7Sopenharmony_ci "" 175e5c31af7Sopenharmony_ci end 176e5c31af7Sopenharmony_ci 177e5c31af7Sopenharmony_ciend # short_circuit 178