1#X1. Type: float[5] // An array type with 5 elements 2#X2. Return value: float[5] func() { ... } // Function with a 5-element array return value 3#X3. Array constructor: float[3] (1.0, 2.0, 5.5) // 3-element array with given elements 4# // Fails with array of matrices! 5#X4. As unnamed parameter: void func(float[5]); 6#X5. Variable declaration: float[5] a; // Equivalent to float a[5]; (?) 7#X6. Empty brackets: float x[] = float[] (1.0, 2.0, 3.0); // Size of x is 3 8# float y[] = float[3] (1.0, 2.0, 3.0); // Size of y is 3 (equivalent) 9# float z[] = y; // Size of z is 3 10#X7. Testing that 2-dimensional arrays don't work: float a[5][3]; // Illegal 11# float[5] a[3]; // Illegal 12#X8. Testing that array declaration with dynamic variables as array size won't work. 13#X9. Testing length() operator: z.length(); // Returns 3 for z defined before 14#X10. Test C/C++ style {}-constructor 15#X11. Test struct arrays 16#X12. Test array element access at initialization with const/dynamic values 17 18group constructor "Array constructors" 19 20 case float3 21 version 310 es 22 values 23 { 24 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(7.4, -1.0, 2.0) | vec3(3.0, 1.6, -2.0) ]; 25 output vec3 out0 = [ vec3(2.0, 0.5, 1.0) | vec3(2.0, 7.4, -1.0) | vec3(-2.0, 3.0, 1.6) ]; 26 } 27 28 both "" 29 #version 310 es 30 precision highp float; 31 ${DECLARATIONS} 32 33 void main() 34 { 35 ${SETUP} 36 float[3] x; 37 x = float[3] (in0.z, in0.x, in0.y); 38 out0 = vec3(x[0], x[1], x[2]); 39 ${OUTPUT} 40 } 41 "" 42 end 43 44 case float4 45 version 310 es 46 values 47 { 48 input vec4 in0 = [ vec4(0.5, 1.0, 2.0, 0.2) | vec4(7.4, -1.0, 2.0, -1.3) | vec4(3.0, 1.6, -2.0, 0.5) ]; 49 output vec4 out0 = [ vec4(2.0, 0.5, 0.2, 1.0) | vec4(2.0, 7.4, -1.3, -1.0) | vec4(-2.0, 3.0, 0.5, 1.6) ]; 50 } 51 52 both "" 53 #version 310 es 54 precision highp float; 55 ${DECLARATIONS} 56 57 void main() 58 { 59 ${SETUP} 60 float[4] x; 61 x = float[4] (in0.z, in0.x, in0.w, in0.y); 62 out0 = vec4(x[0], x[1], x[2], x[3]); 63 ${OUTPUT} 64 } 65 "" 66 end 67 68 case int3 69 version 310 es 70 values 71 { 72 input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(7, -1, 2) | ivec3(3, 1, -2) ]; 73 output ivec3 out0 = [ ivec3(2, 0, 1) | ivec3(2, 7, -1) | ivec3(-2, 3, 1) ]; 74 } 75 76 both "" 77 #version 310 es 78 precision highp int; 79 precision highp float; 80 ${DECLARATIONS} 81 82 void main() 83 { 84 ${SETUP} 85 int[3] x; 86 x = int[3] (in0.z, in0.x, in0.y); 87 out0 = ivec3(x[0], x[1], x[2]); 88 ${OUTPUT} 89 } 90 "" 91 end 92 93 case int4 94 version 310 es 95 values 96 { 97 input ivec4 in0 = [ ivec4(0, 1, 2, 0) | ivec4(7, -1, 2, -1) | ivec4(3, 1, -2, 0) ]; 98 output ivec4 out0 = [ ivec4(2, 0, 0, 1) | ivec4(2, 7, -1, -1) | ivec4(-2, 3, 0, 1) ]; 99 } 100 101 both "" 102 #version 310 es 103 precision highp int; 104 precision highp float; 105 ${DECLARATIONS} 106 107 void main() 108 { 109 ${SETUP} 110 int[4] x; 111 x = int[4] (in0.z, in0.x, in0.w, in0.y); 112 out0 = ivec4(x[0], x[1], x[2], x[3]); 113 ${OUTPUT} 114 } 115 "" 116 end 117 118 case bool3 119 version 310 es 120 values 121 { 122 input bvec3 in0 = [ bvec3(true, true, false) ]; 123 output bvec3 out0 = [ bvec3(false, true, true) ]; 124 } 125 126 both "" 127 #version 310 es 128 precision highp int; 129 precision highp float; 130 ${DECLARATIONS} 131 132 void main() 133 { 134 ${SETUP} 135 bool[3] x; 136 x = bool[3] (in0.z, in0.x, in0.y); 137 out0 = bvec3(x[0], x[1], x[2]); 138 ${OUTPUT} 139 } 140 "" 141 end 142 143 case bool4 144 version 310 es 145 values 146 { 147 input bvec4 in0 = [ bvec4(true, true, false, false) ]; 148 output bvec4 out0 = [ bvec4(false, true, true, false) ]; 149 } 150 151 both "" 152 #version 310 es 153 precision highp int; 154 precision highp float; 155 ${DECLARATIONS} 156 157 void main() 158 { 159 ${SETUP} 160 bool[4] x; 161 x = bool[4] (in0.z, in0.x, in0.y, in0.w); 162 out0 = bvec4(x[0], x[1], x[2], x[3]); 163 ${OUTPUT} 164 } 165 "" 166 end 167 168 case struct3 169 version 310 es 170 values 171 { 172 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ]; 173 output vec3 out0 = [ vec3(2.0, -0.5, -1.0) ]; 174 } 175 176 both "" 177 #version 310 es 178 precision highp float; 179 ${DECLARATIONS} 180 181 182 183 void main() 184 { 185 ${SETUP} 186 187 struct test 188 { 189 float f; 190 vec3 v; 191 }; 192 193 test a = test(in0.z, vec3(in0.x, in0.y, in0.z)); 194 test b = test(in0.y, vec3(-in0.z, -in0.x, -in0.y)); 195 test c = test(in0.x, vec3(-in0.y, in0.z, -in0.x)); 196 197 test[3] x = test[3] (a, b, c); 198 199 out0 = vec3(x[0].f, x[1].v.y, x[2].v.x); 200 ${OUTPUT} 201 } 202 "" 203 end 204 205 case struct4 206 version 310 es 207 values 208 { 209 input vec4 in0 = [ vec4(0.5, 1.0, 2.0, 1.5) ]; 210 output vec4 out0 = [ vec4(2.0, -0.5, -1.0, -1.5) ]; 211 } 212 213 both "" 214 #version 310 es 215 precision highp float; 216 ${DECLARATIONS} 217 218 219 void main() 220 { 221 ${SETUP} 222 223 224 struct test 225 { 226 float f; 227 vec3 v; 228 }; 229 230 test a = test(in0.z, vec3(in0.x, in0.y, in0.z)); 231 test b = test(in0.y, vec3(-in0.z, -in0.x, -in0.y)); 232 test c = test(in0.x, vec3(-in0.y, in0.z, -in0.x)); 233 test d = test(-in0.w, vec3(-in0.w, -in0.x, -in0.z)); 234 235 test[4] x = test[4] (a, b, c, d); 236 237 out0 = vec4(x[0].f, x[1].v.y, x[2].v.x, x[3].v.x); 238 ${OUTPUT} 239 } 240 "" 241 end 242 243 244 case float_vec3 245 version 310 es 246 values 247 { 248 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(7.4, -1.0, 2.0) | vec3(3.0, 1.6, -2.0) ]; 249 output vec3 out0 = [ vec3(0.5, -2.0, 1.0) | vec3(7.4, -2.0, -1.0) | vec3(3.0, 2.0, 1.6) ]; 250 } 251 252 both "" 253 #version 310 es 254 precision highp float; 255 ${DECLARATIONS} 256 257 void main() 258 { 259 ${SETUP} 260 261 vec3[3] x; 262 x = vec3[3] ( vec3(in0.x, in0.y, in0.z) , 263 vec3(-in0.y, -in0.z, -in0.x), 264 vec3(in0.z, in0.x, in0.y) ); 265 out0 = vec3(x[0].x, x[1].y, x[2].z); 266 ${OUTPUT} 267 } 268 "" 269 end 270 271 case int_vec3 272 version 310 es 273 values 274 { 275 input ivec3 in0 = [ ivec3(5, 1, 2) | ivec3(7, -1, 2) | ivec3(3, 1, -2) ]; 276 output ivec3 out0 = [ ivec3(5, -2, 1) | ivec3(7, -2, -1) | ivec3(3, 2, 1) ]; 277 } 278 279 both "" 280 #version 310 es 281 precision highp int; 282 precision highp float; 283 ${DECLARATIONS} 284 285 void main() 286 { 287 ${SETUP} 288 289 ivec3[3] x; 290 x = ivec3[3] ( ivec3(in0.x, in0.y, in0.z) , 291 ivec3(-in0.y, -in0.z, -in0.x), 292 ivec3(in0.z, in0.x, in0.y) ); 293 out0 = ivec3(x[0].x, x[1].y, x[2].z); 294 ${OUTPUT} 295 } 296 "" 297 end 298 299 case bool_vec3 300 version 310 es 301 values 302 { 303 input bvec3 in0 = [ bvec3(true, false, true) ]; 304 output bvec3 out0 = [ bvec3(true, true, false) ]; 305 } 306 307 both "" 308 #version 310 es 309 precision highp int; 310 precision highp float; 311 ${DECLARATIONS} 312 313 void main() 314 { 315 ${SETUP} 316 317 bvec3[3] x; 318 x = bvec3[3] ( bvec3(in0.x, in0.y, in0.z) , 319 bvec3(in0.y, in0.z, in0.x), 320 bvec3(in0.z, in0.x, in0.y) ); 321 out0 = bvec3(x[0].x, x[1].y, x[2].z); 322 ${OUTPUT} 323 } 324 "" 325 end 326 327 case float_mat3 328 version 310 es 329 values 330 { 331 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-1.5, 0.0, -2.3) ]; 332 output vec3 out0 = [ vec3(0.5, -1.0, 1.0) | vec3(-1.5, 0.0, 0.0) ]; 333 } 334 335 both "" 336 #version 310 es 337 precision highp float; 338 ${DECLARATIONS} 339 340 void main() 341 { 342 ${SETUP} 343 mat3[3] a = mat3[3] ( mat3( in0.x, in0.y, in0.z, 344 in0.x, in0.y, in0.z, 345 in0.x, in0.y, in0.z) , 346 mat3( in0.z, in0.x, -in0.y, 347 in0.z, in0.x, -in0.y, 348 in0.z, in0.x, -in0.y) , 349 mat3( -in0.z, -in0.z, in0.z, 350 -in0.y, -in0.y, in0.y, 351 -in0.x, -in0.x, in0.x) ); 352 353 mat3 a0 = a[0]; 354 mat3 a1 = a[1]; 355 mat3 a2 = a[2]; 356 357 float ret0 = a0[2][0]; 358 float ret1 = a1[0][2]; 359 float ret2 = a2[1][2]; 360 361 out0 = vec3(ret0, ret1, ret2); 362 ${OUTPUT} 363 } 364 "" 365 end 366 367 case int_mat3 368 version 310 es 369 values 370 { 371 input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(-1, 0, -2) ]; 372 output ivec3 out0 = [ ivec3(0, -1, 1) | ivec3(-1, 0, 0) ]; 373 } 374 375 both "" 376 #version 310 es 377 precision highp int; 378 precision highp float; 379 ${DECLARATIONS} 380 381 void main() 382 { 383 ${SETUP} 384 mat3[3] a = mat3[3] ( mat3( in0.x, in0.y, in0.z, 385 in0.x, in0.y, in0.z, 386 in0.x, in0.y, in0.z) , 387 mat3( in0.z, in0.x, -in0.y, 388 in0.z, in0.x, -in0.y, 389 in0.z, in0.x, -in0.y) , 390 mat3( -in0.z, -in0.z, in0.z, 391 -in0.y, -in0.y, in0.y, 392 -in0.x, -in0.x, in0.x) ); 393 394 mat3 a0 = a[0]; 395 mat3 a1 = a[1]; 396 mat3 a2 = a[2]; 397 398 float ret0 = a0[2][0]; 399 float ret1 = a1[0][2]; 400 float ret2 = a2[1][2]; 401 402 out0 = ivec3(ret0, ret1, ret2); 403 ${OUTPUT} 404 } 405 "" 406 end 407 408 case bool_mat3 409 version 310 es 410 values 411 { 412 input bvec3 in0 = [ bvec3(true, false, true) ]; 413 output bvec3 out0 = [ bvec3(true, false, false) ]; 414 } 415 416 both "" 417 #version 310 es 418 precision highp int; 419 precision highp float; 420 ${DECLARATIONS} 421 422 void main() 423 { 424 ${SETUP} 425 mat3[3] a = mat3[3] ( mat3( in0.x, in0.y, in0.z, 426 in0.x, in0.y, in0.z, 427 in0.x, in0.y, in0.z) , 428 mat3( in0.z, in0.x, in0.y, 429 in0.z, in0.x, in0.y, 430 in0.z, in0.x, in0.y) , 431 mat3( in0.z, in0.z, in0.z, 432 in0.y, in0.y, in0.y, 433 in0.x, in0.x, in0.x) ); 434 435 mat3 a0 = a[0]; 436 mat3 a1 = a[1]; 437 mat3 a2 = a[2]; 438 439 float ret0 = a0[2][0]; 440 float ret1 = a1[0][2]; 441 float ret2 = a2[1][2]; 442 443 out0 = bvec3(ret0, ret1, ret2); 444 ${OUTPUT} 445 } 446 "" 447 end 448 449end # type 450 451group return "Arrays as return value" 452 453 case float 454 version 310 es 455 values 456 { 457 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(7.4, -1.0, 2.0) | vec3(3.0, 1.6, -2.0) ]; 458 output vec3 out0 = [ vec3(2.0, -0.5, 1.0) | vec3(2.0, -7.4, -1.0) | vec3(-2.0, -3.0, 1.6) ]; 459 } 460 461 both "" 462 #version 310 es 463 precision highp float; 464 ${DECLARATIONS} 465 466 float[3] func(vec3 a) 467 { 468 return float[3] (a.z, -a.x, a.y); 469 } 470 471 void main() 472 { 473 ${SETUP} 474 float[3] x = func(in0); 475 out0 = vec3(x[0], x[1], x[2]); 476 ${OUTPUT} 477 } 478 "" 479 end 480 481 case int 482 version 310 es 483 values 484 { 485 input ivec3 in0 = [ ivec3(4, 1, 2) | ivec3(7, -1, 2) | ivec3(3, 1, -2) ]; 486 output ivec3 out0 = [ ivec3(2, -4, 1) | ivec3(2, -7, -1) | ivec3(-2, -3, 1) ]; 487 } 488 489 both "" 490 #version 310 es 491 precision highp int; 492 precision highp float; 493 ${DECLARATIONS} 494 495 int[3] func(ivec3 a) 496 { 497 return int[3] (a.z, -a.x, a.y); 498 } 499 500 void main() 501 { 502 ${SETUP} 503 int[3] x = func(in0); 504 out0 = ivec3(x[0], x[1], x[2]); 505 ${OUTPUT} 506 } 507 "" 508 end 509 510 case bool 511 version 310 es 512 values 513 { 514 input bvec3 in0 = [ bvec3(false, true, true) ]; 515 output bvec3 out0 = [ bvec3(true, false, true) ]; 516 } 517 518 both "" 519 #version 310 es 520 precision highp int; 521 precision highp float; 522 ${DECLARATIONS} 523 524 bool[3] func(bvec3 a) 525 { 526 return bool[3] (a.z, a.x, a.y); 527 } 528 529 void main() 530 { 531 ${SETUP} 532 bool[3] x = func(in0); 533 out0 = bvec3(x[0], x[1], x[2]); 534 ${OUTPUT} 535 } 536 "" 537 end 538 539 540 541 case float_vec3 542 version 310 es 543 values 544 { 545 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-0.5, 11.2, -1.0) ]; 546 output vec3 out0 = [ vec3(1.0, 0.5, -2.0) | vec3(11.2, -0.5, 1.0) ]; 547 } 548 549 both "" 550 #version 310 es 551 precision highp float; 552 ${DECLARATIONS} 553 554 vec3[3] func(vec3[3] a) 555 { 556 return vec3[3] (a[1], a[2], a[0]); 557 } 558 559 void main() 560 { 561 ${SETUP} 562 vec3[3] x = vec3[3](vec3(in0.x, in0.y, -in0.z) , 563 vec3(in0.y, -in0.z, in0.x) , 564 vec3(-in0.z, in0.x, in0.y) ); 565 x = func(x); 566 out0 = vec3(x[0].x, x[1].y, x[2].z); 567 ${OUTPUT} 568 } 569 "" 570 end 571 572 case struct 573 version 310 es 574 values 575 { 576 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ]; 577 output vec3 out0 = [ vec3(-1.0, 2.0, 0.5) ]; 578 } 579 580 both "" 581 #version 310 es 582 precision highp float; 583 ${DECLARATIONS} 584 585 struct test 586 { 587 float f; 588 vec3 v; 589 }; 590 591 test[3] func(test[3] a) 592 { 593 return test[3] (a[1], a[2], a[0]); 594 } 595 596 void main() 597 { 598 ${SETUP} 599 600 test a = test(in0.z, vec3(in0.x, in0.y, in0.z)); 601 test b = test(in0.y, vec3(-in0.z, -in0.x, -in0.y)); 602 test c = test(in0.x, vec3(-in0.y, in0.z, -in0.x)); 603 604 test[3] t = test[3] (a, b, c); 605 test[3] x = func(t); 606 607 out0 = vec3(x[0].v.z, x[1].v.y, x[2].v.x); 608 ${OUTPUT} 609 } 610 "" 611 end 612 613 case int_vec3 614 version 310 es 615 values 616 { 617 input ivec3 in0 = [ ivec3(5, 1, 2) | ivec3(-5, 11, -1) ]; 618 output ivec3 out0 = [ ivec3(1, 5, -2) | ivec3(11, -5, 1) ]; 619 } 620 621 both "" 622 #version 310 es 623 precision highp int; 624 precision highp float; 625 ${DECLARATIONS} 626 627 ivec3[3] func(ivec3[3] a) 628 { 629 return ivec3[3] (a[1], a[2], a[0]); 630 } 631 632 void main() 633 { 634 ${SETUP} 635 ivec3[3] x = ivec3[3]( ivec3(in0.x, in0.y, -in0.z) , 636 ivec3(in0.y, -in0.z, in0.x) , 637 ivec3(-in0.z, in0.x, in0.y) ); 638 x = func(x); 639 out0 = ivec3(x[0].x, x[1].y, x[2].z); 640 ${OUTPUT} 641 } 642 "" 643 end 644 645 case bool_vec3 646 version 310 es 647 values 648 { 649 input bvec3 in0 = [ bvec3(true, false, false) ]; 650 output bvec3 out0 = [ bvec3(false, true, false) ]; 651 } 652 653 both "" 654 #version 310 es 655 precision highp int; 656 precision highp float; 657 ${DECLARATIONS} 658 659 bvec3[3] func(bvec3[3] a) 660 { 661 return bvec3[3] (a[1], a[2], a[0]); 662 } 663 664 void main() 665 { 666 ${SETUP} 667 bvec3[3] x = bvec3[3]( bvec3(in0.x, in0.y, in0.z) , 668 bvec3(in0.y, in0.z, in0.x) , 669 bvec3(in0.z, in0.x, in0.y) ); 670 x = func(x); 671 out0 = bvec3(x[0].x, x[1].y, x[2].z); 672 ${OUTPUT} 673 } 674 "" 675 end 676 677 case float_mat3 678 version 310 es 679 values 680 { 681 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-1.5, 0.0, -2.3) ]; 682 output vec3 out0 = [ vec3(2.0, -1.0, 2.0) | vec3(-2.3, 0.0, -2.3) ]; 683 } 684 685 both "" 686 #version 310 es 687 precision highp float; 688 ${DECLARATIONS} 689 690 mat3[3] func(mat3[3] x) 691 { 692 mat3[3] r; 693 r[0] = x[1]; 694 r[1] = x[2]; 695 r[2] = x[0]; 696 return r; 697 } 698 699 void main() 700 { 701 ${SETUP} 702 mat3[3] a, b; 703 a[0] = mat3(in0.x, in0.y, in0.z, 704 in0.x, in0.y, in0.z, 705 in0.x, in0.y, in0.z); 706 a[1] = mat3(in0.z, in0.x, -in0.y, 707 in0.z, in0.x, -in0.y, 708 in0.z, in0.x, -in0.y); 709 a[2] = mat3(-in0.z, -in0.z, in0.z, 710 -in0.y, -in0.y, in0.y, 711 -in0.x, -in0.x, in0.x); 712 713 b = func(a); 714 715 mat3 b0 = b[0]; 716 mat3 b1 = b[1]; 717 mat3 b2 = b[2]; 718 719 float ret0 = b0[0][0]; 720 float ret1 = b1[1][1]; 721 float ret2 = b2[2][2]; 722 723 out0 = vec3(ret0, ret1, ret2); 724 ${OUTPUT} 725 } 726 "" 727 end 728 729 case int_mat3 730 version 310 es 731 values 732 { 733 input ivec3 in0 = [ ivec3(5, 1, 2) | ivec3(-1, 0, -2) ]; 734 output ivec3 out0 = [ ivec3(2, -1, 2) | ivec3(-2, 0, -2) ]; 735 } 736 737 both "" 738 #version 310 es 739 precision highp int; 740 precision highp float; 741 ${DECLARATIONS} 742 743 mat3[3] func(mat3[3] x) 744 { 745 mat3[3] r; 746 r[0] = x[1]; 747 r[1] = x[2]; 748 r[2] = x[0]; 749 return r; 750 } 751 752 void main() 753 { 754 ${SETUP} 755 mat3[3] a, b; 756 a[0] = mat3(in0.x, in0.y, in0.z, 757 in0.x, in0.y, in0.z, 758 in0.x, in0.y, in0.z); 759 a[1] = mat3(in0.z, in0.x, -in0.y, 760 in0.z, in0.x, -in0.y, 761 in0.z, in0.x, -in0.y); 762 a[2] = mat3(-in0.z, -in0.z, in0.z, 763 -in0.y, -in0.y, in0.y, 764 -in0.x, -in0.x, in0.x); 765 766 b = func(a); 767 768 mat3 b0 = b[0]; 769 mat3 b1 = b[1]; 770 mat3 b2 = b[2]; 771 772 float ret0 = b0[0][0]; 773 float ret1 = b1[1][1]; 774 float ret2 = b2[2][2]; 775 776 out0 = ivec3(ret0, ret1, ret2); 777 ${OUTPUT} 778 } 779 "" 780 end 781 782 case bool_mat3 783 version 310 es 784 values 785 { 786 input bvec3 in0 = [ bvec3(true, false, true) | bvec3(true, true, false) ]; 787 output bvec3 out0 = [ bvec3(true, false, true) | bvec3(false, true, false) ]; 788 } 789 790 both "" 791 #version 310 es 792 precision highp int; 793 precision highp float; 794 ${DECLARATIONS} 795 796 mat3[3] func(mat3[3] x) 797 { 798 mat3[3] r; 799 r[0] = x[1]; 800 r[1] = x[2]; 801 r[2] = x[0]; 802 return r; 803 } 804 805 void main() 806 { 807 ${SETUP} 808 mat3[3] a, b; 809 a[0] = mat3(in0.x, in0.y, in0.z, 810 in0.x, in0.y, in0.z, 811 in0.x, in0.y, in0.z); 812 a[1] = mat3(in0.z, in0.x, in0.y, 813 in0.z, in0.x, in0.y, 814 in0.z, in0.x, in0.y); 815 a[2] = mat3(in0.z, in0.z, in0.z, 816 in0.y, in0.y, in0.y, 817 in0.x, in0.x, in0.x); 818 819 b = func(a); 820 821 mat3 b0 = b[0]; 822 mat3 b1 = b[1]; 823 mat3 b2 = b[2]; 824 825 float ret0 = b0[0][0]; 826 float ret1 = b1[1][1]; 827 float ret2 = b2[2][2]; 828 829 out0 = bvec3(ret0, ret1, ret2); 830 ${OUTPUT} 831 } 832 "" 833 end 834 835end # return 836 837group unnamed_parameter "Array type as unnamed parameter of a function prototype" 838 839 case float 840 version 310 es 841 values 842 { 843 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(7.4, -1.0, 2.0) | vec3(3.0, 1.6, -2.0) ]; 844 output vec3 out0 = [ vec3(2.0, 0.5, 1.0) | vec3(2.0, 7.4, -1.0) | vec3(-2.0, 3.0, 1.6) ]; 845 } 846 847 both "" 848 #version 310 es 849 precision highp float; 850 ${DECLARATIONS} 851 852 float[3] func(float[3]); 853 854 void main() 855 { 856 ${SETUP} 857 float[3] a = float[3] (in0.x, in0.y, in0.z); 858 float[3] b = func(a); 859 out0 = vec3(b[0], b[1], b[2]); 860 ${OUTPUT} 861 } 862 863 float[3] func(float[3] a) 864 { 865 return float[3] (a[2], a[0], a[1]); 866 } 867 868 "" 869 end 870 871 case int 872 version 310 es 873 values 874 { 875 input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(7, -1, 2) | ivec3(3, 1, -2) ]; 876 output ivec3 out0 = [ ivec3(2, 0, 1) | ivec3(2, 7, -1) | ivec3(-2, 3, 1) ]; 877 } 878 879 both "" 880 #version 310 es 881 precision highp int; 882 precision highp float; 883 ${DECLARATIONS} 884 885 int[3] func(int[3]); 886 887 void main() 888 { 889 ${SETUP} 890 int[3] a = int[3] (in0.x, in0.y, in0.z); 891 int[3] b = func(a); 892 out0 = ivec3(b[0], b[1], b[2]); 893 ${OUTPUT} 894 } 895 896 int[3] func(int[3] a) 897 { 898 return int[3] (a[2], a[0], a[1]); 899 } 900 901 "" 902 end 903 904 case bool 905 version 310 es 906 values 907 { 908 input bvec3 in0 = [ bvec3(false, true, true) ]; 909 output bvec3 out0 = [ bvec3(true, false, true) ]; 910 } 911 912 both "" 913 #version 310 es 914 precision highp int; 915 precision highp float; 916 ${DECLARATIONS} 917 918 bool[3] func(bool[3]); 919 920 void main() 921 { 922 ${SETUP} 923 bool[3] a = bool[3] (in0.x, in0.y, in0.z); 924 bool[3] b = func(a); 925 out0 = bvec3(b[0], b[1], b[2]); 926 ${OUTPUT} 927 } 928 929 bool[3] func(bool[3] a) 930 { 931 return bool[3] (a[2], a[0], a[1]); 932 } 933 934 "" 935 end 936 937 case struct 938 version 310 es 939 values 940 { 941 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ]; 942 output vec3 out0 = [ vec3(-1.0, 2.0, 0.5) ]; 943 } 944 945 both "" 946 #version 310 es 947 precision highp float; 948 ${DECLARATIONS} 949 950 struct test 951 { 952 float f; 953 vec3 v; 954 }; 955 956 test[3] func(test[3]); 957 958 void main() 959 { 960 ${SETUP} 961 962 test a = test(in0.z, vec3(in0.x, in0.y, in0.z)); 963 test b = test(in0.y, vec3(-in0.z, -in0.x, -in0.y)); 964 test c = test(in0.x, vec3(-in0.y, in0.z, -in0.x)); 965 966 test[3] t = test[3] (a, b, c); 967 test[3] x = func(t); 968 out0 = vec3(x[0].v.z, x[1].v.y, x[2].v.x); 969 ${OUTPUT} 970 } 971 972 test[3] func(test[3] a) 973 { 974 return test[3] (a[1], a[2], a[0]); 975 } 976 977 "" 978 end 979 980 case float_vec3 981 version 310 es 982 values 983 { 984 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-0.5, 11.2, -1.0) ]; 985 output vec3 out0 = [ vec3(1.0, 0.5, -2.0) | vec3(11.2, -0.5, 1.0) ]; 986 } 987 988 both "" 989 #version 310 es 990 precision highp float; 991 ${DECLARATIONS} 992 993 vec3[3] func(vec3[3]); 994 995 void main() 996 { 997 ${SETUP} 998 vec3[3] x = vec3[3](vec3(in0.x, in0.y, -in0.z) , 999 vec3(in0.y, -in0.z, in0.x) , 1000 vec3(-in0.z, in0.x, in0.y) ); 1001 x = func(x); 1002 out0 = vec3(x[0].x, x[1].y, x[2].z); 1003 ${OUTPUT} 1004 } 1005 1006 vec3[3] func(vec3[3] a) 1007 { 1008 return vec3[3] (a[1], a[2], a[0]); 1009 } 1010 "" 1011 end 1012 1013 case int_vec3 1014 version 310 es 1015 values 1016 { 1017 input ivec3 in0 = [ ivec3(5, 1, 2) | ivec3(-5, 11, -1) ]; 1018 output ivec3 out0 = [ ivec3(1, 5, -2) | ivec3(11, -5, 1) ]; 1019 } 1020 1021 both "" 1022 #version 310 es 1023 precision highp int; 1024 precision highp float; 1025 ${DECLARATIONS} 1026 1027 ivec3[3] func(ivec3[3]); 1028 1029 void main() 1030 { 1031 ${SETUP} 1032 ivec3[3] x = ivec3[3]( ivec3(in0.x, in0.y, -in0.z) , 1033 ivec3(in0.y, -in0.z, in0.x) , 1034 ivec3(-in0.z, in0.x, in0.y) ); 1035 x = func(x); 1036 out0 = ivec3(x[0].x, x[1].y, x[2].z); 1037 ${OUTPUT} 1038 } 1039 1040 ivec3[3] func(ivec3[3] a) 1041 { 1042 return ivec3[3] (a[1], a[2], a[0]); 1043 } 1044 "" 1045 end 1046 1047 case bool_vec3 1048 version 310 es 1049 values 1050 { 1051 input bvec3 in0 = [ bvec3(true, false, false) ]; 1052 output bvec3 out0 = [ bvec3(false, true, false) ]; 1053 } 1054 1055 both "" 1056 #version 310 es 1057 precision highp int; 1058 precision highp float; 1059 ${DECLARATIONS} 1060 1061 bvec3[3] func(bvec3[3]); 1062 1063 void main() 1064 { 1065 ${SETUP} 1066 bvec3[3] x = bvec3[3]( bvec3(in0.x, in0.y, in0.z) , 1067 bvec3(in0.y, in0.z, in0.x) , 1068 bvec3(in0.z, in0.x, in0.y) ); 1069 x = func(x); 1070 out0 = bvec3(x[0].x, x[1].y, x[2].z); 1071 ${OUTPUT} 1072 } 1073 1074 bvec3[3] func(bvec3[3] a) 1075 { 1076 return bvec3[3] (a[1], a[2], a[0]); 1077 } 1078 1079 "" 1080 end 1081 1082 case float_mat3 1083 version 310 es 1084 values 1085 { 1086 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-1.5, 0.0, -2.3) ]; 1087 output vec3 out0 = [ vec3(2.0, -1.0, 2.0) | vec3(-2.3, 0.0, -2.3) ]; 1088 } 1089 1090 both "" 1091 #version 310 es 1092 precision highp float; 1093 ${DECLARATIONS} 1094 1095 mat3[3] func(mat3[3]); 1096 1097 void main() 1098 { 1099 ${SETUP} 1100 mat3[3] a, b; 1101 a[0] = mat3(in0.x, in0.y, in0.z, 1102 in0.x, in0.y, in0.z, 1103 in0.x, in0.y, in0.z); 1104 a[1] = mat3(in0.z, in0.x, -in0.y, 1105 in0.z, in0.x, -in0.y, 1106 in0.z, in0.x, -in0.y); 1107 a[2] = mat3(-in0.z, -in0.z, in0.z, 1108 -in0.y, -in0.y, in0.y, 1109 -in0.x, -in0.x, in0.x); 1110 1111 b = func(a); 1112 1113 mat3 b0 = b[0]; 1114 mat3 b1 = b[1]; 1115 mat3 b2 = b[2]; 1116 1117 float ret0 = b0[0][0]; 1118 float ret1 = b1[1][1]; 1119 float ret2 = b2[2][2]; 1120 1121 out0 = vec3(ret0, ret1, ret2); 1122 ${OUTPUT} 1123 } 1124 1125 mat3[3] func(mat3[3] x) 1126 { 1127 mat3[3] r; 1128 r[0] = x[1]; 1129 r[1] = x[2]; 1130 r[2] = x[0]; 1131 return r; 1132 } 1133 "" 1134 end 1135 1136 case int_mat3 1137 version 310 es 1138 values 1139 { 1140 input ivec3 in0 = [ ivec3(5, 1, 2) | ivec3(-1, 0, -2) ]; 1141 output ivec3 out0 = [ ivec3(2, -1, 2) | ivec3(-2, 0, -2) ]; 1142 } 1143 1144 both "" 1145 #version 310 es 1146 precision highp int; 1147 precision highp float; 1148 ${DECLARATIONS} 1149 1150 mat3[3] func(mat3[3]); 1151 1152 void main() 1153 { 1154 ${SETUP} 1155 mat3[3] a, b; 1156 a[0] = mat3(in0.x, in0.y, in0.z, 1157 in0.x, in0.y, in0.z, 1158 in0.x, in0.y, in0.z); 1159 a[1] = mat3(in0.z, in0.x, -in0.y, 1160 in0.z, in0.x, -in0.y, 1161 in0.z, in0.x, -in0.y); 1162 a[2] = mat3(-in0.z, -in0.z, in0.z, 1163 -in0.y, -in0.y, in0.y, 1164 -in0.x, -in0.x, in0.x); 1165 1166 b = func(a); 1167 1168 mat3 b0 = b[0]; 1169 mat3 b1 = b[1]; 1170 mat3 b2 = b[2]; 1171 1172 float ret0 = b0[0][0]; 1173 float ret1 = b1[1][1]; 1174 float ret2 = b2[2][2]; 1175 1176 out0 = ivec3(ret0, ret1, ret2); 1177 ${OUTPUT} 1178 } 1179 1180 mat3[3] func(mat3[3] x) 1181 { 1182 mat3[3] r; 1183 r[0] = x[1]; 1184 r[1] = x[2]; 1185 r[2] = x[0]; 1186 return r; 1187 } 1188 "" 1189 end 1190 1191 case bool_mat3 1192 version 310 es 1193 values 1194 { 1195 input bvec3 in0 = [ bvec3(true, false, true) | bvec3(true, true, false) ]; 1196 output bvec3 out0 = [ bvec3(true, false, true) | bvec3(false, true, false) ]; 1197 } 1198 1199 both "" 1200 #version 310 es 1201 precision highp int; 1202 precision highp float; 1203 ${DECLARATIONS} 1204 1205 mat3[3] func(mat3[3]); 1206 void main() 1207 { 1208 ${SETUP} 1209 mat3[3] a, b; 1210 a[0] = mat3(in0.x, in0.y, in0.z, 1211 in0.x, in0.y, in0.z, 1212 in0.x, in0.y, in0.z); 1213 a[1] = mat3(in0.z, in0.x, in0.y, 1214 in0.z, in0.x, in0.y, 1215 in0.z, in0.x, in0.y); 1216 a[2] = mat3(in0.z, in0.z, in0.z, 1217 in0.y, in0.y, in0.y, 1218 in0.x, in0.x, in0.x); 1219 1220 b = func(a); 1221 1222 mat3 b0 = b[0]; 1223 mat3 b1 = b[1]; 1224 mat3 b2 = b[2]; 1225 1226 float ret0 = b0[0][0]; 1227 float ret1 = b1[1][1]; 1228 float ret2 = b2[2][2]; 1229 1230 out0 = bvec3(ret0, ret1, ret2); 1231 ${OUTPUT} 1232 } 1233 1234 mat3[3] func(mat3[3] x) 1235 { 1236 mat3[3] r; 1237 r[0] = x[1]; 1238 r[1] = x[2]; 1239 r[2] = x[0]; 1240 return r; 1241 } 1242 "" 1243 end 1244 1245end # unnamed_parameter 1246 1247group declaration "Declaring arrays" 1248 1249 case implicit_size_float 1250 version 310 es 1251 values 1252 { 1253 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(7.4, -1.0, 2.0) | vec3(3.0, 1.6, -2.0) ]; 1254 output vec3 out0 = [ vec3(2.0, 0.5, 1.0) | vec3(2.0, 7.4, -1.0) | vec3(-2.0, 3.0, 1.6) ]; 1255 } 1256 1257 both "" 1258 #version 310 es 1259 precision highp float; 1260 ${DECLARATIONS} 1261 1262 void main() 1263 { 1264 ${SETUP} 1265 float[] x = float[] (in0.z, in0.x, in0.y); 1266 float[] y = x; 1267 1268 out0 = vec3(y[0], y[1], y[2]); 1269 ${OUTPUT} 1270 } 1271 "" 1272 end 1273 1274 case implicit_size_int 1275 version 310 es 1276 values 1277 { 1278 input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(7, -1, 2) | ivec3(3, 1, -2) ]; 1279 output ivec3 out0 = [ ivec3(2, 0, 1) | ivec3(2, 7, -1) | ivec3(-2, 3, 1) ]; 1280 } 1281 1282 both "" 1283 #version 310 es 1284 precision highp int; 1285 precision highp float; 1286 ${DECLARATIONS} 1287 1288 void main() 1289 { 1290 ${SETUP} 1291 int[] x = int[] (in0.z, in0.x, in0.y); 1292 int[] y = x; 1293 1294 out0 = ivec3(y[0], y[1], y[2]); 1295 ${OUTPUT} 1296 } 1297 "" 1298 end 1299 1300 case implicit_size_bool 1301 version 310 es 1302 values 1303 { 1304 input bvec3 in0 = [ bvec3(false, true, true) ]; 1305 output bvec3 out0 = [ bvec3(true, false, true) ]; 1306 } 1307 1308 both "" 1309 #version 310 es 1310 precision highp int; 1311 precision highp float; 1312 ${DECLARATIONS} 1313 1314 void main() 1315 { 1316 ${SETUP} 1317 bool[] x = bool[] (in0.z, in0.x, in0.y); 1318 bool[] y = x; 1319 1320 out0 = bvec3(y[0], y[1], y[2]); 1321 ${OUTPUT} 1322 } 1323 "" 1324 end 1325 1326 case implicit_size_struct 1327 version 310 es 1328 values 1329 { 1330 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ]; 1331 output vec3 out0 = [ vec3(-1.0, -0.5, 2.0) ]; 1332 } 1333 1334 both "" 1335 #version 310 es 1336 precision highp float; 1337 ${DECLARATIONS} 1338 1339 struct test 1340 { 1341 float f; 1342 vec3 v; 1343 }; 1344 1345 void main() 1346 { 1347 ${SETUP} 1348 1349 test a = test(in0.z, vec3(in0.x, in0.y, in0.z)); 1350 test b = test(in0.y, vec3(-in0.z, -in0.x, -in0.y)); 1351 test c = test(in0.x, vec3(-in0.y, in0.z, -in0.x)); 1352 1353 test[] x = test[] (c, b, a); 1354 test[] y = x; 1355 1356 out0 = vec3(y[0].v.x, y[1].v.y, y[2].v.z); 1357 ${OUTPUT} 1358 } 1359 "" 1360 end 1361 1362 case implicit_size_float_vec3 1363 version 310 es 1364 values 1365 { 1366 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-0.5, 11.2, -1.0) ]; 1367 output vec3 out0 = [ vec3(0.5, -2.0, 1.0) | vec3(-0.5, 1.0, 11.2) ]; 1368 } 1369 1370 both "" 1371 #version 310 es 1372 precision highp float; 1373 ${DECLARATIONS} 1374 1375 void main() 1376 { 1377 ${SETUP} 1378 vec3[] x = vec3[] ( vec3(in0.x, in0.y, -in0.z) , 1379 vec3(in0.y, -in0.z, in0.x) , 1380 vec3(-in0.z, in0.x, in0.y) ); 1381 vec3[] y = x; 1382 out0 = vec3(y[0].x, y[1].y, y[2].z); 1383 ${OUTPUT} 1384 } 1385 "" 1386 end 1387 1388 case implicit_size_int_ivec3 1389 version 310 es 1390 values 1391 { 1392 input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(5, 11, -1) ]; 1393 output ivec3 out0 = [ ivec3(0, -2, 1) | ivec3(5, 1, 11) ]; 1394 } 1395 1396 both "" 1397 #version 310 es 1398 precision highp int; 1399 precision highp float; 1400 ${DECLARATIONS} 1401 1402 void main() 1403 { 1404 ${SETUP} 1405 ivec3[] x = ivec3[] ( ivec3(in0.x, in0.y, -in0.z) , 1406 ivec3(in0.y, -in0.z, in0.x) , 1407 ivec3(-in0.z, in0.x, in0.y) ); 1408 ivec3[] y = x; 1409 out0 = ivec3(y[0].x, y[1].y, y[2].z); 1410 ${OUTPUT} 1411 } 1412 "" 1413 end 1414 1415 case implicit_size_bool_bvec3 1416 version 310 es 1417 values 1418 { 1419 input bvec3 in0 = [ bvec3(true, false, true) ]; 1420 output bvec3 out0 = [ bvec3(true, true, false) ]; 1421 } 1422 1423 both "" 1424 #version 310 es 1425 precision highp int; 1426 precision highp float; 1427 ${DECLARATIONS} 1428 1429 void main() 1430 { 1431 ${SETUP} 1432 bvec3[] x = bvec3[] ( bvec3(in0.x, in0.y, in0.z) , 1433 bvec3(in0.y, in0.z, in0.x) , 1434 bvec3(in0.z, in0.x, in0.y) ); 1435 bvec3[] y = x; 1436 out0 = bvec3(y[0].x, y[1].y, y[2].z); 1437 ${OUTPUT} 1438 } 1439 "" 1440 end 1441 1442 case implicit_size_float_mat3 1443 version 310 es 1444 values 1445 { 1446 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-1.5, 0.0, -2.3) ]; 1447 output vec3 out0 = [ vec3(0.5, -1.0, 1.0) | vec3(-1.5, 0.0, 0.0) ]; 1448 } 1449 1450 both "" 1451 #version 310 es 1452 precision highp float; 1453 ${DECLARATIONS} 1454 1455 void main() 1456 { 1457 ${SETUP} 1458 mat3[] a = mat3[] ( mat3( in0.x, in0.y, in0.z, 1459 in0.x, in0.y, in0.z, 1460 in0.x, in0.y, in0.z) , 1461 mat3( in0.z, in0.x, -in0.y, 1462 in0.z, in0.x, -in0.y, 1463 in0.z, in0.x, -in0.y) , 1464 mat3( -in0.z, -in0.z, in0.z, 1465 -in0.y, -in0.y, in0.y, 1466 -in0.x, -in0.x, in0.x) ); 1467 1468 mat3 a0 = a[0]; 1469 mat3 a1 = a[1]; 1470 mat3 a2 = a[2]; 1471 1472 float ret0 = a0[2][0]; 1473 float ret1 = a1[0][2]; 1474 float ret2 = a2[1][2]; 1475 1476 out0 = vec3(ret0, ret1, ret2); 1477 ${OUTPUT} 1478 } 1479 "" 1480 end 1481 1482 case implicit_size_int_mat3 1483 version 310 es 1484 values 1485 { 1486 input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(-1, 0, -2) ]; 1487 output ivec3 out0 = [ ivec3(0, -1, 1) | ivec3(-1, 0, 0) ]; 1488 } 1489 1490 both "" 1491 #version 310 es 1492 precision highp int; 1493 precision highp float; 1494 ${DECLARATIONS} 1495 1496 void main() 1497 { 1498 ${SETUP} 1499 mat3[] a = mat3[] ( mat3( in0.x, in0.y, in0.z, 1500 in0.x, in0.y, in0.z, 1501 in0.x, in0.y, in0.z) , 1502 mat3( in0.z, in0.x, -in0.y, 1503 in0.z, in0.x, -in0.y, 1504 in0.z, in0.x, -in0.y) , 1505 mat3( -in0.z, -in0.z, in0.z, 1506 -in0.y, -in0.y, in0.y, 1507 -in0.x, -in0.x, in0.x) ); 1508 1509 mat3 a0 = a[0]; 1510 mat3 a1 = a[1]; 1511 mat3 a2 = a[2]; 1512 1513 float ret0 = a0[2][0]; 1514 float ret1 = a1[0][2]; 1515 float ret2 = a2[1][2]; 1516 1517 out0 = ivec3(ret0, ret1, ret2); 1518 ${OUTPUT} 1519 } 1520 "" 1521 end 1522 1523 case implicit_size_bool_mat3 1524 version 310 es 1525 values 1526 { 1527 input bvec3 in0 = [ bvec3(true, false, true) ]; 1528 output bvec3 out0 = [ bvec3(true, false, false) ]; 1529 } 1530 1531 both "" 1532 #version 310 es 1533 precision highp int; 1534 precision highp float; 1535 ${DECLARATIONS} 1536 1537 void main() 1538 { 1539 ${SETUP} 1540 mat3[] a = mat3[] ( mat3( in0.x, in0.y, in0.z, 1541 in0.x, in0.y, in0.z, 1542 in0.x, in0.y, in0.z) , 1543 mat3( in0.z, in0.x, in0.y, 1544 in0.z, in0.x, in0.y, 1545 in0.z, in0.x, in0.y) , 1546 mat3( in0.z, in0.z, in0.z, 1547 in0.y, in0.y, in0.y, 1548 in0.x, in0.x, in0.x) ); 1549 1550 mat3 a0 = a[0]; 1551 mat3 a1 = a[1]; 1552 mat3 a2 = a[2]; 1553 1554 float ret0 = a0[2][0]; 1555 float ret1 = a1[0][2]; 1556 float ret2 = a2[1][2]; 1557 1558 out0 = bvec3(ret0, ret1, ret2); 1559 ${OUTPUT} 1560 } 1561 "" 1562 end 1563 1564 1565 case constant_expression_array_size 1566 version 310 es 1567 1568 both "" 1569 #version 310 es 1570 precision highp float; 1571 ${DECLARATIONS} 1572 1573 const int a = 4; 1574 1575 void main () 1576 { 1577 const int b = 5; 1578 float[a] array1; 1579 float[b] array2; 1580 float[array1.length()] array3; 1581 float[a+b] array4; 1582 ${OUTPUT} 1583 } 1584 "" 1585 end 1586 1587 case constant_expression_array_access 1588 version 310 es 1589 values 1590 { 1591 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ]; 1592 output vec3 out0 = [ vec3(-2.0, -1.0, -0.5) ]; 1593 } 1594 1595 both "" 1596 #version 310 es 1597 precision highp float; 1598 ${DECLARATIONS} 1599 1600 const int a = 3; 1601 1602 void main () 1603 { 1604 ${SETUP} 1605 const int b = 2; 1606 float x = float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x) [a]; 1607 float y = float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x) [b+2]; 1608 float z = float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x) [5]; 1609 out0 = vec3(x, y, z); 1610 ${OUTPUT} 1611 } 1612 "" 1613 end 1614 1615 case dynamic_expression_array_access 1616 version 310 es 1617 values 1618 { 1619 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ]; 1620 input ivec2 in1 = ivec2(3, 2); 1621 output vec3 out0 = [ vec3(-2.0, -1.0, -0.5) ]; 1622 } 1623 1624 both "" 1625 #version 310 es 1626 precision highp int; 1627 precision highp float; 1628 ${DECLARATIONS} 1629 1630 void main () 1631 { 1632 ${SETUP} 1633 float x = float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x) [in1.x]; 1634 float y = float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x) [in1.y+2]; 1635 float z = float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x) [in1.x+in1.y]; 1636 out0 = vec3(x, y, z); 1637 ${OUTPUT} 1638 } 1639 "" 1640 end 1641 1642 case multiple_declarations_single_statement_explicit 1643 version 310 es 1644 values 1645 { 1646 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ]; 1647 output vec3 out0 = [ vec3(2.0, -1.0, 0.5) ]; 1648 } 1649 1650 both "" 1651 #version 310 es 1652 precision highp float; 1653 ${DECLARATIONS} 1654 1655 void main () 1656 { 1657 ${SETUP} 1658 float[] x = float[6] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x), 1659 y = float[2] (in0.x, -in0.y); 1660 out0 = vec3(x[2], y[1], x[0]); 1661 ${OUTPUT} 1662 } 1663 "" 1664 end 1665 1666 case multiple_declarations_single_statement_implicit 1667 version 310 es 1668 values 1669 { 1670 input ivec3 in0 = [ ivec3(5, 1, 2) ]; 1671 output ivec3 out0 = [ ivec3(2, -1, 5) ]; 1672 } 1673 1674 both "" 1675 #version 310 es 1676 precision highp int; 1677 precision highp float; 1678 ${DECLARATIONS} 1679 1680 void main () 1681 { 1682 ${SETUP} 1683 int[] x = int[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x), 1684 y = int[] (in0.x, -in0.y); 1685 out0 = ivec3(x[2], y[1], x[0]); 1686 ${OUTPUT} 1687 } 1688 "" 1689 end 1690 1691end # declaration 1692 1693group length "Array length method" 1694 1695 case float 1696 version 310 es 1697 values 1698 { 1699 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ]; 1700 output ivec3 out0 = [ ivec3(3, 5, 13) ]; 1701 } 1702 1703 both "" 1704 #version 310 es 1705 precision highp float; 1706 ${DECLARATIONS} 1707 1708 void main() 1709 { 1710 ${SETUP} 1711 float[] x = float[3] (in0.z, in0.x, in0.y); 1712 float[] y = float[] (in0.z, in0.x, in0.y, in0.x, in0.y); 1713 float[13] z; 1714 1715 out0 = ivec3(x.length(), y.length(), z.length()); 1716 ${OUTPUT} 1717 } 1718 "" 1719 end 1720 1721 case int 1722 version 310 es 1723 values 1724 { 1725 input ivec3 in0 = [ ivec3(0, 1, 2) ]; 1726 output ivec3 out0 = [ ivec3(3, 5, 13) ]; 1727 } 1728 1729 both "" 1730 #version 310 es 1731 precision highp int; 1732 precision highp float; 1733 ${DECLARATIONS} 1734 1735 void main() 1736 { 1737 ${SETUP} 1738 int[] x = int[3] (in0.z, in0.x, in0.y); 1739 int[] y = int[] (in0.z, in0.x, in0.y, in0.x, in0.y); 1740 int[13] z; 1741 1742 out0 = ivec3(x.length(), y.length(), z.length()); 1743 ${OUTPUT} 1744 } 1745 "" 1746 end 1747 1748 case bool 1749 version 310 es 1750 values 1751 { 1752 input bvec3 in0 = [ bvec3(true, false, true) ]; 1753 output ivec3 out0 = [ ivec3(3, 5, 13) ]; 1754 } 1755 1756 both "" 1757 #version 310 es 1758 precision highp int; 1759 precision highp float; 1760 ${DECLARATIONS} 1761 1762 void main() 1763 { 1764 ${SETUP} 1765 bool[] x = bool[3] (in0.z, in0.x, in0.y); 1766 bool[] y = bool[] (in0.z, in0.x, in0.y, in0.x, in0.y); 1767 bool[13] z; 1768 1769 out0 = ivec3(x.length(), y.length(), z.length()); 1770 ${OUTPUT} 1771 } 1772 "" 1773 end 1774 1775 case struct 1776 version 310 es 1777 values 1778 { 1779 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ]; 1780 output ivec3 out0 = [ ivec3(3, 5, 13) ]; 1781 } 1782 1783 both "" 1784 #version 310 es 1785 precision highp float; 1786 ${DECLARATIONS} 1787 1788 struct test 1789 { 1790 float f; 1791 vec3 v; 1792 }; 1793 1794 void main() 1795 { 1796 ${SETUP} 1797 1798 test a = test(in0.z, vec3(in0.x, in0.y, in0.z)); 1799 test b = test(in0.y, vec3(-in0.z, -in0.x, -in0.y)); 1800 test c = test(in0.x, vec3(-in0.y, in0.z, -in0.x)); 1801 1802 test[] x = test[3] (a, b, c); 1803 test[] y = test[] (c, a, b, b, a); 1804 test[13] z; 1805 1806 out0 = ivec3(x.length(), y.length(), z.length()); 1807 ${OUTPUT} 1808 } 1809 "" 1810 end 1811 1812end # length 1813