Home | History | Annotate | Download | only in shaders
      1 group trivial "Trivial expressions"
      2 
      3 	case float
      4 		version 300 es
      5 		values { output float out0 = 5.0; }
      6 		both ""
      7 			#version 300 es
      8 			precision highp float;
      9 			${DECLARATIONS}
     10 
     11 			void main()
     12 			{
     13 				const float a = 5.0;
     14 				out0 = a;
     15 				${OUTPUT}
     16 			}
     17 		""
     18 	end
     19 
     20 	case int
     21 		version 300 es
     22 		values { output int out0 = 5; }
     23 		both ""
     24 			#version 300 es
     25 			precision highp float;
     26 			${DECLARATIONS}
     27 
     28 			void main()
     29 			{
     30 				const int a = 5;
     31 				out0 = a;
     32 				${OUTPUT}
     33 			}
     34 		""
     35 	end
     36 
     37 	case bool
     38 		version 300 es
     39 		values { output bool out0 = true; }
     40 		both ""
     41 			#version 300 es
     42 			precision highp float;
     43 			${DECLARATIONS}
     44 
     45 			void main()
     46 			{
     47 				const bool a = true;
     48 				out0 = a;
     49 				${OUTPUT}
     50 			}
     51 		""
     52 	end
     53 
     54 	case cast
     55 		version 300 es
     56 		values { output float out0 = 1.0; }
     57 		both ""
     58 			#version 300 es
     59 			precision highp float;
     60 			${DECLARATIONS}
     61 
     62 			void main()
     63 			{
     64 				const float a = float(int(bool(true)));
     65 				out0 = a;
     66 				${OUTPUT}
     67 			}
     68 		""
     69 	end
     70 
     71 end # trivial
     72 
     73 group operators "Operators"
     74 
     75 	case math_float
     76 		version 300 es
     77 		values { output float out0 = 2.19; }
     78 		both ""
     79 			#version 300 es
     80 			precision highp float;
     81 			${DECLARATIONS}
     82 
     83 			void main()
     84 			{
     85 				const float a = 6.0/3.5 + 1.8*2.6 - 4.2;
     86 				out0 = a;
     87 				${OUTPUT}
     88 			}
     89 		""
     90 	end
     91 
     92 	case math_vec
     93 		version 300 es
     94 		values { output float out0 = 15.0; }
     95 		both ""
     96 			#version 300 es
     97 			precision highp float;
     98 			${DECLARATIONS}
     99 
    100 			void main()
    101 			{
    102 				const vec3 a = (vec4(1.0, 2.0, 3.0, 4.0).zyx * vec3(1.0, 1.5, 3.0).xyz).xzy + (vec2(5.0)/vec2(2.5)).xxy;
    103 				out0 = a.x + a.y + a.z;
    104 				${OUTPUT}
    105 			}
    106 		""
    107 	end
    108 
    109 	case math_int
    110 		version 300 es
    111 		values { output int out0 = 7; }
    112 		both ""
    113 			#version 300 es
    114 			precision highp int;
    115 			${DECLARATIONS}
    116 
    117 			void main()
    118 			{
    119 				const int a = 25%7 + 2*3 - 9/3;
    120 				out0 = a;
    121 				${OUTPUT}
    122 			}
    123 		""
    124 	end
    125 
    126 	case math_ivec
    127 		version 300 es
    128 		values { output int out0 = 21; }
    129 		both ""
    130 			#version 300 es
    131 			precision highp int;
    132 			${DECLARATIONS}
    133 
    134 			void main()
    135 			{
    136 				const ivec3 a = ivec2(25%7, 4).xxy + ivec4(1*3, 9/3, 1+2, 8/4).xyz;
    137 				out0 = a.x + a.y + a.z;
    138 				${OUTPUT}
    139 			}
    140 		""
    141 	end
    142 
    143 	case math_mat
    144 		version 300 es
    145 		values { output float out0 = 8.0; }
    146 		both ""
    147 			#version 300 es
    148 			precision highp float;
    149 			${DECLARATIONS}
    150 
    151 			void main()
    152 			{
    153 				const mat3 a = mat3(3.0) * mat3(4.0);
    154 				const mat4 b = mat4(a[1][1])*2.0;
    155 				const mat2 c = mat2(b[0][0]) / 3.0;
    156 				out0 = c[0][0]+c[1][0];
    157 				${OUTPUT}
    158 			}
    159 		""
    160 	end
    161 
    162 	case bitwise
    163 		version 300 es
    164 		values { output int out0 = 678332; }
    165 		both ""
    166 			#version 300 es
    167 			precision highp int;
    168 			${DECLARATIONS}
    169 
    170 			void main()
    171 			{
    172 				const int a = (((0xABBA<<4) ^ 0xCAFE) | (0xDCBA & (0xABCD>>2))) ^ (~0xDEAD & 0xBEEF);
    173 				out0 = a;
    174 				${OUTPUT}
    175 			}
    176 		""
    177 	end
    178 
    179 	case logical
    180 		version 300 es
    181 		values { output bool out0 = true; }
    182 		both ""
    183 			#version 300 es
    184 			precision highp int;
    185 			${DECLARATIONS}
    186 
    187 			void main()
    188 			{
    189 				const bool a = (!false || false) && (true ^^ false);
    190 				out0 = a;
    191 				${OUTPUT}
    192 			}
    193 		""
    194 	end
    195 
    196 	case compare
    197 		version 300 es
    198 		values { output bool out0 = true; }
    199 		both ""
    200 			#version 300 es
    201 			precision highp int;
    202 			${DECLARATIONS}
    203 
    204 			void main()
    205 			{
    206 				const bool a = (false == false) && (true != false) && (1 < 2) && (3 <= 3) && ((1 > 1) != (1 >= 1));
    207 				out0 = a;
    208 				${OUTPUT}
    209 			}
    210 		""
    211 	end
    212 
    213 	case selection
    214 		version 300 es
    215 		values { output float out0 = 5.3; }
    216 		both ""
    217 			#version 300 es
    218 			precision highp float;
    219 			${DECLARATIONS}
    220 
    221 			void main()
    222 			{
    223 				const float a = false ? 0.0 : (true ? 5.3 : 1.0);
    224 				out0 = a;
    225 				${OUTPUT}
    226 			}
    227 		""
    228 	end
    229 
    230 end # operators
    231 
    232 group complex_types "Arrays & Structs"
    233 
    234 	case struct
    235 		version 300 es
    236 		values { output float out0 = 260.922; }
    237 		both ""
    238 			#version 300 es
    239 			precision highp float;
    240 			${DECLARATIONS}
    241 
    242 			struct S
    243 			{
    244 				vec4 a;
    245 				int  b;
    246 			};
    247 
    248 			void main()
    249 			{
    250 				const S s = S(vec4(1.5), 123);
    251 				out0 = length(s.a.xy)*float(s.b);
    252 				${OUTPUT}
    253 			}
    254 		""
    255 	end
    256 
    257 	case nested_struct
    258 		version 300 es
    259 		values { output float out0 = 965.9; }
    260 		both ""
    261 			#version 300 es
    262 			precision highp float;
    263 			${DECLARATIONS}
    264 
    265 			struct S
    266 			{
    267 				vec4 v;
    268 				int  i;
    269 			};
    270 
    271 			struct T
    272 			{
    273 				S s;
    274 				bool b;
    275 				int i;
    276 			};
    277 
    278 			struct U
    279 			{
    280 				S s;
    281 				T t;
    282 			};
    283 
    284 			void main()
    285 			{
    286 				const S s = S(vec4(1.5), 123);
    287 				const T t = T(s, false, 3);
    288 				const U u = U(s, t);
    289 				const U v = U(S(vec4(1.3), 4), T(S(vec4(2.0), 5), true, 6));
    290 				out0 = float(u.s.i*v.t.i + v.t.s.i)*v.s.v.x; // float(123*6 + 5)*1.3
    291 				${OUTPUT}
    292 			}
    293 		""
    294 	end
    295 
    296 	case array_size
    297 		version 300 es
    298 		values { output int out0 = 1; }
    299 		both ""
    300 			#version 300 es
    301 			precision highp float;
    302 			${DECLARATIONS}
    303 
    304 			void main()
    305 			{
    306 				const int a[max(-1, 1)] = int[1](1);
    307 				out0 = a[0];
    308 				${OUTPUT}
    309 			}
    310 		""
    311 	end
    312 
    313 	case array_length
    314 		version 300 es
    315 		values { output int out0 = 2; }
    316 		both ""
    317 			#version 300 es
    318 			precision highp float;
    319 			${DECLARATIONS}
    320 
    321 			void main()
    322 			{
    323 				const int a[1] = int[1](1);
    324 				out0 = a.length() + a[0];
    325 				${OUTPUT}
    326 			}
    327 		""
    328 	end
    329 
    330 	case array
    331 		version 300 es
    332 		values { output float out0 = 4.0; }
    333 		both ""
    334 			#version 300 es
    335 			precision highp float;
    336 			${DECLARATIONS}
    337 
    338 			void main()
    339 			{
    340 				const float a[1+2+5] = float[8](0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0);
    341 				const float f = a[1+2+4];
    342 				out0 = f + float(a.length()-8);
    343 				${OUTPUT}
    344 			}
    345 		""
    346 	end
    347 
    348 end # complex_types
    349 
    350 group other "Other operations"
    351 
    352 	case switch_case
    353 		version 300 es
    354 		values
    355 		{
    356 			input float in0 = [ 0.0 | 1.0 | 2.0 | 3.0 | 4.0 | 5.0 ];
    357 			output int out0 = [ 0 | 1 | 2 | 3 | 4 | 10];
    358 		}
    359 
    360 		both ""
    361 			#version 300 es
    362 			precision highp float;
    363 			${DECLARATIONS}
    364 
    365 			void main()
    366 			{
    367 				const int _0 = 0;
    368 				const int _1 = 1;
    369 				const int _2 = 2;
    370 				const int _3 = 3;
    371 				const int _4 = 4;
    372 
    373 				switch(int(in0))
    374 				{
    375 					case _0:
    376 						out0 = 0;
    377 						break;
    378 					case _1:
    379 						out0 = 1;
    380 						break;
    381 					case _2:
    382 						out0 = 2;
    383 						break;
    384 					case _3:
    385 						out0 = 3;
    386 						break;
    387 					case _4:
    388 						out0 = 4;
    389 						break;
    390 					case 5:
    391 						out0 = 10;
    392 						break;
    393 					default:
    394 						out0 = 100;
    395 
    396 				}
    397 				${OUTPUT}
    398 			}
    399 		""
    400 	end
    401 
    402 	case nested_builtin_funcs
    403 		version 300 es
    404 		values { output float out0 = 3.05; }
    405 		both ""
    406 			#version 300 es
    407 			precision highp float;
    408 			${DECLARATIONS}
    409 
    410 			void main()
    411 			{
    412 				const float a = sqrt( atan(sin(1.5)/cos(1.5)) /*1.5*/ * log2(exp2(log(exp(6.2) + 0.1)) + 0.1) /*~6.2*/);
    413 				out0 = a;
    414 				${OUTPUT}
    415 			}
    416 		""
    417 	end
    418 
    419 	case complex
    420 		version 300 es
    421 		values
    422 		{
    423 			input float in0 = [ 0.0 | 1.0 | 2.0 | 3.0 | 4.0 | 5.0 ];
    424 			output int out0 = [ 0 | 1 | 2 | 3 | 4 | 10];
    425 		}
    426 
    427 		both ""
    428 			#version 300 es
    429 			precision highp float;
    430 			${DECLARATIONS}
    431 
    432 			struct T
    433 			{
    434 				vec4 v;
    435 			};
    436 
    437 			struct S
    438 			{
    439 				T t;
    440 				int i;
    441 				bool b;
    442 			};
    443 
    444 			void main()
    445 			{
    446 				const T   t  = T(vec4(1.0));
    447 				const S   s  = S(t, 42, true);
    448 				const int _0 = int(sin(0.0));
    449 				const int _1 = int(1.0);
    450 				const int _2 = 2 + int(float(_0>_1));
    451 				const int _3 = min(gl_MaxVertexAttribs, 16)/4 - 1;
    452 				const int _4 = min(gl_MaxDrawBuffers, 4);
    453 				const ivec4 nums = ivec4(0, 1, 2, 3);
    454 
    455 				switch(int(in0))
    456 				{
    457 					case int(float(_0)):
    458 						out0 = ((true!=false) && (!false)) ? 0 : 25;
    459 						break;
    460 					case ivec3(_1).x:
    461 						out0 = 3*18/9-5;
    462 						break;
    463 					case nums[_2]:
    464 						out0 = int(length(vec4(1.0))+0.001);
    465 						break;
    466 					case _3:
    467 						out0 = 3;
    468 						break;
    469 					case clamp(_4, 1, 6):
    470 						out0 = (s.i-2)/10;
    471 						break;
    472 					case max(3, 5):
    473 						out0 = 10;
    474 						break;
    475 					default:
    476 						out0 = 100;
    477 
    478 				}
    479 				${OUTPUT}
    480 			}
    481 		""
    482 	end
    483 end
    484