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 300 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 300 es 30 precision mediump 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 300 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 300 es 54 precision mediump 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 300 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 300 es 78 precision mediump int; 79 precision mediump 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 300 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 300 es 103 precision mediump int; 104 precision mediump 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 300 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 300 es 128 precision mediump float; 129 ${DECLARATIONS} 130 131 void main() 132 { 133 ${SETUP} 134 bool[3] x; 135 x = bool[3] (in0.z, in0.x, in0.y); 136 out0 = bvec3(x[0], x[1], x[2]); 137 ${OUTPUT} 138 } 139 "" 140 end 141 142 case bool4 143 version 300 es 144 values 145 { 146 input bvec4 in0 = [ bvec4(true, true, false, false) ]; 147 output bvec4 out0 = [ bvec4(false, true, true, false) ]; 148 } 149 150 both "" 151 #version 300 es 152 precision mediump float; 153 ${DECLARATIONS} 154 155 void main() 156 { 157 ${SETUP} 158 bool[4] x; 159 x = bool[4] (in0.z, in0.x, in0.y, in0.w); 160 out0 = bvec4(x[0], x[1], x[2], x[3]); 161 ${OUTPUT} 162 } 163 "" 164 end 165 166 case struct3 167 version 300 es 168 values 169 { 170 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ]; 171 output vec3 out0 = [ vec3(2.0, -0.5, -1.0) ]; 172 } 173 174 both "" 175 #version 300 es 176 precision mediump float; 177 ${DECLARATIONS} 178 179 180 181 void main() 182 { 183 ${SETUP} 184 185 struct test 186 { 187 float f; 188 vec3 v; 189 }; 190 191 test a = test(in0.z, vec3(in0.x, in0.y, in0.z)); 192 test b = test(in0.y, vec3(-in0.z, -in0.x, -in0.y)); 193 test c = test(in0.x, vec3(-in0.y, in0.z, -in0.x)); 194 195 test[3] x = test[3] (a, b, c); 196 197 out0 = vec3(x[0].f, x[1].v.y, x[2].v.x); 198 ${OUTPUT} 199 } 200 "" 201 end 202 203 case struct4 204 version 300 es 205 values 206 { 207 input vec4 in0 = [ vec4(0.5, 1.0, 2.0, 1.5) ]; 208 output vec4 out0 = [ vec4(2.0, -0.5, -1.0, -1.5) ]; 209 } 210 211 both "" 212 #version 300 es 213 precision mediump float; 214 ${DECLARATIONS} 215 216 217 void main() 218 { 219 ${SETUP} 220 221 222 struct test 223 { 224 float f; 225 vec3 v; 226 }; 227 228 test a = test(in0.z, vec3(in0.x, in0.y, in0.z)); 229 test b = test(in0.y, vec3(-in0.z, -in0.x, -in0.y)); 230 test c = test(in0.x, vec3(-in0.y, in0.z, -in0.x)); 231 test d = test(-in0.w, vec3(-in0.w, -in0.x, -in0.z)); 232 233 test[4] x = test[4] (a, b, c, d); 234 235 out0 = vec4(x[0].f, x[1].v.y, x[2].v.x, x[3].v.x); 236 ${OUTPUT} 237 } 238 "" 239 end 240 241 242 case float_vec3 243 version 300 es 244 values 245 { 246 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(7.4, -1.0, 2.0) | vec3(3.0, 1.6, -2.0) ]; 247 output vec3 out0 = [ vec3(0.5, -2.0, 1.0) | vec3(7.4, -2.0, -1.0) | vec3(3.0, 2.0, 1.6) ]; 248 } 249 250 both "" 251 #version 300 es 252 precision mediump float; 253 ${DECLARATIONS} 254 255 void main() 256 { 257 ${SETUP} 258 259 vec3[3] x; 260 x = vec3[3] ( vec3(in0.x, in0.y, in0.z) , 261 vec3(-in0.y, -in0.z, -in0.x), 262 vec3(in0.z, in0.x, in0.y) ); 263 out0 = vec3(x[0].x, x[1].y, x[2].z); 264 ${OUTPUT} 265 } 266 "" 267 end 268 269 case int_vec3 270 version 300 es 271 values 272 { 273 input ivec3 in0 = [ ivec3(5, 1, 2) | ivec3(7, -1, 2) | ivec3(3, 1, -2) ]; 274 output ivec3 out0 = [ ivec3(5, -2, 1) | ivec3(7, -2, -1) | ivec3(3, 2, 1) ]; 275 } 276 277 both "" 278 #version 300 es 279 precision mediump int; 280 precision mediump float; 281 ${DECLARATIONS} 282 283 void main() 284 { 285 ${SETUP} 286 287 ivec3[3] x; 288 x = ivec3[3] ( ivec3(in0.x, in0.y, in0.z) , 289 ivec3(-in0.y, -in0.z, -in0.x), 290 ivec3(in0.z, in0.x, in0.y) ); 291 out0 = ivec3(x[0].x, x[1].y, x[2].z); 292 ${OUTPUT} 293 } 294 "" 295 end 296 297 case bool_vec3 298 version 300 es 299 values 300 { 301 input bvec3 in0 = [ bvec3(true, false, true) ]; 302 output bvec3 out0 = [ bvec3(true, true, false) ]; 303 } 304 305 both "" 306 #version 300 es 307 precision mediump float; 308 ${DECLARATIONS} 309 310 void main() 311 { 312 ${SETUP} 313 314 bvec3[3] x; 315 x = bvec3[3] ( bvec3(in0.x, in0.y, in0.z) , 316 bvec3(in0.y, in0.z, in0.x), 317 bvec3(in0.z, in0.x, in0.y) ); 318 out0 = bvec3(x[0].x, x[1].y, x[2].z); 319 ${OUTPUT} 320 } 321 "" 322 end 323 324 case float_mat3 325 version 300 es 326 values 327 { 328 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-1.5, 0.0, -2.3) ]; 329 output vec3 out0 = [ vec3(0.5, -1.0, 1.0) | vec3(-1.5, 0.0, 0.0) ]; 330 } 331 332 both "" 333 #version 300 es 334 precision mediump float; 335 ${DECLARATIONS} 336 337 void main() 338 { 339 ${SETUP} 340 mat3[3] a = mat3[3] ( mat3( in0.x, in0.y, in0.z, 341 in0.x, in0.y, in0.z, 342 in0.x, in0.y, in0.z) , 343 mat3( in0.z, in0.x, -in0.y, 344 in0.z, in0.x, -in0.y, 345 in0.z, in0.x, -in0.y) , 346 mat3( -in0.z, -in0.z, in0.z, 347 -in0.y, -in0.y, in0.y, 348 -in0.x, -in0.x, in0.x) ); 349 350 mat3 a0 = a[0]; 351 mat3 a1 = a[1]; 352 mat3 a2 = a[2]; 353 354 float ret0 = a0[2][0]; 355 float ret1 = a1[0][2]; 356 float ret2 = a2[1][2]; 357 358 out0 = vec3(ret0, ret1, ret2); 359 ${OUTPUT} 360 } 361 "" 362 end 363 364 case int_mat3 365 version 300 es 366 values 367 { 368 input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(-1, 0, -2) ]; 369 output ivec3 out0 = [ ivec3(0, -1, 1) | ivec3(-1, 0, 0) ]; 370 } 371 372 both "" 373 #version 300 es 374 precision mediump int; 375 precision mediump float; 376 ${DECLARATIONS} 377 378 void main() 379 { 380 ${SETUP} 381 mat3[3] a = mat3[3] ( mat3( in0.x, in0.y, in0.z, 382 in0.x, in0.y, in0.z, 383 in0.x, in0.y, in0.z) , 384 mat3( in0.z, in0.x, -in0.y, 385 in0.z, in0.x, -in0.y, 386 in0.z, in0.x, -in0.y) , 387 mat3( -in0.z, -in0.z, in0.z, 388 -in0.y, -in0.y, in0.y, 389 -in0.x, -in0.x, in0.x) ); 390 391 mat3 a0 = a[0]; 392 mat3 a1 = a[1]; 393 mat3 a2 = a[2]; 394 395 float ret0 = a0[2][0]; 396 float ret1 = a1[0][2]; 397 float ret2 = a2[1][2]; 398 399 out0 = ivec3(ret0, ret1, ret2); 400 ${OUTPUT} 401 } 402 "" 403 end 404 405 case bool_mat3 406 version 300 es 407 values 408 { 409 input bvec3 in0 = [ bvec3(true, false, true) ]; 410 output bvec3 out0 = [ bvec3(true, false, false) ]; 411 } 412 413 both "" 414 #version 300 es 415 precision mediump float; 416 ${DECLARATIONS} 417 418 void main() 419 { 420 ${SETUP} 421 mat3[3] a = mat3[3] ( mat3( in0.x, in0.y, in0.z, 422 in0.x, in0.y, in0.z, 423 in0.x, in0.y, in0.z) , 424 mat3( in0.z, in0.x, in0.y, 425 in0.z, in0.x, in0.y, 426 in0.z, in0.x, in0.y) , 427 mat3( in0.z, in0.z, in0.z, 428 in0.y, in0.y, in0.y, 429 in0.x, in0.x, in0.x) ); 430 431 mat3 a0 = a[0]; 432 mat3 a1 = a[1]; 433 mat3 a2 = a[2]; 434 435 float ret0 = a0[2][0]; 436 float ret1 = a1[0][2]; 437 float ret2 = a2[1][2]; 438 439 out0 = bvec3(ret0, ret1, ret2); 440 ${OUTPUT} 441 } 442 "" 443 end 444 445end # type 446 447group return "Arrays as return value" 448 449 case float 450 version 300 es 451 values 452 { 453 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(7.4, -1.0, 2.0) | vec3(3.0, 1.6, -2.0) ]; 454 output vec3 out0 = [ vec3(2.0, -0.5, 1.0) | vec3(2.0, -7.4, -1.0) | vec3(-2.0, -3.0, 1.6) ]; 455 } 456 457 both "" 458 #version 300 es 459 precision mediump float; 460 ${DECLARATIONS} 461 462 float[3] func(vec3 a) 463 { 464 return float[3] (a.z, -a.x, a.y); 465 } 466 467 void main() 468 { 469 ${SETUP} 470 float[3] x = func(in0); 471 out0 = vec3(x[0], x[1], x[2]); 472 ${OUTPUT} 473 } 474 "" 475 end 476 477 case int 478 version 300 es 479 values 480 { 481 input ivec3 in0 = [ ivec3(4, 1, 2) | ivec3(7, -1, 2) | ivec3(3, 1, -2) ]; 482 output ivec3 out0 = [ ivec3(2, -4, 1) | ivec3(2, -7, -1) | ivec3(-2, -3, 1) ]; 483 } 484 485 both "" 486 #version 300 es 487 precision mediump int; 488 precision mediump float; 489 ${DECLARATIONS} 490 491 int[3] func(ivec3 a) 492 { 493 return int[3] (a.z, -a.x, a.y); 494 } 495 496 void main() 497 { 498 ${SETUP} 499 int[3] x = func(in0); 500 out0 = ivec3(x[0], x[1], x[2]); 501 ${OUTPUT} 502 } 503 "" 504 end 505 506 case bool 507 version 300 es 508 values 509 { 510 input bvec3 in0 = [ bvec3(false, true, true) ]; 511 output bvec3 out0 = [ bvec3(true, false, true) ]; 512 } 513 514 both "" 515 #version 300 es 516 precision mediump float; 517 ${DECLARATIONS} 518 519 bool[3] func(bvec3 a) 520 { 521 return bool[3] (a.z, a.x, a.y); 522 } 523 524 void main() 525 { 526 ${SETUP} 527 bool[3] x = func(in0); 528 out0 = bvec3(x[0], x[1], x[2]); 529 ${OUTPUT} 530 } 531 "" 532 end 533 534 535 536 case float_vec3 537 version 300 es 538 values 539 { 540 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-0.5, 11.2, -1.0) ]; 541 output vec3 out0 = [ vec3(1.0, 0.5, -2.0) | vec3(11.2, -0.5, 1.0) ]; 542 } 543 544 both "" 545 #version 300 es 546 precision mediump float; 547 ${DECLARATIONS} 548 549 vec3[3] func(vec3[3] a) 550 { 551 return vec3[3] (a[1], a[2], a[0]); 552 } 553 554 void main() 555 { 556 ${SETUP} 557 vec3[3] x = vec3[3](vec3(in0.x, in0.y, -in0.z) , 558 vec3(in0.y, -in0.z, in0.x) , 559 vec3(-in0.z, in0.x, in0.y) ); 560 x = func(x); 561 out0 = vec3(x[0].x, x[1].y, x[2].z); 562 ${OUTPUT} 563 } 564 "" 565 end 566 567 case struct 568 version 300 es 569 values 570 { 571 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ]; 572 output vec3 out0 = [ vec3(-1.0, 2.0, 0.5) ]; 573 } 574 575 both "" 576 #version 300 es 577 precision mediump float; 578 ${DECLARATIONS} 579 580 struct test 581 { 582 float f; 583 vec3 v; 584 }; 585 586 test[3] func(test[3] a) 587 { 588 return test[3] (a[1], a[2], a[0]); 589 } 590 591 void main() 592 { 593 ${SETUP} 594 595 test a = test(in0.z, vec3(in0.x, in0.y, in0.z)); 596 test b = test(in0.y, vec3(-in0.z, -in0.x, -in0.y)); 597 test c = test(in0.x, vec3(-in0.y, in0.z, -in0.x)); 598 599 test[3] t = test[3] (a, b, c); 600 test[3] x = func(t); 601 602 out0 = vec3(x[0].v.z, x[1].v.y, x[2].v.x); 603 ${OUTPUT} 604 } 605 "" 606 end 607 608 case int_vec3 609 version 300 es 610 values 611 { 612 input ivec3 in0 = [ ivec3(5, 1, 2) | ivec3(-5, 11, -1) ]; 613 output ivec3 out0 = [ ivec3(1, 5, -2) | ivec3(11, -5, 1) ]; 614 } 615 616 both "" 617 #version 300 es 618 precision mediump int; 619 precision mediump float; 620 ${DECLARATIONS} 621 622 ivec3[3] func(ivec3[3] a) 623 { 624 return ivec3[3] (a[1], a[2], a[0]); 625 } 626 627 void main() 628 { 629 ${SETUP} 630 ivec3[3] x = ivec3[3]( ivec3(in0.x, in0.y, -in0.z) , 631 ivec3(in0.y, -in0.z, in0.x) , 632 ivec3(-in0.z, in0.x, in0.y) ); 633 x = func(x); 634 out0 = ivec3(x[0].x, x[1].y, x[2].z); 635 ${OUTPUT} 636 } 637 "" 638 end 639 640 case bool_vec3 641 version 300 es 642 values 643 { 644 input bvec3 in0 = [ bvec3(true, false, false) ]; 645 output bvec3 out0 = [ bvec3(false, true, false) ]; 646 } 647 648 both "" 649 #version 300 es 650 precision mediump int; 651 precision mediump float; 652 ${DECLARATIONS} 653 654 bvec3[3] func(bvec3[3] a) 655 { 656 return bvec3[3] (a[1], a[2], a[0]); 657 } 658 659 void main() 660 { 661 ${SETUP} 662 bvec3[3] x = bvec3[3]( bvec3(in0.x, in0.y, in0.z) , 663 bvec3(in0.y, in0.z, in0.x) , 664 bvec3(in0.z, in0.x, in0.y) ); 665 x = func(x); 666 out0 = bvec3(x[0].x, x[1].y, x[2].z); 667 ${OUTPUT} 668 } 669 "" 670 end 671 672 case float_mat3 673 version 300 es 674 values 675 { 676 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-1.5, 0.0, -2.3) ]; 677 output vec3 out0 = [ vec3(2.0, -1.0, 2.0) | vec3(-2.3, 0.0, -2.3) ]; 678 } 679 680 both "" 681 #version 300 es 682 precision mediump float; 683 ${DECLARATIONS} 684 685 mat3[3] func(mat3[3] x) 686 { 687 mat3[3] r; 688 r[0] = x[1]; 689 r[1] = x[2]; 690 r[2] = x[0]; 691 return r; 692 } 693 694 void main() 695 { 696 ${SETUP} 697 mat3[3] a, b; 698 a[0] = mat3(in0.x, in0.y, in0.z, 699 in0.x, in0.y, in0.z, 700 in0.x, in0.y, in0.z); 701 a[1] = mat3(in0.z, in0.x, -in0.y, 702 in0.z, in0.x, -in0.y, 703 in0.z, in0.x, -in0.y); 704 a[2] = mat3(-in0.z, -in0.z, in0.z, 705 -in0.y, -in0.y, in0.y, 706 -in0.x, -in0.x, in0.x); 707 708 b = func(a); 709 710 mat3 b0 = b[0]; 711 mat3 b1 = b[1]; 712 mat3 b2 = b[2]; 713 714 float ret0 = b0[0][0]; 715 float ret1 = b1[1][1]; 716 float ret2 = b2[2][2]; 717 718 out0 = vec3(ret0, ret1, ret2); 719 ${OUTPUT} 720 } 721 "" 722 end 723 724 case int_mat3 725 version 300 es 726 values 727 { 728 input ivec3 in0 = [ ivec3(5, 1, 2) | ivec3(-1, 0, -2) ]; 729 output ivec3 out0 = [ ivec3(2, -1, 2) | ivec3(-2, 0, -2) ]; 730 } 731 732 both "" 733 #version 300 es 734 precision mediump int; 735 precision mediump float; 736 ${DECLARATIONS} 737 738 mat3[3] func(mat3[3] x) 739 { 740 mat3[3] r; 741 r[0] = x[1]; 742 r[1] = x[2]; 743 r[2] = x[0]; 744 return r; 745 } 746 747 void main() 748 { 749 ${SETUP} 750 mat3[3] a, b; 751 a[0] = mat3(in0.x, in0.y, in0.z, 752 in0.x, in0.y, in0.z, 753 in0.x, in0.y, in0.z); 754 a[1] = mat3(in0.z, in0.x, -in0.y, 755 in0.z, in0.x, -in0.y, 756 in0.z, in0.x, -in0.y); 757 a[2] = mat3(-in0.z, -in0.z, in0.z, 758 -in0.y, -in0.y, in0.y, 759 -in0.x, -in0.x, in0.x); 760 761 b = func(a); 762 763 mat3 b0 = b[0]; 764 mat3 b1 = b[1]; 765 mat3 b2 = b[2]; 766 767 float ret0 = b0[0][0]; 768 float ret1 = b1[1][1]; 769 float ret2 = b2[2][2]; 770 771 out0 = ivec3(ret0, ret1, ret2); 772 ${OUTPUT} 773 } 774 "" 775 end 776 777 case bool_mat3 778 version 300 es 779 values 780 { 781 input bvec3 in0 = [ bvec3(true, false, true) | bvec3(true, true, false) ]; 782 output bvec3 out0 = [ bvec3(true, false, true) | bvec3(false, true, false) ]; 783 } 784 785 both "" 786 #version 300 es 787 precision mediump float; 788 ${DECLARATIONS} 789 790 mat3[3] func(mat3[3] x) 791 { 792 mat3[3] r; 793 r[0] = x[1]; 794 r[1] = x[2]; 795 r[2] = x[0]; 796 return r; 797 } 798 799 void main() 800 { 801 ${SETUP} 802 mat3[3] a, b; 803 a[0] = mat3(in0.x, in0.y, in0.z, 804 in0.x, in0.y, in0.z, 805 in0.x, in0.y, in0.z); 806 a[1] = mat3(in0.z, in0.x, in0.y, 807 in0.z, in0.x, in0.y, 808 in0.z, in0.x, in0.y); 809 a[2] = mat3(in0.z, in0.z, in0.z, 810 in0.y, in0.y, in0.y, 811 in0.x, in0.x, in0.x); 812 813 b = func(a); 814 815 mat3 b0 = b[0]; 816 mat3 b1 = b[1]; 817 mat3 b2 = b[2]; 818 819 float ret0 = b0[0][0]; 820 float ret1 = b1[1][1]; 821 float ret2 = b2[2][2]; 822 823 out0 = bvec3(ret0, ret1, ret2); 824 ${OUTPUT} 825 } 826 "" 827 end 828 829end # return 830 831group unnamed_parameter "Array type as unnamed parameter of a function prototype" 832 833 case float 834 version 300 es 835 values 836 { 837 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(7.4, -1.0, 2.0) | vec3(3.0, 1.6, -2.0) ]; 838 output vec3 out0 = [ vec3(2.0, 0.5, 1.0) | vec3(2.0, 7.4, -1.0) | vec3(-2.0, 3.0, 1.6) ]; 839 } 840 841 both "" 842 #version 300 es 843 precision mediump float; 844 ${DECLARATIONS} 845 846 float[3] func(float[3]); 847 848 void main() 849 { 850 ${SETUP} 851 float[3] a = float[3] (in0.x, in0.y, in0.z); 852 float[3] b = func(a); 853 out0 = vec3(b[0], b[1], b[2]); 854 ${OUTPUT} 855 } 856 857 float[3] func(float[3] a) 858 { 859 return float[3] (a[2], a[0], a[1]); 860 } 861 862 "" 863 end 864 865 case int 866 version 300 es 867 values 868 { 869 input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(7, -1, 2) | ivec3(3, 1, -2) ]; 870 output ivec3 out0 = [ ivec3(2, 0, 1) | ivec3(2, 7, -1) | ivec3(-2, 3, 1) ]; 871 } 872 873 both "" 874 #version 300 es 875 precision mediump int; 876 precision mediump float; 877 ${DECLARATIONS} 878 879 int[3] func(int[3]); 880 881 void main() 882 { 883 ${SETUP} 884 int[3] a = int[3] (in0.x, in0.y, in0.z); 885 int[3] b = func(a); 886 out0 = ivec3(b[0], b[1], b[2]); 887 ${OUTPUT} 888 } 889 890 int[3] func(int[3] a) 891 { 892 return int[3] (a[2], a[0], a[1]); 893 } 894 895 "" 896 end 897 898 case bool 899 version 300 es 900 values 901 { 902 input bvec3 in0 = [ bvec3(false, true, true) ]; 903 output bvec3 out0 = [ bvec3(true, false, true) ]; 904 } 905 906 both "" 907 #version 300 es 908 precision mediump float; 909 ${DECLARATIONS} 910 911 bool[3] func(bool[3]); 912 913 void main() 914 { 915 ${SETUP} 916 bool[3] a = bool[3] (in0.x, in0.y, in0.z); 917 bool[3] b = func(a); 918 out0 = bvec3(b[0], b[1], b[2]); 919 ${OUTPUT} 920 } 921 922 bool[3] func(bool[3] a) 923 { 924 return bool[3] (a[2], a[0], a[1]); 925 } 926 927 "" 928 end 929 930 case struct 931 version 300 es 932 values 933 { 934 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ]; 935 output vec3 out0 = [ vec3(-1.0, 2.0, 0.5) ]; 936 } 937 938 both "" 939 #version 300 es 940 precision mediump float; 941 ${DECLARATIONS} 942 943 struct test 944 { 945 float f; 946 vec3 v; 947 }; 948 949 test[3] func(test[3]); 950 951 void main() 952 { 953 ${SETUP} 954 955 test a = test(in0.z, vec3(in0.x, in0.y, in0.z)); 956 test b = test(in0.y, vec3(-in0.z, -in0.x, -in0.y)); 957 test c = test(in0.x, vec3(-in0.y, in0.z, -in0.x)); 958 959 test[3] t = test[3] (a, b, c); 960 test[3] x = func(t); 961 out0 = vec3(x[0].v.z, x[1].v.y, x[2].v.x); 962 ${OUTPUT} 963 } 964 965 test[3] func(test[3] a) 966 { 967 return test[3] (a[1], a[2], a[0]); 968 } 969 970 "" 971 end 972 973 case float_vec3 974 version 300 es 975 values 976 { 977 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-0.5, 11.2, -1.0) ]; 978 output vec3 out0 = [ vec3(1.0, 0.5, -2.0) | vec3(11.2, -0.5, 1.0) ]; 979 } 980 981 both "" 982 #version 300 es 983 precision mediump float; 984 ${DECLARATIONS} 985 986 vec3[3] func(vec3[3]); 987 988 void main() 989 { 990 ${SETUP} 991 vec3[3] x = vec3[3](vec3(in0.x, in0.y, -in0.z) , 992 vec3(in0.y, -in0.z, in0.x) , 993 vec3(-in0.z, in0.x, in0.y) ); 994 x = func(x); 995 out0 = vec3(x[0].x, x[1].y, x[2].z); 996 ${OUTPUT} 997 } 998 999 vec3[3] func(vec3[3] a) 1000 { 1001 return vec3[3] (a[1], a[2], a[0]); 1002 } 1003 "" 1004 end 1005 1006 case int_vec3 1007 version 300 es 1008 values 1009 { 1010 input ivec3 in0 = [ ivec3(5, 1, 2) | ivec3(-5, 11, -1) ]; 1011 output ivec3 out0 = [ ivec3(1, 5, -2) | ivec3(11, -5, 1) ]; 1012 } 1013 1014 both "" 1015 #version 300 es 1016 precision mediump int; 1017 precision mediump float; 1018 ${DECLARATIONS} 1019 1020 ivec3[3] func(ivec3[3]); 1021 1022 void main() 1023 { 1024 ${SETUP} 1025 ivec3[3] x = ivec3[3]( ivec3(in0.x, in0.y, -in0.z) , 1026 ivec3(in0.y, -in0.z, in0.x) , 1027 ivec3(-in0.z, in0.x, in0.y) ); 1028 x = func(x); 1029 out0 = ivec3(x[0].x, x[1].y, x[2].z); 1030 ${OUTPUT} 1031 } 1032 1033 ivec3[3] func(ivec3[3] a) 1034 { 1035 return ivec3[3] (a[1], a[2], a[0]); 1036 } 1037 "" 1038 end 1039 1040 case bool_vec3 1041 version 300 es 1042 values 1043 { 1044 input bvec3 in0 = [ bvec3(true, false, false) ]; 1045 output bvec3 out0 = [ bvec3(false, true, false) ]; 1046 } 1047 1048 both "" 1049 #version 300 es 1050 precision mediump int; 1051 precision mediump float; 1052 ${DECLARATIONS} 1053 1054 bvec3[3] func(bvec3[3]); 1055 1056 void main() 1057 { 1058 ${SETUP} 1059 bvec3[3] x = bvec3[3]( bvec3(in0.x, in0.y, in0.z) , 1060 bvec3(in0.y, in0.z, in0.x) , 1061 bvec3(in0.z, in0.x, in0.y) ); 1062 x = func(x); 1063 out0 = bvec3(x[0].x, x[1].y, x[2].z); 1064 ${OUTPUT} 1065 } 1066 1067 bvec3[3] func(bvec3[3] a) 1068 { 1069 return bvec3[3] (a[1], a[2], a[0]); 1070 } 1071 1072 "" 1073 end 1074 1075 case float_mat3 1076 version 300 es 1077 values 1078 { 1079 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-1.5, 0.0, -2.3) ]; 1080 output vec3 out0 = [ vec3(2.0, -1.0, 2.0) | vec3(-2.3, 0.0, -2.3) ]; 1081 } 1082 1083 both "" 1084 #version 300 es 1085 precision mediump float; 1086 ${DECLARATIONS} 1087 1088 mat3[3] func(mat3[3]); 1089 1090 void main() 1091 { 1092 ${SETUP} 1093 mat3[3] a, b; 1094 a[0] = mat3(in0.x, in0.y, in0.z, 1095 in0.x, in0.y, in0.z, 1096 in0.x, in0.y, in0.z); 1097 a[1] = mat3(in0.z, in0.x, -in0.y, 1098 in0.z, in0.x, -in0.y, 1099 in0.z, in0.x, -in0.y); 1100 a[2] = mat3(-in0.z, -in0.z, in0.z, 1101 -in0.y, -in0.y, in0.y, 1102 -in0.x, -in0.x, in0.x); 1103 1104 b = func(a); 1105 1106 mat3 b0 = b[0]; 1107 mat3 b1 = b[1]; 1108 mat3 b2 = b[2]; 1109 1110 float ret0 = b0[0][0]; 1111 float ret1 = b1[1][1]; 1112 float ret2 = b2[2][2]; 1113 1114 out0 = vec3(ret0, ret1, ret2); 1115 ${OUTPUT} 1116 } 1117 1118 mat3[3] func(mat3[3] x) 1119 { 1120 mat3[3] r; 1121 r[0] = x[1]; 1122 r[1] = x[2]; 1123 r[2] = x[0]; 1124 return r; 1125 } 1126 "" 1127 end 1128 1129 case int_mat3 1130 version 300 es 1131 values 1132 { 1133 input ivec3 in0 = [ ivec3(5, 1, 2) | ivec3(-1, 0, -2) ]; 1134 output ivec3 out0 = [ ivec3(2, -1, 2) | ivec3(-2, 0, -2) ]; 1135 } 1136 1137 both "" 1138 #version 300 es 1139 precision mediump int; 1140 precision mediump float; 1141 ${DECLARATIONS} 1142 1143 mat3[3] func(mat3[3]); 1144 1145 void main() 1146 { 1147 ${SETUP} 1148 mat3[3] a, b; 1149 a[0] = mat3(in0.x, in0.y, in0.z, 1150 in0.x, in0.y, in0.z, 1151 in0.x, in0.y, in0.z); 1152 a[1] = mat3(in0.z, in0.x, -in0.y, 1153 in0.z, in0.x, -in0.y, 1154 in0.z, in0.x, -in0.y); 1155 a[2] = mat3(-in0.z, -in0.z, in0.z, 1156 -in0.y, -in0.y, in0.y, 1157 -in0.x, -in0.x, in0.x); 1158 1159 b = func(a); 1160 1161 mat3 b0 = b[0]; 1162 mat3 b1 = b[1]; 1163 mat3 b2 = b[2]; 1164 1165 float ret0 = b0[0][0]; 1166 float ret1 = b1[1][1]; 1167 float ret2 = b2[2][2]; 1168 1169 out0 = ivec3(ret0, ret1, ret2); 1170 ${OUTPUT} 1171 } 1172 1173 mat3[3] func(mat3[3] x) 1174 { 1175 mat3[3] r; 1176 r[0] = x[1]; 1177 r[1] = x[2]; 1178 r[2] = x[0]; 1179 return r; 1180 } 1181 "" 1182 end 1183 1184 case bool_mat3 1185 version 300 es 1186 values 1187 { 1188 input bvec3 in0 = [ bvec3(true, false, true) | bvec3(true, true, false) ]; 1189 output bvec3 out0 = [ bvec3(true, false, true) | bvec3(false, true, false) ]; 1190 } 1191 1192 both "" 1193 #version 300 es 1194 precision mediump float; 1195 ${DECLARATIONS} 1196 1197 mat3[3] func(mat3[3]); 1198 void main() 1199 { 1200 ${SETUP} 1201 mat3[3] a, b; 1202 a[0] = mat3(in0.x, in0.y, in0.z, 1203 in0.x, in0.y, in0.z, 1204 in0.x, in0.y, in0.z); 1205 a[1] = mat3(in0.z, in0.x, in0.y, 1206 in0.z, in0.x, in0.y, 1207 in0.z, in0.x, in0.y); 1208 a[2] = mat3(in0.z, in0.z, in0.z, 1209 in0.y, in0.y, in0.y, 1210 in0.x, in0.x, in0.x); 1211 1212 b = func(a); 1213 1214 mat3 b0 = b[0]; 1215 mat3 b1 = b[1]; 1216 mat3 b2 = b[2]; 1217 1218 float ret0 = b0[0][0]; 1219 float ret1 = b1[1][1]; 1220 float ret2 = b2[2][2]; 1221 1222 out0 = bvec3(ret0, ret1, ret2); 1223 ${OUTPUT} 1224 } 1225 1226 mat3[3] func(mat3[3] x) 1227 { 1228 mat3[3] r; 1229 r[0] = x[1]; 1230 r[1] = x[2]; 1231 r[2] = x[0]; 1232 return r; 1233 } 1234 "" 1235 end 1236 1237end # unnamed_parameter 1238 1239group declaration "Declaring arrays" 1240 1241 case implicit_size_float 1242 version 300 es 1243 values 1244 { 1245 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(7.4, -1.0, 2.0) | vec3(3.0, 1.6, -2.0) ]; 1246 output vec3 out0 = [ vec3(2.0, 0.5, 1.0) | vec3(2.0, 7.4, -1.0) | vec3(-2.0, 3.0, 1.6) ]; 1247 } 1248 1249 both "" 1250 #version 300 es 1251 precision mediump float; 1252 ${DECLARATIONS} 1253 1254 void main() 1255 { 1256 ${SETUP} 1257 float[] x = float[] (in0.z, in0.x, in0.y); 1258 float[] y = x; 1259 1260 out0 = vec3(y[0], y[1], y[2]); 1261 ${OUTPUT} 1262 } 1263 "" 1264 end 1265 1266 case implicit_size_int 1267 version 300 es 1268 values 1269 { 1270 input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(7, -1, 2) | ivec3(3, 1, -2) ]; 1271 output ivec3 out0 = [ ivec3(2, 0, 1) | ivec3(2, 7, -1) | ivec3(-2, 3, 1) ]; 1272 } 1273 1274 both "" 1275 #version 300 es 1276 precision mediump int; 1277 precision mediump float; 1278 ${DECLARATIONS} 1279 1280 void main() 1281 { 1282 ${SETUP} 1283 int[] x = int[] (in0.z, in0.x, in0.y); 1284 int[] y = x; 1285 1286 out0 = ivec3(y[0], y[1], y[2]); 1287 ${OUTPUT} 1288 } 1289 "" 1290 end 1291 1292 case implicit_size_bool 1293 version 300 es 1294 values 1295 { 1296 input bvec3 in0 = [ bvec3(false, true, true) ]; 1297 output bvec3 out0 = [ bvec3(true, false, true) ]; 1298 } 1299 1300 both "" 1301 #version 300 es 1302 precision mediump float; 1303 ${DECLARATIONS} 1304 1305 void main() 1306 { 1307 ${SETUP} 1308 bool[] x = bool[] (in0.z, in0.x, in0.y); 1309 bool[] y = x; 1310 1311 out0 = bvec3(y[0], y[1], y[2]); 1312 ${OUTPUT} 1313 } 1314 "" 1315 end 1316 1317 case implicit_size_struct 1318 version 300 es 1319 values 1320 { 1321 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ]; 1322 output vec3 out0 = [ vec3(-1.0, -0.5, 2.0) ]; 1323 } 1324 1325 both "" 1326 #version 300 es 1327 precision mediump float; 1328 ${DECLARATIONS} 1329 1330 struct test 1331 { 1332 float f; 1333 vec3 v; 1334 }; 1335 1336 void main() 1337 { 1338 ${SETUP} 1339 1340 test a = test(in0.z, vec3(in0.x, in0.y, in0.z)); 1341 test b = test(in0.y, vec3(-in0.z, -in0.x, -in0.y)); 1342 test c = test(in0.x, vec3(-in0.y, in0.z, -in0.x)); 1343 1344 test[] x = test[] (c, b, a); 1345 test[] y = x; 1346 1347 out0 = vec3(y[0].v.x, y[1].v.y, y[2].v.z); 1348 ${OUTPUT} 1349 } 1350 "" 1351 end 1352 1353 case implicit_size_float_vec3 1354 version 300 es 1355 values 1356 { 1357 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-0.5, 11.2, -1.0) ]; 1358 output vec3 out0 = [ vec3(0.5, -2.0, 1.0) | vec3(-0.5, 1.0, 11.2) ]; 1359 } 1360 1361 both "" 1362 #version 300 es 1363 precision mediump float; 1364 ${DECLARATIONS} 1365 1366 void main() 1367 { 1368 ${SETUP} 1369 vec3[] x = vec3[] ( vec3(in0.x, in0.y, -in0.z) , 1370 vec3(in0.y, -in0.z, in0.x) , 1371 vec3(-in0.z, in0.x, in0.y) ); 1372 vec3[] y = x; 1373 out0 = vec3(y[0].x, y[1].y, y[2].z); 1374 ${OUTPUT} 1375 } 1376 "" 1377 end 1378 1379 case implicit_size_int_ivec3 1380 version 300 es 1381 values 1382 { 1383 input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(5, 11, -1) ]; 1384 output ivec3 out0 = [ ivec3(0, -2, 1) | ivec3(5, 1, 11) ]; 1385 } 1386 1387 both "" 1388 #version 300 es 1389 precision mediump int; 1390 precision mediump float; 1391 ${DECLARATIONS} 1392 1393 void main() 1394 { 1395 ${SETUP} 1396 ivec3[] x = ivec3[] ( ivec3(in0.x, in0.y, -in0.z) , 1397 ivec3(in0.y, -in0.z, in0.x) , 1398 ivec3(-in0.z, in0.x, in0.y) ); 1399 ivec3[] y = x; 1400 out0 = ivec3(y[0].x, y[1].y, y[2].z); 1401 ${OUTPUT} 1402 } 1403 "" 1404 end 1405 1406 case implicit_size_bool_bvec3 1407 version 300 es 1408 values 1409 { 1410 input bvec3 in0 = [ bvec3(true, false, true) ]; 1411 output bvec3 out0 = [ bvec3(true, true, false) ]; 1412 } 1413 1414 both "" 1415 #version 300 es 1416 precision mediump float; 1417 ${DECLARATIONS} 1418 1419 void main() 1420 { 1421 ${SETUP} 1422 bvec3[] x = bvec3[] ( bvec3(in0.x, in0.y, in0.z) , 1423 bvec3(in0.y, in0.z, in0.x) , 1424 bvec3(in0.z, in0.x, in0.y) ); 1425 bvec3[] y = x; 1426 out0 = bvec3(y[0].x, y[1].y, y[2].z); 1427 ${OUTPUT} 1428 } 1429 "" 1430 end 1431 1432 case implicit_size_float_mat3 1433 version 300 es 1434 values 1435 { 1436 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-1.5, 0.0, -2.3) ]; 1437 output vec3 out0 = [ vec3(0.5, -1.0, 1.0) | vec3(-1.5, 0.0, 0.0) ]; 1438 } 1439 1440 both "" 1441 #version 300 es 1442 precision mediump float; 1443 ${DECLARATIONS} 1444 1445 void main() 1446 { 1447 ${SETUP} 1448 mat3[] a = mat3[] ( mat3( in0.x, in0.y, in0.z, 1449 in0.x, in0.y, in0.z, 1450 in0.x, in0.y, in0.z) , 1451 mat3( in0.z, in0.x, -in0.y, 1452 in0.z, in0.x, -in0.y, 1453 in0.z, in0.x, -in0.y) , 1454 mat3( -in0.z, -in0.z, in0.z, 1455 -in0.y, -in0.y, in0.y, 1456 -in0.x, -in0.x, in0.x) ); 1457 1458 mat3 a0 = a[0]; 1459 mat3 a1 = a[1]; 1460 mat3 a2 = a[2]; 1461 1462 float ret0 = a0[2][0]; 1463 float ret1 = a1[0][2]; 1464 float ret2 = a2[1][2]; 1465 1466 out0 = vec3(ret0, ret1, ret2); 1467 ${OUTPUT} 1468 } 1469 "" 1470 end 1471 1472 case implicit_size_int_mat3 1473 version 300 es 1474 values 1475 { 1476 input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(-1, 0, -2) ]; 1477 output ivec3 out0 = [ ivec3(0, -1, 1) | ivec3(-1, 0, 0) ]; 1478 } 1479 1480 both "" 1481 #version 300 es 1482 precision mediump int; 1483 precision mediump float; 1484 ${DECLARATIONS} 1485 1486 void main() 1487 { 1488 ${SETUP} 1489 mat3[] a = mat3[] ( mat3( in0.x, in0.y, in0.z, 1490 in0.x, in0.y, in0.z, 1491 in0.x, in0.y, in0.z) , 1492 mat3( in0.z, in0.x, -in0.y, 1493 in0.z, in0.x, -in0.y, 1494 in0.z, in0.x, -in0.y) , 1495 mat3( -in0.z, -in0.z, in0.z, 1496 -in0.y, -in0.y, in0.y, 1497 -in0.x, -in0.x, in0.x) ); 1498 1499 mat3 a0 = a[0]; 1500 mat3 a1 = a[1]; 1501 mat3 a2 = a[2]; 1502 1503 float ret0 = a0[2][0]; 1504 float ret1 = a1[0][2]; 1505 float ret2 = a2[1][2]; 1506 1507 out0 = ivec3(ret0, ret1, ret2); 1508 ${OUTPUT} 1509 } 1510 "" 1511 end 1512 1513 case implicit_size_bool_mat3 1514 version 300 es 1515 values 1516 { 1517 input bvec3 in0 = [ bvec3(true, false, true) ]; 1518 output bvec3 out0 = [ bvec3(true, false, false) ]; 1519 } 1520 1521 both "" 1522 #version 300 es 1523 precision mediump float; 1524 ${DECLARATIONS} 1525 1526 void main() 1527 { 1528 ${SETUP} 1529 mat3[] a = mat3[] ( mat3( in0.x, in0.y, in0.z, 1530 in0.x, in0.y, in0.z, 1531 in0.x, in0.y, in0.z) , 1532 mat3( in0.z, in0.x, in0.y, 1533 in0.z, in0.x, in0.y, 1534 in0.z, in0.x, in0.y) , 1535 mat3( in0.z, in0.z, in0.z, 1536 in0.y, in0.y, in0.y, 1537 in0.x, in0.x, in0.x) ); 1538 1539 mat3 a0 = a[0]; 1540 mat3 a1 = a[1]; 1541 mat3 a2 = a[2]; 1542 1543 float ret0 = a0[2][0]; 1544 float ret1 = a1[0][2]; 1545 float ret2 = a2[1][2]; 1546 1547 out0 = bvec3(ret0, ret1, ret2); 1548 ${OUTPUT} 1549 } 1550 "" 1551 end 1552 1553 1554 case constant_expression_array_size 1555 version 300 es 1556 1557 both "" 1558 #version 300 es 1559 precision mediump float; 1560 ${DECLARATIONS} 1561 1562 const int a = 4; 1563 1564 void main () 1565 { 1566 const int b = 5; 1567 float[a] array1; 1568 float[b] array2; 1569 float[array1.length()] array3; 1570 float[a+b] array4; 1571 ${OUTPUT} 1572 } 1573 "" 1574 end 1575 1576 case constant_expression_array_access 1577 version 300 es 1578 values 1579 { 1580 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ]; 1581 output vec3 out0 = [ vec3(-2.0, -1.0, -0.5) ]; 1582 } 1583 1584 both "" 1585 #version 300 es 1586 precision mediump float; 1587 ${DECLARATIONS} 1588 1589 const int a = 3; 1590 1591 void main () 1592 { 1593 ${SETUP} 1594 const int b = 2; 1595 float x = float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x) [a]; 1596 float y = float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x) [b+2]; 1597 float z = float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x) [5]; 1598 out0 = vec3(x, y, z); 1599 ${OUTPUT} 1600 } 1601 "" 1602 end 1603 1604 case dynamic_expression_array_access 1605 version 300 es 1606 values 1607 { 1608 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ]; 1609 input ivec2 in1 = ivec2(3, 2); 1610 output vec3 out0 = [ vec3(-2.0, -1.0, -0.5) ]; 1611 } 1612 1613 both "" 1614 #version 300 es 1615 precision mediump float; 1616 ${DECLARATIONS} 1617 1618 void main () 1619 { 1620 ${SETUP} 1621 float x = float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x) [in1.x]; 1622 float y = float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x) [in1.y+2]; 1623 float z = float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x) [in1.x+in1.y]; 1624 out0 = vec3(x, y, z); 1625 ${OUTPUT} 1626 } 1627 "" 1628 end 1629 1630 case multiple_declarations_single_statement_explicit 1631 version 300 es 1632 values 1633 { 1634 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ]; 1635 output vec3 out0 = [ vec3(2.0, -1.0, 0.5) ]; 1636 } 1637 1638 both "" 1639 #version 300 es 1640 precision mediump float; 1641 ${DECLARATIONS} 1642 1643 void main () 1644 { 1645 ${SETUP} 1646 float[] x = float[6] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x), 1647 y = float[2] (in0.x, -in0.y); 1648 out0 = vec3(x[2], y[1], x[0]); 1649 ${OUTPUT} 1650 } 1651 "" 1652 end 1653 1654 case multiple_declarations_single_statement_implicit 1655 version 300 es 1656 values 1657 { 1658 input ivec3 in0 = [ ivec3(5, 1, 2) ]; 1659 output ivec3 out0 = [ ivec3(2, -1, 5) ]; 1660 } 1661 1662 both "" 1663 #version 300 es 1664 precision mediump float; 1665 ${DECLARATIONS} 1666 1667 void main () 1668 { 1669 ${SETUP} 1670 int[] x = int[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x), 1671 y = int[] (in0.x, -in0.y); 1672 out0 = ivec3(x[2], y[1], x[0]); 1673 ${OUTPUT} 1674 } 1675 "" 1676 end 1677 1678end # declaration 1679 1680group length "Array length method" 1681 1682 case float 1683 version 300 es 1684 values 1685 { 1686 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ]; 1687 output ivec3 out0 = [ ivec3(3, 5, 13) ]; 1688 } 1689 1690 both "" 1691 #version 300 es 1692 precision mediump float; 1693 ${DECLARATIONS} 1694 1695 void main() 1696 { 1697 ${SETUP} 1698 float[] x = float[3] (in0.z, in0.x, in0.y); 1699 float[] y = float[] (in0.z, in0.x, in0.y, in0.x, in0.y); 1700 float[13] z; 1701 1702 out0 = ivec3(x.length(), y.length(), z.length()); 1703 ${OUTPUT} 1704 } 1705 "" 1706 end 1707 1708 case int 1709 version 300 es 1710 values 1711 { 1712 input ivec3 in0 = [ ivec3(0, 1, 2) ]; 1713 output ivec3 out0 = [ ivec3(3, 5, 13) ]; 1714 } 1715 1716 both "" 1717 #version 300 es 1718 precision mediump int; 1719 precision mediump float; 1720 ${DECLARATIONS} 1721 1722 void main() 1723 { 1724 ${SETUP} 1725 int[] x = int[3] (in0.z, in0.x, in0.y); 1726 int[] y = int[] (in0.z, in0.x, in0.y, in0.x, in0.y); 1727 int[13] z; 1728 1729 out0 = ivec3(x.length(), y.length(), z.length()); 1730 ${OUTPUT} 1731 } 1732 "" 1733 end 1734 1735 case bool 1736 version 300 es 1737 values 1738 { 1739 input bvec3 in0 = [ bvec3(true, false, true) ]; 1740 output ivec3 out0 = [ ivec3(3, 5, 13) ]; 1741 } 1742 1743 both "" 1744 #version 300 es 1745 precision mediump float; 1746 ${DECLARATIONS} 1747 1748 void main() 1749 { 1750 ${SETUP} 1751 bool[] x = bool[3] (in0.z, in0.x, in0.y); 1752 bool[] y = bool[] (in0.z, in0.x, in0.y, in0.x, in0.y); 1753 bool[13] z; 1754 1755 out0 = ivec3(x.length(), y.length(), z.length()); 1756 ${OUTPUT} 1757 } 1758 "" 1759 end 1760 1761 case struct 1762 version 300 es 1763 values 1764 { 1765 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ]; 1766 output ivec3 out0 = [ ivec3(3, 5, 13) ]; 1767 } 1768 1769 both "" 1770 #version 300 es 1771 precision mediump float; 1772 ${DECLARATIONS} 1773 1774 struct test 1775 { 1776 float f; 1777 vec3 v; 1778 }; 1779 1780 void main() 1781 { 1782 ${SETUP} 1783 1784 test a = test(in0.z, vec3(in0.x, in0.y, in0.z)); 1785 test b = test(in0.y, vec3(-in0.z, -in0.x, -in0.y)); 1786 test c = test(in0.x, vec3(-in0.y, in0.z, -in0.x)); 1787 1788 test[] x = test[3] (a, b, c); 1789 test[] y = test[] (c, a, b, b, a); 1790 test[13] z; 1791 1792 out0 = ivec3(x.length(), y.length(), z.length()); 1793 ${OUTPUT} 1794 } 1795 "" 1796 end 1797 1798end # length 1799 1800group invalid "Invalid Functions" 1801 1802 case multidimensional_array1 1803 version 300 es 1804 expect compile_fail 1805 1806 both "" 1807 #version 300 es 1808 precision mediump float; 1809 ${DECLARATIONS} 1810 1811 void main () 1812 { 1813 float a[5][3]; 1814 ${POSITION_FRAG_COLOR} = vec4(1.0); 1815 } 1816 "" 1817 end 1818 1819 case multidimensional_array2 1820 version 300 es 1821 expect compile_fail 1822 1823 both "" 1824 #version 300 es 1825 precision mediump float; 1826 ${DECLARATIONS} 1827 1828 void main () 1829 { 1830 float[5] a[3]; 1831 ${POSITION_FRAG_COLOR} = vec4(1.0); 1832 } 1833 "" 1834 end 1835 1836 case multidimensional_uniform_array 1837 version 300 es 1838 expect compile_fail 1839 1840 both "" 1841 #version 300 es 1842 precision mediump float; 1843 ${DECLARATIONS} 1844 uniform float a[3][2]; 1845 1846 void main () 1847 { 1848 ${POSITION_FRAG_COLOR} = vec4(1.0); 1849 } 1850 "" 1851 end 1852 1853 case multidimensional_array_in_uniform_block 1854 version 300 es 1855 expect compile_fail 1856 1857 both "" 1858 #version 300 es 1859 precision mediump float; 1860 ${DECLARATIONS} 1861 uniform MyBlock 1862 { 1863 float a[3][2]; 1864 }; 1865 1866 void main () 1867 { 1868 ${POSITION_FRAG_COLOR} = vec4(1.0); 1869 } 1870 "" 1871 end 1872 1873 case dynamic_expression_array_size 1874 version 300 es 1875 expect compile_fail 1876 1877 both "" 1878 #version 300 es 1879 precision mediump float; 1880 ${DECLARATIONS} 1881 1882 void main () 1883 { 1884 int a = 5; 1885 float[a] array; 1886 ${POSITION_FRAG_COLOR} = vec4(1.0); 1887 } 1888 "" 1889 end 1890 1891 case empty_declaration_without_var_name 1892 version 300 es 1893 expect compile_or_link_fail 1894 1895 both "" 1896 #version 300 es 1897 precision mediump float; 1898 ${DECLARATIONS} 1899 1900 void main () 1901 { 1902 int[]; 1903 ${POSITION_FRAG_COLOR} = vec4(1.0); 1904 } 1905 "" 1906 end 1907 1908 case empty_declaration_with_var_name 1909 version 300 es 1910 expect compile_or_link_fail 1911 1912 both "" 1913 #version 300 es 1914 precision mediump float; 1915 ${DECLARATIONS} 1916 1917 void main () 1918 { 1919 int[] a; 1920 ${POSITION_FRAG_COLOR} = vec4(1.0); 1921 } 1922 "" 1923 end 1924 1925 case constructor_c_style1 1926 version 300 es 1927 expect compile_fail 1928 1929 both "" 1930 #version 300 es 1931 precision mediump float; 1932 ${DECLARATIONS} 1933 1934 void main () 1935 { 1936 float a[]; 1937 a = float[3] { 1.0, 2.0, 3.0 }; 1938 1939 ${POSITION_FRAG_COLOR} = vec4(1.0); 1940 } 1941 "" 1942 end 1943 1944 case constructor_c_style2 1945 version 300 es 1946 expect compile_fail 1947 1948 both "" 1949 #version 300 es 1950 precision mediump float; 1951 ${DECLARATIONS} 1952 1953 void main () 1954 { 1955 float a[5] = { 1.0, 2.0, 3.0 }; 1956 1957 ${POSITION_FRAG_COLOR} = vec4(1.0); 1958 } 1959 "" 1960 end 1961 1962 case constructor_c_style3 1963 version 300 es 1964 expect compile_fail 1965 1966 both "" 1967 #version 300 es 1968 precision mediump float; 1969 ${DECLARATIONS} 1970 1971 void main () 1972 { 1973 float a[] = float[3] { 1.0, 2.0, 3.0 }; 1974 1975 ${POSITION_FRAG_COLOR} = vec4(1.0); 1976 } 1977 "" 1978 end 1979 1980 case constructor_c_style4 1981 version 300 es 1982 expect compile_fail 1983 1984 both "" 1985 #version 300 es 1986 precision mediump float; 1987 ${DECLARATIONS} 1988 1989 void main () 1990 { 1991 float a[3] = { 1.0, 2.0, 3.0 }; 1992 1993 ${POSITION_FRAG_COLOR} = vec4(1.0); 1994 } 1995 "" 1996 end 1997 1998end # invalid 1999 2000# https://github.com/KhronosGroup/WebGL/blob/main/sdk/tests/conformance2/glsl3/array-in-complex-expression.html 2001group complex_expression "Arrays in complex expressions" 2002 2003 case and_short_circuits 2004 version 300 es 2005 values 2006 { 2007 output int g = -1; 2008 } 2009 2010 both "" 2011 #version 300 es 2012 precision mediump float; 2013 ${DECLARATIONS} 2014 2015 int[2] plus() { 2016 ++g; 2017 return int[2](g, g); 2018 } 2019 2020 bool minus() { 2021 --g; 2022 return false; 2023 } 2024 2025 void main() { 2026 ${SETUP} 2027 g = 0; 2028 int a[2] = int[2](0, 0); 2029 // The plus() call must not be evaluated, since && short-circuits 2030 minus() && (a == plus()); 2031 ${OUTPUT} 2032 } 2033 "" 2034 end 2035 2036 case or_short_circuits 2037 version 300 es 2038 values 2039 { 2040 output int g = -1; 2041 } 2042 2043 both "" 2044 #version 300 es 2045 precision mediump float; 2046 ${DECLARATIONS} 2047 2048 int[2] plus() { 2049 ++g; 2050 return int[2](g, g); 2051 } 2052 2053 bool minus() { 2054 --g; 2055 return false; 2056 } 2057 2058 void main() { 2059 ${SETUP} 2060 g = 0; 2061 int a[2] = int[2](0, 0); 2062 // The function call must not be evaluated, since && short-circuits 2063 minus() && (a == plus()); 2064 ${OUTPUT} 2065 } 2066 "" 2067 end 2068 2069 case ternary_only_evaluates_one_operand 2070 version 300 es 2071 values 2072 { 2073 output int g = 0; 2074 } 2075 2076 both "" 2077 #version 300 es 2078 precision mediump float; 2079 ${DECLARATIONS} 2080 2081 int[2] plus() { 2082 ++g; 2083 return int[2](g, g); 2084 } 2085 2086 void main() { 2087 ${SETUP} 2088 g = 0; 2089 int a[2] = int[2](0, 0); 2090 // The function call must not be evaluated, since the condition is true. 2091 (g == 0) ? true : (a == plus()); 2092 ${OUTPUT} 2093 } 2094 "" 2095 end 2096 2097 case sequence_side_effects_affecting_compared_array_content 2098 version 300 es 2099 values 2100 { 2101 output bool success = true; 2102 } 2103 2104 both "" 2105 #version 300 es 2106 precision mediump float; 2107 ${DECLARATIONS} 2108 2109 int[2] func(int param) { 2110 return int[2](param, param); 2111 } 2112 2113 void main() { 2114 ${SETUP} 2115 int a[2]; 2116 for (int i = 0; i < 2; ++i) { 2117 a[i] = 1; 2118 } 2119 int j = 0; 2120 // Sequence operator evaluates operands from left to right (ESSL 3.00 section 5.9). 2121 // The function call that returns the array needs to be evaluated after ++j 2122 // for the expression to return the correct value (true). 2123 success = ((++j), (a == func(j))); 2124 ${OUTPUT} 2125 } 2126 "" 2127 end 2128 2129end # complex_expression 2130 2131group compare "Array comparisons" 2132 2133 case equal_lowp_int_lowp_int 2134 version 300 es 2135 values 2136 { 2137 output bool success = true; 2138 } 2139 2140 both "" 2141 #version 300 es 2142 precision lowp float; 2143 ${DECLARATIONS} 2144 void main() 2145 { 2146 ${SETUP} 2147 lowp int x[3] = int[3](1, 2, 3); 2148 lowp int y[3] = x; 2149 x = y; 2150 success = (x == y); 2151 ${OUTPUT} 2152 } 2153 "" 2154 end 2155 2156 case equal_lowp_uint_lowp_uint 2157 version 300 es 2158 values 2159 { 2160 output bool success = true; 2161 } 2162 2163 both "" 2164 #version 300 es 2165 precision lowp float; 2166 ${DECLARATIONS} 2167 void main() 2168 { 2169 ${SETUP} 2170 lowp uint x[3] = uint[3](1u, 2u, 3u); 2171 lowp uint y[3] = x; 2172 x = y; 2173 success = (x == y); 2174 ${OUTPUT} 2175 } 2176 "" 2177 end 2178 2179 case equal_lowp_float_lowp_float 2180 version 300 es 2181 values 2182 { 2183 output bool success = true; 2184 } 2185 2186 both "" 2187 #version 300 es 2188 precision lowp float; 2189 ${DECLARATIONS} 2190 void main() 2191 { 2192 ${SETUP} 2193 lowp float x[3] = float[3](1.0, 2.0, 3.0); 2194 lowp float y[3] = x; 2195 x = y; 2196 success = (x == y); 2197 ${OUTPUT} 2198 } 2199 "" 2200 end 2201 2202 case equal_lowp_vec2_lowp_vec2 2203 version 300 es 2204 values 2205 { 2206 output bool success = true; 2207 } 2208 2209 both "" 2210 #version 300 es 2211 precision lowp float; 2212 ${DECLARATIONS} 2213 void main() 2214 { 2215 ${SETUP} 2216 lowp vec2 x[3] = vec2[3](vec2(1.0, 2.0), 2217 vec2(3.0, 4.0), 2218 vec2(5.0, 6.0)); 2219 lowp vec2 y[3] = x; 2220 x = y; 2221 success = (x == y); 2222 ${OUTPUT} 2223 } 2224 "" 2225 end 2226 2227 case equal_lowp_vec3_lowp_vec3 2228 version 300 es 2229 values 2230 { 2231 output bool success = true; 2232 } 2233 2234 both "" 2235 #version 300 es 2236 precision lowp float; 2237 ${DECLARATIONS} 2238 void main() 2239 { 2240 ${SETUP} 2241 lowp vec3 x[3] = vec3[3](vec3(1.0, 2.0, 3.0), 2242 vec3(4.0, 5.0, 6.0), 2243 vec3(7.0, 8.0, 9.0)); 2244 lowp vec3 y[3] = x; 2245 x = y; 2246 success = (x == y); 2247 ${OUTPUT} 2248 } 2249 "" 2250 end 2251 2252 case equal_lowp_vec4_lowp_vec4 2253 version 300 es 2254 values 2255 { 2256 output bool success = true; 2257 } 2258 2259 both "" 2260 #version 300 es 2261 precision lowp float; 2262 ${DECLARATIONS} 2263 void main() 2264 { 2265 ${SETUP} 2266 lowp vec4 x[3] = vec4[3](vec4(1.0, 2.0, 3.0, 4.0), 2267 vec4(5.0, 6.0, 7.0, 8.0), 2268 vec4(9.0, 10.0, 11.0, 12.0)); 2269 lowp vec4 y[3] = x; 2270 x = y; 2271 success = (x == y); 2272 ${OUTPUT} 2273 } 2274 "" 2275 end 2276 2277 case equal_lowp_ivec2_lowp_ivec2 2278 version 300 es 2279 values 2280 { 2281 output bool success = true; 2282 } 2283 2284 both "" 2285 #version 300 es 2286 precision lowp float; 2287 ${DECLARATIONS} 2288 void main() 2289 { 2290 ${SETUP} 2291 lowp ivec2 x[3] = ivec2[3](ivec2(1, 2), 2292 ivec2(3, 4), 2293 ivec2(5, 6)); 2294 lowp ivec2 y[3] = x; 2295 x = y; 2296 success = (x == y); 2297 ${OUTPUT} 2298 } 2299 "" 2300 end 2301 2302 case equal_lowp_ivec3_lowp_ivec3 2303 version 300 es 2304 values 2305 { 2306 output bool success = true; 2307 } 2308 2309 both "" 2310 #version 300 es 2311 precision lowp float; 2312 ${DECLARATIONS} 2313 void main() 2314 { 2315 ${SETUP} 2316 lowp ivec3 x[3] = ivec3[3](ivec3(1, 2, 3), 2317 ivec3(4, 5, 6), 2318 ivec3(7, 8, 9)); 2319 lowp ivec3 y[3] = x; 2320 x = y; 2321 success = (x == y); 2322 ${OUTPUT} 2323 } 2324 "" 2325 end 2326 2327 case equal_lowp_ivec4_lowp_ivec4 2328 version 300 es 2329 values 2330 { 2331 output bool success = true; 2332 } 2333 2334 both "" 2335 #version 300 es 2336 precision lowp float; 2337 ${DECLARATIONS} 2338 void main() 2339 { 2340 ${SETUP} 2341 lowp ivec4 x[3] = ivec4[3](ivec4(1, 2, 3, 4), 2342 ivec4(5, 6, 7, 8), 2343 ivec4(9, 10, 11, 12)); 2344 lowp ivec4 y[3] = x; 2345 x = y; 2346 success = (x == y); 2347 ${OUTPUT} 2348 } 2349 "" 2350 end 2351 2352 case equal_lowp_uvec2_lowp_uvec2 2353 version 300 es 2354 values 2355 { 2356 output bool success = true; 2357 } 2358 2359 both "" 2360 #version 300 es 2361 precision lowp float; 2362 ${DECLARATIONS} 2363 void main() 2364 { 2365 ${SETUP} 2366 lowp uvec2 x[3] = uvec2[3](uvec2(1u, 2u), 2367 uvec2(3u, 4u), 2368 uvec2(5u, 6u)); 2369 lowp uvec2 y[3] = x; 2370 x = y; 2371 success = (x == y); 2372 ${OUTPUT} 2373 } 2374 "" 2375 end 2376 2377 case equal_lowp_uvec3_lowp_uvec3 2378 version 300 es 2379 values 2380 { 2381 output bool success = true; 2382 } 2383 2384 both "" 2385 #version 300 es 2386 precision lowp float; 2387 ${DECLARATIONS} 2388 void main() 2389 { 2390 ${SETUP} 2391 lowp uvec3 x[3] = uvec3[3](uvec3(1u, 2u, 3u), 2392 uvec3(4u, 5u, 6u), 2393 uvec3(7u, 8u, 9u)); 2394 lowp uvec3 y[3] = x; 2395 x = y; 2396 success = (x == y); 2397 ${OUTPUT} 2398 } 2399 "" 2400 end 2401 2402 case equal_lowp_uvec4_lowp_uvec4 2403 version 300 es 2404 values 2405 { 2406 output bool success = true; 2407 } 2408 2409 both "" 2410 #version 300 es 2411 precision lowp float; 2412 ${DECLARATIONS} 2413 void main() 2414 { 2415 ${SETUP} 2416 lowp uvec4 x[3] = uvec4[3](uvec4(1u, 2u, 3u, 4u), 2417 uvec4(5u, 6u, 7u, 8u), 2418 uvec4(9u, 10u, 11u, 12u)); 2419 lowp uvec4 y[3] = x; 2420 x = y; 2421 success = (x == y); 2422 ${OUTPUT} 2423 } 2424 "" 2425 end 2426 2427 case equal_lowp_mat2_lowp_mat2 2428 version 300 es 2429 values 2430 { 2431 output bool success = true; 2432 } 2433 2434 both "" 2435 #version 300 es 2436 precision lowp float; 2437 ${DECLARATIONS} 2438 void main() 2439 { 2440 ${SETUP} 2441 lowp mat2 x[3] = mat2[3](mat2(1.0, 2.0, 3.0, 4.0), 2442 mat2(5.0, 6.0, 7.0, 8.0), 2443 mat2(9.0, 10.0, 11.0, 12.0)); 2444 lowp mat2 y[3] = x; 2445 x = y; 2446 success = (x == y); 2447 ${OUTPUT} 2448 } 2449 "" 2450 end 2451 2452 case equal_lowp_mat3_lowp_mat3 2453 version 300 es 2454 values 2455 { 2456 output bool success = true; 2457 } 2458 2459 both "" 2460 #version 300 es 2461 precision lowp float; 2462 ${DECLARATIONS} 2463 void main() 2464 { 2465 ${SETUP} 2466 lowp mat3 x[3] = mat3[3](mat3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0), 2467 mat3(10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0), 2468 mat3(19.0, 20.0, 21.0, 22.0, 23.0, 24.0, 25.0, 26.0, 27.0)); 2469 lowp mat3 y[3] = x; 2470 x = y; 2471 success = (x == y); 2472 ${OUTPUT} 2473 } 2474 "" 2475 end 2476 2477 case equal_lowp_mat4_lowp_mat4 2478 version 300 es 2479 values 2480 { 2481 output bool success = true; 2482 } 2483 2484 both "" 2485 #version 300 es 2486 precision lowp float; 2487 ${DECLARATIONS} 2488 void main() 2489 { 2490 ${SETUP} 2491 lowp mat4 x[3] = mat4[3](mat4(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0), 2492 mat4(17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 23.0, 24.0, 25.0, 26.0, 27.0, 28.0, 29.0, 30.0, 31.0, 32.0), 2493 mat4(33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 41.0, 42.0, 43.0, 44.0, 45.0, 46.0, 47.0, 48.0)); 2494 lowp mat4 y[3] = x; 2495 x = y; 2496 success = (x == y); 2497 ${OUTPUT} 2498 } 2499 "" 2500 end 2501 2502 case equal_mediump_int_lowp_int 2503 version 300 es 2504 values 2505 { 2506 output bool success = true; 2507 } 2508 2509 both "" 2510 #version 300 es 2511 precision mediump float; 2512 ${DECLARATIONS} 2513 void main() 2514 { 2515 ${SETUP} 2516 mediump int x[3] = int[3](1, 2, 3); 2517 lowp int y[3] = x; 2518 x = y; 2519 success = (x == y); 2520 ${OUTPUT} 2521 } 2522 "" 2523 end 2524 2525 case equal_mediump_uint_lowp_uint 2526 version 300 es 2527 values 2528 { 2529 output bool success = true; 2530 } 2531 2532 both "" 2533 #version 300 es 2534 precision mediump float; 2535 ${DECLARATIONS} 2536 void main() 2537 { 2538 ${SETUP} 2539 mediump uint x[3] = uint[3](1u, 2u, 3u); 2540 lowp uint y[3] = x; 2541 x = y; 2542 success = (x == y); 2543 ${OUTPUT} 2544 } 2545 "" 2546 end 2547 2548 case equal_mediump_float_lowp_float 2549 version 300 es 2550 values 2551 { 2552 output bool success = true; 2553 } 2554 2555 both "" 2556 #version 300 es 2557 precision mediump float; 2558 ${DECLARATIONS} 2559 void main() 2560 { 2561 ${SETUP} 2562 mediump float x[3] = float[3](1.0, 2.0, 3.0); 2563 lowp float y[3] = x; 2564 x = y; 2565 success = (x == y); 2566 ${OUTPUT} 2567 } 2568 "" 2569 end 2570 2571 case equal_mediump_vec2_lowp_vec2 2572 version 300 es 2573 values 2574 { 2575 output bool success = true; 2576 } 2577 2578 both "" 2579 #version 300 es 2580 precision mediump float; 2581 ${DECLARATIONS} 2582 void main() 2583 { 2584 ${SETUP} 2585 mediump vec2 x[3] = vec2[3](vec2(1.0, 2.0), 2586 vec2(3.0, 4.0), 2587 vec2(5.0, 6.0)); 2588 lowp vec2 y[3] = x; 2589 x = y; 2590 success = (x == y); 2591 ${OUTPUT} 2592 } 2593 "" 2594 end 2595 2596 case equal_mediump_vec3_lowp_vec3 2597 version 300 es 2598 values 2599 { 2600 output bool success = true; 2601 } 2602 2603 both "" 2604 #version 300 es 2605 precision mediump float; 2606 ${DECLARATIONS} 2607 void main() 2608 { 2609 ${SETUP} 2610 mediump vec3 x[3] = vec3[3](vec3(1.0, 2.0, 3.0), 2611 vec3(4.0, 5.0, 6.0), 2612 vec3(7.0, 8.0, 9.0)); 2613 lowp vec3 y[3] = x; 2614 x = y; 2615 success = (x == y); 2616 ${OUTPUT} 2617 } 2618 "" 2619 end 2620 2621 case equal_mediump_vec4_lowp_vec4 2622 version 300 es 2623 values 2624 { 2625 output bool success = true; 2626 } 2627 2628 both "" 2629 #version 300 es 2630 precision mediump float; 2631 ${DECLARATIONS} 2632 void main() 2633 { 2634 ${SETUP} 2635 mediump vec4 x[3] = vec4[3](vec4(1.0, 2.0, 3.0, 4.0), 2636 vec4(5.0, 6.0, 7.0, 8.0), 2637 vec4(9.0, 10.0, 11.0, 12.0)); 2638 lowp vec4 y[3] = x; 2639 x = y; 2640 success = (x == y); 2641 ${OUTPUT} 2642 } 2643 "" 2644 end 2645 2646 case equal_mediump_ivec2_lowp_ivec2 2647 version 300 es 2648 values 2649 { 2650 output bool success = true; 2651 } 2652 2653 both "" 2654 #version 300 es 2655 precision mediump float; 2656 ${DECLARATIONS} 2657 void main() 2658 { 2659 ${SETUP} 2660 mediump ivec2 x[3] = ivec2[3](ivec2(1, 2), 2661 ivec2(3, 4), 2662 ivec2(5, 6)); 2663 lowp ivec2 y[3] = x; 2664 x = y; 2665 success = (x == y); 2666 ${OUTPUT} 2667 } 2668 "" 2669 end 2670 2671 case equal_mediump_ivec3_lowp_ivec3 2672 version 300 es 2673 values 2674 { 2675 output bool success = true; 2676 } 2677 2678 both "" 2679 #version 300 es 2680 precision mediump float; 2681 ${DECLARATIONS} 2682 void main() 2683 { 2684 ${SETUP} 2685 mediump ivec3 x[3] = ivec3[3](ivec3(1, 2, 3), 2686 ivec3(4, 5, 6), 2687 ivec3(7, 8, 9)); 2688 lowp ivec3 y[3] = x; 2689 x = y; 2690 success = (x == y); 2691 ${OUTPUT} 2692 } 2693 "" 2694 end 2695 2696 case equal_mediump_ivec4_lowp_ivec4 2697 version 300 es 2698 values 2699 { 2700 output bool success = true; 2701 } 2702 2703 both "" 2704 #version 300 es 2705 precision mediump float; 2706 ${DECLARATIONS} 2707 void main() 2708 { 2709 ${SETUP} 2710 mediump ivec4 x[3] = ivec4[3](ivec4(1, 2, 3, 4), 2711 ivec4(5, 6, 7, 8), 2712 ivec4(9, 10, 11, 12)); 2713 lowp ivec4 y[3] = x; 2714 x = y; 2715 success = (x == y); 2716 ${OUTPUT} 2717 } 2718 "" 2719 end 2720 2721 case equal_mediump_uvec2_lowp_uvec2 2722 version 300 es 2723 values 2724 { 2725 output bool success = true; 2726 } 2727 2728 both "" 2729 #version 300 es 2730 precision mediump float; 2731 ${DECLARATIONS} 2732 void main() 2733 { 2734 ${SETUP} 2735 mediump uvec2 x[3] = uvec2[3](uvec2(1u, 2u), 2736 uvec2(3u, 4u), 2737 uvec2(5u, 6u)); 2738 lowp uvec2 y[3] = x; 2739 x = y; 2740 success = (x == y); 2741 ${OUTPUT} 2742 } 2743 "" 2744 end 2745 2746 case equal_mediump_uvec3_lowp_uvec3 2747 version 300 es 2748 values 2749 { 2750 output bool success = true; 2751 } 2752 2753 both "" 2754 #version 300 es 2755 precision mediump float; 2756 ${DECLARATIONS} 2757 void main() 2758 { 2759 ${SETUP} 2760 mediump uvec3 x[3] = uvec3[3](uvec3(1u, 2u, 3u), 2761 uvec3(4u, 5u, 6u), 2762 uvec3(7u, 8u, 9u)); 2763 lowp uvec3 y[3] = x; 2764 x = y; 2765 success = (x == y); 2766 ${OUTPUT} 2767 } 2768 "" 2769 end 2770 2771 case equal_mediump_uvec4_lowp_uvec4 2772 version 300 es 2773 values 2774 { 2775 output bool success = true; 2776 } 2777 2778 both "" 2779 #version 300 es 2780 precision mediump float; 2781 ${DECLARATIONS} 2782 void main() 2783 { 2784 ${SETUP} 2785 mediump uvec4 x[3] = uvec4[3](uvec4(1u, 2u, 3u, 4u), 2786 uvec4(5u, 6u, 7u, 8u), 2787 uvec4(9u, 10u, 11u, 12u)); 2788 lowp uvec4 y[3] = x; 2789 x = y; 2790 success = (x == y); 2791 ${OUTPUT} 2792 } 2793 "" 2794 end 2795 2796 case equal_mediump_mat2_lowp_mat2 2797 version 300 es 2798 values 2799 { 2800 output bool success = true; 2801 } 2802 2803 both "" 2804 #version 300 es 2805 precision mediump float; 2806 ${DECLARATIONS} 2807 void main() 2808 { 2809 ${SETUP} 2810 mediump mat2 x[3] = mat2[3](mat2(1.0, 2.0, 3.0, 4.0), 2811 mat2(5.0, 6.0, 7.0, 8.0), 2812 mat2(9.0, 10.0, 11.0, 12.0)); 2813 lowp mat2 y[3] = x; 2814 x = y; 2815 success = (x == y); 2816 ${OUTPUT} 2817 } 2818 "" 2819 end 2820 2821 case equal_mediump_mat3_lowp_mat3 2822 version 300 es 2823 values 2824 { 2825 output bool success = true; 2826 } 2827 2828 both "" 2829 #version 300 es 2830 precision mediump float; 2831 ${DECLARATIONS} 2832 void main() 2833 { 2834 ${SETUP} 2835 mediump mat3 x[3] = mat3[3](mat3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0), 2836 mat3(10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0), 2837 mat3(19.0, 20.0, 21.0, 22.0, 23.0, 24.0, 25.0, 26.0, 27.0)); 2838 lowp mat3 y[3] = x; 2839 x = y; 2840 success = (x == y); 2841 ${OUTPUT} 2842 } 2843 "" 2844 end 2845 2846 case equal_mediump_mat4_lowp_mat4 2847 version 300 es 2848 values 2849 { 2850 output bool success = true; 2851 } 2852 2853 both "" 2854 #version 300 es 2855 precision mediump float; 2856 ${DECLARATIONS} 2857 void main() 2858 { 2859 ${SETUP} 2860 mediump mat4 x[3] = mat4[3](mat4(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0), 2861 mat4(17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 23.0, 24.0, 25.0, 26.0, 27.0, 28.0, 29.0, 30.0, 31.0, 32.0), 2862 mat4(33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 41.0, 42.0, 43.0, 44.0, 45.0, 46.0, 47.0, 48.0)); 2863 lowp mat4 y[3] = x; 2864 x = y; 2865 success = (x == y); 2866 ${OUTPUT} 2867 } 2868 "" 2869 end 2870 2871 case equal_mediump_int_mediump_int 2872 version 300 es 2873 values 2874 { 2875 output bool success = true; 2876 } 2877 2878 both "" 2879 #version 300 es 2880 precision mediump float; 2881 ${DECLARATIONS} 2882 void main() 2883 { 2884 ${SETUP} 2885 mediump int x[3] = int[3](1, 2, 3); 2886 mediump int y[3] = x; 2887 x = y; 2888 success = (x == y); 2889 ${OUTPUT} 2890 } 2891 "" 2892 end 2893 2894 case equal_mediump_uint_mediump_uint 2895 version 300 es 2896 values 2897 { 2898 output bool success = true; 2899 } 2900 2901 both "" 2902 #version 300 es 2903 precision mediump float; 2904 ${DECLARATIONS} 2905 void main() 2906 { 2907 ${SETUP} 2908 mediump uint x[3] = uint[3](1u, 2u, 3u); 2909 mediump uint y[3] = x; 2910 x = y; 2911 success = (x == y); 2912 ${OUTPUT} 2913 } 2914 "" 2915 end 2916 2917 case equal_mediump_float_mediump_float 2918 version 300 es 2919 values 2920 { 2921 output bool success = true; 2922 } 2923 2924 both "" 2925 #version 300 es 2926 precision mediump float; 2927 ${DECLARATIONS} 2928 void main() 2929 { 2930 ${SETUP} 2931 mediump float x[3] = float[3](1.0, 2.0, 3.0); 2932 mediump float y[3] = x; 2933 x = y; 2934 success = (x == y); 2935 ${OUTPUT} 2936 } 2937 "" 2938 end 2939 2940 case equal_mediump_vec2_mediump_vec2 2941 version 300 es 2942 values 2943 { 2944 output bool success = true; 2945 } 2946 2947 both "" 2948 #version 300 es 2949 precision mediump float; 2950 ${DECLARATIONS} 2951 void main() 2952 { 2953 ${SETUP} 2954 mediump vec2 x[3] = vec2[3](vec2(1.0, 2.0), 2955 vec2(3.0, 4.0), 2956 vec2(5.0, 6.0)); 2957 mediump vec2 y[3] = x; 2958 x = y; 2959 success = (x == y); 2960 ${OUTPUT} 2961 } 2962 "" 2963 end 2964 2965 case equal_mediump_vec3_mediump_vec3 2966 version 300 es 2967 values 2968 { 2969 output bool success = true; 2970 } 2971 2972 both "" 2973 #version 300 es 2974 precision mediump float; 2975 ${DECLARATIONS} 2976 void main() 2977 { 2978 ${SETUP} 2979 mediump vec3 x[3] = vec3[3](vec3(1.0, 2.0, 3.0), 2980 vec3(4.0, 5.0, 6.0), 2981 vec3(7.0, 8.0, 9.0)); 2982 mediump vec3 y[3] = x; 2983 x = y; 2984 success = (x == y); 2985 ${OUTPUT} 2986 } 2987 "" 2988 end 2989 2990 case equal_mediump_vec4_mediump_vec4 2991 version 300 es 2992 values 2993 { 2994 output bool success = true; 2995 } 2996 2997 both "" 2998 #version 300 es 2999 precision mediump float; 3000 ${DECLARATIONS} 3001 void main() 3002 { 3003 ${SETUP} 3004 mediump vec4 x[3] = vec4[3](vec4(1.0, 2.0, 3.0, 4.0), 3005 vec4(5.0, 6.0, 7.0, 8.0), 3006 vec4(9.0, 10.0, 11.0, 12.0)); 3007 mediump vec4 y[3] = x; 3008 x = y; 3009 success = (x == y); 3010 ${OUTPUT} 3011 } 3012 "" 3013 end 3014 3015 case equal_mediump_ivec2_mediump_ivec2 3016 version 300 es 3017 values 3018 { 3019 output bool success = true; 3020 } 3021 3022 both "" 3023 #version 300 es 3024 precision mediump float; 3025 ${DECLARATIONS} 3026 void main() 3027 { 3028 ${SETUP} 3029 mediump ivec2 x[3] = ivec2[3](ivec2(1, 2), 3030 ivec2(3, 4), 3031 ivec2(5, 6)); 3032 mediump ivec2 y[3] = x; 3033 x = y; 3034 success = (x == y); 3035 ${OUTPUT} 3036 } 3037 "" 3038 end 3039 3040 case equal_mediump_ivec3_mediump_ivec3 3041 version 300 es 3042 values 3043 { 3044 output bool success = true; 3045 } 3046 3047 both "" 3048 #version 300 es 3049 precision mediump float; 3050 ${DECLARATIONS} 3051 void main() 3052 { 3053 ${SETUP} 3054 mediump ivec3 x[3] = ivec3[3](ivec3(1, 2, 3), 3055 ivec3(4, 5, 6), 3056 ivec3(7, 8, 9)); 3057 mediump ivec3 y[3] = x; 3058 x = y; 3059 success = (x == y); 3060 ${OUTPUT} 3061 } 3062 "" 3063 end 3064 3065 case equal_mediump_ivec4_mediump_ivec4 3066 version 300 es 3067 values 3068 { 3069 output bool success = true; 3070 } 3071 3072 both "" 3073 #version 300 es 3074 precision mediump float; 3075 ${DECLARATIONS} 3076 void main() 3077 { 3078 ${SETUP} 3079 mediump ivec4 x[3] = ivec4[3](ivec4(1, 2, 3, 4), 3080 ivec4(5, 6, 7, 8), 3081 ivec4(9, 10, 11, 12)); 3082 mediump ivec4 y[3] = x; 3083 x = y; 3084 success = (x == y); 3085 ${OUTPUT} 3086 } 3087 "" 3088 end 3089 3090 case equal_mediump_uvec2_mediump_uvec2 3091 version 300 es 3092 values 3093 { 3094 output bool success = true; 3095 } 3096 3097 both "" 3098 #version 300 es 3099 precision mediump float; 3100 ${DECLARATIONS} 3101 void main() 3102 { 3103 ${SETUP} 3104 mediump uvec2 x[3] = uvec2[3](uvec2(1u, 2u), 3105 uvec2(3u, 4u), 3106 uvec2(5u, 6u)); 3107 mediump uvec2 y[3] = x; 3108 x = y; 3109 success = (x == y); 3110 ${OUTPUT} 3111 } 3112 "" 3113 end 3114 3115 case equal_mediump_uvec3_mediump_uvec3 3116 version 300 es 3117 values 3118 { 3119 output bool success = true; 3120 } 3121 3122 both "" 3123 #version 300 es 3124 precision mediump float; 3125 ${DECLARATIONS} 3126 void main() 3127 { 3128 ${SETUP} 3129 mediump uvec3 x[3] = uvec3[3](uvec3(1u, 2u, 3u), 3130 uvec3(4u, 5u, 6u), 3131 uvec3(7u, 8u, 9u)); 3132 mediump uvec3 y[3] = x; 3133 x = y; 3134 success = (x == y); 3135 ${OUTPUT} 3136 } 3137 "" 3138 end 3139 3140 case equal_mediump_uvec4_mediump_uvec4 3141 version 300 es 3142 values 3143 { 3144 output bool success = true; 3145 } 3146 3147 both "" 3148 #version 300 es 3149 precision mediump float; 3150 ${DECLARATIONS} 3151 void main() 3152 { 3153 ${SETUP} 3154 mediump uvec4 x[3] = uvec4[3](uvec4(1u, 2u, 3u, 4u), 3155 uvec4(5u, 6u, 7u, 8u), 3156 uvec4(9u, 10u, 11u, 12u)); 3157 mediump uvec4 y[3] = x; 3158 x = y; 3159 success = (x == y); 3160 ${OUTPUT} 3161 } 3162 "" 3163 end 3164 3165 case equal_mediump_mat2_mediump_mat2 3166 version 300 es 3167 values 3168 { 3169 output bool success = true; 3170 } 3171 3172 both "" 3173 #version 300 es 3174 precision mediump float; 3175 ${DECLARATIONS} 3176 void main() 3177 { 3178 ${SETUP} 3179 mediump mat2 x[3] = mat2[3](mat2(1.0, 2.0, 3.0, 4.0), 3180 mat2(5.0, 6.0, 7.0, 8.0), 3181 mat2(9.0, 10.0, 11.0, 12.0)); 3182 mediump mat2 y[3] = x; 3183 x = y; 3184 success = (x == y); 3185 ${OUTPUT} 3186 } 3187 "" 3188 end 3189 3190 case equal_mediump_mat3_mediump_mat3 3191 version 300 es 3192 values 3193 { 3194 output bool success = true; 3195 } 3196 3197 both "" 3198 #version 300 es 3199 precision mediump float; 3200 ${DECLARATIONS} 3201 void main() 3202 { 3203 ${SETUP} 3204 mediump mat3 x[3] = mat3[3](mat3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0), 3205 mat3(10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0), 3206 mat3(19.0, 20.0, 21.0, 22.0, 23.0, 24.0, 25.0, 26.0, 27.0)); 3207 mediump mat3 y[3] = x; 3208 x = y; 3209 success = (x == y); 3210 ${OUTPUT} 3211 } 3212 "" 3213 end 3214 3215 case equal_mediump_mat4_mediump_mat4 3216 version 300 es 3217 values 3218 { 3219 output bool success = true; 3220 } 3221 3222 both "" 3223 #version 300 es 3224 precision mediump float; 3225 ${DECLARATIONS} 3226 void main() 3227 { 3228 ${SETUP} 3229 mediump mat4 x[3] = mat4[3](mat4(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0), 3230 mat4(17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 23.0, 24.0, 25.0, 26.0, 27.0, 28.0, 29.0, 30.0, 31.0, 32.0), 3231 mat4(33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 41.0, 42.0, 43.0, 44.0, 45.0, 46.0, 47.0, 48.0)); 3232 mediump mat4 y[3] = x; 3233 x = y; 3234 success = (x == y); 3235 ${OUTPUT} 3236 } 3237 "" 3238 end 3239 3240 case equal_highp_int_mediump_int 3241 version 300 es 3242 values 3243 { 3244 output bool success = true; 3245 } 3246 3247 both "" 3248 #version 300 es 3249 precision highp float; 3250 ${DECLARATIONS} 3251 void main() 3252 { 3253 ${SETUP} 3254 highp int x[3] = int[3](1, 2, 3); 3255 mediump int y[3] = x; 3256 x = y; 3257 success = (x == y); 3258 ${OUTPUT} 3259 } 3260 "" 3261 end 3262 3263 case equal_highp_uint_mediump_uint 3264 version 300 es 3265 values 3266 { 3267 output bool success = true; 3268 } 3269 3270 both "" 3271 #version 300 es 3272 precision highp float; 3273 ${DECLARATIONS} 3274 void main() 3275 { 3276 ${SETUP} 3277 highp uint x[3] = uint[3](1u, 2u, 3u); 3278 mediump uint y[3] = x; 3279 x = y; 3280 success = (x == y); 3281 ${OUTPUT} 3282 } 3283 "" 3284 end 3285 3286 case equal_highp_float_mediump_float 3287 version 300 es 3288 values 3289 { 3290 output bool success = true; 3291 } 3292 3293 both "" 3294 #version 300 es 3295 precision highp float; 3296 ${DECLARATIONS} 3297 void main() 3298 { 3299 ${SETUP} 3300 highp float x[3] = float[3](1.0, 2.0, 3.0); 3301 mediump float y[3] = x; 3302 x = y; 3303 success = (x == y); 3304 ${OUTPUT} 3305 } 3306 "" 3307 end 3308 3309 case equal_highp_vec2_mediump_vec2 3310 version 300 es 3311 values 3312 { 3313 output bool success = true; 3314 } 3315 3316 both "" 3317 #version 300 es 3318 precision highp float; 3319 ${DECLARATIONS} 3320 void main() 3321 { 3322 ${SETUP} 3323 highp vec2 x[3] = vec2[3](vec2(1.0, 2.0), 3324 vec2(3.0, 4.0), 3325 vec2(5.0, 6.0)); 3326 mediump vec2 y[3] = x; 3327 x = y; 3328 success = (x == y); 3329 ${OUTPUT} 3330 } 3331 "" 3332 end 3333 3334 case equal_highp_vec3_mediump_vec3 3335 version 300 es 3336 values 3337 { 3338 output bool success = true; 3339 } 3340 3341 both "" 3342 #version 300 es 3343 precision highp float; 3344 ${DECLARATIONS} 3345 void main() 3346 { 3347 ${SETUP} 3348 highp vec3 x[3] = vec3[3](vec3(1.0, 2.0, 3.0), 3349 vec3(4.0, 5.0, 6.0), 3350 vec3(7.0, 8.0, 9.0)); 3351 mediump vec3 y[3] = x; 3352 x = y; 3353 success = (x == y); 3354 ${OUTPUT} 3355 } 3356 "" 3357 end 3358 3359 case equal_highp_vec4_mediump_vec4 3360 version 300 es 3361 values 3362 { 3363 output bool success = true; 3364 } 3365 3366 both "" 3367 #version 300 es 3368 precision highp float; 3369 ${DECLARATIONS} 3370 void main() 3371 { 3372 ${SETUP} 3373 highp vec4 x[3] = vec4[3](vec4(1.0, 2.0, 3.0, 4.0), 3374 vec4(5.0, 6.0, 7.0, 8.0), 3375 vec4(9.0, 10.0, 11.0, 12.0)); 3376 mediump vec4 y[3] = x; 3377 x = y; 3378 success = (x == y); 3379 ${OUTPUT} 3380 } 3381 "" 3382 end 3383 3384 case equal_highp_ivec2_mediump_ivec2 3385 version 300 es 3386 values 3387 { 3388 output bool success = true; 3389 } 3390 3391 both "" 3392 #version 300 es 3393 precision highp float; 3394 ${DECLARATIONS} 3395 void main() 3396 { 3397 ${SETUP} 3398 highp ivec2 x[3] = ivec2[3](ivec2(1, 2), 3399 ivec2(3, 4), 3400 ivec2(5, 6)); 3401 mediump ivec2 y[3] = x; 3402 x = y; 3403 success = (x == y); 3404 ${OUTPUT} 3405 } 3406 "" 3407 end 3408 3409 case equal_highp_ivec3_mediump_ivec3 3410 version 300 es 3411 values 3412 { 3413 output bool success = true; 3414 } 3415 3416 both "" 3417 #version 300 es 3418 precision highp float; 3419 ${DECLARATIONS} 3420 void main() 3421 { 3422 ${SETUP} 3423 highp ivec3 x[3] = ivec3[3](ivec3(1, 2, 3), 3424 ivec3(4, 5, 6), 3425 ivec3(7, 8, 9)); 3426 mediump ivec3 y[3] = x; 3427 x = y; 3428 success = (x == y); 3429 ${OUTPUT} 3430 } 3431 "" 3432 end 3433 3434 case equal_highp_ivec4_mediump_ivec4 3435 version 300 es 3436 values 3437 { 3438 output bool success = true; 3439 } 3440 3441 both "" 3442 #version 300 es 3443 precision highp float; 3444 ${DECLARATIONS} 3445 void main() 3446 { 3447 ${SETUP} 3448 highp ivec4 x[3] = ivec4[3](ivec4(1, 2, 3, 4), 3449 ivec4(5, 6, 7, 8), 3450 ivec4(9, 10, 11, 12)); 3451 mediump ivec4 y[3] = x; 3452 x = y; 3453 success = (x == y); 3454 ${OUTPUT} 3455 } 3456 "" 3457 end 3458 3459 case equal_highp_uvec2_mediump_uvec2 3460 version 300 es 3461 values 3462 { 3463 output bool success = true; 3464 } 3465 3466 both "" 3467 #version 300 es 3468 precision highp float; 3469 ${DECLARATIONS} 3470 void main() 3471 { 3472 ${SETUP} 3473 highp uvec2 x[3] = uvec2[3](uvec2(1u, 2u), 3474 uvec2(3u, 4u), 3475 uvec2(5u, 6u)); 3476 mediump uvec2 y[3] = x; 3477 x = y; 3478 success = (x == y); 3479 ${OUTPUT} 3480 } 3481 "" 3482 end 3483 3484 case equal_highp_uvec3_mediump_uvec3 3485 version 300 es 3486 values 3487 { 3488 output bool success = true; 3489 } 3490 3491 both "" 3492 #version 300 es 3493 precision highp float; 3494 ${DECLARATIONS} 3495 void main() 3496 { 3497 ${SETUP} 3498 highp uvec3 x[3] = uvec3[3](uvec3(1u, 2u, 3u), 3499 uvec3(4u, 5u, 6u), 3500 uvec3(7u, 8u, 9u)); 3501 mediump uvec3 y[3] = x; 3502 x = y; 3503 success = (x == y); 3504 ${OUTPUT} 3505 } 3506 "" 3507 end 3508 3509 case equal_highp_uvec4_mediump_uvec4 3510 version 300 es 3511 values 3512 { 3513 output bool success = true; 3514 } 3515 3516 both "" 3517 #version 300 es 3518 precision highp float; 3519 ${DECLARATIONS} 3520 void main() 3521 { 3522 ${SETUP} 3523 highp uvec4 x[3] = uvec4[3](uvec4(1u, 2u, 3u, 4u), 3524 uvec4(5u, 6u, 7u, 8u), 3525 uvec4(9u, 10u, 11u, 12u)); 3526 mediump uvec4 y[3] = x; 3527 x = y; 3528 success = (x == y); 3529 ${OUTPUT} 3530 } 3531 "" 3532 end 3533 3534 case equal_highp_mat2_mediump_mat2 3535 version 300 es 3536 values 3537 { 3538 output bool success = true; 3539 } 3540 3541 both "" 3542 #version 300 es 3543 precision highp float; 3544 ${DECLARATIONS} 3545 void main() 3546 { 3547 ${SETUP} 3548 highp mat2 x[3] = mat2[3](mat2(1.0, 2.0, 3.0, 4.0), 3549 mat2(5.0, 6.0, 7.0, 8.0), 3550 mat2(9.0, 10.0, 11.0, 12.0)); 3551 mediump mat2 y[3] = x; 3552 x = y; 3553 success = (x == y); 3554 ${OUTPUT} 3555 } 3556 "" 3557 end 3558 3559 case equal_highp_mat3_mediump_mat3 3560 version 300 es 3561 values 3562 { 3563 output bool success = true; 3564 } 3565 3566 both "" 3567 #version 300 es 3568 precision highp float; 3569 ${DECLARATIONS} 3570 void main() 3571 { 3572 ${SETUP} 3573 highp mat3 x[3] = mat3[3](mat3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0), 3574 mat3(10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0), 3575 mat3(19.0, 20.0, 21.0, 22.0, 23.0, 24.0, 25.0, 26.0, 27.0)); 3576 mediump mat3 y[3] = x; 3577 x = y; 3578 success = (x == y); 3579 ${OUTPUT} 3580 } 3581 "" 3582 end 3583 3584 case equal_highp_mat4_mediump_mat4 3585 version 300 es 3586 values 3587 { 3588 output bool success = true; 3589 } 3590 3591 both "" 3592 #version 300 es 3593 precision highp float; 3594 ${DECLARATIONS} 3595 void main() 3596 { 3597 ${SETUP} 3598 highp mat4 x[3] = mat4[3](mat4(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0), 3599 mat4(17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 23.0, 24.0, 25.0, 26.0, 27.0, 28.0, 29.0, 30.0, 31.0, 32.0), 3600 mat4(33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 41.0, 42.0, 43.0, 44.0, 45.0, 46.0, 47.0, 48.0)); 3601 mediump mat4 y[3] = x; 3602 x = y; 3603 success = (x == y); 3604 ${OUTPUT} 3605 } 3606 "" 3607 end 3608 3609 case equal_highp_int_lowp_int 3610 version 300 es 3611 values 3612 { 3613 output bool success = true; 3614 } 3615 3616 both "" 3617 #version 300 es 3618 precision highp float; 3619 ${DECLARATIONS} 3620 void main() 3621 { 3622 ${SETUP} 3623 highp int x[3] = int[3](1, 2, 3); 3624 lowp int y[3] = x; 3625 x = y; 3626 success = (x == y); 3627 ${OUTPUT} 3628 } 3629 "" 3630 end 3631 3632 case equal_highp_uint_lowp_uint 3633 version 300 es 3634 values 3635 { 3636 output bool success = true; 3637 } 3638 3639 both "" 3640 #version 300 es 3641 precision highp float; 3642 ${DECLARATIONS} 3643 void main() 3644 { 3645 ${SETUP} 3646 highp uint x[3] = uint[3](1u, 2u, 3u); 3647 lowp uint y[3] = x; 3648 x = y; 3649 success = (x == y); 3650 ${OUTPUT} 3651 } 3652 "" 3653 end 3654 3655 case equal_highp_float_lowp_float 3656 version 300 es 3657 values 3658 { 3659 output bool success = true; 3660 } 3661 3662 both "" 3663 #version 300 es 3664 precision highp float; 3665 ${DECLARATIONS} 3666 void main() 3667 { 3668 ${SETUP} 3669 highp float x[3] = float[3](1.0, 2.0, 3.0); 3670 lowp float y[3] = x; 3671 x = y; 3672 success = (x == y); 3673 ${OUTPUT} 3674 } 3675 "" 3676 end 3677 3678 case equal_highp_vec2_lowp_vec2 3679 version 300 es 3680 values 3681 { 3682 output bool success = true; 3683 } 3684 3685 both "" 3686 #version 300 es 3687 precision highp float; 3688 ${DECLARATIONS} 3689 void main() 3690 { 3691 ${SETUP} 3692 highp vec2 x[3] = vec2[3](vec2(1.0, 2.0), 3693 vec2(3.0, 4.0), 3694 vec2(5.0, 6.0)); 3695 lowp vec2 y[3] = x; 3696 x = y; 3697 success = (x == y); 3698 ${OUTPUT} 3699 } 3700 "" 3701 end 3702 3703 case equal_highp_vec3_lowp_vec3 3704 version 300 es 3705 values 3706 { 3707 output bool success = true; 3708 } 3709 3710 both "" 3711 #version 300 es 3712 precision highp float; 3713 ${DECLARATIONS} 3714 void main() 3715 { 3716 ${SETUP} 3717 highp vec3 x[3] = vec3[3](vec3(1.0, 2.0, 3.0), 3718 vec3(4.0, 5.0, 6.0), 3719 vec3(7.0, 8.0, 9.0)); 3720 lowp vec3 y[3] = x; 3721 x = y; 3722 success = (x == y); 3723 ${OUTPUT} 3724 } 3725 "" 3726 end 3727 3728 case equal_highp_vec4_lowp_vec4 3729 version 300 es 3730 values 3731 { 3732 output bool success = true; 3733 } 3734 3735 both "" 3736 #version 300 es 3737 precision highp float; 3738 ${DECLARATIONS} 3739 void main() 3740 { 3741 ${SETUP} 3742 highp vec4 x[3] = vec4[3](vec4(1.0, 2.0, 3.0, 4.0), 3743 vec4(5.0, 6.0, 7.0, 8.0), 3744 vec4(9.0, 10.0, 11.0, 12.0)); 3745 lowp vec4 y[3] = x; 3746 x = y; 3747 success = (x == y); 3748 ${OUTPUT} 3749 } 3750 "" 3751 end 3752 3753 case equal_highp_ivec2_lowp_ivec2 3754 version 300 es 3755 values 3756 { 3757 output bool success = true; 3758 } 3759 3760 both "" 3761 #version 300 es 3762 precision highp float; 3763 ${DECLARATIONS} 3764 void main() 3765 { 3766 ${SETUP} 3767 highp ivec2 x[3] = ivec2[3](ivec2(1, 2), 3768 ivec2(3, 4), 3769 ivec2(5, 6)); 3770 lowp ivec2 y[3] = x; 3771 x = y; 3772 success = (x == y); 3773 ${OUTPUT} 3774 } 3775 "" 3776 end 3777 3778 case equal_highp_ivec3_lowp_ivec3 3779 version 300 es 3780 values 3781 { 3782 output bool success = true; 3783 } 3784 3785 both "" 3786 #version 300 es 3787 precision highp float; 3788 ${DECLARATIONS} 3789 void main() 3790 { 3791 ${SETUP} 3792 highp ivec3 x[3] = ivec3[3](ivec3(1, 2, 3), 3793 ivec3(4, 5, 6), 3794 ivec3(7, 8, 9)); 3795 lowp ivec3 y[3] = x; 3796 x = y; 3797 success = (x == y); 3798 ${OUTPUT} 3799 } 3800 "" 3801 end 3802 3803 case equal_highp_ivec4_lowp_ivec4 3804 version 300 es 3805 values 3806 { 3807 output bool success = true; 3808 } 3809 3810 both "" 3811 #version 300 es 3812 precision highp float; 3813 ${DECLARATIONS} 3814 void main() 3815 { 3816 ${SETUP} 3817 highp ivec4 x[3] = ivec4[3](ivec4(1, 2, 3, 4), 3818 ivec4(5, 6, 7, 8), 3819 ivec4(9, 10, 11, 12)); 3820 lowp ivec4 y[3] = x; 3821 x = y; 3822 success = (x == y); 3823 ${OUTPUT} 3824 } 3825 "" 3826 end 3827 3828 case equal_highp_uvec2_lowp_uvec2 3829 version 300 es 3830 values 3831 { 3832 output bool success = true; 3833 } 3834 3835 both "" 3836 #version 300 es 3837 precision highp float; 3838 ${DECLARATIONS} 3839 void main() 3840 { 3841 ${SETUP} 3842 highp uvec2 x[3] = uvec2[3](uvec2(1u, 2u), 3843 uvec2(3u, 4u), 3844 uvec2(5u, 6u)); 3845 lowp uvec2 y[3] = x; 3846 x = y; 3847 success = (x == y); 3848 ${OUTPUT} 3849 } 3850 "" 3851 end 3852 3853 case equal_highp_uvec3_lowp_uvec3 3854 version 300 es 3855 values 3856 { 3857 output bool success = true; 3858 } 3859 3860 both "" 3861 #version 300 es 3862 precision highp float; 3863 ${DECLARATIONS} 3864 void main() 3865 { 3866 ${SETUP} 3867 highp uvec3 x[3] = uvec3[3](uvec3(1u, 2u, 3u), 3868 uvec3(4u, 5u, 6u), 3869 uvec3(7u, 8u, 9u)); 3870 lowp uvec3 y[3] = x; 3871 x = y; 3872 success = (x == y); 3873 ${OUTPUT} 3874 } 3875 "" 3876 end 3877 3878 case equal_highp_uvec4_lowp_uvec4 3879 version 300 es 3880 values 3881 { 3882 output bool success = true; 3883 } 3884 3885 both "" 3886 #version 300 es 3887 precision highp float; 3888 ${DECLARATIONS} 3889 void main() 3890 { 3891 ${SETUP} 3892 highp uvec4 x[3] = uvec4[3](uvec4(1u, 2u, 3u, 4u), 3893 uvec4(5u, 6u, 7u, 8u), 3894 uvec4(9u, 10u, 11u, 12u)); 3895 lowp uvec4 y[3] = x; 3896 x = y; 3897 success = (x == y); 3898 ${OUTPUT} 3899 } 3900 "" 3901 end 3902 3903 case equal_highp_mat2_lowp_mat2 3904 version 300 es 3905 values 3906 { 3907 output bool success = true; 3908 } 3909 3910 both "" 3911 #version 300 es 3912 precision highp float; 3913 ${DECLARATIONS} 3914 void main() 3915 { 3916 ${SETUP} 3917 highp mat2 x[3] = mat2[3](mat2(1.0, 2.0, 3.0, 4.0), 3918 mat2(5.0, 6.0, 7.0, 8.0), 3919 mat2(9.0, 10.0, 11.0, 12.0)); 3920 lowp mat2 y[3] = x; 3921 x = y; 3922 success = (x == y); 3923 ${OUTPUT} 3924 } 3925 "" 3926 end 3927 3928 case equal_highp_mat3_lowp_mat3 3929 version 300 es 3930 values 3931 { 3932 output bool success = true; 3933 } 3934 3935 both "" 3936 #version 300 es 3937 precision highp float; 3938 ${DECLARATIONS} 3939 void main() 3940 { 3941 ${SETUP} 3942 highp mat3 x[3] = mat3[3](mat3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0), 3943 mat3(10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0), 3944 mat3(19.0, 20.0, 21.0, 22.0, 23.0, 24.0, 25.0, 26.0, 27.0)); 3945 lowp mat3 y[3] = x; 3946 x = y; 3947 success = (x == y); 3948 ${OUTPUT} 3949 } 3950 "" 3951 end 3952 3953 case equal_highp_mat4_lowp_mat4 3954 version 300 es 3955 values 3956 { 3957 output bool success = true; 3958 } 3959 3960 both "" 3961 #version 300 es 3962 precision highp float; 3963 ${DECLARATIONS} 3964 void main() 3965 { 3966 ${SETUP} 3967 highp mat4 x[3] = mat4[3](mat4(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0), 3968 mat4(17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 23.0, 24.0, 25.0, 26.0, 27.0, 28.0, 29.0, 30.0, 31.0, 32.0), 3969 mat4(33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 41.0, 42.0, 43.0, 44.0, 45.0, 46.0, 47.0, 48.0)); 3970 lowp mat4 y[3] = x; 3971 x = y; 3972 success = (x == y); 3973 ${OUTPUT} 3974 } 3975 "" 3976 end 3977 3978 case equal_highp_int_highp_int 3979 version 300 es 3980 values 3981 { 3982 output bool success = true; 3983 } 3984 3985 both "" 3986 #version 300 es 3987 precision highp float; 3988 ${DECLARATIONS} 3989 void main() 3990 { 3991 ${SETUP} 3992 highp int x[3] = int[3](1, 2, 3); 3993 highp int y[3] = x; 3994 x = y; 3995 success = (x == y); 3996 ${OUTPUT} 3997 } 3998 "" 3999 end 4000 4001 case equal_highp_uint_highp_uint 4002 version 300 es 4003 values 4004 { 4005 output bool success = true; 4006 } 4007 4008 both "" 4009 #version 300 es 4010 precision highp float; 4011 ${DECLARATIONS} 4012 void main() 4013 { 4014 ${SETUP} 4015 highp uint x[3] = uint[3](1u, 2u, 3u); 4016 highp uint y[3] = x; 4017 x = y; 4018 success = (x == y); 4019 ${OUTPUT} 4020 } 4021 "" 4022 end 4023 4024 case equal_highp_float_highp_float 4025 version 300 es 4026 values 4027 { 4028 output bool success = true; 4029 } 4030 4031 both "" 4032 #version 300 es 4033 precision highp float; 4034 ${DECLARATIONS} 4035 void main() 4036 { 4037 ${SETUP} 4038 highp float x[3] = float[3](1.0, 2.0, 3.0); 4039 highp float y[3] = x; 4040 x = y; 4041 success = (x == y); 4042 ${OUTPUT} 4043 } 4044 "" 4045 end 4046 4047 case equal_highp_vec2_highp_vec2 4048 version 300 es 4049 values 4050 { 4051 output bool success = true; 4052 } 4053 4054 both "" 4055 #version 300 es 4056 precision highp float; 4057 ${DECLARATIONS} 4058 void main() 4059 { 4060 ${SETUP} 4061 highp vec2 x[3] = vec2[3](vec2(1.0, 2.0), 4062 vec2(3.0, 4.0), 4063 vec2(5.0, 6.0)); 4064 highp vec2 y[3] = x; 4065 x = y; 4066 success = (x == y); 4067 ${OUTPUT} 4068 } 4069 "" 4070 end 4071 4072 case equal_highp_vec3_highp_vec3 4073 version 300 es 4074 values 4075 { 4076 output bool success = true; 4077 } 4078 4079 both "" 4080 #version 300 es 4081 precision highp float; 4082 ${DECLARATIONS} 4083 void main() 4084 { 4085 ${SETUP} 4086 highp vec3 x[3] = vec3[3](vec3(1.0, 2.0, 3.0), 4087 vec3(4.0, 5.0, 6.0), 4088 vec3(7.0, 8.0, 9.0)); 4089 highp vec3 y[3] = x; 4090 x = y; 4091 success = (x == y); 4092 ${OUTPUT} 4093 } 4094 "" 4095 end 4096 4097 case equal_highp_vec4_highp_vec4 4098 version 300 es 4099 values 4100 { 4101 output bool success = true; 4102 } 4103 4104 both "" 4105 #version 300 es 4106 precision highp float; 4107 ${DECLARATIONS} 4108 void main() 4109 { 4110 ${SETUP} 4111 highp vec4 x[3] = vec4[3](vec4(1.0, 2.0, 3.0, 4.0), 4112 vec4(5.0, 6.0, 7.0, 8.0), 4113 vec4(9.0, 10.0, 11.0, 12.0)); 4114 highp vec4 y[3] = x; 4115 x = y; 4116 success = (x == y); 4117 ${OUTPUT} 4118 } 4119 "" 4120 end 4121 4122 case equal_highp_ivec2_highp_ivec2 4123 version 300 es 4124 values 4125 { 4126 output bool success = true; 4127 } 4128 4129 both "" 4130 #version 300 es 4131 precision highp float; 4132 ${DECLARATIONS} 4133 void main() 4134 { 4135 ${SETUP} 4136 highp ivec2 x[3] = ivec2[3](ivec2(1, 2), 4137 ivec2(3, 4), 4138 ivec2(5, 6)); 4139 highp ivec2 y[3] = x; 4140 x = y; 4141 success = (x == y); 4142 ${OUTPUT} 4143 } 4144 "" 4145 end 4146 4147 case equal_highp_ivec3_highp_ivec3 4148 version 300 es 4149 values 4150 { 4151 output bool success = true; 4152 } 4153 4154 both "" 4155 #version 300 es 4156 precision highp float; 4157 ${DECLARATIONS} 4158 void main() 4159 { 4160 ${SETUP} 4161 highp ivec3 x[3] = ivec3[3](ivec3(1, 2, 3), 4162 ivec3(4, 5, 6), 4163 ivec3(7, 8, 9)); 4164 highp ivec3 y[3] = x; 4165 x = y; 4166 success = (x == y); 4167 ${OUTPUT} 4168 } 4169 "" 4170 end 4171 4172 case equal_highp_ivec4_highp_ivec4 4173 version 300 es 4174 values 4175 { 4176 output bool success = true; 4177 } 4178 4179 both "" 4180 #version 300 es 4181 precision highp float; 4182 ${DECLARATIONS} 4183 void main() 4184 { 4185 ${SETUP} 4186 highp ivec4 x[3] = ivec4[3](ivec4(1, 2, 3, 4), 4187 ivec4(5, 6, 7, 8), 4188 ivec4(9, 10, 11, 12)); 4189 highp ivec4 y[3] = x; 4190 x = y; 4191 success = (x == y); 4192 ${OUTPUT} 4193 } 4194 "" 4195 end 4196 4197 case equal_highp_uvec2_highp_uvec2 4198 version 300 es 4199 values 4200 { 4201 output bool success = true; 4202 } 4203 4204 both "" 4205 #version 300 es 4206 precision highp float; 4207 ${DECLARATIONS} 4208 void main() 4209 { 4210 ${SETUP} 4211 highp uvec2 x[3] = uvec2[3](uvec2(1u, 2u), 4212 uvec2(3u, 4u), 4213 uvec2(5u, 6u)); 4214 highp uvec2 y[3] = x; 4215 x = y; 4216 success = (x == y); 4217 ${OUTPUT} 4218 } 4219 "" 4220 end 4221 4222 case equal_highp_uvec3_highp_uvec3 4223 version 300 es 4224 values 4225 { 4226 output bool success = true; 4227 } 4228 4229 both "" 4230 #version 300 es 4231 precision highp float; 4232 ${DECLARATIONS} 4233 void main() 4234 { 4235 ${SETUP} 4236 highp uvec3 x[3] = uvec3[3](uvec3(1u, 2u, 3u), 4237 uvec3(4u, 5u, 6u), 4238 uvec3(7u, 8u, 9u)); 4239 highp uvec3 y[3] = x; 4240 x = y; 4241 success = (x == y); 4242 ${OUTPUT} 4243 } 4244 "" 4245 end 4246 4247 case equal_highp_uvec4_highp_uvec4 4248 version 300 es 4249 values 4250 { 4251 output bool success = true; 4252 } 4253 4254 both "" 4255 #version 300 es 4256 precision highp float; 4257 ${DECLARATIONS} 4258 void main() 4259 { 4260 ${SETUP} 4261 highp uvec4 x[3] = uvec4[3](uvec4(1u, 2u, 3u, 4u), 4262 uvec4(5u, 6u, 7u, 8u), 4263 uvec4(9u, 10u, 11u, 12u)); 4264 highp uvec4 y[3] = x; 4265 x = y; 4266 success = (x == y); 4267 ${OUTPUT} 4268 } 4269 "" 4270 end 4271 4272 case equal_highp_mat2_highp_mat2 4273 version 300 es 4274 values 4275 { 4276 output bool success = true; 4277 } 4278 4279 both "" 4280 #version 300 es 4281 precision highp float; 4282 ${DECLARATIONS} 4283 void main() 4284 { 4285 ${SETUP} 4286 highp mat2 x[3] = mat2[3](mat2(1.0, 2.0, 3.0, 4.0), 4287 mat2(5.0, 6.0, 7.0, 8.0), 4288 mat2(9.0, 10.0, 11.0, 12.0)); 4289 highp mat2 y[3] = x; 4290 x = y; 4291 success = (x == y); 4292 ${OUTPUT} 4293 } 4294 "" 4295 end 4296 4297 case equal_highp_mat3_highp_mat3 4298 version 300 es 4299 values 4300 { 4301 output bool success = true; 4302 } 4303 4304 both "" 4305 #version 300 es 4306 precision highp float; 4307 ${DECLARATIONS} 4308 void main() 4309 { 4310 ${SETUP} 4311 highp mat3 x[3] = mat3[3](mat3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0), 4312 mat3(10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0), 4313 mat3(19.0, 20.0, 21.0, 22.0, 23.0, 24.0, 25.0, 26.0, 27.0)); 4314 highp mat3 y[3] = x; 4315 x = y; 4316 success = (x == y); 4317 ${OUTPUT} 4318 } 4319 "" 4320 end 4321 4322 case equal_highp_mat4_highp_mat4 4323 version 300 es 4324 values 4325 { 4326 output bool success = true; 4327 } 4328 4329 both "" 4330 #version 300 es 4331 precision highp float; 4332 ${DECLARATIONS} 4333 void main() 4334 { 4335 ${SETUP} 4336 highp mat4 x[3] = mat4[3](mat4(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0), 4337 mat4(17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 23.0, 24.0, 25.0, 26.0, 27.0, 28.0, 29.0, 30.0, 31.0, 32.0), 4338 mat4(33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 41.0, 42.0, 43.0, 44.0, 45.0, 46.0, 47.0, 48.0)); 4339 highp mat4 y[3] = x; 4340 x = y; 4341 success = (x == y); 4342 ${OUTPUT} 4343 } 4344 "" 4345 end 4346 4347end # compare 4348