Home | History | Annotate | Download | only in Test
      1 #version 140
      2 in vec4 bigColor;
      3 in vec4 bigColor1_1;
      4 in vec4 bigColor1_2;
      5 in vec4 bigColor1_3;
      6 in vec4 bigColor2;
      7 in vec4 bigColor3;
      8 in vec4 bigColor4;
      9 in vec4 bigColor5;
     10 in vec4 bigColor6;
     11 in vec4 bigColor7;
     12 in vec4 bigColor8;
     13 
     14 in vec4 BaseColor;
     15 
     16 in float d;
     17 in float d2;
     18 in float d3;
     19 in float d4;
     20 in float d5;
     21 in float d6;
     22 in float d7;
     23 in float d8;
     24 in float d9;
     25 in float d10;
     26 in float d11;
     27 in float d12;
     28 in float d14;
     29 in float d15;
     30 in float d16;
     31 in float d17;
     32 in float d18;
     33 flat in int Count;
     34 
     35 void main()
     36 {
     37     vec4 color = BaseColor;
     38 
     39     // Not a real loop
     40     while (true) {
     41         if (color.x < 0.33) {
     42             color += vec4(0.33);
     43             break;
     44         }
     45         if (color.x < 0.66) {
     46             color += vec4(0.66);
     47             break;
     48         }
     49 
     50         color += vec4(0.33);
     51         break;
     52     }
     53 
     54     // While
     55     while (color.x < d) {
     56         color += bigColor;
     57     }
     58 
     59     // While (latchy)
     60     while (color.z < d) {
     61         color += bigColor1_1;
     62         if (color.w < d)
     63             continue;
     64 
     65         color += bigColor1_1;
     66     }
     67 
     68     // While (constant)
     69     while (color.x < 42.0) {
     70         ++color;
     71     }
     72 
     73     // While (complicated-conditional)
     74     while (color.w < d2 && color.y < d3) {
     75         color += bigColor1_2;
     76     }
     77 
     78     // While (multi-exit)
     79     while (color.z < d3) {
     80         color += bigColor1_3;
     81         if (color.y < d4)
     82             break;
     83         color += bigColor1_3;
     84     }
     85 
     86     // For (dynamic)
     87     for (int i = 0; i < Count; ++i) {
     88         color += bigColor2;
     89     }
     90 
     91     // Do while
     92     do {
     93         color += bigColor3;
     94     } while (color.x < d2);
     95 
     96     // For (static)
     97     for (int i = 0; i < 42; ++i) {
     98         color.z += d3;
     99     }
    100 
    101     // For (static) flow-control
    102     for (int i = 0; i < 100; ++i) {
    103         if (color.z < 20.0)
    104             color.x++;
    105         else
    106             color.y++;
    107         if (color.w < 20.0)
    108             if (color.z > color.y)
    109                 0;              // do nothing
    110     }
    111 
    112     // For (static) flow-control with latch merge
    113     for (int i = 0; i < 120; ++i) {
    114         if (color.z < 20.0)
    115             color.x++;
    116         else
    117             color.y++;
    118     }
    119 
    120     // For (static) latchy
    121     for (int i = 0; i < 42; ++i) {
    122         color.z += d3;
    123         if (color.x < d4)
    124             continue;
    125         ++color.w;
    126     }
    127 
    128     // For (static) multi-exit
    129     for (int i = 0; i < 42; ++i) {
    130         color.z += d3;
    131         if (color.x < d4)
    132             break;
    133         ++color.w;
    134     }
    135 
    136     // Latchy
    137     do {
    138         color += bigColor4;
    139         if (color.x < d4)
    140             continue;
    141         if (color.y < d4)
    142             color.y += d4;
    143         else
    144             color.x += d4;
    145     } while (color.z < d4);
    146 
    147     // Do while flow control
    148     do {
    149         color += bigColor5;
    150         if (color.y < d5)
    151             color.y += d5;
    152     } while (color.x < d5);
    153 
    154     // If then loop
    155     if (color.x < d6) {
    156         while (color.y < d6)
    157             color += bigColor6;
    158     } else {
    159         while (color.z < d6)
    160             color.z += bigColor6.z;
    161     }
    162 
    163     // If then multi-exit
    164     if (color.x < d6) {
    165         while (color.y < d6) {
    166             color += bigColor6;
    167             if (d7 < 1.0)
    168                 break;
    169         }
    170 
    171     } else {
    172         while (color.z < d6)
    173             color.z += bigColor6.z;
    174     }
    175 
    176 
    177     // Multi-exit
    178     do {
    179        if (d7 < 0.0)
    180            break;
    181 
    182        color += bigColor7;
    183 
    184        if (d7 < 1.0) {
    185            color.z++;
    186            break;
    187        }
    188 
    189        color += BaseColor;
    190 
    191     } while (true);
    192 
    193 
    194     // Multi-exit2
    195     do {
    196         // invariant conditional break at the top of the loop. This could be a
    197         // situation where unswitching the loop has no real increases in code
    198         // size.
    199        if (d8 < 0.0)
    200            break;
    201 
    202        color += bigColor7;
    203 
    204        if (d8 < 1.0) {
    205            color.z++;
    206            if (d8 < 2.0) {
    207                color.y++;
    208            } else {
    209                color.x++;
    210            }
    211            break;
    212        }
    213 
    214        color += BaseColor;
    215 
    216     } while (color.z < d8);
    217 
    218     // Deep exit
    219     while (color.w < d9) {
    220         if (d9 > d8) {
    221             if (color.x <= d7) {
    222                 if (color.z == 5.0)
    223                     color.w++;
    224                 else
    225                     break;
    226             }
    227         }
    228 
    229     }
    230 
    231     // No end loop-back.
    232     while (color.z < d10) {
    233         color.y++;
    234         if (color.y < d11) {
    235             color.z++;
    236             if (color.w < d12)
    237                 color.w++;
    238             else
    239                 color.x++;
    240             continue;
    241         }
    242 
    243         color++;
    244         break;
    245     }
    246 
    247     // Multi-continue
    248     while (color.x < 10.0) {
    249         color += bigColor8;
    250 
    251         if (color.z < d8)
    252             if (color.w < d6)
    253                 continue;
    254 
    255         color.y += bigColor8.x;
    256     }
    257 
    258     color++;
    259     gl_FragColor = color;
    260 
    261     // Early Return
    262     while (color.x < d14) {
    263         if (color.y < d15) {
    264             return;
    265         }
    266         else
    267             color++;
    268     }
    269 
    270     color++;
    271 
    272     while (color.w < d16) {
    273         color.w++;
    274     }
    275 
    276 
    277     // While (complicated-conditional)
    278     while (color.w < d2 && color.y < d3) {
    279         color += bigColor1_2;
    280         if (color.z < d3)
    281             return;
    282     }
    283 
    284 
    285     do {
    286         if (color.y < d18)
    287             return;
    288         color++;
    289     } while (color.x < d17);
    290 
    291     // Early Discard
    292     while (color.y < d16) {
    293         if (color.w < d16) {
    294             discard;
    295         } else
    296             color++;
    297     }
    298 
    299     color++;
    300 
    301     gl_FragColor = color;
    302 }
    303