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