1#X1. Constructor tests test constructing arrays of arrays with different declaration syntax and data types. 2#X2. Return value tests test arrays of arrays as function return values. 3#X3. Parameter tests test arrays of arrays as different types of function parameters (in, out, unnamed). 4#X4. Implicit size tests test constructing arrays of arrays with implicit size. 5#X5. Assignment tests test assigning an array of arrays to another array of arrays variable. 6#X6. Length tests test the length method of arrays of arrays. 7#X8. Array access tests test array element access at initialization with const/dynamic values 8 9group constructor "Array of arrays constructors" 10 11 group explicit "Testing constructors with explicit sizes" 12 case float_3x3 13 version 310 es 14 desc "Testing constructing explicitly sized arrays of arrays" 15 values 16 { 17 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(7.4, -1.0, 2.0) | vec3(3.0, 1.6, -2.0) ]; 18 output vec3 out0 = [ vec3(2.0, 0.5, 1.0) | vec3(2.0, 7.4, -1.0) | vec3(-2.0, 3.0, 1.6) ]; 19 } 20 21 both "" 22 #version 310 es 23 precision mediump float; 24 ${DECLARATIONS} 25 26 void main() 27 { 28 ${SETUP} 29 float[3][3] x; 30 x = float[3][3] ( float[3] (in0.z, in0.x, in0.y), 31 float[3] (in0.z, in0.x, in0.y), 32 float[3] (in0.z, in0.x, in0.y) ); 33 out0 = vec3(x[0][0], x[1][1], x[2][2]); 34 ${OUTPUT} 35 } 36 "" 37 end 38 39 case float_3x4 40 version 310 es 41 desc "Testing constructing explicitly sized arrays of arrays" 42 values 43 { 44 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) ]; 45 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) ]; 46 } 47 48 both "" 49 #version 310 es 50 precision mediump float; 51 ${DECLARATIONS} 52 53 void main() 54 { 55 ${SETUP} 56 float[3][4] x; 57 x = float[3][4] ( float[4] (in0.z, in0.x, in0.w, in0.y), 58 float[4] (in0.z, in0.x, in0.w, in0.y), 59 float[4] (in0.z, in0.x, in0.w, in0.y) ); 60 out0 = vec4(x[0][0], x[1][1], x[2][2], x[2][3]); 61 ${OUTPUT} 62 } 63 "" 64 end 65 66 case int_3x1 67 version 310 es 68 desc "Testing constructing explicitly sized arrays of arrays" 69 values 70 { 71 input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(7, -1, 2) | ivec3(3, 1, -2) ]; 72 output ivec3 out0 = [ ivec3(2, 0, 1) | ivec3(2, 7, -1) | ivec3(-2, 3, 1) ]; 73 } 74 75 both "" 76 #version 310 es 77 precision mediump int; 78 precision mediump float; 79 ${DECLARATIONS} 80 81 void main() 82 { 83 ${SETUP} 84 int x[3][1]; 85 x = int[3][1] ( int[1] (in0.z), 86 int[1] (in0.x), 87 int[1] (in0.y) ); 88 out0 = ivec3(x[0][0], x[1][0], x[2][0]); 89 ${OUTPUT} 90 } 91 "" 92 end 93 94 case int_4x4x4 95 version 310 es 96 desc "Testing constructing explicitly sized arrays of arrays" 97 values 98 { 99 input ivec4 in0 = [ ivec4(0, 1, 2, 0) | ivec4(7, -1, 2, -1) | ivec4(3, 1, -2, 0) ]; 100 output ivec4 out0 = [ ivec4(2, 0, 0, 1) | ivec4(2, 7, -1, -1) | ivec4(-2, 3, 0, 1) ]; 101 } 102 103 both "" 104 #version 310 es 105 precision mediump int; 106 precision mediump float; 107 ${DECLARATIONS} 108 109 void main() 110 { 111 ${SETUP} 112 int[4] x[4][4]; 113 x = int[4][4][4] ( int[4][4] ( (int[4] (in0.z, in0.x, in0.w, in0.y)), 114 (int[4] (in0.z, in0.x, in0.w, in0.y)), 115 (int[4] (in0.z, in0.x, in0.w, in0.y)), 116 (int[4] (in0.z, in0.x, in0.w, in0.y))), 117 118 int[4][4] ( (int[4] (in0.z, in0.x, in0.w, in0.y)), 119 (int[4] (in0.z, in0.x, in0.w, in0.y)), 120 (int[4] (in0.z, in0.x, in0.w, in0.y)), 121 (int[4] (in0.z, in0.x, in0.w, in0.y))), 122 123 int[4][4] ( (int[4] (in0.z, in0.x, in0.w, in0.y)), 124 (int[4] (in0.z, in0.x, in0.w, in0.y)), 125 (int[4] (in0.z, in0.x, in0.w, in0.y)), 126 (int[4] (in0.z, in0.x, in0.w, in0.y))), 127 128 int[4][4] ( (int[4] (in0.z, in0.x, in0.w, in0.y)), 129 (int[4] (in0.z, in0.x, in0.w, in0.y)), 130 (int[4] (in0.z, in0.x, in0.w, in0.y)), 131 (int[4] (in0.z, in0.x, in0.w, in0.y))) ); 132 133 out0 = ivec4(x[0][0][0], x[1][1][1], x[2][2][2], x[3][3][3]); 134 ${OUTPUT} 135 } 136 "" 137 end 138 139 case bool_3x3x3 140 version 310 es 141 desc "Testing constructing explicitly sized arrays of arrays" 142 values 143 { 144 input bvec3 in0 = [ bvec3(true, true, false) ]; 145 output bvec3 out0 = [ bvec3(false, true, true) ]; 146 } 147 148 both "" 149 #version 310 es 150 precision mediump float; 151 ${DECLARATIONS} 152 153 void main() 154 { 155 ${SETUP} 156 bool[3][3][3] x; 157 x = bool[3][3][3] ( bool[3][3] ((bool[3] (in0.y, in0.y, in0.y)), 158 (bool[3] (in0.z, in0.z, in0.z)), 159 (bool[3] (in0.x, in0.x, in0.x))), 160 161 bool[3][3] ((bool[3] (in0.y, in0.y, in0.y)), 162 (bool[3] (in0.z, in0.z, in0.z)), 163 (bool[3] (in0.x, in0.x, in0.x))), 164 165 bool[3][3] ((bool[3] (in0.y, in0.y, in0.y)), 166 (bool[3] (in0.z, in0.z, in0.z)), 167 (bool[3] (in0.x, in0.x, in0.x))) ); 168 169 out0 = bvec3(x[1][1][1], x[0][0][0], x[2][2][2]); 170 ${OUTPUT} 171 } 172 "" 173 end 174 175 case bool_2x1x4 176 version 310 es 177 desc "Testing constructing explicitly sized arrays of arrays" 178 values 179 { 180 input bvec4 in0 = [ bvec4(true, true, false, false) ]; 181 output bvec4 out0 = [ bvec4(false, true, true, false) ]; 182 } 183 184 both "" 185 #version 310 es 186 precision mediump float; 187 ${DECLARATIONS} 188 189 void main() 190 { 191 ${SETUP} 192 bool x[2][1][4]; 193 x = bool[2][1][4] ( bool[1][4] ((bool[4] (in0.z, in0.x, in0.y, in0.w))), 194 bool[1][4] ((bool[4] (in0.z, in0.x, in0.y, in0.w))) ); 195 out0 = bvec4(x[0][0][0], x[0][0][1], x[1][0][2], x[1][0][3]); 196 ${OUTPUT} 197 } 198 "" 199 end 200 201 case struct_3x2 202 version 310 es 203 desc "Testing constructing explicitly sized arrays of arrays" 204 values 205 { 206 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ]; 207 output vec3 out0 = [ vec3(2.0, -0.5, -1.0) ]; 208 } 209 210 both "" 211 #version 310 es 212 precision mediump float; 213 ${DECLARATIONS} 214 215 void main() 216 { 217 ${SETUP} 218 219 struct Test 220 { 221 float f; 222 vec3 v; 223 }; 224 225 Test a = Test(in0.z, vec3(in0.x, in0.y, in0.z)); 226 Test b = Test(in0.y, vec3(-in0.z, -in0.x, -in0.y)); 227 Test c = Test(in0.x, vec3(-in0.y, in0.z, -in0.x)); 228 229 Test[2] x[3] = Test[3][2] ( (Test[2] (a, b)), 230 (Test[2] (c, a)), 231 (Test[2] (b, c)) ); 232 233 out0 = vec3(x[0][0].f, x[0][1].v.y, x[2][1].v.x); 234 ${OUTPUT} 235 } 236 "" 237 end 238 239 case struct_4x1x4 240 version 310 es 241 desc "Testing constructing explicitly sized arrays of arrays" 242 values 243 { 244 input vec4 in0 = [ vec4(0.5, 1.0, 2.0, 1.5) ]; 245 output vec4 out0 = [ vec4(2.0, -0.5, -1.0, -1.5) ]; 246 } 247 248 both "" 249 #version 310 es 250 precision mediump float; 251 ${DECLARATIONS} 252 253 void main() 254 { 255 ${SETUP} 256 257 struct Test 258 { 259 float f; 260 vec3 v; 261 }; 262 263 Test a = Test(in0.z, vec3(in0.x, in0.y, in0.z)); 264 Test b = Test(in0.y, vec3(-in0.z, -in0.x, -in0.y)); 265 Test c = Test(in0.x, vec3(-in0.y, in0.z, -in0.x)); 266 Test d = Test(-in0.w, vec3(-in0.w, -in0.x, -in0.z)); 267 268 Test[4] x[4][1] = Test[4][1][4] ( (Test[1][4] (Test[4] (a, b, c, d))), 269 (Test[1][4] (Test[4] (a, b, c, d))), 270 (Test[1][4] (Test[4] (a, b, c, d))), 271 (Test[1][4] (Test[4] (a, b, c, d))) ); 272 273 out0 = vec4(x[0][0][0].f, x[1][0][1].v.y, x[2][0][2].v.x, x[3][0][3].v.x); 274 ${OUTPUT} 275 } 276 "" 277 end 278 279 case vec3_4x3 280 version 310 es 281 desc "Testing constructing explicitly sized arrays of arrays" 282 values 283 { 284 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(7.4, -1.0, 2.0) | vec3(3.0, 1.6, -2.0) ]; 285 output vec3 out0 = [ vec3(0.5, -2.0, 1.0) | vec3(7.4, -2.0, -1.0) | vec3(3.0, 2.0, 1.6) ]; 286 } 287 288 both "" 289 #version 310 es 290 precision mediump float; 291 ${DECLARATIONS} 292 293 void main() 294 { 295 ${SETUP} 296 297 vec3[3] x[4]; 298 x = vec3[4][3] (vec3[3] ( vec3(in0.x, in0.y, in0.z), 299 vec3(-in0.y, -in0.z, -in0.x), 300 vec3(in0.z, in0.x, in0.y)), 301 vec3[3] ( vec3(in0.x, in0.y, in0.z), 302 vec3(-in0.y, -in0.z, -in0.x), 303 vec3(in0.z, in0.x, in0.y)), 304 vec3[3] ( vec3(in0.x, in0.y, in0.z), 305 vec3(-in0.y, -in0.z, -in0.x), 306 vec3(in0.z, in0.x, in0.y)), 307 vec3[3] ( vec3(in0.x, in0.y, in0.z), 308 vec3(-in0.y, -in0.z, -in0.x), 309 vec3(in0.z, in0.x, in0.y)) ); 310 311 out0 = vec3(x[0][0].x, x[1][1].y, x[3][2].z); 312 ${OUTPUT} 313 } 314 "" 315 end 316 317 case ivec3_3x2x1 318 version 310 es 319 desc "Testing constructing explicitly sized arrays of arrays" 320 values 321 { 322 input ivec3 in0 = [ ivec3(5, 1, 2) | ivec3(7, -1, 2) | ivec3(3, 1, -2) ]; 323 output ivec3 out0 = [ ivec3(5, -2, 1) | ivec3(7, -2, -1) | ivec3(3, 2, 1) ]; 324 } 325 326 both "" 327 #version 310 es 328 precision mediump int; 329 precision mediump float; 330 ${DECLARATIONS} 331 332 void main() 333 { 334 ${SETUP} 335 336 ivec3 x[3][2][1]; 337 x = ivec3[3][2][1] (ivec3[2][1] ( ivec3[1] (ivec3(in0.x, in0.y, in0.z)), 338 ivec3[1] (ivec3(-in0.y, -in0.z, -in0.x))), 339 ivec3[2][1] ( ivec3[1] (ivec3(in0.z, in0.x, in0.y)), 340 ivec3[1] (ivec3(in0.x, in0.y, in0.z))), 341 ivec3[2][1] ( ivec3[1] (ivec3(-in0.y, -in0.z, -in0.x)), 342 ivec3[1] (ivec3(in0.z, in0.x, in0.y))) ); 343 344 out0 = ivec3(x[0][0][0].x, x[2][0][0].y, x[1][0][0].z); 345 ${OUTPUT} 346 } 347 "" 348 end 349 350 case bvec3_1x2x3 351 version 310 es 352 desc "Testing constructing explicitly sized arrays of arrays" 353 values 354 { 355 input bvec3 in0 = [ bvec3(true, false, true) ]; 356 output bvec3 out0 = [ bvec3(true, true, false) ]; 357 } 358 359 both "" 360 #version 310 es 361 precision mediump float; 362 ${DECLARATIONS} 363 364 void main() 365 { 366 ${SETUP} 367 368 bvec3[3] x[1][2]; 369 x = bvec3[1][2][3] ( bvec3[2][3] ( bvec3[3] ( bvec3(in0.x, in0.y, in0.z), 370 bvec3(in0.y, in0.z, in0.x), 371 bvec3(in0.z, in0.x, in0.y)), 372 373 bvec3[3] ( bvec3(in0.z, in0.x, in0.y), 374 bvec3(in0.x, in0.y, in0.z), 375 bvec3(in0.y, in0.z, in0.x)) )); 376 377 out0 = bvec3(x[0][0][0].x, x[0][0][1].y, x[0][1][0].z); 378 ${OUTPUT} 379 } 380 "" 381 end 382 383 case mat3_3x2 384 version 310 es 385 desc "Testing constructing explicitly sized arrays of arrays" 386 values 387 { 388 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-1.5, 0.0, -2.3) ]; 389 output vec3 out0 = [ vec3(0.5, -1.0, 1.0) | vec3(-1.5, 0.0, 0.0) ]; 390 } 391 392 both "" 393 #version 310 es 394 precision mediump float; 395 ${DECLARATIONS} 396 397 void main() 398 { 399 ${SETUP} 400 mat3[3][2] a = mat3[3][2] ( mat3[2] ( mat3( in0.x, in0.y, in0.z, 401 in0.x, in0.y, in0.z, 402 in0.x, in0.y, in0.z), 403 mat3( in0.z, in0.x, -in0.y, 404 in0.z, in0.x, -in0.y, 405 in0.z, in0.x, -in0.y)), 406 407 mat3[2] ( mat3( -in0.z, -in0.z, in0.z, 408 -in0.y, -in0.y, in0.y, 409 -in0.x, -in0.x, in0.x), 410 mat3( in0.x, in0.y, in0.z, 411 in0.x, in0.y, in0.z, 412 in0.x, in0.y, in0.z)), 413 414 mat3[2] ( mat3( in0.z, in0.x, -in0.y, 415 in0.z, in0.x, -in0.y, 416 in0.z, in0.x, -in0.y), 417 mat3( -in0.z, -in0.z, in0.z, 418 -in0.y, -in0.y, in0.y, 419 -in0.x, -in0.x, in0.x)) ); 420 421 mat3 a0 = a[0][0]; 422 mat3 a1 = a[0][1]; 423 mat3 a2 = a[2][1]; 424 425 float ret0 = a0[2][0]; 426 float ret1 = a1[0][2]; 427 float ret2 = a2[1][2]; 428 429 out0 = vec3(ret0, ret1, ret2); 430 ${OUTPUT} 431 } 432 "" 433 end 434 435 case mat3_3x3x3 436 version 310 es 437 desc "Testing constructing explicitly sized arrays of arrays" 438 values 439 { 440 input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(-1, 0, -2) ]; 441 output ivec3 out0 = [ ivec3(0, -1, 1) | ivec3(-1, 0, 0) ]; 442 } 443 444 both "" 445 #version 310 es 446 precision mediump int; 447 precision mediump float; 448 ${DECLARATIONS} 449 450 void main() 451 { 452 ${SETUP} 453 454 mat3 a = mat3( in0.x, in0.y, in0.z, 455 in0.x, in0.y, in0.z, 456 in0.x, in0.y, in0.z); 457 mat3 b = mat3( in0.z, in0.x, -in0.y, 458 in0.z, in0.x, -in0.y, 459 in0.z, in0.x, -in0.y); 460 mat3 c = mat3( -in0.z, -in0.z, in0.z, 461 -in0.y, -in0.y, in0.y, 462 -in0.x, -in0.x, in0.x); 463 464 mat3[3][3][3] x = mat3[3][3][3] ( mat3[3][3] (mat3[3] (a, a, a), 465 mat3[3] (b, b, b), 466 mat3[3] (c, c, c)), 467 468 mat3[3][3] (mat3[3] (b, b, b), 469 mat3[3] (a, a, a), 470 mat3[3] (c, c, c)), 471 472 mat3[3][3] (mat3[3] (c, c, c), 473 mat3[3] (a, a, a), 474 mat3[3] (b, b, b)) ); 475 476 mat3 x0 = x[0][0][0]; 477 mat3 x1 = x[1][0][0]; 478 mat3 x2 = x[2][0][0]; 479 480 float ret0 = x0[2][0]; 481 float ret1 = x1[0][2]; 482 float ret2 = x2[1][2]; 483 484 out0 = ivec3(ret0, ret1, ret2); 485 ${OUTPUT} 486 } 487 "" 488 end 489 490 case mat3_3x4 491 version 310 es 492 desc "Testing constructing explicitly sized arrays of arrays" 493 values 494 { 495 input bvec3 in0 = [ bvec3(true, false, true) ]; 496 output bvec3 out0 = [ bvec3(true, false, false) ]; 497 } 498 499 both "" 500 #version 310 es 501 precision mediump float; 502 ${DECLARATIONS} 503 504 void main() 505 { 506 ${SETUP} 507 508 mat3 a = mat3( in0.x, in0.y, in0.z, 509 in0.x, in0.y, in0.z, 510 in0.x, in0.y, in0.z); 511 512 mat3 b = mat3( in0.z, in0.x, in0.y, 513 in0.z, in0.x, in0.y, 514 in0.z, in0.x, in0.y); 515 516 mat3 c = mat3( in0.z, in0.z, in0.z, 517 in0.y, in0.y, in0.y, 518 in0.x, in0.x, in0.x); 519 520 mat3[4] x[3] = mat3[3][4] ( mat3[4] (a, b, c, a), 521 mat3[4] (b, c, a, b), 522 mat3[4] (c, a, b, c) ); 523 524 mat3 x0 = x[0][0]; 525 mat3 x1 = x[1][3]; 526 mat3 x2 = x[2][0]; 527 528 float ret0 = x0[2][0]; 529 float ret1 = x1[0][2]; 530 float ret2 = x2[1][2]; 531 532 out0 = bvec3(ret0, ret1, ret2); 533 ${OUTPUT} 534 } 535 "" 536 end 537 538 case high_dimensional_array 539 version 310 es 540 desc "Testing constructing explicitly sized arrays of arrays" 541 values 542 { 543 input ivec2 in0 = [ ivec2(1, -2) ]; 544 output ivec2 out0 = [ ivec2(-2, 1) ]; 545 } 546 547 both "" 548 #version 310 es 549 precision mediump float; 550 ${DECLARATIONS} 551 552 void main() 553 { 554 ${SETUP} 555 556 int[1][1][1][2][1][1][1] x = int[1][1][1][2][1][1][1] ( int[1][1][2][1][1][1] (int [1][2][1][1][1] ( int[2][1][1][1] ( int[1][1][1] ( int[1][1] (int[1] (in0.y))), 557 int[1][1][1] ( int[1][1] (int[1] (in0.x))))))); 558 559 out0 = ivec2(x[0][0][0][0][0][0][0], x[0][0][0][1][0][0][0]); 560 ${OUTPUT} 561 } 562 "" 563 end 564 565 end # explicit 566 567 group implicit "Testing constructors with implicit size" 568 569 case float_3x3 570 version 310 es 571 desc "Testing constructing implicitly sized arrays of arrays" 572 values 573 { 574 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(7.4, -1.0, 2.0) | vec3(3.0, 1.6, -2.0) ]; 575 output vec3 out0 = [ vec3(2.0, 0.5, 1.0) | vec3(2.0, 7.4, -1.0) | vec3(-2.0, 3.0, 1.6) ]; 576 } 577 578 both "" 579 #version 310 es 580 precision mediump float; 581 ${DECLARATIONS} 582 583 void main() 584 { 585 ${SETUP} 586 float[3][3] x; 587 x = float[][] ( float[](in0.z, in0.x, in0.y), 588 float[](in0.z, in0.x, in0.y), 589 float[](in0.z, in0.x, in0.y) ); 590 591 out0 = vec3(x[0][0], x[1][1], x[2][2]); 592 ${OUTPUT} 593 } 594 "" 595 end 596 597 case float_3x4 598 version 310 es 599 desc "Testing constructing implicitly sized arrays of arrays" 600 values 601 { 602 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) ]; 603 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) ]; 604 } 605 606 both "" 607 #version 310 es 608 precision mediump float; 609 ${DECLARATIONS} 610 611 void main() 612 { 613 ${SETUP} 614 float[3][4] x; 615 x = float[][] ( float[] (in0.z, in0.x, in0.w, in0.y), 616 float[] (in0.z, in0.x, in0.w, in0.y), 617 float[] (in0.z, in0.x, in0.w, in0.y) ); 618 619 out0 = vec4(x[0][0], x[1][1], x[2][2], x[2][3]); 620 ${OUTPUT} 621 } 622 "" 623 end 624 625 case int_3x1 626 version 310 es 627 desc "Testing constructing implicitly sized arrays of arrays" 628 values 629 { 630 input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(7, -1, 2) | ivec3(3, 1, -2) ]; 631 output ivec3 out0 = [ ivec3(2, 0, 1) | ivec3(2, 7, -1) | ivec3(-2, 3, 1) ]; 632 } 633 634 both "" 635 #version 310 es 636 precision mediump int; 637 precision mediump float; 638 ${DECLARATIONS} 639 640 void main() 641 { 642 ${SETUP} 643 int x[3][1]; 644 x = int[][] ( int[] (in0.z), 645 int[] (in0.x), 646 int[] (in0.y) ); 647 648 out0 = ivec3(x[0][0], x[1][0], x[2][0]); 649 ${OUTPUT} 650 } 651 "" 652 end 653 654 case int_4x4x4 655 version 310 es 656 desc "Testing constructing implicitly sized arrays of arrays" 657 values 658 { 659 input ivec4 in0 = [ ivec4(0, 1, 2, 0) | ivec4(7, -1, 2, -1) | ivec4(3, 1, -2, 0) ]; 660 output ivec4 out0 = [ ivec4(2, 0, 0, 1) | ivec4(2, 7, -1, -1) | ivec4(-2, 3, 0, 1) ]; 661 } 662 663 both "" 664 #version 310 es 665 precision mediump int; 666 precision mediump float; 667 ${DECLARATIONS} 668 669 void main() 670 { 671 ${SETUP} 672 int[4] x[4][4]; 673 x = int[][][] ( int[][] ((int[] (in0.z, in0.x, in0.w, in0.y)), 674 (int[] (in0.z, in0.x, in0.w, in0.y)), 675 (int[] (in0.z, in0.x, in0.w, in0.y)), 676 (int[] (in0.z, in0.x, in0.w, in0.y))), 677 678 int[][] ((int[] (in0.z, in0.x, in0.w, in0.y)), 679 (int[] (in0.z, in0.x, in0.w, in0.y)), 680 (int[] (in0.z, in0.x, in0.w, in0.y)), 681 (int[] (in0.z, in0.x, in0.w, in0.y))), 682 683 int[][] ((int[] (in0.z, in0.x, in0.w, in0.y)), 684 (int[] (in0.z, in0.x, in0.w, in0.y)), 685 (int[] (in0.z, in0.x, in0.w, in0.y)), 686 (int[] (in0.z, in0.x, in0.w, in0.y))), 687 688 int[][] ((int[] (in0.z, in0.x, in0.w, in0.y)), 689 (int[] (in0.z, in0.x, in0.w, in0.y)), 690 (int[] (in0.z, in0.x, in0.w, in0.y)), 691 (int[] (in0.z, in0.x, in0.w, in0.y))) ); 692 693 out0 = ivec4(x[0][0][0], x[1][1][1], x[2][2][2], x[3][3][3]); 694 ${OUTPUT} 695 } 696 "" 697 end 698 699 case bool_3x3x3 700 version 310 es 701 desc "Testing constructing implicitly sized arrays of arrays" 702 values 703 { 704 input bvec3 in0 = [ bvec3(true, true, false) ]; 705 output bvec3 out0 = [ bvec3(false, true, true) ]; 706 } 707 708 both "" 709 #version 310 es 710 precision mediump float; 711 ${DECLARATIONS} 712 713 void main() 714 { 715 ${SETUP} 716 bool[3][3][3] x; 717 x = bool[][][] (bool[][] ( (bool[] (in0.y, in0.y, in0.y)), 718 (bool[] (in0.z, in0.z, in0.z)), 719 (bool[] (in0.x, in0.x, in0.x))), 720 721 bool[][] ( (bool[] (in0.y, in0.y, in0.y)), 722 (bool[] (in0.z, in0.z, in0.z)), 723 (bool[] (in0.x, in0.x, in0.x))), 724 725 bool[][] ( (bool[] (in0.y, in0.y, in0.y)), 726 (bool[] (in0.z, in0.z, in0.z)), 727 (bool[] (in0.x, in0.x, in0.x))) ); 728 729 out0 = bvec3(x[1][1][1], x[0][0][0], x[2][2][2]); 730 ${OUTPUT} 731 } 732 "" 733 end 734 735 case bool_2x1x4 736 version 310 es 737 desc "Testing constructing implicitly sized arrays of arrays" 738 values 739 { 740 input bvec4 in0 = [ bvec4(true, true, false, false) ]; 741 output bvec4 out0 = [ bvec4(false, true, true, false) ]; 742 } 743 744 both "" 745 #version 310 es 746 precision mediump float; 747 ${DECLARATIONS} 748 749 void main() 750 { 751 ${SETUP} 752 bool x[2][1][4]; 753 x = bool[2][1][4] ( bool[][] ((bool[] (in0.z, in0.x, in0.y, in0.w))), 754 bool[][] ((bool[] (in0.z, in0.x, in0.y, in0.w))) ); 755 out0 = bvec4(x[0][0][0], x[0][0][1], x[1][0][2], x[1][0][3]); 756 ${OUTPUT} 757 } 758 "" 759 end 760 761 case struct_3x2 762 version 310 es 763 desc "Testing constructing implicitly sized arrays of arrays" 764 values 765 { 766 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ]; 767 output vec3 out0 = [ vec3(2.0, -0.5, -1.0) ]; 768 } 769 770 both "" 771 #version 310 es 772 precision mediump float; 773 ${DECLARATIONS} 774 775 void main() 776 { 777 ${SETUP} 778 779 struct Test 780 { 781 float f; 782 vec3 v; 783 }; 784 785 Test a = Test(in0.z, vec3(in0.x, in0.y, in0.z)); 786 Test b = Test(in0.y, vec3(-in0.z, -in0.x, -in0.y)); 787 Test c = Test(in0.x, vec3(-in0.y, in0.z, -in0.x)); 788 789 Test[2] x[3] = Test[][] ( (Test[] (a, b)), 790 (Test[] (c, a)), 791 (Test[] (b, c)) ); 792 793 out0 = vec3(x[0][0].f, x[0][1].v.y, x[2][1].v.x); 794 ${OUTPUT} 795 } 796 "" 797 end 798 799 case struct_4x1x4 800 version 310 es 801 desc "Testing constructing implicitly sized arrays of arrays" 802 values 803 { 804 input vec4 in0 = [ vec4(0.5, 1.0, 2.0, 1.5) ]; 805 output vec4 out0 = [ vec4(2.0, -0.5, -1.0, -1.5) ]; 806 } 807 808 both "" 809 #version 310 es 810 precision mediump float; 811 ${DECLARATIONS} 812 813 void main() 814 { 815 ${SETUP} 816 817 818 struct Test 819 { 820 float f; 821 vec3 v; 822 }; 823 824 Test a = Test(in0.z, vec3(in0.x, in0.y, in0.z)); 825 Test b = Test(in0.y, vec3(-in0.z, -in0.x, -in0.y)); 826 Test c = Test(in0.x, vec3(-in0.y, in0.z, -in0.x)); 827 Test d = Test(-in0.w, vec3(-in0.w, -in0.x, -in0.z)); 828 829 Test[4] x[4][1] = Test[][][] ( (Test[][] (Test[] (a, b, c, d))), 830 (Test[][] (Test[] (a, b, c, d))), 831 (Test[][] (Test[] (a, b, c, d))), 832 (Test[][] (Test[] (a, b, c, d))) ); 833 834 out0 = vec4(x[0][0][0].f, x[1][0][1].v.y, x[2][0][2].v.x, x[3][0][3].v.x); 835 ${OUTPUT} 836 } 837 "" 838 end 839 840 case vec3_4x3 841 version 310 es 842 desc "Testing constructing implicitly sized arrays of arrays" 843 values 844 { 845 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(7.4, -1.0, 2.0) | vec3(3.0, 1.6, -2.0) ]; 846 output vec3 out0 = [ vec3(0.5, -2.0, 1.0) | vec3(7.4, -2.0, -1.0) | vec3(3.0, 2.0, 1.6) ]; 847 } 848 849 both "" 850 #version 310 es 851 precision mediump float; 852 ${DECLARATIONS} 853 854 void main() 855 { 856 ${SETUP} 857 858 vec3[3] x[4]; 859 x = vec3[][] ( vec3[] ( vec3(in0.x, in0.y, in0.z), 860 vec3(-in0.y, -in0.z, -in0.x), 861 vec3(in0.z, in0.x, in0.y)), 862 vec3[] ( vec3(in0.x, in0.y, in0.z), 863 vec3(-in0.y, -in0.z, -in0.x), 864 vec3(in0.z, in0.x, in0.y)), 865 866 vec3[] ( vec3(in0.x, in0.y, in0.z), 867 vec3(-in0.y, -in0.z, -in0.x), 868 vec3(in0.z, in0.x, in0.y)), 869 870 vec3[] ( vec3(in0.x, in0.y, in0.z), 871 vec3(-in0.y, -in0.z, -in0.x), 872 vec3(in0.z, in0.x, in0.y)) ); 873 874 out0 = vec3(x[0][0].x, x[1][1].y, x[3][2].z); 875 ${OUTPUT} 876 } 877 "" 878 end 879 880 case ivec3_3x2x1 881 version 310 es 882 desc "Testing constructing implicitly sized arrays of arrays" 883 values 884 { 885 input ivec3 in0 = [ ivec3(5, 1, 2) | ivec3(7, -1, 2) | ivec3(3, 1, -2) ]; 886 output ivec3 out0 = [ ivec3(5, -2, 1) | ivec3(7, -2, -1) | ivec3(3, 2, 1) ]; 887 } 888 889 both "" 890 #version 310 es 891 precision mediump int; 892 precision mediump float; 893 ${DECLARATIONS} 894 895 void main() 896 { 897 ${SETUP} 898 899 ivec3 x[3][2][1]; 900 x = ivec3[][][] ( ivec3[][] ( ivec3[] (ivec3(in0.x, in0.y, in0.z)), 901 ivec3[] (ivec3(-in0.y, -in0.z, -in0.x))), 902 ivec3[][] ( ivec3[] (ivec3(in0.z, in0.x, in0.y)), 903 ivec3[] (ivec3(in0.x, in0.y, in0.z))), 904 ivec3[][] ( ivec3[] (ivec3(-in0.y, -in0.z, -in0.x)), 905 ivec3[] (ivec3(in0.z, in0.x, in0.y))) ); 906 out0 = ivec3(x[0][0][0].x, x[2][0][0].y, x[1][0][0].z); 907 ${OUTPUT} 908 } 909 "" 910 end 911 912 case bvec3_1x2x3 913 version 310 es 914 desc "Testing constructing implicitly sized arrays of arrays" 915 values 916 { 917 input bvec3 in0 = [ bvec3(true, false, true) ]; 918 output bvec3 out0 = [ bvec3(true, true, false) ]; 919 } 920 921 both "" 922 #version 310 es 923 precision mediump float; 924 ${DECLARATIONS} 925 926 void main() 927 { 928 ${SETUP} 929 930 bvec3[3] x[1][2]; 931 x = bvec3[][][] ( bvec3[][] ( bvec3[] (bvec3(in0.x, in0.y, in0.z), 932 bvec3(in0.y, in0.z, in0.x), 933 bvec3(in0.z, in0.x, in0.y)), 934 935 bvec3[] (bvec3(in0.z, in0.x, in0.y), 936 bvec3(in0.x, in0.y, in0.z), 937 bvec3(in0.y, in0.z, in0.x)) )); 938 939 out0 = bvec3(x[0][0][0].x, x[0][0][1].y, x[0][1][0].z); 940 ${OUTPUT} 941 } 942 "" 943 end 944 945 case mat3_3x2 946 version 310 es 947 desc "Testing constructing implicitly sized arrays of arrays" 948 values 949 { 950 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-1.5, 0.0, -2.3) ]; 951 output vec3 out0 = [ vec3(0.5, -1.0, 1.0) | vec3(-1.5, 0.0, 0.0) ]; 952 } 953 954 both "" 955 #version 310 es 956 precision mediump float; 957 ${DECLARATIONS} 958 959 void main() 960 { 961 ${SETUP} 962 mat3[3][2] a = mat3[][] ( mat3[] (mat3( in0.x, in0.y, in0.z, 963 in0.x, in0.y, in0.z, 964 in0.x, in0.y, in0.z), 965 mat3( in0.z, in0.x, -in0.y, 966 in0.z, in0.x, -in0.y, 967 in0.z, in0.x, -in0.y)), 968 969 mat3[] (mat3( -in0.z, -in0.z, in0.z, 970 -in0.y, -in0.y, in0.y, 971 -in0.x, -in0.x, in0.x), 972 mat3( in0.x, in0.y, in0.z, 973 in0.x, in0.y, in0.z, 974 in0.x, in0.y, in0.z)), 975 976 mat3[] (mat3( in0.z, in0.x, -in0.y, 977 in0.z, in0.x, -in0.y, 978 in0.z, in0.x, -in0.y), 979 mat3( -in0.z, -in0.z, in0.z, 980 -in0.y, -in0.y, in0.y, 981 -in0.x, -in0.x, in0.x)) ); 982 983 mat3 a0 = a[0][0]; 984 mat3 a1 = a[0][1]; 985 mat3 a2 = a[2][1]; 986 987 float ret0 = a0[2][0]; 988 float ret1 = a1[0][2]; 989 float ret2 = a2[1][2]; 990 991 out0 = vec3(ret0, ret1, ret2); 992 ${OUTPUT} 993 } 994 "" 995 end 996 997 case mat3_3x3x3 998 version 310 es 999 desc "Testing constructing implicitly sized arrays of arrays" 1000 values 1001 { 1002 input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(-1, 0, -2) ]; 1003 output ivec3 out0 = [ ivec3(0, -1, 1) | ivec3(-1, 0, 0) ]; 1004 } 1005 1006 both "" 1007 #version 310 es 1008 precision mediump int; 1009 precision mediump float; 1010 ${DECLARATIONS} 1011 1012 void main() 1013 { 1014 ${SETUP} 1015 1016 mat3 a = mat3( in0.x, in0.y, in0.z, 1017 in0.x, in0.y, in0.z, 1018 in0.x, in0.y, in0.z); 1019 mat3 b = mat3( in0.z, in0.x, -in0.y, 1020 in0.z, in0.x, -in0.y, 1021 in0.z, in0.x, -in0.y); 1022 mat3 c = mat3( -in0.z, -in0.z, in0.z, 1023 -in0.y, -in0.y, in0.y, 1024 -in0.x, -in0.x, in0.x); 1025 1026 mat3[3][3][3] x = mat3[][][] ( mat3[][] ( mat3[] (a, a, a), 1027 mat3[] (b, b, b), 1028 mat3[] (c, c, c)), 1029 1030 mat3[][] ( mat3[] (b, b, b), 1031 mat3[] (a, a, a), 1032 mat3[] (c, c, c)), 1033 1034 mat3[][] ( mat3[] (c, c, c), 1035 mat3[] (a, a, a), 1036 mat3[] (b, b, b)) ); 1037 1038 mat3 x0 = x[0][0][0]; 1039 mat3 x1 = x[1][0][0]; 1040 mat3 x2 = x[2][0][0]; 1041 1042 float ret0 = x0[2][0]; 1043 float ret1 = x1[0][2]; 1044 float ret2 = x2[1][2]; 1045 1046 out0 = ivec3(ret0, ret1, ret2); 1047 ${OUTPUT} 1048 } 1049 "" 1050 end 1051 1052 case mat3_3x4 1053 version 310 es 1054 desc "Testing constructing implicitly sized arrays of arrays" 1055 values 1056 { 1057 input bvec3 in0 = [ bvec3(true, false, true) ]; 1058 output bvec3 out0 = [ bvec3(true, false, false) ]; 1059 } 1060 1061 both "" 1062 #version 310 es 1063 precision mediump float; 1064 ${DECLARATIONS} 1065 1066 void main() 1067 { 1068 ${SETUP} 1069 1070 mat3 a = mat3( in0.x, in0.y, in0.z, 1071 in0.x, in0.y, in0.z, 1072 in0.x, in0.y, in0.z); 1073 1074 mat3 b = mat3( in0.z, in0.x, in0.y, 1075 in0.z, in0.x, in0.y, 1076 in0.z, in0.x, in0.y); 1077 1078 mat3 c = mat3( in0.z, in0.z, in0.z, 1079 in0.y, in0.y, in0.y, 1080 in0.x, in0.x, in0.x); 1081 1082 mat3[4] x[3] = mat3[][] ( mat3[] (a, b, c, a), 1083 mat3[] (b, c, a, b), 1084 mat3[] (c, a, b, c) ); 1085 1086 mat3 x0 = x[0][0]; 1087 mat3 x1 = x[1][3]; 1088 mat3 x2 = x[2][0]; 1089 1090 float ret0 = x0[2][0]; 1091 float ret1 = x1[0][2]; 1092 float ret2 = x2[1][2]; 1093 1094 out0 = bvec3(ret0, ret1, ret2); 1095 ${OUTPUT} 1096 } 1097 "" 1098 end 1099 1100 case int_high_dimensional_array 1101 version 310 es 1102 desc "Testing constructing implicitly sized arrays of arrays" 1103 values 1104 { 1105 input ivec2 in0 = [ ivec2(1, -2) ]; 1106 output ivec2 out0 = [ ivec2(-2, 1) ]; 1107 } 1108 1109 both "" 1110 #version 310 es 1111 precision mediump float; 1112 ${DECLARATIONS} 1113 1114 void main() 1115 { 1116 ${SETUP} 1117 1118 int[][][][][][][] x = int[][][][][][][] ( int[][][][][][] (int [][][][][] ( int[][][][] ( int[][][] ( int[][] (int[] (in0.y))), 1119 int[][][] ( int[][] (int[] (in0.x))))))); 1120 1121 out0 = ivec2(x[0][0][0][0][0][0][0], x[0][0][0][1][0][0][0]); 1122 ${OUTPUT} 1123 } 1124 "" 1125 end 1126 1127 end # implicit 1128 1129end # constructor 1130 1131group return "Array of arrays as return value" 1132 1133 group explicit "Testing return value with explicit constructor" 1134 1135 case float_3x3 1136 version 310 es 1137 desc "Testing arrays of arrays as function return values with explicit array size" 1138 values 1139 { 1140 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(7.4, -1.0, 2.0) | vec3(3.0, 1.6, -2.0) ]; 1141 output vec3 out0 = [ vec3(2.0, -0.5, 1.0) | vec3(2.0, -7.4, -1.0) | vec3(-2.0, -3.0, 1.6) ]; 1142 } 1143 1144 both "" 1145 #version 310 es 1146 precision mediump float; 1147 ${DECLARATIONS} 1148 1149 float[3][3] func(vec3 a) 1150 { 1151 return float[3][3] (float[3] (a.z, 0.0, 0.0), 1152 float[3] (0.0, -a.x, 0.0), 1153 float[3] (0.0, 0.0, a.y) ); 1154 } 1155 1156 void main() 1157 { 1158 ${SETUP} 1159 float[3][3] x = func(in0); 1160 out0 = vec3(x[0][0], x[1][1], x[2][2]); 1161 ${OUTPUT} 1162 } 1163 "" 1164 end 1165 1166 case int_2x2x2 1167 version 310 es 1168 desc "Testing arrays of arrays as function return values with explicit array size" 1169 values 1170 { 1171 input ivec2 in0 = [ ivec2(4, 1) | ivec2(7, -1) | ivec2(3, 1) ]; 1172 output ivec2 out0 = [ ivec2(1, -4) | ivec2(-1, -7) | ivec2(1, -3) ]; 1173 } 1174 1175 both "" 1176 #version 310 es 1177 precision mediump int; 1178 precision mediump float; 1179 ${DECLARATIONS} 1180 1181 int[2][2][2] func(ivec2 a) 1182 { 1183 return int[2][2][2] ( int[2][2] ( int[2] (a.y, -a.x), 1184 int[2] (0, 0)), 1185 int[2][2] ( int[2] (0, 0), 1186 int[2] (a.y, -a.x)) ); 1187 } 1188 1189 void main() 1190 { 1191 ${SETUP} 1192 int[2][2][2] x = func(in0); 1193 out0 = ivec2(x[0][0][0], x[1][1][1]); 1194 ${OUTPUT} 1195 } 1196 "" 1197 end 1198 1199 case bool_3x2x3 1200 version 310 es 1201 desc "Testing arrays of arrays as function return values with explicit array size" 1202 values 1203 { 1204 input bvec3 in0 = [ bvec3(false, true, true) ]; 1205 output bvec3 out0 = [ bvec3(true, false, true) ]; 1206 } 1207 1208 both "" 1209 #version 310 es 1210 precision mediump float; 1211 ${DECLARATIONS} 1212 1213 bool[3][2][3] func(bvec3 a) 1214 { 1215 return bool[3][2][3] ( bool[2][3] (bool[3] (a.z, a.x, a.y), 1216 bool[3] (a.x, a.y, a.z)), 1217 bool[2][3] (bool[3] (a.x, a.y, a.z), 1218 bool[3] (a.z, a.x, a.y)), 1219 bool[2][3] (bool[3] (a.y, a.z, a.x), 1220 bool[3] (a.y, a.z, a.x)) ); 1221 } 1222 1223 void main() 1224 { 1225 ${SETUP} 1226 bool[3] x[3][2] = func(in0); 1227 out0 = bvec3(x[0][0][0], x[1][1][1], x[2][1][0]); 1228 ${OUTPUT} 1229 } 1230 "" 1231 end 1232 1233 1234 case vec3_2x3 1235 version 310 es 1236 desc "Testing arrays of arrays as function return values with explicit array size" 1237 values 1238 { 1239 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-0.5, 11.2, -1.0) ]; 1240 output vec3 out0 = [ vec3(1.0, 0.5, -2.0) | vec3(11.2, -0.5, 1.0) ]; 1241 } 1242 1243 both "" 1244 #version 310 es 1245 precision mediump float; 1246 ${DECLARATIONS} 1247 1248 vec3[2][3] func(vec3 p) 1249 { 1250 vec3[2][3] a = vec3[2][3]( vec3[3] (vec3(p.x, p.y, -p.z), 1251 vec3(p.y, -p.z, p.x), 1252 vec3(-p.z, p.x, p.y)), 1253 vec3[3] (vec3(p.y, -p.z, p.x), 1254 vec3(p.x, p.y, -p.z), 1255 vec3(-p.z, p.x, p.y)) ); 1256 1257 return vec3[2][3] ( vec3[3] (a[0][1], a[0][2], a[0][0]), 1258 vec3[3] (a[1][1], a[1][2], a[1][0])); 1259 } 1260 1261 void main() 1262 { 1263 ${SETUP} 1264 1265 vec3[2][3] x = func(in0); 1266 out0 = vec3(x[0][0].x, x[1][1].y, x[0][2].z); 1267 ${OUTPUT} 1268 } 1269 "" 1270 end 1271 1272 case struct_3x1x3 1273 version 310 es 1274 desc "Testing arrays of arrays as function return values with explicit array size" 1275 values 1276 { 1277 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ]; 1278 output vec3 out0 = [ vec3(-1.0, 2.0, 0.5) ]; 1279 } 1280 1281 both "" 1282 #version 310 es 1283 precision mediump float; 1284 ${DECLARATIONS} 1285 1286 struct Test 1287 { 1288 float f; 1289 vec3 v; 1290 }; 1291 1292 Test[3][1][3] func(vec3 p) 1293 { 1294 Test a = Test(p.z, vec3(p.x, p.y, p.z)); 1295 Test b = Test(p.y, vec3(-p.z, -p.x, -p.y)); 1296 Test c = Test(p.x, vec3(-p.y, p.z, -p.x)); 1297 1298 return Test[3][1][3] ( Test[1][3] (Test[3] (b, b, b)), 1299 Test[1][3] (Test[3] (a, a, a)), 1300 Test[1][3] (Test[3] (c, c, c)) ); 1301 } 1302 1303 void main() 1304 { 1305 ${SETUP} 1306 Test[3][1][3] x = func(in0); 1307 out0 = vec3(x[0][0][0].v.z, x[2][0][2].v.y, x[1][0][1].v.x); 1308 ${OUTPUT} 1309 } 1310 "" 1311 end 1312 1313 case ivec3_3x3 1314 version 310 es 1315 desc "Testing arrays of arrays as function return values with explicit array size" 1316 values 1317 { 1318 input ivec3 in0 = [ ivec3(5, 1, 2) | ivec3(-5, 11, -1) ]; 1319 output ivec3 out0 = [ ivec3(1, 5, -2) | ivec3(11, -5, 1) ]; 1320 } 1321 1322 both "" 1323 #version 310 es 1324 precision mediump int; 1325 precision mediump float; 1326 ${DECLARATIONS} 1327 1328 ivec3[3][3] func(ivec3 p) 1329 { 1330 ivec3[3][3] a = ivec3[3][3] ( ivec3[3] ( ivec3(p.x, p.y, -p.z), 1331 ivec3(p.x, p.y, -p.z), 1332 ivec3(p.x, p.y, -p.z)), 1333 1334 ivec3[3] ( ivec3(p.y, -p.z, p.x), 1335 ivec3(p.y, -p.z, p.x), 1336 ivec3(p.y, -p.z, p.x)), 1337 1338 ivec3[3] ( ivec3(-p.z, p.x, p.y), 1339 ivec3(-p.z, p.x, p.y), 1340 ivec3(-p.z, p.x, p.y)) ); 1341 return a; 1342 } 1343 1344 void main() 1345 { 1346 ${SETUP} 1347 ivec3[3][3] x = func(in0); 1348 out0 = ivec3(x[1][0].x, x[2][0].y, x[0][2].z); 1349 ${OUTPUT} 1350 } 1351 "" 1352 end 1353 1354 case bvec4_4x2 1355 version 310 es 1356 desc "Testing arrays of arrays as function return values with explicit array size" 1357 values 1358 { 1359 input bvec4 in0 = [ bvec4(true, false, false, true) ]; 1360 output bvec4 out0 = [ bvec4(true, true, false, true) ]; 1361 } 1362 1363 both "" 1364 #version 310 es 1365 precision mediump int; 1366 precision mediump float; 1367 ${DECLARATIONS} 1368 1369 bvec4[4][2] func(bvec4 p) 1370 { 1371 bvec4[4] x = bvec4[4]( bvec4(p.x, p.y, p.z, p.w), 1372 bvec4(p.w, p.y, p.z, p.x), 1373 bvec4(p.z, p.w, p.x, p.y), 1374 bvec4(p.y, p.x, p.z, p.w) ); 1375 1376 return bvec4[4][2] ( bvec4[2] (bvec4(x[0]), 1377 bvec4(x[1])), 1378 1379 bvec4[2] (bvec4(x[2]), 1380 bvec4(x[3])), 1381 1382 bvec4[2] (bvec4(x[1]), 1383 bvec4(x[2])), 1384 1385 bvec4[2] (bvec4(x[3]), 1386 bvec4(x[0])) ); 1387 } 1388 1389 void main() 1390 { 1391 ${SETUP} 1392 bvec4[4][2] x = func(in0); 1393 out0 = bvec4(x[0][1].x, x[1][0].y, x[2][0].z, x[3][1].w); 1394 ${OUTPUT} 1395 } 1396 "" 1397 end 1398 1399 case mat3_3x2 1400 version 310 es 1401 desc "Testing arrays of arrays as function return values with explicit array size" 1402 values 1403 { 1404 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-1.5, 0.0, -2.3) ]; 1405 output vec3 out0 = [ vec3(0.5, -1.0, 1.0) | vec3(-1.5, 0.0, 0.0) ]; 1406 } 1407 1408 both "" 1409 #version 310 es 1410 precision mediump float; 1411 ${DECLARATIONS} 1412 1413 mat3[3][2] func(vec3 p) 1414 { 1415 mat3[3][2] a = mat3[3][2] ( mat3[2] (mat3( p.x, p.y, p.z, 1416 p.x, p.y, p.z, 1417 p.x, p.y, p.z), 1418 mat3( p.z, p.x, -p.y, 1419 p.z, p.x, -p.y, 1420 p.z, p.x, -p.y)), 1421 1422 mat3[2] (mat3( -p.z, -p.z, p.z, 1423 -p.y, -p.y, p.y, 1424 -p.x, -p.x, p.x), 1425 mat3( p.x, p.y, p.z, 1426 p.x, p.y, p.z, 1427 p.x, p.y, p.z)), 1428 1429 mat3[2] (mat3( p.z, p.x, -p.y, 1430 p.z, p.x, -p.y, 1431 p.z, p.x, -p.y), 1432 mat3( -p.z, -p.z, p.z, 1433 -p.y, -p.y, p.y, 1434 -p.x, -p.x, p.x)) ); 1435 1436 return a; 1437 } 1438 1439 void main() 1440 { 1441 ${SETUP} 1442 1443 mat3 a[3][2] = func(in0); 1444 1445 mat3 a0 = a[0][0]; 1446 mat3 a1 = a[0][1]; 1447 mat3 a2 = a[2][1]; 1448 1449 float ret0 = a0[2][0]; 1450 float ret1 = a1[0][2]; 1451 float ret2 = a2[1][2]; 1452 1453 out0 = vec3(ret0, ret1, ret2); 1454 ${OUTPUT} 1455 } 1456 "" 1457 end 1458 1459 case mat3_3x3x3 1460 version 310 es 1461 desc "Testing arrays of arrays as function return values with explicit array size" 1462 values 1463 { 1464 input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(-1, 0, -2) ]; 1465 output ivec3 out0 = [ ivec3(0, -1, 1) | ivec3(-1, 0, 0) ]; 1466 } 1467 1468 both "" 1469 #version 310 es 1470 precision mediump int; 1471 precision mediump float; 1472 ${DECLARATIONS} 1473 1474 mat3[3][3][3] func(ivec3 p) 1475 { 1476 mat3 a = mat3( p.x, p.y, p.z, 1477 p.x, p.y, p.z, 1478 p.x, p.y, p.z); 1479 mat3 b = mat3( p.z, p.x, -p.y, 1480 p.z, p.x, -p.y, 1481 p.z, p.x, -p.y); 1482 mat3 c = mat3( -p.z, -p.z, p.z, 1483 -p.y, -p.y, p.y, 1484 -p.x, -p.x, p.x); 1485 1486 return mat3[3][3][3] ( mat3[3][3] (mat3[3] (a, a, a), 1487 mat3[3] (b, b, b), 1488 mat3[3] (c, c, c)), 1489 1490 mat3[3][3] (mat3[3] (b, b, b), 1491 mat3[3] (a, a, a), 1492 mat3[3] (c, c, c)), 1493 1494 mat3[3][3] (mat3[3] (c, c, c), 1495 mat3[3] (a, a, a), 1496 mat3[3] (b, b, b)) ); 1497 } 1498 1499 void main() 1500 { 1501 ${SETUP} 1502 1503 mat3 x[3][3][3] = func(in0); 1504 1505 mat3 x0 = x[0][0][0]; 1506 mat3 x1 = x[1][0][0]; 1507 mat3 x2 = x[2][0][0]; 1508 1509 float ret0 = x0[2][0]; 1510 float ret1 = x1[0][2]; 1511 float ret2 = x2[1][2]; 1512 1513 out0 = ivec3(ret0, ret1, ret2); 1514 ${OUTPUT} 1515 } 1516 "" 1517 end 1518 1519 case mat3_3x4 1520 version 310 es 1521 desc "Testing arrays of arrays as function return values with explicit array size" 1522 values 1523 { 1524 input bvec3 in0 = [ bvec3(true, false, true) ]; 1525 output bvec3 out0 = [ bvec3(true, false, false) ]; 1526 } 1527 1528 both "" 1529 #version 310 es 1530 precision mediump float; 1531 ${DECLARATIONS} 1532 1533 mat3[3][4] func(bvec3 p) 1534 { 1535 mat3 a = mat3( p.x, p.y, p.z, 1536 p.x, p.y, p.z, 1537 p.x, p.y, p.z); 1538 1539 mat3 b = mat3( p.z, p.x, p.y, 1540 p.z, p.x, p.y, 1541 p.z, p.x, p.y); 1542 1543 mat3 c = mat3( p.z, p.z, p.z, 1544 p.y, p.y, p.y, 1545 p.x, p.x, p.x); 1546 1547 return mat3[3][4] ( mat3[4] (a, b, c, a), 1548 mat3[4] (b, c, a, b), 1549 mat3[4] (c, a, b, c) ); 1550 } 1551 1552 void main() 1553 { 1554 ${SETUP} 1555 1556 mat3[4] x[3] = func(in0); 1557 1558 mat3 x0 = x[0][0]; 1559 mat3 x1 = x[1][3]; 1560 mat3 x2 = x[2][0]; 1561 1562 float ret0 = x0[2][0]; 1563 float ret1 = x1[0][2]; 1564 float ret2 = x2[1][2]; 1565 1566 out0 = bvec3(ret0, ret1, ret2); 1567 ${OUTPUT} 1568 } 1569 "" 1570 end 1571 1572 end # explicit 1573 1574 group implicit "Test return value with implicit constructor" 1575 1576 case float_3x3 1577 version 310 es 1578 desc "Testing arrays of arrays as function return values with implicit array size" 1579 values 1580 { 1581 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(7.4, -1.0, 2.0) | vec3(3.0, 1.6, -2.0) ]; 1582 output vec3 out0 = [ vec3(2.0, -0.5, 1.0) | vec3(2.0, -7.4, -1.0) | vec3(-2.0, -3.0, 1.6) ]; 1583 } 1584 1585 both "" 1586 #version 310 es 1587 precision mediump float; 1588 ${DECLARATIONS} 1589 1590 float[3][3] func(vec3 a) 1591 { 1592 return float[][] ( float[] (a.z, 0.0, 0.0), 1593 float[] (0.0, -a.x, 0.0), 1594 float[] (0.0, 0.0, a.y) ); 1595 } 1596 1597 void main() 1598 { 1599 ${SETUP} 1600 float[3][3] x = func(in0); 1601 out0 = vec3(x[0][0], x[1][1], x[2][2]); 1602 ${OUTPUT} 1603 } 1604 "" 1605 end 1606 1607 case int_2x2x2 1608 version 310 es 1609 desc "Testing arrays of arrays as function return values with implicit array size" 1610 values 1611 { 1612 input ivec2 in0 = [ ivec2(4, 1) | ivec2(7, -1) | ivec2(3, 1) ]; 1613 output ivec2 out0 = [ ivec2(1, -4) | ivec2(-1, -7) | ivec2(1, -3) ]; 1614 } 1615 1616 both "" 1617 #version 310 es 1618 precision mediump int; 1619 precision mediump float; 1620 ${DECLARATIONS} 1621 1622 int[2][2][2] func(ivec2 a) 1623 { 1624 return int[][][] ( int[][] ( int[] (a.y, -a.x), 1625 int[] (0, 0)), 1626 int[][] ( int[] (0, 0), 1627 int[] (a.y, -a.x)) ); 1628 } 1629 1630 void main() 1631 { 1632 ${SETUP} 1633 int[2][2][2] x = func(in0); 1634 out0 = ivec2(x[0][0][0], x[1][1][1]); 1635 ${OUTPUT} 1636 } 1637 "" 1638 end 1639 1640 case bool_3x2x3 1641 version 310 es 1642 desc "Testing arrays of arrays as function return values with implicit array size" 1643 values 1644 { 1645 input bvec3 in0 = [ bvec3(false, true, true) ]; 1646 output bvec3 out0 = [ bvec3(true, false, true) ]; 1647 } 1648 1649 both "" 1650 #version 310 es 1651 precision mediump float; 1652 ${DECLARATIONS} 1653 1654 bool[3][2][3] func(bvec3 a) 1655 { 1656 return bool[][][] ( bool[][] ( bool[] (a.z, a.x, a.y), 1657 bool[] (a.x, a.y, a.z)), 1658 bool[][] ( bool[] (a.x, a.y, a.z), 1659 bool[] (a.z, a.x, a.y)), 1660 bool[][] ( bool[] (a.y, a.z, a.x), 1661 bool[] (a.y, a.z, a.x)) ); 1662 } 1663 1664 void main() 1665 { 1666 ${SETUP} 1667 bool[3] x[3][2] = func(in0); 1668 out0 = bvec3(x[0][0][0], x[1][1][1], x[2][1][0]); 1669 ${OUTPUT} 1670 } 1671 "" 1672 end 1673 1674 case vec3_2x3 1675 version 310 es 1676 desc "Testing arrays of arrays as function return values with implicit array size" 1677 values 1678 { 1679 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-0.5, 11.2, -1.0) ]; 1680 output vec3 out0 = [ vec3(1.0, 0.5, -2.0) | vec3(11.2, -0.5, 1.0) ]; 1681 } 1682 1683 both "" 1684 #version 310 es 1685 precision mediump float; 1686 ${DECLARATIONS} 1687 1688 vec3[2][3] func(vec3 p) 1689 { 1690 vec3[2][3] a = vec3[2][3]( vec3[3] ( vec3(p.x, p.y, -p.z), 1691 vec3(p.y, -p.z, p.x), 1692 vec3(-p.z, p.x, p.y)), 1693 vec3[3] ( vec3(p.y, -p.z, p.x), 1694 vec3(p.x, p.y, -p.z), 1695 vec3(-p.z, p.x, p.y)) ); 1696 1697 return vec3[][] ( vec3[] (a[0][1], a[0][2], a[0][0]), 1698 vec3[] (a[1][1], a[1][2], a[1][0])); 1699 } 1700 1701 void main() 1702 { 1703 ${SETUP} 1704 1705 vec3[2][3] x = func(in0); 1706 out0 = vec3(x[0][0].x, x[1][1].y, x[0][2].z); 1707 ${OUTPUT} 1708 } 1709 "" 1710 end 1711 1712 case struct_3x1x3 1713 version 310 es 1714 desc "Testing arrays of arrays as function return values with implicit array size" 1715 values 1716 { 1717 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ]; 1718 output vec3 out0 = [ vec3(-1.0, 2.0, 0.5) ]; 1719 } 1720 1721 both "" 1722 #version 310 es 1723 precision mediump float; 1724 ${DECLARATIONS} 1725 1726 struct Test 1727 { 1728 float f; 1729 vec3 v; 1730 }; 1731 1732 Test[3][1][3] func(vec3 p) 1733 { 1734 Test a = Test(p.z, vec3(p.x, p.y, p.z)); 1735 Test b = Test(p.y, vec3(-p.z, -p.x, -p.y)); 1736 Test c = Test(p.x, vec3(-p.y, p.z, -p.x)); 1737 1738 return Test[][][] ( Test[][] (Test[] (b, b, b)), 1739 Test[][] (Test[] (a, a, a)), 1740 Test[][] (Test[] (c, c, c)) ); 1741 } 1742 1743 void main() 1744 { 1745 ${SETUP} 1746 Test[3][1][3] x = func(in0); 1747 out0 = vec3(x[0][0][0].v.z, x[2][0][2].v.y, x[1][0][1].v.x); 1748 ${OUTPUT} 1749 } 1750 "" 1751 end 1752 1753 case ivec3_3x3 1754 version 310 es 1755 desc "Testing arrays of arrays as function return values with implicit array size" 1756 values 1757 { 1758 input ivec3 in0 = [ ivec3(5, 1, 2) | ivec3(-5, 11, -1) ]; 1759 output ivec3 out0 = [ ivec3(1, 5, -2) | ivec3(11, -5, 1) ]; 1760 } 1761 1762 both "" 1763 #version 310 es 1764 precision mediump int; 1765 precision mediump float; 1766 ${DECLARATIONS} 1767 1768 ivec3[3][3] func(ivec3 p) 1769 { 1770 return ivec3[][] ( ivec3[] ( ivec3(p.x, p.y, -p.z), 1771 ivec3(p.x, p.y, -p.z), 1772 ivec3(p.x, p.y, -p.z)), 1773 1774 ivec3[] ( ivec3(p.y, -p.z, p.x), 1775 ivec3(p.y, -p.z, p.x), 1776 ivec3(p.y, -p.z, p.x)), 1777 1778 ivec3[] ( ivec3(-p.z, p.x, p.y), 1779 ivec3(-p.z, p.x, p.y), 1780 ivec3(-p.z, p.x, p.y)) ); 1781 } 1782 1783 void main() 1784 { 1785 ${SETUP} 1786 ivec3[3][3] x = func(in0); 1787 out0 = ivec3(x[1][0].x, x[2][0].y, x[0][2].z); 1788 ${OUTPUT} 1789 } 1790 "" 1791 end 1792 1793 case bvec4_4x2 1794 version 310 es 1795 desc "Testing arrays of arrays as function return values with implicit array size" 1796 values 1797 { 1798 input bvec4 in0 = [ bvec4(true, false, false, true) ]; 1799 output bvec4 out0 = [ bvec4(true, true, false, true) ]; 1800 } 1801 1802 both "" 1803 #version 310 es 1804 precision mediump int; 1805 precision mediump float; 1806 ${DECLARATIONS} 1807 1808 bvec4[4][2] func(bvec4 p) 1809 { 1810 bvec4[4] x = bvec4[4]( bvec4(p.x, p.y, p.z, p.w), 1811 bvec4(p.w, p.y, p.z, p.x), 1812 bvec4(p.z, p.w, p.x, p.y), 1813 bvec4(p.y, p.x, p.z, p.w) ); 1814 1815 return bvec4[][] ( bvec4[] (bvec4(x[0]), 1816 bvec4(x[1])), 1817 1818 bvec4[] (bvec4(x[2]), 1819 bvec4(x[3])), 1820 1821 bvec4[] (bvec4(x[1]), 1822 bvec4(x[2])), 1823 1824 bvec4[] (bvec4(x[3]), 1825 bvec4(x[0])) ); 1826 } 1827 1828 void main() 1829 { 1830 ${SETUP} 1831 bvec4[4][2] x = func(in0); 1832 out0 = bvec4(x[0][1].x, x[1][0].y, x[2][0].z, x[3][1].w); 1833 ${OUTPUT} 1834 } 1835 "" 1836 end 1837 1838 case mat3_3x2 1839 version 310 es 1840 desc "Testing arrays of arrays as function return values with implicit array size" 1841 values 1842 { 1843 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-1.5, 0.0, -2.3) ]; 1844 output vec3 out0 = [ vec3(0.5, -1.0, 1.0) | vec3(-1.5, 0.0, 0.0) ]; 1845 } 1846 1847 both "" 1848 #version 310 es 1849 precision mediump float; 1850 ${DECLARATIONS} 1851 1852 mat3[3][2] func(vec3 p) 1853 { 1854 return mat3[][] ( mat3[] (mat3( p.x, p.y, p.z, 1855 p.x, p.y, p.z, 1856 p.x, p.y, p.z), 1857 mat3( p.z, p.x, -p.y, 1858 p.z, p.x, -p.y, 1859 p.z, p.x, -p.y)), 1860 1861 mat3[] (mat3( -p.z, -p.z, p.z, 1862 -p.y, -p.y, p.y, 1863 -p.x, -p.x, p.x), 1864 mat3( p.x, p.y, p.z, 1865 p.x, p.y, p.z, 1866 p.x, p.y, p.z)), 1867 1868 mat3[] (mat3( p.z, p.x, -p.y, 1869 p.z, p.x, -p.y, 1870 p.z, p.x, -p.y), 1871 mat3( -p.z, -p.z, p.z, 1872 -p.y, -p.y, p.y, 1873 -p.x, -p.x, p.x)) ); 1874 1875 } 1876 1877 void main() 1878 { 1879 ${SETUP} 1880 1881 mat3 a[3][2] = func(in0); 1882 1883 mat3 a0 = a[0][0]; 1884 mat3 a1 = a[0][1]; 1885 mat3 a2 = a[2][1]; 1886 1887 float ret0 = a0[2][0]; 1888 float ret1 = a1[0][2]; 1889 float ret2 = a2[1][2]; 1890 1891 out0 = vec3(ret0, ret1, ret2); 1892 ${OUTPUT} 1893 } 1894 "" 1895 end 1896 1897 case mat3_3x3x3 1898 version 310 es 1899 desc "Testing arrays of arrays as function return values with implicit array size" 1900 values 1901 { 1902 input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(-1, 0, -2) ]; 1903 output ivec3 out0 = [ ivec3(0, -1, 1) | ivec3(-1, 0, 0) ]; 1904 } 1905 1906 both "" 1907 #version 310 es 1908 precision mediump int; 1909 precision mediump float; 1910 ${DECLARATIONS} 1911 1912 mat3[3][3][3] func(ivec3 p) 1913 { 1914 mat3 a = mat3( p.x, p.y, p.z, 1915 p.x, p.y, p.z, 1916 p.x, p.y, p.z); 1917 mat3 b = mat3( p.z, p.x, -p.y, 1918 p.z, p.x, -p.y, 1919 p.z, p.x, -p.y); 1920 mat3 c = mat3( -p.z, -p.z, p.z, 1921 -p.y, -p.y, p.y, 1922 -p.x, -p.x, p.x); 1923 1924 return mat3[][][] ( mat3[][] ( mat3[] (a, a, a), 1925 mat3[] (b, b, b), 1926 mat3[] (c, c, c)), 1927 1928 mat3[][] ( mat3[] (b, b, b), 1929 mat3[] (a, a, a), 1930 mat3[] (c, c, c)), 1931 1932 mat3[][] ( mat3[] (c, c, c), 1933 mat3[] (a, a, a), 1934 mat3[] (b, b, b)) ); 1935 } 1936 1937 void main() 1938 { 1939 ${SETUP} 1940 1941 mat3 x[3][3][3] = func(in0); 1942 1943 mat3 x0 = x[0][0][0]; 1944 mat3 x1 = x[1][0][0]; 1945 mat3 x2 = x[2][0][0]; 1946 1947 float ret0 = x0[2][0]; 1948 float ret1 = x1[0][2]; 1949 float ret2 = x2[1][2]; 1950 1951 out0 = ivec3(ret0, ret1, ret2); 1952 ${OUTPUT} 1953 } 1954 "" 1955 end 1956 1957 case mat3_3x4 1958 version 310 es 1959 desc "Testing arrays of arrays as function return values with implicit array size" 1960 values 1961 { 1962 input bvec3 in0 = [ bvec3(true, false, true) ]; 1963 output bvec3 out0 = [ bvec3(true, false, false) ]; 1964 } 1965 1966 both "" 1967 #version 310 es 1968 precision mediump float; 1969 ${DECLARATIONS} 1970 1971 mat3[3][4] func(bvec3 p) 1972 { 1973 mat3 a = mat3( p.x, p.y, p.z, 1974 p.x, p.y, p.z, 1975 p.x, p.y, p.z); 1976 1977 mat3 b = mat3( p.z, p.x, p.y, 1978 p.z, p.x, p.y, 1979 p.z, p.x, p.y); 1980 1981 mat3 c = mat3( p.z, p.z, p.z, 1982 p.y, p.y, p.y, 1983 p.x, p.x, p.x); 1984 1985 return mat3[][] ( mat3[] (a, b, c, a), 1986 mat3[] (b, c, a, b), 1987 mat3[] (c, a, b, c) ); 1988 } 1989 1990 void main() 1991 { 1992 ${SETUP} 1993 1994 mat3[4] x[3] = func(in0); 1995 1996 mat3 x0 = x[0][0]; 1997 mat3 x1 = x[1][3]; 1998 mat3 x2 = x[2][0]; 1999 2000 float ret0 = x0[2][0]; 2001 float ret1 = x1[0][2]; 2002 float ret2 = x2[1][2]; 2003 2004 out0 = bvec3(ret0, ret1, ret2); 2005 ${OUTPUT} 2006 } 2007 "" 2008 end 2009 2010 end # implicit 2011 2012end # return 2013 2014group parameter "Array of arrays as a function parameter" 2015 2016 # in 2017 group in "Array of arrays as an in-function parameter" 2018 2019 case float_3x3 2020 version 310 es 2021 desc "Testing array of arrays as an in-function parameter" 2022 values 2023 { 2024 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(7.4, -1.0, 2.0) | vec3(3.0, 1.6, -2.0) ]; 2025 output vec3 out0 = [ vec3(2.0, -0.5, 1.0) | vec3(2.0, -7.4, -1.0) | vec3(-2.0, -3.0, 1.6) ]; 2026 } 2027 2028 both "" 2029 #version 310 es 2030 precision mediump float; 2031 ${DECLARATIONS} 2032 2033 vec3 func(in float[3][3] x) 2034 { 2035 return vec3(x[0][0], x[1][1], x[2][2]); 2036 } 2037 2038 void main() 2039 { 2040 ${SETUP} 2041 float[3][3] x = float[3][3] ( float[3] (in0.z, 0.0, 0.0), 2042 float[3] (0.0, -in0.x, 0.0), 2043 float[3] (0.0, 0.0, in0.y) ); 2044 2045 out0 = func(x); 2046 ${OUTPUT} 2047 } 2048 "" 2049 end 2050 2051 case int_2x2x2 2052 version 310 es 2053 desc "Testing array of arrays as an in-function parameter" 2054 values 2055 { 2056 input ivec2 in0 = [ ivec2(4, 1) | ivec2(7, -1) | ivec2(3, 1) ]; 2057 output ivec2 out0 = [ ivec2(1, -4) | ivec2(-1, -7) | ivec2(1, -3) ]; 2058 } 2059 2060 both "" 2061 #version 310 es 2062 precision mediump int; 2063 precision mediump float; 2064 ${DECLARATIONS} 2065 2066 ivec2 func(in int[2][2][2] x) 2067 { 2068 return ivec2(x[0][0][0], x[1][1][1]); 2069 } 2070 2071 void main() 2072 { 2073 ${SETUP} 2074 int[2][2][2] x = int[2][2][2] ( int[2][2] ( int[2] (in0.y, -in0.x), 2075 int[2] (0, 0)), 2076 int[2][2] ( int[2] (0, 0), 2077 int[2] (in0.y, -in0.x)) ); 2078 2079 out0 = func(x); 2080 ${OUTPUT} 2081 } 2082 "" 2083 end 2084 2085 case bool_3x2x3 2086 version 310 es 2087 desc "Testing array of arrays as an in-function parameter" 2088 values 2089 { 2090 input bvec3 in0 = [ bvec3(false, true, true) ]; 2091 output bvec3 out0 = [ bvec3(true, false, true) ]; 2092 } 2093 2094 both "" 2095 #version 310 es 2096 precision mediump float; 2097 ${DECLARATIONS} 2098 2099 bvec3 func(in bool x[3][2][3]) 2100 { 2101 return bvec3(x[0][0][0], x[1][1][1], x[2][1][0]); 2102 } 2103 2104 void main() 2105 { 2106 ${SETUP} 2107 bool[3] x[3][2] = bool[3][2][3] ( bool[2][3] (bool[3] (in0.z, in0.x, in0.y), 2108 bool[3] (in0.x, in0.y, in0.z)), 2109 bool[2][3] (bool[3] (in0.x, in0.y, in0.z), 2110 bool[3] (in0.z, in0.x, in0.y)), 2111 bool[2][3] (bool[3] (in0.y, in0.z, in0.x), 2112 bool[3] (in0.y, in0.z, in0.x)) ); 2113 2114 out0 = func(x); 2115 ${OUTPUT} 2116 } 2117 "" 2118 end 2119 2120 case vec3_2x3 2121 version 310 es 2122 desc "Testing array of arrays as an in-function parameter" 2123 values 2124 { 2125 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-0.5, 11.2, -1.0) ]; 2126 output vec3 out0 = [ vec3(1.0, 0.5, -2.0) | vec3(11.2, -0.5, 1.0) ]; 2127 } 2128 2129 both "" 2130 #version 310 es 2131 precision mediump float; 2132 ${DECLARATIONS} 2133 2134 vec3 func(in vec3[3] x[2]) 2135 { 2136 return vec3(x[0][0].x, x[1][1].y, x[0][2].z); 2137 } 2138 2139 void main() 2140 { 2141 ${SETUP} 2142 vec3[2][3] x = vec3[2][3]( vec3[3] ( vec3(in0.x, in0.y, -in0.z), 2143 vec3(in0.y, -in0.z, in0.x), 2144 vec3(-in0.z, in0.x, in0.y)), 2145 vec3[3] ( vec3(in0.y, -in0.z, in0.x), 2146 vec3(in0.x, in0.y, -in0.z), 2147 vec3(-in0.z, in0.x, in0.y)) ); 2148 2149 x = vec3[2][3] (vec3[3] (x[0][1], x[0][2], x[0][0]), 2150 vec3[3] (x[1][1], x[1][2], x[1][0]) ); 2151 2152 out0 = func(x); 2153 ${OUTPUT} 2154 } 2155 "" 2156 end 2157 2158 case struct_3x1x3 2159 version 310 es 2160 desc "Testing array of arrays as an in-function parameter" 2161 values 2162 { 2163 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ]; 2164 output vec3 out0 = [ vec3(-1.0, 2.0, 0.5) ]; 2165 } 2166 2167 both "" 2168 #version 310 es 2169 precision mediump float; 2170 ${DECLARATIONS} 2171 2172 struct Test 2173 { 2174 float f; 2175 vec3 v; 2176 }; 2177 2178 vec3 func(in Test[3] x[3][1]) 2179 { 2180 return vec3(x[0][0][0].v.z, x[2][0][2].v.y, x[1][0][1].v.x); 2181 } 2182 2183 void main() 2184 { 2185 ${SETUP} 2186 Test a = Test(in0.z, vec3(in0.x, in0.y, in0.z)); 2187 Test b = Test(in0.y, vec3(-in0.z, -in0.x, -in0.y)); 2188 Test c = Test(in0.x, vec3(-in0.y, in0.z, -in0.x)); 2189 2190 Test x[3][1][3] = Test[3][1][3] ( Test[1][3] (Test[3] (b, b, b)), 2191 Test[1][3] (Test[3] (a, a, a)), 2192 Test[1][3] (Test[3] (c, c, c)) ); 2193 2194 out0 = func(x); 2195 ${OUTPUT} 2196 } 2197 "" 2198 end 2199 2200 case ivec3_3x3 2201 version 310 es 2202 desc "Testing array of arrays as an in-function parameter" 2203 values 2204 { 2205 input ivec3 in0 = [ ivec3(5, 1, 2) | ivec3(-5, 11, -1) ]; 2206 output ivec3 out0 = [ ivec3(1, 5, -2) | ivec3(11, -5, 1) ]; 2207 } 2208 2209 both "" 2210 #version 310 es 2211 precision mediump int; 2212 precision mediump float; 2213 ${DECLARATIONS} 2214 2215 ivec3 func(in ivec3 x[3][3]) 2216 { 2217 return ivec3(x[1][0].x, x[2][0].y, x[0][2].z); 2218 } 2219 2220 void main() 2221 { 2222 ${SETUP} 2223 ivec3[3][3] x = ivec3[3][3] ( ivec3[3] ( ivec3(in0.x, in0.y, -in0.z), 2224 ivec3(in0.x, in0.y, -in0.z), 2225 ivec3(in0.x, in0.y, -in0.z)), 2226 2227 ivec3[3] ( ivec3(in0.y, -in0.z, in0.x), 2228 ivec3(in0.y, -in0.z, in0.x), 2229 ivec3(in0.y, -in0.z, in0.x)), 2230 2231 ivec3[3] ( ivec3(-in0.z, in0.x, in0.y), 2232 ivec3(-in0.z, in0.x, in0.y), 2233 ivec3(-in0.z, in0.x, in0.y)) ); 2234 2235 out0 = func(x); 2236 ${OUTPUT} 2237 } 2238 "" 2239 end 2240 2241 case bvec4_4x2 2242 version 310 es 2243 desc "Testing array of arrays as an in-function parameter" 2244 values 2245 { 2246 input bvec4 in0 = [ bvec4(true, false, false, true) ]; 2247 output bvec4 out0 = [ bvec4(true, true, false, true) ]; 2248 } 2249 2250 both "" 2251 #version 310 es 2252 precision mediump int; 2253 precision mediump float; 2254 ${DECLARATIONS} 2255 2256 bvec4 func(in bvec4[4][2] x) 2257 { 2258 return bvec4(x[0][1].x, x[1][0].y, x[2][0].z, x[3][1].w); 2259 } 2260 2261 void main() 2262 { 2263 ${SETUP} 2264 bvec4[4] a = bvec4[4]( bvec4(in0.x, in0.y, in0.z, in0.w), 2265 bvec4(in0.w, in0.y, in0.z, in0.x), 2266 bvec4(in0.z, in0.w, in0.x, in0.y), 2267 bvec4(in0.y, in0.x, in0.z, in0.w) ); 2268 2269 bvec4 x[4][2] = bvec4[4][2] ( bvec4[2] (bvec4(a[0]), 2270 bvec4(a[1])), 2271 2272 bvec4[2] (bvec4(a[2]), 2273 bvec4(a[3])), 2274 2275 bvec4[2] (bvec4(a[1]), 2276 bvec4(a[2])), 2277 2278 bvec4[2] (bvec4(a[3]), 2279 bvec4(a[0])) ); 2280 2281 out0 = func(x); 2282 ${OUTPUT} 2283 } 2284 "" 2285 end 2286 2287 case mat3_3x2 2288 version 310 es 2289 desc "Testing array of arrays as an in-function parameter" 2290 values 2291 { 2292 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-1.5, 0.0, -2.3) ]; 2293 output vec3 out0 = [ vec3(0.5, -1.0, 1.0) | vec3(-1.5, 0.0, 0.0) ]; 2294 } 2295 2296 both "" 2297 #version 310 es 2298 precision mediump float; 2299 ${DECLARATIONS} 2300 2301 vec3 func(in mat3[2] x[3]) 2302 { 2303 mat3 a0 = x[0][0]; 2304 mat3 a1 = x[0][1]; 2305 mat3 a2 = x[2][1]; 2306 2307 float ret0 = a0[2][0]; 2308 float ret1 = a1[0][2]; 2309 float ret2 = a2[1][2]; 2310 2311 return vec3(ret0, ret1, ret2); 2312 } 2313 2314 void main() 2315 { 2316 ${SETUP} 2317 2318 mat3 a = mat3( in0.x, in0.y, in0.z, 2319 in0.x, in0.y, in0.z, 2320 in0.x, in0.y, in0.z); 2321 2322 mat3 b = mat3( in0.z, in0.x, -in0.y, 2323 in0.z, in0.x, -in0.y, 2324 in0.z, in0.x, -in0.y); 2325 2326 mat3 c = mat3 ( -in0.z, -in0.z, in0.z, 2327 -in0.y, -in0.y, in0.y, 2328 -in0.x, -in0.x, in0.x); 2329 2330 mat3[3][2] x = mat3[3][2] ( mat3[2] (a, b), 2331 mat3[2] (c, a), 2332 mat3[2] (b, c) ); 2333 2334 out0 = func(x); 2335 ${OUTPUT} 2336 } 2337 "" 2338 end 2339 2340 case mat3_3x3x3 2341 version 310 es 2342 desc "Testing array of arrays as an in-function parameter" 2343 values 2344 { 2345 input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(-1, 0, -2) ]; 2346 output ivec3 out0 = [ ivec3(0, -1, 1) | ivec3(-1, 0, 0) ]; 2347 } 2348 2349 both "" 2350 #version 310 es 2351 precision mediump int; 2352 precision mediump float; 2353 ${DECLARATIONS} 2354 2355 ivec3 func(in mat3[3][3] x[3]) 2356 { 2357 mat3 x0 = x[0][0][0]; 2358 mat3 x1 = x[1][0][0]; 2359 mat3 x2 = x[2][0][0]; 2360 2361 float ret0 = x0[2][0]; 2362 float ret1 = x1[0][2]; 2363 float ret2 = x2[1][2]; 2364 2365 return ivec3(ret0, ret1, ret2); 2366 } 2367 2368 void main() 2369 { 2370 ${SETUP} 2371 2372 mat3 a = mat3( in0.x, in0.y, in0.z, 2373 in0.x, in0.y, in0.z, 2374 in0.x, in0.y, in0.z); 2375 mat3 b = mat3( in0.z, in0.x, -in0.y, 2376 in0.z, in0.x, -in0.y, 2377 in0.z, in0.x, -in0.y); 2378 mat3 c = mat3( -in0.z, -in0.z, in0.z, 2379 -in0.y, -in0.y, in0.y, 2380 -in0.x, -in0.x, in0.x); 2381 2382 mat3 x[3][3][3] = mat3[3][3][3] ( mat3[3][3] (mat3[3] (a, a, a), 2383 mat3[3] (b, b, b), 2384 mat3[3] (c, c, c)), 2385 2386 mat3[3][3] (mat3[3] (b, b, b), 2387 mat3[3] (a, a, a), 2388 mat3[3] (c, c, c)), 2389 2390 mat3[3][3] (mat3[3] (c, c, c), 2391 mat3[3] (a, a, a), 2392 mat3[3] (b, b, b)) ); 2393 2394 out0 = func(x); 2395 ${OUTPUT} 2396 } 2397 "" 2398 end 2399 2400 case mat3_3x4 2401 version 310 es 2402 desc "Testing array of arrays as an in-function parameter" 2403 values 2404 { 2405 input bvec3 in0 = [ bvec3(true, false, true) ]; 2406 output bvec3 out0 = [ bvec3(true, false, false) ]; 2407 } 2408 2409 both "" 2410 #version 310 es 2411 precision mediump float; 2412 ${DECLARATIONS} 2413 2414 bvec3 func(in mat3[4] x[3]) 2415 { 2416 mat3 x0 = x[0][0]; 2417 mat3 x1 = x[1][3]; 2418 mat3 x2 = x[2][0]; 2419 2420 float ret0 = x0[2][0]; 2421 float ret1 = x1[0][2]; 2422 float ret2 = x2[1][2]; 2423 2424 return bvec3(ret0, ret1, ret2); 2425 } 2426 2427 void main() 2428 { 2429 ${SETUP} 2430 2431 mat3 a = mat3( in0.x, in0.y, in0.z, 2432 in0.x, in0.y, in0.z, 2433 in0.x, in0.y, in0.z); 2434 2435 mat3 b = mat3( in0.z, in0.x, in0.y, 2436 in0.z, in0.x, in0.y, 2437 in0.z, in0.x, in0.y); 2438 2439 mat3 c = mat3( in0.z, in0.z, in0.z, 2440 in0.y, in0.y, in0.y, 2441 in0.x, in0.x, in0.x); 2442 2443 mat3 x[3][4] = mat3[3][4] ( mat3[4] (a, b, c, a), 2444 mat3[4] (b, c, a, b), 2445 mat3[4] (c, a, b, c) ); 2446 2447 out0 = func(x); 2448 2449 ${OUTPUT} 2450 } 2451 "" 2452 end 2453 2454 end # in 2455 2456 # out 2457 group out "Array of arrays as an out-function paramter" 2458 2459 case float_3x3 2460 version 310 es 2461 desc "Testing array of arrays as an out-function parameter" 2462 values 2463 { 2464 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(7.4, -1.0, 2.0) | vec3(3.0, 1.6, -2.0) ]; 2465 output vec3 out0 = [ vec3(2.0, -0.5, 1.0) | vec3(2.0, -7.4, -1.0) | vec3(-2.0, -3.0, 1.6) ]; 2466 } 2467 2468 both "" 2469 #version 310 es 2470 precision mediump float; 2471 ${DECLARATIONS} 2472 2473 void func(out float[3][3] x, in vec3 p) 2474 { 2475 x = float[3][3] ( float[3] (p.z, 0.0, 0.0), 2476 float[3] (0.0, -p.x, 0.0), 2477 float[3] (0.0, 0.0, p.y) ); 2478 } 2479 2480 void main() 2481 { 2482 ${SETUP} 2483 float[3][3] x; 2484 func(x, in0); 2485 out0 = vec3(x[0][0], x[1][1], x[2][2]); 2486 ${OUTPUT} 2487 } 2488 "" 2489 end 2490 2491 case int_2x2x2 2492 version 310 es 2493 desc "Testing array of arrays as an out-function parameter" 2494 values 2495 { 2496 input ivec2 in0 = [ ivec2(4, 1) | ivec2(7, -1) | ivec2(3, 1) ]; 2497 output ivec2 out0 = [ ivec2(1, -4) | ivec2(-1, -7) | ivec2(1, -3) ]; 2498 } 2499 2500 both "" 2501 #version 310 es 2502 precision mediump int; 2503 precision mediump float; 2504 ${DECLARATIONS} 2505 2506 void func(out int[2][2][2] x, in ivec2 p) 2507 { 2508 x = int[2][2][2] ( int[2][2] ( int[2] (p.y, -p.x), 2509 int[2] (0, 0)), 2510 int[2][2] ( int[2] (0, 0), 2511 int[2] (p.y, -p.x)) ); 2512 } 2513 2514 void main() 2515 { 2516 ${SETUP} 2517 int[2][2][2] x; 2518 func(x, in0); 2519 out0 = ivec2(x[0][0][0], x[1][1][1]); 2520 ${OUTPUT} 2521 } 2522 "" 2523 end 2524 2525 case bool_3x2x3 2526 version 310 es 2527 desc "Testing array of arrays as an out-function parameter" 2528 values 2529 { 2530 input bvec3 in0 = [ bvec3(false, true, true) ]; 2531 output bvec3 out0 = [ bvec3(true, false, true) ]; 2532 } 2533 2534 both "" 2535 #version 310 es 2536 precision mediump float; 2537 ${DECLARATIONS} 2538 2539 void func(out bool x[3][2][3], in bvec3 p) 2540 { 2541 x = bool[3][2][3] ( bool[2][3] (bool[3] (p.z, p.x, p.y), 2542 bool[3] (p.x, p.y, p.z)), 2543 bool[2][3] (bool[3] (p.x, p.y, p.z), 2544 bool[3] (p.z, p.x, p.y)), 2545 bool[2][3] (bool[3] (p.y, p.z, p.x), 2546 bool[3] (p.y, p.z, p.x)) ); 2547 } 2548 2549 void main() 2550 { 2551 ${SETUP} 2552 bool[3] x[3][2]; 2553 func(x, in0); 2554 out0 = bvec3(x[0][0][0], x[1][1][1], x[2][1][0]); 2555 ${OUTPUT} 2556 } 2557 "" 2558 end 2559 2560 case vec3_2x3 2561 version 310 es 2562 desc "Testing array of arrays as an out-function parameter" 2563 values 2564 { 2565 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-0.5, 11.2, -1.0) ]; 2566 output vec3 out0 = [ vec3(1.0, 0.5, -2.0) | vec3(11.2, -0.5, 1.0) ]; 2567 } 2568 2569 both "" 2570 #version 310 es 2571 precision mediump float; 2572 ${DECLARATIONS} 2573 2574 void func(out vec3[3] x[2], in vec3 p) 2575 { 2576 x = vec3[2][3]( vec3[3] (vec3(p.x, p.y, -p.z), 2577 vec3(p.y, -p.z, p.x), 2578 vec3(-p.z, p.x, p.y)), 2579 vec3[3] (vec3(p.y, -p.z, p.x), 2580 vec3(p.x, p.y, -p.z), 2581 vec3(-p.z, p.x, p.y)) ); 2582 2583 x = vec3[2][3] (vec3[3] (x[0][1], x[0][2], x[0][0]), 2584 vec3[3] (x[1][1], x[1][2], x[1][0]) ); 2585 } 2586 2587 void main() 2588 { 2589 ${SETUP} 2590 vec3[2][3] x; 2591 func(x, in0); 2592 out0 = vec3(x[0][0].x, x[1][1].y, x[0][2].z); 2593 ${OUTPUT} 2594 } 2595 "" 2596 end 2597 2598 case struct_3x1x3 2599 version 310 es 2600 desc "Testing array of arrays as an out-function parameter" 2601 values 2602 { 2603 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ]; 2604 output vec3 out0 = [ vec3(-1.0, 2.0, 0.5) ]; 2605 } 2606 2607 both "" 2608 #version 310 es 2609 precision mediump float; 2610 ${DECLARATIONS} 2611 2612 struct Test 2613 { 2614 float f; 2615 vec3 v; 2616 }; 2617 2618 void func(out Test[3] x[3][1], in vec3 p) 2619 { 2620 Test a = Test(p.z, vec3(p.x, p.y, p.z)); 2621 Test b = Test(p.y, vec3(-p.z, -p.x, -p.y)); 2622 Test c = Test(p.x, vec3(-p.y, p.z, -p.x)); 2623 2624 x = Test[3][1][3] ( Test[1][3] (Test[3] (b, b, b)), 2625 Test[1][3] (Test[3] (a, a, a)), 2626 Test[1][3] (Test[3] (c, c, c)) ); 2627 } 2628 2629 void main() 2630 { 2631 ${SETUP} 2632 Test x[3][1][3]; 2633 func(x, in0); 2634 out0 = vec3(x[0][0][0].v.z, x[2][0][2].v.y, x[1][0][1].v.x); 2635 ${OUTPUT} 2636 } 2637 "" 2638 end 2639 2640 case ivec3_3x3 2641 version 310 es 2642 desc "Testing array of arrays as an out-function parameter" 2643 values 2644 { 2645 input ivec3 in0 = [ ivec3(5, 1, 2) | ivec3(-5, 11, -1) ]; 2646 output ivec3 out0 = [ ivec3(1, 5, -2) | ivec3(11, -5, 1) ]; 2647 } 2648 2649 both "" 2650 #version 310 es 2651 precision mediump int; 2652 precision mediump float; 2653 ${DECLARATIONS} 2654 2655 void func(out ivec3 x[3][3], in ivec3 p) 2656 { 2657 x = ivec3[3][3] (ivec3[3] ( ivec3(p.x, p.y, -p.z), 2658 ivec3(p.x, p.y, -p.z), 2659 ivec3(p.x, p.y, -p.z)), 2660 2661 ivec3[3] ( ivec3(p.y, -p.z, p.x), 2662 ivec3(p.y, -p.z, p.x), 2663 ivec3(p.y, -p.z, p.x)), 2664 2665 ivec3[3] ( ivec3(-p.z, p.x, p.y), 2666 ivec3(-p.z, p.x, p.y), 2667 ivec3(-p.z, p.x, p.y)) ); 2668 } 2669 2670 2671 void main() 2672 { 2673 ${SETUP} 2674 ivec3[3][3] x; 2675 func(x, in0); 2676 out0 = ivec3(x[1][0].x, x[2][0].y, x[0][2].z); 2677 ${OUTPUT} 2678 } 2679 "" 2680 end 2681 2682 case bvec4_4x2 2683 version 310 es 2684 desc "Testing array of arrays as an out-function parameter" 2685 values 2686 { 2687 input bvec4 in0 = [ bvec4(true, false, false, true) ]; 2688 output bvec4 out0 = [ bvec4(true, true, false, true) ]; 2689 } 2690 2691 both "" 2692 #version 310 es 2693 precision mediump int; 2694 precision mediump float; 2695 ${DECLARATIONS} 2696 2697 void func(out bvec4[4][2] x, in bvec4 p) 2698 { 2699 bvec4[4] a = bvec4[4]( bvec4(p.x, p.y, p.z, p.w), 2700 bvec4(p.w, p.y, p.z, p.x), 2701 bvec4(p.z, p.w, p.x, p.y), 2702 bvec4(p.y, p.x, p.z, p.w) ); 2703 2704 x = bvec4[4][2] ( bvec4[2] (bvec4(a[0]), 2705 bvec4(a[1])), 2706 2707 bvec4[2] (bvec4(a[2]), 2708 bvec4(a[3])), 2709 2710 bvec4[2] (bvec4(a[1]), 2711 bvec4(a[2])), 2712 2713 bvec4[2] (bvec4(a[3]), 2714 bvec4(a[0])) ); 2715 } 2716 2717 void main() 2718 { 2719 ${SETUP} 2720 bvec4 x[4][2]; 2721 func(x, in0); 2722 out0 = bvec4(x[0][1].x, x[1][0].y, x[2][0].z, x[3][1].w); 2723 ${OUTPUT} 2724 } 2725 "" 2726 end 2727 2728 case mat3_3x2 2729 version 310 es 2730 desc "Testing array of arrays as an out-function parameter" 2731 values 2732 { 2733 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-1.5, 0.0, -2.3) ]; 2734 output vec3 out0 = [ vec3(0.5, -1.0, 1.0) | vec3(-1.5, 0.0, 0.0) ]; 2735 } 2736 2737 both "" 2738 #version 310 es 2739 precision mediump float; 2740 ${DECLARATIONS} 2741 2742 void func(out mat3[2] x[3], in vec3 p) 2743 { 2744 mat3 a = mat3( p.x, p.y, p.z, 2745 p.x, p.y, p.z, 2746 p.x, p.y, p.z); 2747 2748 mat3 b = mat3( p.z, p.x, -p.y, 2749 p.z, p.x, -p.y, 2750 p.z, p.x, -p.y); 2751 2752 mat3 c = mat3 ( -p.z, -p.z, p.z, 2753 -p.y, -p.y, p.y, 2754 -p.x, -p.x, p.x); 2755 2756 x = mat3[3][2] (mat3[2] (a, b), 2757 mat3[2] (c, a), 2758 mat3[2] (b, c) ); 2759 } 2760 2761 void main() 2762 { 2763 ${SETUP} 2764 2765 mat3[3][2] x; 2766 func(x, in0); 2767 2768 mat3 a0 = x[0][0]; 2769 mat3 a1 = x[0][1]; 2770 mat3 a2 = x[2][1]; 2771 2772 float ret0 = a0[2][0]; 2773 float ret1 = a1[0][2]; 2774 float ret2 = a2[1][2]; 2775 2776 out0 = vec3(ret0, ret1, ret2); 2777 2778 ${OUTPUT} 2779 } 2780 "" 2781 end 2782 2783 case mat3_3x3x3 2784 version 310 es 2785 desc "Testing array of arrays as an out-function parameter" 2786 values 2787 { 2788 input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(-1, 0, -2) ]; 2789 output ivec3 out0 = [ ivec3(0, -1, 1) | ivec3(-1, 0, 0) ]; 2790 } 2791 2792 both "" 2793 #version 310 es 2794 precision mediump int; 2795 precision mediump float; 2796 ${DECLARATIONS} 2797 2798 void func(out mat3[3] x[3][3], in ivec3 p) 2799 { 2800 mat3 a = mat3( p.x, p.y, p.z, 2801 p.x, p.y, p.z, 2802 p.x, p.y, p.z); 2803 mat3 b = mat3( p.z, p.x, -p.y, 2804 p.z, p.x, -p.y, 2805 p.z, p.x, -p.y); 2806 mat3 c = mat3( -p.z, -p.z, p.z, 2807 -p.y, -p.y, p.y, 2808 -p.x, -p.x, p.x); 2809 2810 x = mat3[3][3][3] ( mat3[3][3] (mat3[3] (a, a, a), 2811 mat3[3] (b, b, b), 2812 mat3[3] (c, c, c)), 2813 2814 mat3[3][3] (mat3[3] (b, b, b), 2815 mat3[3] (a, a, a), 2816 mat3[3] (c, c, c)), 2817 2818 mat3[3][3] (mat3[3] (c, c, c), 2819 mat3[3] (a, a, a), 2820 mat3[3] (b, b, b)) ); 2821 } 2822 2823 void main() 2824 { 2825 ${SETUP} 2826 2827 mat3 x[3][3][3]; 2828 func(x, in0); 2829 2830 mat3 x0 = x[0][0][0]; 2831 mat3 x1 = x[1][0][0]; 2832 mat3 x2 = x[2][0][0]; 2833 2834 float ret0 = x0[2][0]; 2835 float ret1 = x1[0][2]; 2836 float ret2 = x2[1][2]; 2837 2838 out0 = ivec3(ret0, ret1, ret2); 2839 2840 ${OUTPUT} 2841 } 2842 "" 2843 end 2844 2845 case mat3_3x4 2846 version 310 es 2847 desc "Testing array of arrays as an out-function parameter" 2848 values 2849 { 2850 input bvec3 in0 = [ bvec3(true, false, true) ]; 2851 output bvec3 out0 = [ bvec3(true, false, false) ]; 2852 } 2853 2854 both "" 2855 #version 310 es 2856 precision mediump float; 2857 ${DECLARATIONS} 2858 2859 void func(out mat3[4] x[3], in bvec3 p) 2860 { 2861 mat3 a = mat3( p.x, p.y, p.z, 2862 p.x, p.y, p.z, 2863 p.x, p.y, p.z); 2864 2865 mat3 b = mat3( p.z, p.x, p.y, 2866 p.z, p.x, p.y, 2867 p.z, p.x, p.y); 2868 2869 mat3 c = mat3( p.z, p.z, p.z, 2870 p.y, p.y, p.y, 2871 p.x, p.x, p.x); 2872 2873 x = mat3[3][4] (mat3[4] (a, b, c, a), 2874 mat3[4] (b, c, a, b), 2875 mat3[4] (c, a, b, c) ); 2876 } 2877 2878 void main() 2879 { 2880 ${SETUP} 2881 2882 mat3 x[3][4]; 2883 func(x, in0); 2884 2885 mat3 x0 = x[0][0]; 2886 mat3 x1 = x[1][3]; 2887 mat3 x2 = x[2][0]; 2888 2889 float ret0 = x0[2][0]; 2890 float ret1 = x1[0][2]; 2891 float ret2 = x2[1][2]; 2892 2893 out0 = bvec3(ret0, ret1, ret2); 2894 2895 ${OUTPUT} 2896 } 2897 "" 2898 end 2899 2900 end # out 2901 2902 group unnamed "Array of arrays as unnamed parameter of a function prototype" 2903 2904 case float_3x3 2905 version 310 es 2906 desc "Testing array of arrays as unnamed parameter of a function prototype" 2907 values 2908 { 2909 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(7.4, -1.0, 2.0) | vec3(3.0, 1.6, -2.0) ]; 2910 output vec3 out0 = [ vec3(2.0, -0.5, 1.0) | vec3(2.0, -7.4, -1.0) | vec3(-2.0, -3.0, 1.6) ]; 2911 } 2912 2913 both "" 2914 #version 310 es 2915 precision mediump float; 2916 ${DECLARATIONS} 2917 2918 vec3 func(in float[3][3]); 2919 2920 void main() 2921 { 2922 ${SETUP} 2923 float[3][3] x = float[3][3] ( float[3] (in0.z, 0.0, 0.0), 2924 float[3] (0.0, -in0.x, 0.0), 2925 float[3] (0.0, 0.0, in0.y) ); 2926 out0 = func(x); 2927 ${OUTPUT} 2928 } 2929 2930 vec3 func(in float[3][3] x) 2931 { 2932 return vec3(x[0][0], x[1][1], x[2][2]); 2933 } 2934 "" 2935 end 2936 2937 case int_2x2x2 2938 version 310 es 2939 desc "Testing array of arrays as unnamed parameter of a function prototype" 2940 values 2941 { 2942 input ivec2 in0 = [ ivec2(4, 1) | ivec2(7, -1) | ivec2(3, 1) ]; 2943 output ivec2 out0 = [ ivec2(1, -4) | ivec2(-1, -7) | ivec2(1, -3) ]; 2944 } 2945 2946 both "" 2947 #version 310 es 2948 precision mediump int; 2949 precision mediump float; 2950 ${DECLARATIONS} 2951 2952 ivec2 func(in int[2][2][2]); 2953 2954 void main() 2955 { 2956 ${SETUP} 2957 int[2][2][2] x = int[2][2][2] ( int[2][2] ( int[2] (in0.y, -in0.x), 2958 int[2] (0, 0)), 2959 int[2][2] ( int[2] (0, 0), 2960 int[2] (in0.y, -in0.x)) ); 2961 out0 = func(x); 2962 ${OUTPUT} 2963 } 2964 2965 ivec2 func(in int[2][2][2] x) 2966 { 2967 return ivec2(x[0][0][0], x[1][1][1]); 2968 } 2969 2970 "" 2971 end 2972 2973 case bool_3x2x3 2974 version 310 es 2975 desc "Testing array of arrays as unnamed parameter of a function prototype" 2976 values 2977 { 2978 input bvec3 in0 = [ bvec3(false, true, true) ]; 2979 output bvec3 out0 = [ bvec3(true, false, true) ]; 2980 } 2981 2982 both "" 2983 #version 310 es 2984 precision mediump float; 2985 ${DECLARATIONS} 2986 2987 bvec3 func(in bool[3][2][3]); 2988 2989 void main() 2990 { 2991 ${SETUP} 2992 bool[3] x[3][2] = bool[3][2][3] ( bool[2][3] (bool[3] (in0.z, in0.x, in0.y), 2993 bool[3] (in0.x, in0.y, in0.z)), 2994 bool[2][3] (bool[3] (in0.x, in0.y, in0.z), 2995 bool[3] (in0.z, in0.x, in0.y)), 2996 bool[2][3] (bool[3] (in0.y, in0.z, in0.x), 2997 bool[3] (in0.y, in0.z, in0.x)) ); 2998 out0 = func(x); 2999 ${OUTPUT} 3000 } 3001 3002 bvec3 func(in bool x[3][2][3]) 3003 { 3004 return bvec3(x[0][0][0], x[1][1][1], x[2][1][0]); 3005 } 3006 "" 3007 end 3008 3009 case vec3_2x3 3010 version 310 es 3011 desc "Testing array of arrays as unnamed parameter of a function prototype" 3012 values 3013 { 3014 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-0.5, 11.2, -1.0) ]; 3015 output vec3 out0 = [ vec3(1.0, 0.5, -2.0) | vec3(11.2, -0.5, 1.0) ]; 3016 } 3017 3018 both "" 3019 #version 310 es 3020 precision mediump float; 3021 ${DECLARATIONS} 3022 3023 vec3 func(in vec3[2][3]); 3024 3025 void main() 3026 { 3027 ${SETUP} 3028 vec3[2][3] x = vec3[2][3]( vec3[3] ( vec3(in0.x, in0.y, -in0.z), 3029 vec3(in0.y, -in0.z, in0.x), 3030 vec3(-in0.z, in0.x, in0.y)), 3031 vec3[3] ( vec3(in0.y, -in0.z, in0.x), 3032 vec3(in0.x, in0.y, -in0.z), 3033 vec3(-in0.z, in0.x, in0.y)) ); 3034 3035 x = vec3[2][3] (vec3[3] (x[0][1], x[0][2], x[0][0]), 3036 vec3[3] (x[1][1], x[1][2], x[1][0]) ); 3037 out0 = func(x); 3038 ${OUTPUT} 3039 } 3040 3041 vec3 func(in vec3[3] x[2]) 3042 { 3043 return vec3(x[0][0].x, x[1][1].y, x[0][2].z); 3044 } 3045 "" 3046 end 3047 3048 case struct_3x1x3 3049 version 310 es 3050 desc "Testing array of arrays as unnamed parameter of a function prototype" 3051 values 3052 { 3053 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ]; 3054 output vec3 out0 = [ vec3(-1.0, 2.0, 0.5) ]; 3055 } 3056 3057 both "" 3058 #version 310 es 3059 precision mediump float; 3060 ${DECLARATIONS} 3061 3062 struct Test 3063 { 3064 float f; 3065 vec3 v; 3066 }; 3067 3068 vec3 func(in Test[3] x[3][1]) 3069 { 3070 return vec3(x[0][0][0].v.z, x[2][0][2].v.y, x[1][0][1].v.x); 3071 } 3072 3073 void main() 3074 { 3075 ${SETUP} 3076 Test a = Test(in0.z, vec3(in0.x, in0.y, in0.z)); 3077 Test b = Test(in0.y, vec3(-in0.z, -in0.x, -in0.y)); 3078 Test c = Test(in0.x, vec3(-in0.y, in0.z, -in0.x)); 3079 3080 Test x[3][1][3] = Test[3][1][3] ( Test[1][3] (Test[3] (b, b, b)), 3081 Test[1][3] (Test[3] (a, a, a)), 3082 Test[1][3] (Test[3] (c, c, c)) ); 3083 3084 out0 = func(x); 3085 ${OUTPUT} 3086 } 3087 "" 3088 end 3089 3090 case ivec3_3x3 3091 version 310 es 3092 desc "Testing array of arrays as unnamed parameter of a function prototype" 3093 values 3094 { 3095 input ivec3 in0 = [ ivec3(5, 1, 2) | ivec3(-5, 11, -1) ]; 3096 output ivec3 out0 = [ ivec3(1, 5, -2) | ivec3(11, -5, 1) ]; 3097 } 3098 3099 both "" 3100 #version 310 es 3101 precision mediump int; 3102 precision mediump float; 3103 ${DECLARATIONS} 3104 3105 ivec3 func(in ivec3[3][3]); 3106 3107 void main() 3108 { 3109 ${SETUP} 3110 ivec3[3][3] x = ivec3[3][3] ( ivec3[3] ( ivec3(in0.x, in0.y, -in0.z), 3111 ivec3(in0.x, in0.y, -in0.z), 3112 ivec3(in0.x, in0.y, -in0.z)), 3113 3114 ivec3[3] ( ivec3(in0.y, -in0.z, in0.x), 3115 ivec3(in0.y, -in0.z, in0.x), 3116 ivec3(in0.y, -in0.z, in0.x)), 3117 3118 ivec3[3] ( ivec3(-in0.z, in0.x, in0.y), 3119 ivec3(-in0.z, in0.x, in0.y), 3120 ivec3(-in0.z, in0.x, in0.y)) ); 3121 out0 = func(x); 3122 ${OUTPUT} 3123 } 3124 3125 ivec3 func(in ivec3 x[3][3]) 3126 { 3127 return ivec3(x[1][0].x, x[2][0].y, x[0][2].z); 3128 } 3129 3130 "" 3131 end 3132 3133 case bvec4_4x2 3134 version 310 es 3135 desc "Testing array of arrays as unnamed parameter of a function prototype" 3136 values 3137 { 3138 input bvec4 in0 = [ bvec4(true, false, false, true) ]; 3139 output bvec4 out0 = [ bvec4(true, true, false, true) ]; 3140 } 3141 3142 both "" 3143 #version 310 es 3144 precision mediump int; 3145 precision mediump float; 3146 ${DECLARATIONS} 3147 3148 bvec4 func(in bvec4[4][2]); 3149 3150 void main() 3151 { 3152 ${SETUP} 3153 bvec4[4] a = bvec4[4]( bvec4(in0.x, in0.y, in0.z, in0.w), 3154 bvec4(in0.w, in0.y, in0.z, in0.x), 3155 bvec4(in0.z, in0.w, in0.x, in0.y), 3156 bvec4(in0.y, in0.x, in0.z, in0.w) ); 3157 3158 bvec4 x[4][2] = bvec4[4][2] ( bvec4[2] (bvec4(a[0]), 3159 bvec4(a[1])), 3160 3161 bvec4[2] (bvec4(a[2]), 3162 bvec4(a[3])), 3163 3164 bvec4[2] (bvec4(a[1]), 3165 bvec4(a[2])), 3166 3167 bvec4[2] (bvec4(a[3]), 3168 bvec4(a[0])) ); 3169 3170 out0 = func(x); 3171 ${OUTPUT} 3172 } 3173 3174 bvec4 func(in bvec4[4][2] x) 3175 { 3176 return bvec4(x[0][1].x, x[1][0].y, x[2][0].z, x[3][1].w); 3177 } 3178 "" 3179 end 3180 3181 case mat3_3x2 3182 version 310 es 3183 desc "Testing array of arrays as unnamed parameter of a function prototype" 3184 values 3185 { 3186 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-1.5, 0.0, -2.3) ]; 3187 output vec3 out0 = [ vec3(0.5, -1.0, 1.0) | vec3(-1.5, 0.0, 0.0) ]; 3188 } 3189 3190 both "" 3191 #version 310 es 3192 precision mediump float; 3193 ${DECLARATIONS} 3194 3195 vec3 func(in mat3[3][2]); 3196 3197 void main() 3198 { 3199 ${SETUP} 3200 3201 mat3 a = mat3( in0.x, in0.y, in0.z, 3202 in0.x, in0.y, in0.z, 3203 in0.x, in0.y, in0.z); 3204 3205 mat3 b = mat3( in0.z, in0.x, -in0.y, 3206 in0.z, in0.x, -in0.y, 3207 in0.z, in0.x, -in0.y); 3208 3209 mat3 c = mat3 ( -in0.z, -in0.z, in0.z, 3210 -in0.y, -in0.y, in0.y, 3211 -in0.x, -in0.x, in0.x); 3212 3213 mat3[3][2] x = mat3[3][2] ( mat3[2] (a, b), 3214 mat3[2] (c, a), 3215 mat3[2] (b, c) ); 3216 3217 out0 = func(x); 3218 ${OUTPUT} 3219 } 3220 3221 vec3 func(in mat3[2] x[3]) 3222 { 3223 mat3 a0 = x[0][0]; 3224 mat3 a1 = x[0][1]; 3225 mat3 a2 = x[2][1]; 3226 3227 float ret0 = a0[2][0]; 3228 float ret1 = a1[0][2]; 3229 float ret2 = a2[1][2]; 3230 3231 return vec3(ret0, ret1, ret2); 3232 } 3233 "" 3234 end 3235 3236 case mat3_3x3x3 3237 version 310 es 3238 desc "Testing array of arrays as unnamed parameter of a function prototype" 3239 values 3240 { 3241 input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(-1, 0, -2) ]; 3242 output ivec3 out0 = [ ivec3(0, -1, 1) | ivec3(-1, 0, 0) ]; 3243 } 3244 3245 both "" 3246 #version 310 es 3247 precision mediump int; 3248 precision mediump float; 3249 ${DECLARATIONS} 3250 3251 ivec3 func(in mat3[3][3][3]); 3252 3253 void main() 3254 { 3255 ${SETUP} 3256 3257 mat3 a = mat3( in0.x, in0.y, in0.z, 3258 in0.x, in0.y, in0.z, 3259 in0.x, in0.y, in0.z); 3260 mat3 b = mat3( in0.z, in0.x, -in0.y, 3261 in0.z, in0.x, -in0.y, 3262 in0.z, in0.x, -in0.y); 3263 mat3 c = mat3( -in0.z, -in0.z, in0.z, 3264 -in0.y, -in0.y, in0.y, 3265 -in0.x, -in0.x, in0.x); 3266 3267 mat3 x[3][3][3] = mat3[3][3][3] (mat3[3][3] (mat3[3] (a, a, a), 3268 mat3[3] (b, b, b), 3269 mat3[3] (c, c, c)), 3270 3271 mat3[3][3] (mat3[3] (b, b, b), 3272 mat3[3] (a, a, a), 3273 mat3[3] (c, c, c)), 3274 3275 mat3[3][3] (mat3[3] (c, c, c), 3276 mat3[3] (a, a, a), 3277 mat3[3] (b, b, b)) ); 3278 3279 out0 = func(x); 3280 ${OUTPUT} 3281 } 3282 3283 ivec3 func(in mat3[3][3] x[3]) 3284 { 3285 mat3 x0 = x[0][0][0]; 3286 mat3 x1 = x[1][0][0]; 3287 mat3 x2 = x[2][0][0]; 3288 3289 float ret0 = x0[2][0]; 3290 float ret1 = x1[0][2]; 3291 float ret2 = x2[1][2]; 3292 3293 return ivec3(ret0, ret1, ret2); 3294 } 3295 "" 3296 end 3297 3298 case mat3_3x4 3299 version 310 es 3300 desc "Testing array of arrays as unnamed parameter of a function prototype" 3301 values 3302 { 3303 input bvec3 in0 = [ bvec3(true, false, true) ]; 3304 output bvec3 out0 = [ bvec3(true, false, false) ]; 3305 } 3306 3307 both "" 3308 #version 310 es 3309 precision mediump float; 3310 ${DECLARATIONS} 3311 3312 bvec3 func(in mat3[3][4]); 3313 3314 void main() 3315 { 3316 ${SETUP} 3317 3318 mat3 a = mat3( in0.x, in0.y, in0.z, 3319 in0.x, in0.y, in0.z, 3320 in0.x, in0.y, in0.z); 3321 3322 mat3 b = mat3( in0.z, in0.x, in0.y, 3323 in0.z, in0.x, in0.y, 3324 in0.z, in0.x, in0.y); 3325 3326 mat3 c = mat3( in0.z, in0.z, in0.z, 3327 in0.y, in0.y, in0.y, 3328 in0.x, in0.x, in0.x); 3329 3330 mat3 x[3][4] = mat3[3][4] ( mat3[4] (a, b, c, a), 3331 mat3[4] (b, c, a, b), 3332 mat3[4] (c, a, b, c) ); 3333 3334 out0 = func(x); 3335 3336 ${OUTPUT} 3337 } 3338 3339 bvec3 func(in mat3[4] x[3]) 3340 { 3341 mat3 x0 = x[0][0]; 3342 mat3 x1 = x[1][3]; 3343 mat3 x2 = x[2][0]; 3344 3345 float ret0 = x0[2][0]; 3346 float ret1 = x1[0][2]; 3347 float ret2 = x2[1][2]; 3348 3349 return bvec3(ret0, ret1, ret2); 3350 } 3351 "" 3352 end 3353 3354 end # unnamed_parameter 3355 3356end # parameter 3357 3358group implicit_size "Declaring arrays of arrays with implicit size" 3359 3360 case float_3x3 3361 version 310 es 3362 desc "Testing declaring arrays of arrays with implicit size" 3363 values 3364 { 3365 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(7.4, -1.0, 2.0) | vec3(3.0, 1.6, -2.0) ]; 3366 output vec3 out0 = [ vec3(2.0, 0.5, 1.0) | vec3(2.0, 7.4, -1.0) | vec3(-2.0, 3.0, 1.6) ]; 3367 } 3368 3369 both "" 3370 #version 310 es 3371 precision mediump float; 3372 ${DECLARATIONS} 3373 3374 void main() 3375 { 3376 ${SETUP} 3377 float x[][] = float[][] ( float[] (in0.z, in0.x, in0.y), 3378 float[] (in0.z, in0.x, in0.y), 3379 float[] (in0.z, in0.x, in0.y) ); 3380 3381 out0 = vec3(x[0][0], x[1][1], x[2][2]); 3382 ${OUTPUT} 3383 } 3384 "" 3385 end 3386 3387 case int_2x3 3388 version 310 es 3389 desc "Testing declaring arrays of arrays with implicit size" 3390 values 3391 { 3392 input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(7, -1, 2) | ivec3(3, 1, -2) ]; 3393 output ivec3 out0 = [ ivec3(2, 0, 1) | ivec3(2, 7, -1) | ivec3(-2, 3, 1) ]; 3394 } 3395 3396 both "" 3397 #version 310 es 3398 precision mediump int; 3399 precision mediump float; 3400 ${DECLARATIONS} 3401 3402 void main() 3403 { 3404 ${SETUP} 3405 int[][] x = int[][] ( int[] (in0.z, in0.x, in0.y), 3406 int[] (in0.z, in0.x, in0.y) );; 3407 3408 out0 = ivec3(x[0][0], x[1][1], x[0][2]); 3409 ${OUTPUT} 3410 } 3411 "" 3412 end 3413 3414 case bool_3x3x3 3415 version 310 es 3416 desc "Testing declaring arrays of arrays with implicit size" 3417 values 3418 { 3419 input bvec3 in0 = [ bvec3(false, true, true) ]; 3420 output bvec3 out0 = [ bvec3(true, false, true) ]; 3421 } 3422 3423 both "" 3424 #version 310 es 3425 precision mediump float; 3426 ${DECLARATIONS} 3427 3428 void main() 3429 { 3430 ${SETUP} 3431 bool[][] x[] = bool[][][] ( bool[][] ( bool[](in0.z, in0.z, in0.z), 3432 bool[](in0.z, in0.z, in0.z), 3433 bool[](in0.z, in0.z, in0.z)), 3434 3435 bool[][] ( bool[](in0.x, in0.x, in0.x), 3436 bool[](in0.x, in0.x, in0.x), 3437 bool[](in0.x, in0.x, in0.x)), 3438 3439 bool[][] ( bool[](in0.y, in0.y, in0.y), 3440 bool[](in0.y, in0.y, in0.y), 3441 bool[](in0.y, in0.y, in0.y)) ); 3442 3443 out0 = bvec3(x[0][0][0], x[1][1][1], x[2][2][2]); 3444 ${OUTPUT} 3445 } 3446 "" 3447 end 3448 3449 case struct_5x5x4 3450 version 310 es 3451 desc "Testing declaring arrays of arrays with implicit size" 3452 values 3453 { 3454 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ]; 3455 output vec3 out0 = [ vec3(-1.0, -0.5, 2.0) ]; 3456 } 3457 3458 both "" 3459 #version 310 es 3460 precision mediump float; 3461 ${DECLARATIONS} 3462 3463 struct Test 3464 { 3465 float f; 3466 vec3 v; 3467 }; 3468 3469 void main() 3470 { 3471 ${SETUP} 3472 3473 Test a = Test(in0.z, vec3(in0.x, in0.y, in0.z)); 3474 Test b = Test(in0.y, vec3(-in0.z, -in0.x, -in0.y)); 3475 Test c = Test(in0.x, vec3(-in0.y, in0.z, -in0.x)); 3476 3477 Test[] x[][] = Test[][][] ( Test[][] ( Test[] (c, c, c, c), 3478 Test[] (b, b, b, b), 3479 Test[] (a, a, a, a), 3480 Test[] (c, c, c, c), 3481 Test[] (b, b, b, b) ), 3482 3483 Test[][] ( Test[] (a, a, a, a), 3484 Test[] (b, b, b, b), 3485 Test[] (c, c, c, c), 3486 Test[] (a, a, a, a), 3487 Test[] (b, b, b, b) ), 3488 3489 Test[][] ( Test[] (b, b, b, b), 3490 Test[] (c, c, c, c), 3491 Test[] (a, a, a, a), 3492 Test[] (b, b, b, b), 3493 Test[] (c, c, c, c) ), 3494 3495 Test[][] ( Test[] (c, c, c, c), 3496 Test[] (b, b, b, b), 3497 Test[] (a, a, a, a), 3498 Test[] (c, c, c, c), 3499 Test[] (b, b, b, b) ), 3500 3501 Test[][] ( Test[] (a, a, a, a), 3502 Test[] (b, b, b, b), 3503 Test[] (c, c, c, c), 3504 Test[] (a, a, a, a), 3505 Test[] (b, b, b, b) ) ); 3506 3507 out0 = vec3(x[0][0][0].v.x, x[1][1][1].v.y, x[4][3][3].v.z); 3508 ${OUTPUT} 3509 } 3510 "" 3511 end 3512 3513 case vec3_1x3 3514 version 310 es 3515 desc "Testing declaring arrays of arrays with implicit size" 3516 values 3517 { 3518 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-0.5, 11.2, -1.0) ]; 3519 output vec3 out0 = [ vec3(0.5, -2.0, 1.0) | vec3(-0.5, 1.0, 11.2) ]; 3520 } 3521 3522 both "" 3523 #version 310 es 3524 precision mediump float; 3525 ${DECLARATIONS} 3526 3527 void main() 3528 { 3529 ${SETUP} 3530 vec3 x[][] = vec3[][] ( vec3[] (vec3(in0.x, in0.y, -in0.z) , 3531 vec3(in0.y, -in0.z, in0.x) , 3532 vec3(-in0.z, in0.x, in0.y)) ); 3533 3534 out0 = vec3(x[0][0].x, x[0][1].y, x[0][2].z); 3535 ${OUTPUT} 3536 } 3537 "" 3538 end 3539 3540 case ivec3_3x1x3 3541 version 310 es 3542 desc "Testing declaring arrays of arrays with implicit size" 3543 values 3544 { 3545 input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(5, 11, -1) ]; 3546 output ivec3 out0 = [ ivec3(0, -2, 1) | ivec3(5, 1, 11) ]; 3547 } 3548 3549 both "" 3550 #version 310 es 3551 precision mediump int; 3552 precision mediump float; 3553 ${DECLARATIONS} 3554 3555 void main() 3556 { 3557 ${SETUP} 3558 ivec3[][][] x = ivec3[][][] ( ivec3[][] ( ivec3[] ( ivec3(in0.x, in0.y, -in0.z), 3559 ivec3(0.0, 0.0, 0.0), 3560 ivec3(0.0, 0.0, 0.0)) ), 3561 3562 ivec3[][] ( ivec3[] ( ivec3(0.0, 0.0, 0.0), 3563 ivec3(in0.y, -in0.z, in0.x), 3564 ivec3(0.0, 0.0, 0.0)) ), 3565 3566 ivec3[][] ( ivec3[] ( ivec3(0.0, 0.0, 0.0), 3567 ivec3(0.0, 0.0, 0.0), 3568 ivec3(-in0.z, in0.x, in0.y)) ) ); 3569 3570 out0 = ivec3(x[0][0][0].x, x[1][0][1].y, x[2][0][2].z); 3571 ${OUTPUT} 3572 } 3573 "" 3574 end 3575 3576 case bvec3_3x1 3577 version 310 es 3578 desc "Testing declaring arrays of arrays with implicit size" 3579 values 3580 { 3581 input bvec3 in0 = [ bvec3(true, false, true) ]; 3582 output bvec3 out0 = [ bvec3(true, true, false) ]; 3583 } 3584 3585 both "" 3586 #version 310 es 3587 precision mediump float; 3588 ${DECLARATIONS} 3589 3590 void main() 3591 { 3592 ${SETUP} 3593 bvec3[][] x = bvec3[][] ( bvec3[] ( bvec3(in0.x, in0.y, in0.z)), 3594 bvec3[] ( bvec3(in0.y, in0.z, in0.x)), 3595 bvec3[] ( bvec3(in0.z, in0.x, in0.y)) ); 3596 3597 out0 = bvec3(x[0][0].x, x[1][0].y, x[2][0].z); 3598 ${OUTPUT} 3599 } 3600 "" 3601 end 3602 3603 case mat3_3x2 3604 version 310 es 3605 desc "Testing declaring arrays of arrays with implicit size" 3606 values 3607 { 3608 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-1.5, 0.0, -2.3) ]; 3609 output vec3 out0 = [ vec3(0.5, -1.0, 1.0) | vec3(-1.5, 0.0, 0.0) ]; 3610 } 3611 3612 both "" 3613 #version 310 es 3614 precision mediump float; 3615 ${DECLARATIONS} 3616 3617 void main() 3618 { 3619 ${SETUP} 3620 mat3[][] a = mat3[][] ( mat3[] ( mat3( in0.x, in0.y, in0.z, 3621 in0.x, in0.y, in0.z, 3622 in0.x, in0.y, in0.z), 3623 mat3( in0.z, in0.x, -in0.y, 3624 in0.z, in0.x, -in0.y, 3625 in0.z, in0.x, -in0.y)), 3626 3627 mat3[] ( mat3( -in0.z, -in0.z, in0.z, 3628 -in0.y, -in0.y, in0.y, 3629 -in0.x, -in0.x, in0.x), 3630 mat3( in0.x, in0.y, in0.z, 3631 in0.x, in0.y, in0.z, 3632 in0.x, in0.y, in0.z)), 3633 3634 mat3[] ( mat3( in0.z, in0.x, -in0.y, 3635 in0.z, in0.x, -in0.y, 3636 in0.z, in0.x, -in0.y), 3637 mat3( -in0.z, -in0.z, in0.z, 3638 -in0.y, -in0.y, in0.y, 3639 -in0.x, -in0.x, in0.x)) ); 3640 3641 mat3 a0 = a[0][0]; 3642 mat3 a1 = a[0][1]; 3643 mat3 a2 = a[2][1]; 3644 3645 float ret0 = a0[2][0]; 3646 float ret1 = a1[0][2]; 3647 float ret2 = a2[1][2]; 3648 3649 out0 = vec3(ret0, ret1, ret2); 3650 ${OUTPUT} 3651 } 3652 "" 3653 end 3654 3655 case mat3_3x3x3 3656 version 310 es 3657 desc "Testing declaring arrays of arrays with implicit size" 3658 values 3659 { 3660 input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(-1, 0, -2) ]; 3661 output ivec3 out0 = [ ivec3(0, -1, 1) | ivec3(-1, 0, 0) ]; 3662 } 3663 3664 both "" 3665 #version 310 es 3666 precision mediump int; 3667 precision mediump float; 3668 ${DECLARATIONS} 3669 3670 void main() 3671 { 3672 ${SETUP} 3673 3674 mat3 a = mat3( in0.x, in0.y, in0.z, 3675 in0.x, in0.y, in0.z, 3676 in0.x, in0.y, in0.z); 3677 mat3 b = mat3( in0.z, in0.x, -in0.y, 3678 in0.z, in0.x, -in0.y, 3679 in0.z, in0.x, -in0.y); 3680 mat3 c = mat3( -in0.z, -in0.z, in0.z, 3681 -in0.y, -in0.y, in0.y, 3682 -in0.x, -in0.x, in0.x); 3683 3684 mat3[][][] x = mat3[][][] ( mat3[][] ( mat3[] (a, a, a), 3685 mat3[] (b, b, b), 3686 mat3[] (c, c, c)), 3687 3688 mat3[][] ( mat3[] (b, b, b), 3689 mat3[] (a, a, a), 3690 mat3[] (c, c, c)), 3691 3692 mat3[][] ( mat3[] (c, c, c), 3693 mat3[] (a, a, a), 3694 mat3[] (b, b, b)) ); 3695 3696 mat3 x0 = x[0][0][0]; 3697 mat3 x1 = x[1][0][0]; 3698 mat3 x2 = x[2][0][0]; 3699 3700 float ret0 = x0[2][0]; 3701 float ret1 = x1[0][2]; 3702 float ret2 = x2[1][2]; 3703 3704 out0 = ivec3(ret0, ret1, ret2); 3705 ${OUTPUT} 3706 } 3707 "" 3708 end 3709 3710 case mat3_3x4 3711 version 310 es 3712 desc "Testing declaring arrays of arrays with implicit size" 3713 values 3714 { 3715 input bvec3 in0 = [ bvec3(true, false, true) ]; 3716 output bvec3 out0 = [ bvec3(true, false, false) ]; 3717 } 3718 3719 both "" 3720 #version 310 es 3721 precision mediump float; 3722 ${DECLARATIONS} 3723 3724 void main() 3725 { 3726 ${SETUP} 3727 3728 mat3 a = mat3( in0.x, in0.y, in0.z, 3729 in0.x, in0.y, in0.z, 3730 in0.x, in0.y, in0.z); 3731 3732 mat3 b = mat3( in0.z, in0.x, in0.y, 3733 in0.z, in0.x, in0.y, 3734 in0.z, in0.x, in0.y); 3735 3736 mat3 c = mat3( in0.z, in0.z, in0.z, 3737 in0.y, in0.y, in0.y, 3738 in0.x, in0.x, in0.x); 3739 3740 mat3[] x[] = mat3[][] ( mat3[] (a, b, c, a), 3741 mat3[] (b, c, a, b), 3742 mat3[] (c, a, b, c) ); 3743 3744 mat3 x0 = x[0][0]; 3745 mat3 x1 = x[1][3]; 3746 mat3 x2 = x[2][0]; 3747 3748 float ret0 = x0[2][0]; 3749 float ret1 = x1[0][2]; 3750 float ret2 = x2[1][2]; 3751 3752 out0 = bvec3(ret0, ret1, ret2); 3753 ${OUTPUT} 3754 } 3755 "" 3756 end 3757 3758end # implicit_size 3759 3760group assignment "Testing assignment of arrays of arrays" 3761 3762 group explicit_to_explicit "Declaring an array of arrays with explicit size and assigning it to another array of arrays with explicit size" 3763 3764 case float_3x3 3765 version 310 es 3766 desc "Testing assignment of arrays of arrays with explicit size" 3767 values 3768 { 3769 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(7.4, -1.0, 2.0) | vec3(3.0, 1.6, -2.0) ]; 3770 output vec3 out0 = [ vec3(2.0, 0.5, 1.0) | vec3(2.0, 7.4, -1.0) | vec3(-2.0, 3.0, 1.6) ]; 3771 } 3772 3773 both "" 3774 #version 310 es 3775 precision mediump float; 3776 ${DECLARATIONS} 3777 3778 void main() 3779 { 3780 ${SETUP} 3781 float x[3][3] = float[3][3] ( float[3] (in0.z, in0.x, in0.y), 3782 float[3] (in0.z, in0.x, in0.y), 3783 float[3] (in0.z, in0.x, in0.y) ); 3784 3785 float[3] y[3] = x; 3786 3787 out0 = vec3(y[0][0], y[1][1], y[2][2]); 3788 ${OUTPUT} 3789 } 3790 "" 3791 end 3792 3793 case int_2x3 3794 version 310 es 3795 desc "Testing assignment of arrays of arrays with explicit size" 3796 values 3797 { 3798 input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(7, -1, 2) | ivec3(3, 1, -2) ]; 3799 output ivec3 out0 = [ ivec3(2, 0, 1) | ivec3(2, 7, -1) | ivec3(-2, 3, 1) ]; 3800 } 3801 3802 both "" 3803 #version 310 es 3804 precision mediump int; 3805 precision mediump float; 3806 ${DECLARATIONS} 3807 3808 void main() 3809 { 3810 ${SETUP} 3811 int[2][3] x = int[2][3] ( int[3] (in0.z, in0.x, in0.y), 3812 int[3] (in0.z, in0.x, in0.y) );; 3813 int y[2][3] = x; 3814 3815 out0 = ivec3(y[0][0], y[1][1], y[0][2]); 3816 ${OUTPUT} 3817 } 3818 "" 3819 end 3820 3821 case bool_3x3x3 3822 version 310 es 3823 desc "Testing assignment of arrays of arrays with explicit size" 3824 values 3825 { 3826 input bvec3 in0 = [ bvec3(false, true, true) ]; 3827 output bvec3 out0 = [ bvec3(true, false, true) ]; 3828 } 3829 3830 both "" 3831 #version 310 es 3832 precision mediump float; 3833 ${DECLARATIONS} 3834 3835 void main() 3836 { 3837 ${SETUP} 3838 bool[3][3] x[3] = bool[3][3][3] (bool[3][3] (bool[3](in0.z, in0.z, in0.z), 3839 bool[3](in0.z, in0.z, in0.z), 3840 bool[3](in0.z, in0.z, in0.z)), 3841 3842 bool[3][3] (bool[3](in0.x, in0.x, in0.x), 3843 bool[3](in0.x, in0.x, in0.x), 3844 bool[3](in0.x, in0.x, in0.x)), 3845 3846 bool[3][3] (bool[3](in0.y, in0.y, in0.y), 3847 bool[3](in0.y, in0.y, in0.y), 3848 bool[3](in0.y, in0.y, in0.y)) ); 3849 3850 bool[3] y[3][3] = x; 3851 3852 out0 = bvec3(y[0][0][0], y[1][1][1], y[2][2][2]); 3853 ${OUTPUT} 3854 } 3855 "" 3856 end 3857 3858 case struct_5x5x4 3859 version 310 es 3860 desc "Testing assignment of arrays of arrays with explicit size" 3861 values 3862 { 3863 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ]; 3864 output vec3 out0 = [ vec3(-1.0, -0.5, 2.0) ]; 3865 } 3866 3867 both "" 3868 #version 310 es 3869 precision mediump float; 3870 ${DECLARATIONS} 3871 3872 struct Test 3873 { 3874 float f; 3875 vec3 v; 3876 }; 3877 3878 void main() 3879 { 3880 ${SETUP} 3881 3882 Test a = Test(in0.z, vec3(in0.x, in0.y, in0.z)); 3883 Test b = Test(in0.y, vec3(-in0.z, -in0.x, -in0.y)); 3884 Test c = Test(in0.x, vec3(-in0.y, in0.z, -in0.x)); 3885 3886 Test[4] x[5][5] = Test[5][5][4] ( Test[5][4] (Test[4] (c, c, c, c), 3887 Test[4] (b, b, b, b), 3888 Test[4] (a, a, a, a), 3889 Test[4] (c, c, c, c), 3890 Test[4] (b, b, b, b) ), 3891 3892 Test[5][4] (Test[4] (a, a, a, a), 3893 Test[4] (b, b, b, b), 3894 Test[4] (c, c, c, c), 3895 Test[4] (a, a, a, a), 3896 Test[4] (b, b, b, b) ), 3897 3898 Test[5][4] (Test[4] (b, b, b, b), 3899 Test[4] (c, c, c, c), 3900 Test[4] (a, a, a, a), 3901 Test[4] (b, b, b, b), 3902 Test[4] (c, c, c, c) ), 3903 3904 Test[5][4] (Test[4] (c, c, c, c), 3905 Test[4] (b, b, b, b), 3906 Test[4] (a, a, a, a), 3907 Test[4] (c, c, c, c), 3908 Test[4] (b, b, b, b) ), 3909 3910 Test[5][4] (Test[4] (a, a, a, a), 3911 Test[4] (b, b, b, b), 3912 Test[4] (c, c, c, c), 3913 Test[4] (a, a, a, a), 3914 Test[4] (b, b, b, b) ) ); 3915 3916 Test y[5][5][4] = x; 3917 3918 out0 = vec3(y[0][0][0].v.x, y[1][1][1].v.y, y[4][3][3].v.z); 3919 ${OUTPUT} 3920 } 3921 "" 3922 end 3923 3924 case vec3_1x3 3925 version 310 es 3926 desc "Testing assignment of arrays of arrays with explicit size" 3927 values 3928 { 3929 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-0.5, 11.2, -1.0) ]; 3930 output vec3 out0 = [ vec3(0.5, -2.0, 1.0) | vec3(-0.5, 1.0, 11.2) ]; 3931 } 3932 3933 both "" 3934 #version 310 es 3935 precision mediump float; 3936 ${DECLARATIONS} 3937 3938 void main() 3939 { 3940 ${SETUP} 3941 vec3 x[1][3] = vec3[1][3] ( vec3[3] (vec3(in0.x, in0.y, -in0.z), 3942 vec3(in0.y, -in0.z, in0.x), 3943 vec3(-in0.z, in0.x, in0.y)) ); 3944 3945 vec3 y[1][3] = x; 3946 3947 out0 = vec3(y[0][0].x, y[0][1].y, y[0][2].z); 3948 ${OUTPUT} 3949 } 3950 "" 3951 end 3952 3953 case ivec3_3x1x3 3954 version 310 es 3955 desc "Testing assignment of arrays of arrays with explicit size" 3956 values 3957 { 3958 input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(5, 11, -1) ]; 3959 output ivec3 out0 = [ ivec3(0, -2, 1) | ivec3(5, 1, 11) ]; 3960 } 3961 3962 both "" 3963 #version 310 es 3964 precision mediump int; 3965 precision mediump float; 3966 ${DECLARATIONS} 3967 3968 void main() 3969 { 3970 ${SETUP} 3971 ivec3[3][1][3] x = ivec3[3][1][3] ( ivec3[1][3] (ivec3[3] ( ivec3(in0.x, in0.y, -in0.z), 3972 ivec3(0.0, 0.0, 0.0), 3973 ivec3(0.0, 0.0, 0.0)) ), 3974 3975 ivec3[1][3] (ivec3[3] ( ivec3(0.0, 0.0, 0.0), 3976 ivec3(in0.y, -in0.z, in0.x), 3977 ivec3(0.0, 0.0, 0.0)) ), 3978 3979 ivec3[1][3] (ivec3[3] ( ivec3(0.0, 0.0, 0.0), 3980 ivec3(0.0, 0.0, 0.0), 3981 ivec3(-in0.z, in0.x, in0.y)) ) ); 3982 3983 ivec3[3] y[3][1] = x; 3984 3985 out0 = ivec3(y[0][0][0].x, y[1][0][1].y, y[2][0][2].z); 3986 ${OUTPUT} 3987 } 3988 "" 3989 end 3990 3991 case bvec3_3x1 3992 version 310 es 3993 desc "Testing assignment of arrays of arrays with explicit size" 3994 values 3995 { 3996 input bvec3 in0 = [ bvec3(true, false, true) ]; 3997 output bvec3 out0 = [ bvec3(true, true, false) ]; 3998 } 3999 4000 both "" 4001 #version 310 es 4002 precision mediump float; 4003 ${DECLARATIONS} 4004 4005 void main() 4006 { 4007 ${SETUP} 4008 bvec3[3][1] x = bvec3[3][1] ( bvec3[1] ( bvec3(in0.x, in0.y, in0.z)), 4009 bvec3[1] ( bvec3(in0.y, in0.z, in0.x)), 4010 bvec3[1] ( bvec3(in0.z, in0.x, in0.y)) ); 4011 4012 bvec3[3][1] y = x; 4013 4014 out0 = bvec3(y[0][0].x, y[1][0].y, y[2][0].z); 4015 ${OUTPUT} 4016 } 4017 "" 4018 end 4019 4020 case mat3_3x2 4021 version 310 es 4022 desc "Testing assignment of arrays of arrays with explicit size" 4023 values 4024 { 4025 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-1.5, 0.0, -2.3) ]; 4026 output vec3 out0 = [ vec3(0.5, -1.0, 1.0) | vec3(-1.5, 0.0, 0.0) ]; 4027 } 4028 4029 both "" 4030 #version 310 es 4031 precision mediump float; 4032 ${DECLARATIONS} 4033 4034 void main() 4035 { 4036 ${SETUP} 4037 mat3[3][2] a = mat3[3][2] ( mat3[2] (mat3( in0.x, in0.y, in0.z, 4038 in0.x, in0.y, in0.z, 4039 in0.x, in0.y, in0.z), 4040 mat3( in0.z, in0.x, -in0.y, 4041 in0.z, in0.x, -in0.y, 4042 in0.z, in0.x, -in0.y)), 4043 4044 mat3[2] (mat3( -in0.z, -in0.z, in0.z, 4045 -in0.y, -in0.y, in0.y, 4046 -in0.x, -in0.x, in0.x), 4047 mat3( in0.x, in0.y, in0.z, 4048 in0.x, in0.y, in0.z, 4049 in0.x, in0.y, in0.z)), 4050 4051 mat3[2] (mat3( in0.z, in0.x, -in0.y, 4052 in0.z, in0.x, -in0.y, 4053 in0.z, in0.x, -in0.y), 4054 mat3( -in0.z, -in0.z, in0.z, 4055 -in0.y, -in0.y, in0.y, 4056 -in0.x, -in0.x, in0.x)) ); 4057 4058 mat3[2] y[3] = a; 4059 4060 mat3 a0 = y[0][0]; 4061 mat3 a1 = y[0][1]; 4062 mat3 a2 = y[2][1]; 4063 4064 float ret0 = a0[2][0]; 4065 float ret1 = a1[0][2]; 4066 float ret2 = a2[1][2]; 4067 4068 out0 = vec3(ret0, ret1, ret2); 4069 ${OUTPUT} 4070 } 4071 "" 4072 end 4073 4074 case mat3_3x3x3 4075 version 310 es 4076 desc "Testing assignment of arrays of arrays with explicit size" 4077 values 4078 { 4079 input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(-1, 0, -2) ]; 4080 output ivec3 out0 = [ ivec3(0, -1, 1) | ivec3(-1, 0, 0) ]; 4081 } 4082 4083 both "" 4084 #version 310 es 4085 precision mediump int; 4086 precision mediump float; 4087 ${DECLARATIONS} 4088 4089 void main() 4090 { 4091 ${SETUP} 4092 4093 mat3 a = mat3( in0.x, in0.y, in0.z, 4094 in0.x, in0.y, in0.z, 4095 in0.x, in0.y, in0.z); 4096 mat3 b = mat3( in0.z, in0.x, -in0.y, 4097 in0.z, in0.x, -in0.y, 4098 in0.z, in0.x, -in0.y); 4099 mat3 c = mat3( -in0.z, -in0.z, in0.z, 4100 -in0.y, -in0.y, in0.y, 4101 -in0.x, -in0.x, in0.x); 4102 4103 mat3[3][3][3] x = mat3[3][3][3] (mat3[3][3] (mat3[3] (a, a, a), 4104 mat3[3] (b, b, b), 4105 mat3[3] (c, c, c)), 4106 4107 mat3[3][3] (mat3[3] (b, b, b), 4108 mat3[3] (a, a, a), 4109 mat3[3] (c, c, c)), 4110 4111 mat3[3][3] (mat3[3] (c, c, c), 4112 mat3[3] (a, a, a), 4113 mat3[3] (b, b, b)) ); 4114 4115 mat3 y[3][3][3] = x; 4116 4117 mat3 x0 = y[0][0][0]; 4118 mat3 x1 = y[1][0][0]; 4119 mat3 x2 = y[2][0][0]; 4120 4121 float ret0 = x0[2][0]; 4122 float ret1 = x1[0][2]; 4123 float ret2 = x2[1][2]; 4124 4125 out0 = ivec3(ret0, ret1, ret2); 4126 ${OUTPUT} 4127 } 4128 "" 4129 end 4130 4131 case mat3_3x4 4132 version 310 es 4133 desc "Testing assignment of arrays of arrays with explicit size" 4134 values 4135 { 4136 input bvec3 in0 = [ bvec3(true, false, true) ]; 4137 output bvec3 out0 = [ bvec3(true, false, false) ]; 4138 } 4139 4140 both "" 4141 #version 310 es 4142 precision mediump float; 4143 ${DECLARATIONS} 4144 4145 void main() 4146 { 4147 ${SETUP} 4148 4149 mat3 a = mat3( in0.x, in0.y, in0.z, 4150 in0.x, in0.y, in0.z, 4151 in0.x, in0.y, in0.z); 4152 4153 mat3 b = mat3( in0.z, in0.x, in0.y, 4154 in0.z, in0.x, in0.y, 4155 in0.z, in0.x, in0.y); 4156 4157 mat3 c = mat3( in0.z, in0.z, in0.z, 4158 in0.y, in0.y, in0.y, 4159 in0.x, in0.x, in0.x); 4160 4161 mat3[4] x[3] = mat3[3][4] ( mat3[4] (a, b, c, a), 4162 mat3[4] (b, c, a, b), 4163 mat3[4] (c, a, b, c) ); 4164 4165 mat3 y[3][4] = x; 4166 4167 mat3 x0 = y[0][0]; 4168 mat3 x1 = y[1][3]; 4169 mat3 x2 = y[2][0]; 4170 4171 float ret0 = x0[2][0]; 4172 float ret1 = x1[0][2]; 4173 float ret2 = x2[1][2]; 4174 4175 out0 = bvec3(ret0, ret1, ret2); 4176 ${OUTPUT} 4177 } 4178 "" 4179 end 4180 4181 end # explicit_to_explicit 4182 4183 group explicit_to_implicit "Declaring an array of arrays with explicit size and assigning it to another array of arrays with implicit size" 4184 4185 case float_3x3 4186 version 310 es 4187 desc "Testing assignment of arrays of arrays from explicitly sized to implicitly sized" 4188 values 4189 { 4190 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(7.4, -1.0, 2.0) | vec3(3.0, 1.6, -2.0) ]; 4191 output vec3 out0 = [ vec3(2.0, 0.5, 1.0) | vec3(2.0, 7.4, -1.0) | vec3(-2.0, 3.0, 1.6) ]; 4192 } 4193 4194 both "" 4195 #version 310 es 4196 precision mediump float; 4197 ${DECLARATIONS} 4198 4199 void main() 4200 { 4201 ${SETUP} 4202 float x[3][3] = float[3][3] ( float[3] (in0.z, in0.x, in0.y), 4203 float[3] (in0.z, in0.x, in0.y), 4204 float[3] (in0.z, in0.x, in0.y) ); 4205 4206 float[] y[] = x; 4207 4208 out0 = vec3(y[0][0], y[1][1], y[2][2]); 4209 ${OUTPUT} 4210 } 4211 "" 4212 end 4213 4214 case int_2x3 4215 version 310 es 4216 desc "Testing assignment of arrays of arrays from explicitly sized to implicitly sized" 4217 values 4218 { 4219 input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(7, -1, 2) | ivec3(3, 1, -2) ]; 4220 output ivec3 out0 = [ ivec3(2, 0, 1) | ivec3(2, 7, -1) | ivec3(-2, 3, 1) ]; 4221 } 4222 4223 both "" 4224 #version 310 es 4225 precision mediump int; 4226 precision mediump float; 4227 ${DECLARATIONS} 4228 4229 void main() 4230 { 4231 ${SETUP} 4232 int[2][3] x = int[2][3] ( int[3] (in0.z, in0.x, in0.y), 4233 int[3] (in0.z, in0.x, in0.y) );; 4234 int y[][] = x; 4235 4236 out0 = ivec3(y[0][0], y[1][1], y[0][2]); 4237 ${OUTPUT} 4238 } 4239 "" 4240 end 4241 4242 case bool_3x3x3 4243 version 310 es 4244 desc "Testing assignment of arrays of arrays from explicitly sized to implicitly sized" 4245 values 4246 { 4247 input bvec3 in0 = [ bvec3(false, true, true) ]; 4248 output bvec3 out0 = [ bvec3(true, false, true) ]; 4249 } 4250 4251 both "" 4252 #version 310 es 4253 precision mediump float; 4254 ${DECLARATIONS} 4255 4256 void main() 4257 { 4258 ${SETUP} 4259 bool[3][3] x[3] = bool[3][3][3] (bool[3][3] (bool[3](in0.z, in0.z, in0.z), 4260 bool[3](in0.z, in0.z, in0.z), 4261 bool[3](in0.z, in0.z, in0.z)), 4262 4263 bool[3][3] (bool[3](in0.x, in0.x, in0.x), 4264 bool[3](in0.x, in0.x, in0.x), 4265 bool[3](in0.x, in0.x, in0.x)), 4266 4267 bool[3][3] (bool[3](in0.y, in0.y, in0.y), 4268 bool[3](in0.y, in0.y, in0.y), 4269 bool[3](in0.y, in0.y, in0.y)) ); 4270 4271 bool[] y[][] = x; 4272 4273 out0 = bvec3(y[0][0][0], y[1][1][1], y[2][2][2]); 4274 ${OUTPUT} 4275 } 4276 "" 4277 end 4278 4279 case struct_5x5x4 4280 version 310 es 4281 desc "Testing assignment of arrays of arrays from explicitly sized to implicitly sized" 4282 values 4283 { 4284 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ]; 4285 output vec3 out0 = [ vec3(-1.0, -0.5, 2.0) ]; 4286 } 4287 4288 both "" 4289 #version 310 es 4290 precision mediump float; 4291 ${DECLARATIONS} 4292 4293 struct Test 4294 { 4295 float f; 4296 vec3 v; 4297 }; 4298 4299 void main() 4300 { 4301 ${SETUP} 4302 4303 Test a = Test(in0.z, vec3(in0.x, in0.y, in0.z)); 4304 Test b = Test(in0.y, vec3(-in0.z, -in0.x, -in0.y)); 4305 Test c = Test(in0.x, vec3(-in0.y, in0.z, -in0.x)); 4306 4307 Test[4] x[5][5] = Test[5][5][4] (Test[5][4] (Test[4] (c, c, c, c), 4308 Test[4] (b, b, b, b), 4309 Test[4] (a, a, a, a), 4310 Test[4] (c, c, c, c), 4311 Test[4] (b, b, b, b) ), 4312 4313 Test[5][4] (Test[4] (a, a, a, a), 4314 Test[4] (b, b, b, b), 4315 Test[4] (c, c, c, c), 4316 Test[4] (a, a, a, a), 4317 Test[4] (b, b, b, b) ), 4318 4319 Test[5][4] (Test[4] (b, b, b, b), 4320 Test[4] (c, c, c, c), 4321 Test[4] (a, a, a, a), 4322 Test[4] (b, b, b, b), 4323 Test[4] (c, c, c, c) ), 4324 4325 Test[5][4] (Test[4] (c, c, c, c), 4326 Test[4] (b, b, b, b), 4327 Test[4] (a, a, a, a), 4328 Test[4] (c, c, c, c), 4329 Test[4] (b, b, b, b) ), 4330 4331 Test[5][4] (Test[4] (a, a, a, a), 4332 Test[4] (b, b, b, b), 4333 Test[4] (c, c, c, c), 4334 Test[4] (a, a, a, a), 4335 Test[4] (b, b, b, b) ) ); 4336 4337 Test y[][][] = x; 4338 4339 out0 = vec3(y[0][0][0].v.x, y[1][1][1].v.y, y[4][3][3].v.z); 4340 ${OUTPUT} 4341 } 4342 "" 4343 end 4344 4345 case vec3_1x3 4346 version 310 es 4347 desc "Testing assignment of arrays of arrays from explicitly sized to implicitly sized" 4348 values 4349 { 4350 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-0.5, 11.2, -1.0) ]; 4351 output vec3 out0 = [ vec3(0.5, -2.0, 1.0) | vec3(-0.5, 1.0, 11.2) ]; 4352 } 4353 4354 both "" 4355 #version 310 es 4356 precision mediump float; 4357 ${DECLARATIONS} 4358 4359 void main() 4360 { 4361 ${SETUP} 4362 vec3 x[1][3] = vec3[1][3] ( vec3[3] (vec3(in0.x, in0.y, -in0.z), 4363 vec3(in0.y, -in0.z, in0.x), 4364 vec3(-in0.z, in0.x, in0.y)) ); 4365 4366 vec3 y[][] = x; 4367 4368 out0 = vec3(y[0][0].x, y[0][1].y, y[0][2].z); 4369 ${OUTPUT} 4370 } 4371 "" 4372 end 4373 4374 case ivec3_3x1x3 4375 version 310 es 4376 desc "Testing assignment of arrays of arrays from explicitly sized to implicitly sized" 4377 values 4378 { 4379 input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(5, 11, -1) ]; 4380 output ivec3 out0 = [ ivec3(0, -2, 1) | ivec3(5, 1, 11) ]; 4381 } 4382 4383 both "" 4384 #version 310 es 4385 precision mediump int; 4386 precision mediump float; 4387 ${DECLARATIONS} 4388 4389 void main() 4390 { 4391 ${SETUP} 4392 ivec3[3][1][3] x = ivec3[3][1][3] ( ivec3[1][3] (ivec3[3] ( ivec3(in0.x, in0.y, -in0.z), 4393 ivec3(0.0, 0.0, 0.0), 4394 ivec3(0.0, 0.0, 0.0)) ), 4395 4396 ivec3[1][3] (ivec3[3] ( ivec3(0.0, 0.0, 0.0), 4397 ivec3(in0.y, -in0.z, in0.x), 4398 ivec3(0.0, 0.0, 0.0)) ), 4399 4400 ivec3[1][3] (ivec3[3] ( ivec3(0.0, 0.0, 0.0), 4401 ivec3(0.0, 0.0, 0.0), 4402 ivec3(-in0.z, in0.x, in0.y)) ) ); 4403 4404 ivec3[] y[][] = x; 4405 4406 out0 = ivec3(y[0][0][0].x, y[1][0][1].y, y[2][0][2].z); 4407 ${OUTPUT} 4408 } 4409 "" 4410 end 4411 4412 case bvec3_3x1 4413 version 310 es 4414 desc "Testing assignment of arrays of arrays from explicitly sized to implicitly sized" 4415 values 4416 { 4417 input bvec3 in0 = [ bvec3(true, false, true) ]; 4418 output bvec3 out0 = [ bvec3(true, true, false) ]; 4419 } 4420 4421 both "" 4422 #version 310 es 4423 precision mediump float; 4424 ${DECLARATIONS} 4425 4426 void main() 4427 { 4428 ${SETUP} 4429 bvec3[3][1] x = bvec3[3][1] ( bvec3[1] ( bvec3(in0.x, in0.y, in0.z)), 4430 bvec3[1] ( bvec3(in0.y, in0.z, in0.x)), 4431 bvec3[1] ( bvec3(in0.z, in0.x, in0.y)) ); 4432 4433 bvec3[][] y = x; 4434 4435 out0 = bvec3(y[0][0].x, y[1][0].y, y[2][0].z); 4436 ${OUTPUT} 4437 } 4438 "" 4439 end 4440 4441 case mat3_3x2 4442 version 310 es 4443 desc "Testing assignment of arrays of arrays from explicitly sized to implicitly sized" 4444 values 4445 { 4446 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-1.5, 0.0, -2.3) ]; 4447 output vec3 out0 = [ vec3(0.5, -1.0, 1.0) | vec3(-1.5, 0.0, 0.0) ]; 4448 } 4449 4450 both "" 4451 #version 310 es 4452 precision mediump float; 4453 ${DECLARATIONS} 4454 4455 void main() 4456 { 4457 ${SETUP} 4458 mat3[3][2] a = mat3[3][2] ( mat3[2] (mat3( in0.x, in0.y, in0.z, 4459 in0.x, in0.y, in0.z, 4460 in0.x, in0.y, in0.z), 4461 mat3( in0.z, in0.x, -in0.y, 4462 in0.z, in0.x, -in0.y, 4463 in0.z, in0.x, -in0.y)), 4464 4465 mat3[2] (mat3( -in0.z, -in0.z, in0.z, 4466 -in0.y, -in0.y, in0.y, 4467 -in0.x, -in0.x, in0.x), 4468 mat3( in0.x, in0.y, in0.z, 4469 in0.x, in0.y, in0.z, 4470 in0.x, in0.y, in0.z)), 4471 4472 mat3[2] (mat3( in0.z, in0.x, -in0.y, 4473 in0.z, in0.x, -in0.y, 4474 in0.z, in0.x, -in0.y), 4475 mat3( -in0.z, -in0.z, in0.z, 4476 -in0.y, -in0.y, in0.y, 4477 -in0.x, -in0.x, in0.x)) ); 4478 4479 mat3[] y[] = a; 4480 4481 mat3 a0 = y[0][0]; 4482 mat3 a1 = y[0][1]; 4483 mat3 a2 = y[2][1]; 4484 4485 float ret0 = a0[2][0]; 4486 float ret1 = a1[0][2]; 4487 float ret2 = a2[1][2]; 4488 4489 out0 = vec3(ret0, ret1, ret2); 4490 ${OUTPUT} 4491 } 4492 "" 4493 end 4494 4495 case mat3_3x3x3 4496 version 310 es 4497 desc "Testing assignment of arrays of arrays from explicitly sized to implicitly sized" 4498 values 4499 { 4500 input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(-1, 0, -2) ]; 4501 output ivec3 out0 = [ ivec3(0, -1, 1) | ivec3(-1, 0, 0) ]; 4502 } 4503 4504 both "" 4505 #version 310 es 4506 precision mediump int; 4507 precision mediump float; 4508 ${DECLARATIONS} 4509 4510 void main() 4511 { 4512 ${SETUP} 4513 4514 mat3 a = mat3( in0.x, in0.y, in0.z, 4515 in0.x, in0.y, in0.z, 4516 in0.x, in0.y, in0.z); 4517 mat3 b = mat3( in0.z, in0.x, -in0.y, 4518 in0.z, in0.x, -in0.y, 4519 in0.z, in0.x, -in0.y); 4520 mat3 c = mat3( -in0.z, -in0.z, in0.z, 4521 -in0.y, -in0.y, in0.y, 4522 -in0.x, -in0.x, in0.x); 4523 4524 mat3[3][3][3] x = mat3[3][3][3] (mat3[3][3] (mat3[3] (a, a, a), 4525 mat3[3] (b, b, b), 4526 mat3[3] (c, c, c)), 4527 4528 mat3[3][3] (mat3[3] (b, b, b), 4529 mat3[3] (a, a, a), 4530 mat3[3] (c, c, c)), 4531 4532 mat3[3][3] (mat3[3] (c, c, c), 4533 mat3[3] (a, a, a), 4534 mat3[3] (b, b, b)) ); 4535 4536 mat3 y[][][] = x; 4537 4538 mat3 x0 = y[0][0][0]; 4539 mat3 x1 = y[1][0][0]; 4540 mat3 x2 = y[2][0][0]; 4541 4542 float ret0 = x0[2][0]; 4543 float ret1 = x1[0][2]; 4544 float ret2 = x2[1][2]; 4545 4546 out0 = ivec3(ret0, ret1, ret2); 4547 ${OUTPUT} 4548 } 4549 "" 4550 end 4551 4552 case mat3_3x4 4553 version 310 es 4554 desc "Testing assignment of arrays of arrays from explicitly sized to implicitly sized" 4555 values 4556 { 4557 input bvec3 in0 = [ bvec3(true, false, true) ]; 4558 output bvec3 out0 = [ bvec3(true, false, false) ]; 4559 } 4560 4561 both "" 4562 #version 310 es 4563 precision mediump float; 4564 ${DECLARATIONS} 4565 4566 void main() 4567 { 4568 ${SETUP} 4569 4570 mat3 a = mat3( in0.x, in0.y, in0.z, 4571 in0.x, in0.y, in0.z, 4572 in0.x, in0.y, in0.z); 4573 4574 mat3 b = mat3( in0.z, in0.x, in0.y, 4575 in0.z, in0.x, in0.y, 4576 in0.z, in0.x, in0.y); 4577 4578 mat3 c = mat3( in0.z, in0.z, in0.z, 4579 in0.y, in0.y, in0.y, 4580 in0.x, in0.x, in0.x); 4581 4582 mat3[4] x[3] = mat3[3][4] ( mat3[4] (a, b, c, a), 4583 mat3[4] (b, c, a, b), 4584 mat3[4] (c, a, b, c) ); 4585 4586 mat3 y[][] = x; 4587 4588 mat3 x0 = y[0][0]; 4589 mat3 x1 = y[1][3]; 4590 mat3 x2 = y[2][0]; 4591 4592 float ret0 = x0[2][0]; 4593 float ret1 = x1[0][2]; 4594 float ret2 = x2[1][2]; 4595 4596 out0 = bvec3(ret0, ret1, ret2); 4597 ${OUTPUT} 4598 } 4599 "" 4600 end 4601 4602 end # explicit_to_implicit 4603 4604 group implicit_to_explicit "Declaring an array of arrays with implicit size and assigning it to another array of arrays with explicit size" 4605 4606 case float_3x3 4607 version 310 es 4608 desc "Testing assignment of arrays of arrays from implicitly sized to explicitly sized" 4609 values 4610 { 4611 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(7.4, -1.0, 2.0) | vec3(3.0, 1.6, -2.0) ]; 4612 output vec3 out0 = [ vec3(2.0, 0.5, 1.0) | vec3(2.0, 7.4, -1.0) | vec3(-2.0, 3.0, 1.6) ]; 4613 } 4614 4615 both "" 4616 #version 310 es 4617 precision mediump float; 4618 ${DECLARATIONS} 4619 4620 void main() 4621 { 4622 ${SETUP} 4623 float x[][] = float[][] ( float[] (in0.z, in0.x, in0.y), 4624 float[] (in0.z, in0.x, in0.y), 4625 float[] (in0.z, in0.x, in0.y) ); 4626 4627 float[3] y[3] = x; 4628 4629 out0 = vec3(y[0][0], y[1][1], y[2][2]); 4630 ${OUTPUT} 4631 } 4632 "" 4633 end 4634 4635 case int_2x3 4636 version 310 es 4637 desc "Testing assignment of arrays of arrays from implicitly sized to explicitly sized" 4638 values 4639 { 4640 input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(7, -1, 2) | ivec3(3, 1, -2) ]; 4641 output ivec3 out0 = [ ivec3(2, 0, 1) | ivec3(2, 7, -1) | ivec3(-2, 3, 1) ]; 4642 } 4643 4644 both "" 4645 #version 310 es 4646 precision mediump int; 4647 precision mediump float; 4648 ${DECLARATIONS} 4649 4650 void main() 4651 { 4652 ${SETUP} 4653 int[][] x = int[][] ( int[] (in0.z, in0.x, in0.y), 4654 int[] (in0.z, in0.x, in0.y) );; 4655 int y[2][3] = x; 4656 4657 out0 = ivec3(y[0][0], y[1][1], y[0][2]); 4658 ${OUTPUT} 4659 } 4660 "" 4661 end 4662 4663 case bool_3x3x3 4664 version 310 es 4665 desc "Testing assignment of arrays of arrays from implicitly sized to explicitly sized" 4666 values 4667 { 4668 input bvec3 in0 = [ bvec3(false, true, true) ]; 4669 output bvec3 out0 = [ bvec3(true, false, true) ]; 4670 } 4671 4672 both "" 4673 #version 310 es 4674 precision mediump float; 4675 ${DECLARATIONS} 4676 4677 void main() 4678 { 4679 ${SETUP} 4680 bool[][] x[] = bool[][][] ( bool[][] ( bool[](in0.z, in0.z, in0.z), 4681 bool[](in0.z, in0.z, in0.z), 4682 bool[](in0.z, in0.z, in0.z)), 4683 4684 bool[][] ( bool[](in0.x, in0.x, in0.x), 4685 bool[](in0.x, in0.x, in0.x), 4686 bool[](in0.x, in0.x, in0.x)), 4687 4688 bool[][] ( bool[](in0.y, in0.y, in0.y), 4689 bool[](in0.y, in0.y, in0.y), 4690 bool[](in0.y, in0.y, in0.y)) ); 4691 4692 bool[3] y[3][3] = x; 4693 4694 out0 = bvec3(y[0][0][0], y[1][1][1], y[2][2][2]); 4695 ${OUTPUT} 4696 } 4697 "" 4698 end 4699 4700 case struct_5x5x4 4701 version 310 es 4702 desc "Testing assignment of arrays of arrays from implicitly sized to explicitly sized" 4703 values 4704 { 4705 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ]; 4706 output vec3 out0 = [ vec3(-1.0, -0.5, 2.0) ]; 4707 } 4708 4709 both "" 4710 #version 310 es 4711 precision mediump float; 4712 ${DECLARATIONS} 4713 4714 struct Test 4715 { 4716 float f; 4717 vec3 v; 4718 }; 4719 4720 void main() 4721 { 4722 ${SETUP} 4723 4724 Test a = Test(in0.z, vec3(in0.x, in0.y, in0.z)); 4725 Test b = Test(in0.y, vec3(-in0.z, -in0.x, -in0.y)); 4726 Test c = Test(in0.x, vec3(-in0.y, in0.z, -in0.x)); 4727 4728 Test[] x[][] = Test[][][] ( Test[][] ( Test[] (c, c, c, c), 4729 Test[] (b, b, b, b), 4730 Test[] (a, a, a, a), 4731 Test[] (c, c, c, c), 4732 Test[] (b, b, b, b) ), 4733 4734 Test[][] ( Test[] (a, a, a, a), 4735 Test[] (b, b, b, b), 4736 Test[] (c, c, c, c), 4737 Test[] (a, a, a, a), 4738 Test[] (b, b, b, b) ), 4739 4740 Test[][] ( Test[] (b, b, b, b), 4741 Test[] (c, c, c, c), 4742 Test[] (a, a, a, a), 4743 Test[] (b, b, b, b), 4744 Test[] (c, c, c, c) ), 4745 4746 Test[][] ( Test[] (c, c, c, c), 4747 Test[] (b, b, b, b), 4748 Test[] (a, a, a, a), 4749 Test[] (c, c, c, c), 4750 Test[] (b, b, b, b) ), 4751 4752 Test[][] ( Test[] (a, a, a, a), 4753 Test[] (b, b, b, b), 4754 Test[] (c, c, c, c), 4755 Test[] (a, a, a, a), 4756 Test[] (b, b, b, b) ) ); 4757 4758 Test y[5][5][4] = x; 4759 4760 out0 = vec3(y[0][0][0].v.x, y[1][1][1].v.y, y[4][3][3].v.z); 4761 ${OUTPUT} 4762 } 4763 "" 4764 end 4765 4766 case vec3_1x3 4767 version 310 es 4768 desc "Testing assignment of arrays of arrays from implicitly sized to explicitly sized" 4769 values 4770 { 4771 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-0.5, 11.2, -1.0) ]; 4772 output vec3 out0 = [ vec3(0.5, -2.0, 1.0) | vec3(-0.5, 1.0, 11.2) ]; 4773 } 4774 4775 both "" 4776 #version 310 es 4777 precision mediump float; 4778 ${DECLARATIONS} 4779 4780 void main() 4781 { 4782 ${SETUP} 4783 vec3 x[][] = vec3[][] ( vec3[] (vec3(in0.x, in0.y, -in0.z), 4784 vec3(in0.y, -in0.z, in0.x), 4785 vec3(-in0.z, in0.x, in0.y)) ); 4786 4787 vec3 y[1][3] = x; 4788 4789 out0 = vec3(y[0][0].x, y[0][1].y, y[0][2].z); 4790 ${OUTPUT} 4791 } 4792 "" 4793 end 4794 4795 case ivec3_3x1x3 4796 version 310 es 4797 desc "Testing assignment of arrays of arrays from implicitly sized to explicitly sized" 4798 values 4799 { 4800 input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(5, 11, -1) ]; 4801 output ivec3 out0 = [ ivec3(0, -2, 1) | ivec3(5, 1, 11) ]; 4802 } 4803 4804 both "" 4805 #version 310 es 4806 precision mediump int; 4807 precision mediump float; 4808 ${DECLARATIONS} 4809 4810 void main() 4811 { 4812 ${SETUP} 4813 ivec3[][][] x = ivec3[][][] ( ivec3[][] ( ivec3[] ( ivec3(in0.x, in0.y, -in0.z), 4814 ivec3(0.0, 0.0, 0.0), 4815 ivec3(0.0, 0.0, 0.0)) ), 4816 4817 ivec3[][] ( ivec3[] ( ivec3(0.0, 0.0, 0.0), 4818 ivec3(in0.y, -in0.z, in0.x), 4819 ivec3(0.0, 0.0, 0.0)) ), 4820 4821 ivec3[][] ( ivec3[] ( ivec3(0.0, 0.0, 0.0), 4822 ivec3(0.0, 0.0, 0.0), 4823 ivec3(-in0.z, in0.x, in0.y)) ) ); 4824 4825 ivec3[3] y[3][1] = x; 4826 4827 out0 = ivec3(y[0][0][0].x, y[1][0][1].y, y[2][0][2].z); 4828 ${OUTPUT} 4829 } 4830 "" 4831 end 4832 4833 case bvec3_3x1 4834 version 310 es 4835 desc "Testing assignment of arrays of arrays from implicitly sized to explicitly sized" 4836 values 4837 { 4838 input bvec3 in0 = [ bvec3(true, false, true) ]; 4839 output bvec3 out0 = [ bvec3(true, true, false) ]; 4840 } 4841 4842 both "" 4843 #version 310 es 4844 precision mediump float; 4845 ${DECLARATIONS} 4846 4847 void main() 4848 { 4849 ${SETUP} 4850 bvec3[][] x = bvec3[][] ( bvec3[] ( bvec3(in0.x, in0.y, in0.z)), 4851 bvec3[] ( bvec3(in0.y, in0.z, in0.x)), 4852 bvec3[] ( bvec3(in0.z, in0.x, in0.y)) ); 4853 4854 bvec3[3][1] y = x; 4855 4856 out0 = bvec3(y[0][0].x, y[1][0].y, y[2][0].z); 4857 ${OUTPUT} 4858 } 4859 "" 4860 end 4861 4862 case mat3_3x2 4863 version 310 es 4864 desc "Testing assignment of arrays of arrays from implicitly sized to explicitly sized" 4865 values 4866 { 4867 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-1.5, 0.0, -2.3) ]; 4868 output vec3 out0 = [ vec3(0.5, -1.0, 1.0) | vec3(-1.5, 0.0, 0.0) ]; 4869 } 4870 4871 both "" 4872 #version 310 es 4873 precision mediump float; 4874 ${DECLARATIONS} 4875 4876 void main() 4877 { 4878 ${SETUP} 4879 mat3[][] a = mat3[][] ( mat3[] ( mat3( in0.x, in0.y, in0.z, 4880 in0.x, in0.y, in0.z, 4881 in0.x, in0.y, in0.z), 4882 mat3( in0.z, in0.x, -in0.y, 4883 in0.z, in0.x, -in0.y, 4884 in0.z, in0.x, -in0.y)), 4885 4886 mat3[] ( mat3( -in0.z, -in0.z, in0.z, 4887 -in0.y, -in0.y, in0.y, 4888 -in0.x, -in0.x, in0.x), 4889 mat3( in0.x, in0.y, in0.z, 4890 in0.x, in0.y, in0.z, 4891 in0.x, in0.y, in0.z)), 4892 4893 mat3[] ( mat3( in0.z, in0.x, -in0.y, 4894 in0.z, in0.x, -in0.y, 4895 in0.z, in0.x, -in0.y), 4896 mat3( -in0.z, -in0.z, in0.z, 4897 -in0.y, -in0.y, in0.y, 4898 -in0.x, -in0.x, in0.x)) ); 4899 4900 mat3[2] y[3] = a; 4901 4902 mat3 a0 = y[0][0]; 4903 mat3 a1 = y[0][1]; 4904 mat3 a2 = y[2][1]; 4905 4906 float ret0 = a0[2][0]; 4907 float ret1 = a1[0][2]; 4908 float ret2 = a2[1][2]; 4909 4910 out0 = vec3(ret0, ret1, ret2); 4911 ${OUTPUT} 4912 } 4913 "" 4914 end 4915 4916 case mat3_3x3x3 4917 version 310 es 4918 desc "Testing assignment of arrays of arrays from implicitly sized to explicitly sized" 4919 values 4920 { 4921 input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(-1, 0, -2) ]; 4922 output ivec3 out0 = [ ivec3(0, -1, 1) | ivec3(-1, 0, 0) ]; 4923 } 4924 4925 both "" 4926 #version 310 es 4927 precision mediump int; 4928 precision mediump float; 4929 ${DECLARATIONS} 4930 4931 void main() 4932 { 4933 ${SETUP} 4934 4935 mat3 a = mat3( in0.x, in0.y, in0.z, 4936 in0.x, in0.y, in0.z, 4937 in0.x, in0.y, in0.z); 4938 mat3 b = mat3( in0.z, in0.x, -in0.y, 4939 in0.z, in0.x, -in0.y, 4940 in0.z, in0.x, -in0.y); 4941 mat3 c = mat3( -in0.z, -in0.z, in0.z, 4942 -in0.y, -in0.y, in0.y, 4943 -in0.x, -in0.x, in0.x); 4944 4945 mat3[][][] x = mat3[][][] ( mat3[][] ( mat3[] (a, a, a), 4946 mat3[] (b, b, b), 4947 mat3[] (c, c, c)), 4948 4949 mat3[][] ( mat3[] (b, b, b), 4950 mat3[] (a, a, a), 4951 mat3[] (c, c, c)), 4952 4953 mat3[][] ( mat3[] (c, c, c), 4954 mat3[] (a, a, a), 4955 mat3[] (b, b, b)) ); 4956 4957 mat3 y[3][3][3] = x; 4958 4959 mat3 x0 = y[0][0][0]; 4960 mat3 x1 = y[1][0][0]; 4961 mat3 x2 = y[2][0][0]; 4962 4963 float ret0 = x0[2][0]; 4964 float ret1 = x1[0][2]; 4965 float ret2 = x2[1][2]; 4966 4967 out0 = ivec3(ret0, ret1, ret2); 4968 ${OUTPUT} 4969 } 4970 "" 4971 end 4972 4973 case mat3_3x4 4974 version 310 es 4975 desc "Testing assignment of arrays of arrays from implicitly sized to explicitly sized" 4976 values 4977 { 4978 input bvec3 in0 = [ bvec3(true, false, true) ]; 4979 output bvec3 out0 = [ bvec3(true, false, false) ]; 4980 } 4981 4982 both "" 4983 #version 310 es 4984 precision mediump float; 4985 ${DECLARATIONS} 4986 4987 void main() 4988 { 4989 ${SETUP} 4990 4991 mat3 a = mat3( in0.x, in0.y, in0.z, 4992 in0.x, in0.y, in0.z, 4993 in0.x, in0.y, in0.z); 4994 4995 mat3 b = mat3( in0.z, in0.x, in0.y, 4996 in0.z, in0.x, in0.y, 4997 in0.z, in0.x, in0.y); 4998 4999 mat3 c = mat3( in0.z, in0.z, in0.z, 5000 in0.y, in0.y, in0.y, 5001 in0.x, in0.x, in0.x); 5002 5003 mat3[] x[] = mat3[][] ( mat3[] (a, b, c, a), 5004 mat3[] (b, c, a, b), 5005 mat3[] (c, a, b, c) ); 5006 5007 mat3 y[3][4] = x; 5008 5009 mat3 x0 = y[0][0]; 5010 mat3 x1 = y[1][3]; 5011 mat3 x2 = y[2][0]; 5012 5013 float ret0 = x0[2][0]; 5014 float ret1 = x1[0][2]; 5015 float ret2 = x2[1][2]; 5016 5017 out0 = bvec3(ret0, ret1, ret2); 5018 ${OUTPUT} 5019 } 5020 "" 5021 end 5022 5023 end # implicit_to_explicit 5024 5025 group implicit_to_implicit "Declaring an array of arrays with implicit size and assigning it to another array of arrays with implicit size" 5026 5027 case float_3x3 5028 version 310 es 5029 desc "Testing assignment of arrays of arrays with implicit sizes" 5030 values 5031 { 5032 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(7.4, -1.0, 2.0) | vec3(3.0, 1.6, -2.0) ]; 5033 output vec3 out0 = [ vec3(2.0, 0.5, 1.0) | vec3(2.0, 7.4, -1.0) | vec3(-2.0, 3.0, 1.6) ]; 5034 } 5035 5036 both "" 5037 #version 310 es 5038 precision mediump float; 5039 ${DECLARATIONS} 5040 5041 void main() 5042 { 5043 ${SETUP} 5044 float x[][] = float[][] ( float[] (in0.z, in0.x, in0.y), 5045 float[] (in0.z, in0.x, in0.y), 5046 float[] (in0.z, in0.x, in0.y) ); 5047 5048 float[] y[] = x; 5049 5050 out0 = vec3(y[0][0], y[1][1], y[2][2]); 5051 ${OUTPUT} 5052 } 5053 "" 5054 end 5055 5056 case int_2x3 5057 version 310 es 5058 desc "Testing assignment of arrays of arrays with implicit sizes" 5059 values 5060 { 5061 input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(7, -1, 2) | ivec3(3, 1, -2) ]; 5062 output ivec3 out0 = [ ivec3(2, 0, 1) | ivec3(2, 7, -1) | ivec3(-2, 3, 1) ]; 5063 } 5064 5065 both "" 5066 #version 310 es 5067 precision mediump int; 5068 precision mediump float; 5069 ${DECLARATIONS} 5070 5071 void main() 5072 { 5073 ${SETUP} 5074 int[][] x = int[][] ( int[] (in0.z, in0.x, in0.y), 5075 int[] (in0.z, in0.x, in0.y) );; 5076 int y[][] = x; 5077 5078 out0 = ivec3(y[0][0], y[1][1], y[0][2]); 5079 ${OUTPUT} 5080 } 5081 "" 5082 end 5083 5084 case bool_3x3x3 5085 version 310 es 5086 desc "Testing assignment of arrays of arrays with implicit sizes" 5087 values 5088 { 5089 input bvec3 in0 = [ bvec3(false, true, true) ]; 5090 output bvec3 out0 = [ bvec3(true, false, true) ]; 5091 } 5092 5093 both "" 5094 #version 310 es 5095 precision mediump float; 5096 ${DECLARATIONS} 5097 5098 void main() 5099 { 5100 ${SETUP} 5101 bool[][] x[] = bool[][][] ( bool[][] ( bool[](in0.z, in0.z, in0.z), 5102 bool[](in0.z, in0.z, in0.z), 5103 bool[](in0.z, in0.z, in0.z)), 5104 5105 bool[][] ( bool[](in0.x, in0.x, in0.x), 5106 bool[](in0.x, in0.x, in0.x), 5107 bool[](in0.x, in0.x, in0.x)), 5108 5109 bool[][] ( bool[](in0.y, in0.y, in0.y), 5110 bool[](in0.y, in0.y, in0.y), 5111 bool[](in0.y, in0.y, in0.y)) ); 5112 5113 bool[] y[][] = x; 5114 5115 out0 = bvec3(y[0][0][0], y[1][1][1], y[2][2][2]); 5116 ${OUTPUT} 5117 } 5118 "" 5119 end 5120 5121 case struct_5x5x4 5122 version 310 es 5123 desc "Testing assignment of arrays of arrays with implicit sizes" 5124 values 5125 { 5126 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ]; 5127 output vec3 out0 = [ vec3(-1.0, -0.5, 2.0) ]; 5128 } 5129 5130 both "" 5131 #version 310 es 5132 precision mediump float; 5133 ${DECLARATIONS} 5134 5135 struct Test 5136 { 5137 float f; 5138 vec3 v; 5139 }; 5140 5141 void main() 5142 { 5143 ${SETUP} 5144 5145 Test a = Test(in0.z, vec3(in0.x, in0.y, in0.z)); 5146 Test b = Test(in0.y, vec3(-in0.z, -in0.x, -in0.y)); 5147 Test c = Test(in0.x, vec3(-in0.y, in0.z, -in0.x)); 5148 5149 Test[] x[][] = Test[][][] ( Test[][] ( Test[] (c, c, c, c), 5150 Test[] (b, b, b, b), 5151 Test[] (a, a, a, a), 5152 Test[] (c, c, c, c), 5153 Test[] (b, b, b, b) ), 5154 5155 Test[][] ( Test[] (a, a, a, a), 5156 Test[] (b, b, b, b), 5157 Test[] (c, c, c, c), 5158 Test[] (a, a, a, a), 5159 Test[] (b, b, b, b) ), 5160 5161 Test[][] ( Test[] (b, b, b, b), 5162 Test[] (c, c, c, c), 5163 Test[] (a, a, a, a), 5164 Test[] (b, b, b, b), 5165 Test[] (c, c, c, c) ), 5166 5167 Test[][] ( Test[] (c, c, c, c), 5168 Test[] (b, b, b, b), 5169 Test[] (a, a, a, a), 5170 Test[] (c, c, c, c), 5171 Test[] (b, b, b, b) ), 5172 5173 Test[][] ( Test[] (a, a, a, a), 5174 Test[] (b, b, b, b), 5175 Test[] (c, c, c, c), 5176 Test[] (a, a, a, a), 5177 Test[] (b, b, b, b) ) ); 5178 5179 Test y[][][] = x; 5180 5181 out0 = vec3(y[0][0][0].v.x, y[1][1][1].v.y, y[4][3][3].v.z); 5182 ${OUTPUT} 5183 } 5184 "" 5185 end 5186 5187 case vec3_1x3 5188 version 310 es 5189 desc "Testing assignment of arrays of arrays with implicit sizes" 5190 values 5191 { 5192 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-0.5, 11.2, -1.0) ]; 5193 output vec3 out0 = [ vec3(0.5, -2.0, 1.0) | vec3(-0.5, 1.0, 11.2) ]; 5194 } 5195 5196 both "" 5197 #version 310 es 5198 precision mediump float; 5199 ${DECLARATIONS} 5200 5201 void main() 5202 { 5203 ${SETUP} 5204 vec3 x[][] = vec3[][] ( vec3[] (vec3(in0.x, in0.y, -in0.z) , 5205 vec3(in0.y, -in0.z, in0.x) , 5206 vec3(-in0.z, in0.x, in0.y)) ); 5207 5208 vec3 y[][] = x; 5209 5210 out0 = vec3(y[0][0].x, y[0][1].y, y[0][2].z); 5211 ${OUTPUT} 5212 } 5213 "" 5214 end 5215 5216 case ivec3_3x1x3 5217 version 310 es 5218 desc "Testing assignment of arrays of arrays with implicit sizes" 5219 values 5220 { 5221 input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(5, 11, -1) ]; 5222 output ivec3 out0 = [ ivec3(0, -2, 1) | ivec3(5, 1, 11) ]; 5223 } 5224 5225 both "" 5226 #version 310 es 5227 precision mediump int; 5228 precision mediump float; 5229 ${DECLARATIONS} 5230 5231 void main() 5232 { 5233 ${SETUP} 5234 ivec3[][][] x = ivec3[][][] ( ivec3[][] ( ivec3[] ( ivec3(in0.x, in0.y, -in0.z), 5235 ivec3(0.0, 0.0, 0.0), 5236 ivec3(0.0, 0.0, 0.0)) ), 5237 5238 ivec3[][] ( ivec3[] ( ivec3(0.0, 0.0, 0.0), 5239 ivec3(in0.y, -in0.z, in0.x), 5240 ivec3(0.0, 0.0, 0.0)) ), 5241 5242 ivec3[][] ( ivec3[] ( ivec3(0.0, 0.0, 0.0), 5243 ivec3(0.0, 0.0, 0.0), 5244 ivec3(-in0.z, in0.x, in0.y)) ) ); 5245 5246 ivec3[] y[][] = x; 5247 5248 out0 = ivec3(y[0][0][0].x, y[1][0][1].y, y[2][0][2].z); 5249 ${OUTPUT} 5250 } 5251 "" 5252 end 5253 5254 case bvec3_3x1 5255 version 310 es 5256 desc "Testing assignment of arrays of arrays with implicit sizes" 5257 values 5258 { 5259 input bvec3 in0 = [ bvec3(true, false, true) ]; 5260 output bvec3 out0 = [ bvec3(true, true, false) ]; 5261 } 5262 5263 both "" 5264 #version 310 es 5265 precision mediump float; 5266 ${DECLARATIONS} 5267 5268 void main() 5269 { 5270 ${SETUP} 5271 bvec3[][] x = bvec3[][] ( bvec3[] ( bvec3(in0.x, in0.y, in0.z)), 5272 bvec3[] ( bvec3(in0.y, in0.z, in0.x)), 5273 bvec3[] ( bvec3(in0.z, in0.x, in0.y)) ); 5274 5275 bvec3[][] y = x; 5276 5277 out0 = bvec3(y[0][0].x, y[1][0].y, y[2][0].z); 5278 ${OUTPUT} 5279 } 5280 "" 5281 end 5282 5283 case mat3_3x2 5284 version 310 es 5285 desc "Testing assignment of arrays of arrays with implicit sizes" 5286 values 5287 { 5288 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-1.5, 0.0, -2.3) ]; 5289 output vec3 out0 = [ vec3(0.5, -1.0, 1.0) | vec3(-1.5, 0.0, 0.0) ]; 5290 } 5291 5292 both "" 5293 #version 310 es 5294 precision mediump float; 5295 ${DECLARATIONS} 5296 5297 void main() 5298 { 5299 ${SETUP} 5300 mat3[][] a = mat3[][] ( mat3[] ( mat3( in0.x, in0.y, in0.z, 5301 in0.x, in0.y, in0.z, 5302 in0.x, in0.y, in0.z), 5303 mat3( in0.z, in0.x, -in0.y, 5304 in0.z, in0.x, -in0.y, 5305 in0.z, in0.x, -in0.y)), 5306 5307 mat3[] ( mat3( -in0.z, -in0.z, in0.z, 5308 -in0.y, -in0.y, in0.y, 5309 -in0.x, -in0.x, in0.x), 5310 mat3( in0.x, in0.y, in0.z, 5311 in0.x, in0.y, in0.z, 5312 in0.x, in0.y, in0.z)), 5313 5314 mat3[] ( mat3( in0.z, in0.x, -in0.y, 5315 in0.z, in0.x, -in0.y, 5316 in0.z, in0.x, -in0.y), 5317 mat3( -in0.z, -in0.z, in0.z, 5318 -in0.y, -in0.y, in0.y, 5319 -in0.x, -in0.x, in0.x)) ); 5320 5321 mat3[] y[] = a; 5322 5323 mat3 a0 = y[0][0]; 5324 mat3 a1 = y[0][1]; 5325 mat3 a2 = y[2][1]; 5326 5327 float ret0 = a0[2][0]; 5328 float ret1 = a1[0][2]; 5329 float ret2 = a2[1][2]; 5330 5331 out0 = vec3(ret0, ret1, ret2); 5332 ${OUTPUT} 5333 } 5334 "" 5335 end 5336 5337 case mat3_3x3x3 5338 version 310 es 5339 desc "Testing assignment of arrays of arrays with implicit sizes" 5340 values 5341 { 5342 input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(-1, 0, -2) ]; 5343 output ivec3 out0 = [ ivec3(0, -1, 1) | ivec3(-1, 0, 0) ]; 5344 } 5345 5346 both "" 5347 #version 310 es 5348 precision mediump int; 5349 precision mediump float; 5350 ${DECLARATIONS} 5351 5352 void main() 5353 { 5354 ${SETUP} 5355 5356 mat3 a = mat3( in0.x, in0.y, in0.z, 5357 in0.x, in0.y, in0.z, 5358 in0.x, in0.y, in0.z); 5359 mat3 b = mat3( in0.z, in0.x, -in0.y, 5360 in0.z, in0.x, -in0.y, 5361 in0.z, in0.x, -in0.y); 5362 mat3 c = mat3( -in0.z, -in0.z, in0.z, 5363 -in0.y, -in0.y, in0.y, 5364 -in0.x, -in0.x, in0.x); 5365 5366 mat3[][][] x = mat3[][][] ( mat3[][] ( mat3[] (a, a, a), 5367 mat3[] (b, b, b), 5368 mat3[] (c, c, c)), 5369 5370 mat3[][] ( mat3[] (b, b, b), 5371 mat3[] (a, a, a), 5372 mat3[] (c, c, c)), 5373 5374 mat3[][] ( mat3[] (c, c, c), 5375 mat3[] (a, a, a), 5376 mat3[] (b, b, b)) ); 5377 5378 mat3 y[][][] = x; 5379 5380 mat3 x0 = y[0][0][0]; 5381 mat3 x1 = y[1][0][0]; 5382 mat3 x2 = y[2][0][0]; 5383 5384 float ret0 = x0[2][0]; 5385 float ret1 = x1[0][2]; 5386 float ret2 = x2[1][2]; 5387 5388 out0 = ivec3(ret0, ret1, ret2); 5389 ${OUTPUT} 5390 } 5391 "" 5392 end 5393 5394 case mat3_3x4 5395 version 310 es 5396 desc "Testing assignment of arrays of arrays with implicit sizes" 5397 values 5398 { 5399 input bvec3 in0 = [ bvec3(true, false, true) ]; 5400 output bvec3 out0 = [ bvec3(true, false, false) ]; 5401 } 5402 5403 both "" 5404 #version 310 es 5405 precision mediump float; 5406 ${DECLARATIONS} 5407 5408 void main() 5409 { 5410 ${SETUP} 5411 5412 mat3 a = mat3( in0.x, in0.y, in0.z, 5413 in0.x, in0.y, in0.z, 5414 in0.x, in0.y, in0.z); 5415 5416 mat3 b = mat3( in0.z, in0.x, in0.y, 5417 in0.z, in0.x, in0.y, 5418 in0.z, in0.x, in0.y); 5419 5420 mat3 c = mat3( in0.z, in0.z, in0.z, 5421 in0.y, in0.y, in0.y, 5422 in0.x, in0.x, in0.x); 5423 5424 mat3[] x[] = mat3[][] ( mat3[] (a, b, c, a), 5425 mat3[] (b, c, a, b), 5426 mat3[] (c, a, b, c) ); 5427 5428 mat3 y[][] = x; 5429 5430 mat3 x0 = y[0][0]; 5431 mat3 x1 = y[1][3]; 5432 mat3 x2 = y[2][0]; 5433 5434 float ret0 = x0[2][0]; 5435 float ret1 = x1[0][2]; 5436 float ret2 = x2[1][2]; 5437 5438 out0 = bvec3(ret0, ret1, ret2); 5439 ${OUTPUT} 5440 } 5441 "" 5442 end 5443 5444 end # implicit_to_implicit 5445 5446end # assignment 5447 5448group length "Testing the array length property with arrays of arrays" 5449 5450 case float 5451 version 310 es 5452 desc "Testing the array length property with arrays of arrays" 5453 values 5454 { 5455 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ]; 5456 output ivec2 out0 = [ ivec2(3, 5) ]; 5457 output ivec3 out1 = [ ivec3(3, 4, 5) ]; 5458 output ivec3 out2 = [ ivec3(1, 2, 13) ]; 5459 } 5460 5461 both "" 5462 #version 310 es 5463 precision mediump float; 5464 ${DECLARATIONS} 5465 5466 void main() 5467 { 5468 ${SETUP} 5469 float[][] x = float[3][5] ( float[5] (in0.z, in0.x, in0.y, in0.x, in0.y), 5470 float[5] (in0.z, in0.x, in0.y, in0.x, in0.y), 5471 float[5] (in0.z, in0.x, in0.y, in0.x, in0.y) ); 5472 5473 float[][] y[] = float[][][] ( float[][] ( float[] (in0.z, in0.x, in0.y, in0.x, in0.y), 5474 float[] (in0.z, in0.x, in0.y, in0.x, in0.y), 5475 float[] (in0.z, in0.x, in0.y, in0.x, in0.y), 5476 float[] (in0.z, in0.x, in0.y, in0.x, in0.y) ), 5477 5478 float[][] ( float[] (in0.z, in0.x, in0.y, in0.x, in0.y), 5479 float[] (in0.z, in0.x, in0.y, in0.x, in0.y), 5480 float[] (in0.z, in0.x, in0.y, in0.x, in0.y), 5481 float[] (in0.z, in0.x, in0.y, in0.x, in0.y) ), 5482 5483 float[][] ( float[] (in0.z, in0.x, in0.y, in0.x, in0.y), 5484 float[] (in0.z, in0.x, in0.y, in0.x, in0.y), 5485 float[] (in0.z, in0.x, in0.y, in0.x, in0.y), 5486 float[] (in0.z, in0.x, in0.y, in0.x, in0.y) ) ); 5487 5488 float[1][2][13] z; 5489 5490 out0 = ivec2(x.length(), x[0].length()); 5491 out1 = ivec3(y.length(), y[0].length(), y[0][0].length()); 5492 out2 = ivec3(z.length(), z[0].length(), z[0][0].length()); 5493 ${OUTPUT} 5494 } 5495 "" 5496 end 5497 5498 case int 5499 version 310 es 5500 desc "Testing the array length property with arrays of arrays" 5501 values 5502 { 5503 input ivec3 in0 = [ ivec3(0, 1, 2) ]; 5504 output ivec2 out0 = [ ivec2(2, 7) ]; 5505 output ivec3 out1 = [ ivec3(1, 2, 3) ]; 5506 output ivec3 out2 = [ ivec3(13, 7, 1) ]; 5507 } 5508 5509 both "" 5510 #version 310 es 5511 precision mediump int; 5512 precision mediump float; 5513 ${DECLARATIONS} 5514 5515 void main() 5516 { 5517 ${SETUP} 5518 5519 int[] x[] = int[][] ( int[] (in0.z, in0.x, in0.y, in0.x, in0.y, in0.z, in0.x), 5520 int[] (in0.z, in0.x, in0.y, in0.x, in0.y, in0.z, in0.x) ); 5521 5522 int[] y[][] = int[1][2][3] ( int[2][3] ( int[3] (in0.z, in0.x, in0.y), 5523 int[3] (in0.z, in0.x, in0.y) )); 5524 5525 int z[13][7][1]; 5526 5527 out0 = ivec2(x.length(), x[0].length()); 5528 out1 = ivec3(y.length(), y[0].length(), y[0][0].length()); 5529 out2 = ivec3(z.length(), z[0].length(), z[0][0].length()); 5530 ${OUTPUT} 5531 } 5532 "" 5533 end 5534 5535 case bool 5536 version 310 es 5537 desc "Testing the array length property with arrays of arrays" 5538 values 5539 { 5540 input bvec3 in0 = [ bvec3(true, false, true) ]; 5541 output ivec2 out0 = [ ivec2(4, 3) ]; 5542 output ivec3 out1 = [ ivec3(2, 1, 3) ]; 5543 output ivec3 out2 = [ ivec3(7, 8, 9) ]; 5544 } 5545 5546 both "" 5547 #version 310 es 5548 precision mediump float; 5549 ${DECLARATIONS} 5550 5551 void main() 5552 { 5553 ${SETUP} 5554 bool x[4][3] = bool[][] ( bool[] (in0.z, in0.x, in0.y), 5555 bool[] (in0.z, in0.x, in0.y), 5556 bool[] (in0.z, in0.x, in0.y), 5557 bool[] (in0.z, in0.x, in0.y) ); 5558 5559 bool y[2][1][3] = bool[][][] ( bool[][] ( bool[] (in0.z, in0.x, in0.y) ), 5560 bool[][] ( bool[] (in0.z, in0.x, in0.y) ) ); 5561 5562 int z[7][8][9]; 5563 5564 out0 = ivec2(x.length(), x[0].length()); 5565 out1 = ivec3(y.length(), y[0].length(), y[0][0].length()); 5566 out2 = ivec3(z.length(), z[0].length(), z[0][0].length()); 5567 ${OUTPUT} 5568 } 5569 "" 5570 end 5571 5572 case struct 5573 version 310 es 5574 desc "Testing the array length property with arrays of arrays" 5575 values 5576 { 5577 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ]; 5578 output ivec2 out0 = [ ivec2(5, 1) ]; 5579 output ivec3 out1 = [ ivec3(5, 4, 2) ]; 5580 output ivec3 out2 = [ ivec3(100, 101, 102) ]; 5581 } 5582 5583 both "" 5584 #version 310 es 5585 precision mediump float; 5586 ${DECLARATIONS} 5587 5588 struct Test 5589 { 5590 float f; 5591 vec3 v; 5592 }; 5593 5594 void main() 5595 { 5596 ${SETUP} 5597 5598 Test a = Test(in0.z, vec3(in0.x, in0.y, in0.z)); 5599 Test b = Test(in0.y, vec3(-in0.z, -in0.x, -in0.y)); 5600 Test c = Test(in0.x, vec3(-in0.y, in0.z, -in0.x)); 5601 5602 Test x[5][1] = Test[5][1] ( Test[1] (a), 5603 Test[1] (b), 5604 Test[1] (c), 5605 Test[1] (a), 5606 Test[1] (b) ); 5607 5608 Test y[][][] = Test[][][] ( Test[][] ( Test[] (a, b), 5609 Test[] (a, b), 5610 Test[] (a, b), 5611 Test[] (a, b) ), 5612 Test[][] ( Test[] (a, b), 5613 Test[] (a, b), 5614 Test[] (a, b), 5615 Test[] (a, b) ), 5616 Test[][] ( Test[] (a, b), 5617 Test[] (a, b), 5618 Test[] (a, b), 5619 Test[] (a, b) ), 5620 Test[][] ( Test[] (a, b), 5621 Test[] (a, b), 5622 Test[] (a, b), 5623 Test[] (a, b) ), 5624 Test[][] ( Test[] (a, b), 5625 Test[] (a, b), 5626 Test[] (a, b), 5627 Test[] (a, b) ) ); 5628 5629 int z[100][101][102]; 5630 5631 out0 = ivec2(x.length(), x[0].length()); 5632 out1 = ivec3(y.length(), y[0].length(), y[0][0].length()); 5633 out2 = ivec3(z.length(), z[0].length(), z[0][0].length()); 5634 ${OUTPUT} 5635 } 5636 "" 5637 end 5638 5639 case mat3 5640 version 310 es 5641 desc "Testing the array length property with arrays of arrays" 5642 values 5643 { 5644 input ivec3 in0 = [ ivec3(0, 1, 2)]; 5645 output ivec2 out0 = [ ivec2(3, 4) ]; 5646 output ivec3 out1 = [ ivec3(1, 2, 4) ]; 5647 output ivec3 out2 = [ ivec3(3, 101, 88) ]; 5648 } 5649 5650 both "" 5651 #version 310 es 5652 precision mediump int; 5653 precision mediump float; 5654 ${DECLARATIONS} 5655 5656 void main() 5657 { 5658 ${SETUP} 5659 5660 mat3 a = mat3( in0.x, in0.y, in0.z, 5661 in0.x, in0.y, in0.z, 5662 in0.x, in0.y, in0.z); 5663 mat3 b = mat3( in0.z, in0.x, -in0.y, 5664 in0.z, in0.x, -in0.y, 5665 in0.z, in0.x, -in0.y); 5666 mat3 c = mat3( -in0.z, -in0.z, in0.z, 5667 -in0.y, -in0.y, in0.y, 5668 -in0.x, -in0.x, in0.x); 5669 5670 mat3[3][4] x = mat3[][] ( mat3[] (a, a, a, a), 5671 mat3[] (b, b, b, b), 5672 mat3[] (c, c, c, c) ); 5673 5674 mat3 y[][][] = mat3[][][] ( mat3[][] ( mat3[] (a, a, a, a), 5675 mat3[] (b, b, b, b) ) ); 5676 5677 5678 mat3 z[3][101][88]; 5679 5680 out0 = ivec2(x.length(), x[0].length()); 5681 out1 = ivec3(y.length(), y[0].length(), y[0][0].length()); 5682 out2 = ivec3(z.length(), z[0].length(), z[0][0].length()); 5683 ${OUTPUT} 5684 } 5685 "" 5686 end 5687 5688 case constant_expression 5689 version 310 es 5690 desc "Testing the array length property with arrays of arrays" 5691 values 5692 { 5693 input ivec3 in0 = [ ivec3(0, 1, 2) ]; 5694 output ivec3 out0 = [ ivec3(2, 7, 3) ]; 5695 } 5696 5697 both "" 5698 #version 310 es 5699 precision mediump int; 5700 precision mediump float; 5701 ${DECLARATIONS} 5702 5703 void main() 5704 { 5705 ${SETUP} 5706 5707 int[] x[] = int[][] ( int[] (in0.z, in0.x, in0.y, in0.x, in0.y, in0.z, in0.x), 5708 int[] (in0.z, in0.x, in0.y, in0.x, in0.y, in0.z, in0.x) ); 5709 5710 int[] y[][] = int[1][2][3] ( int[2][3] ( int[3] (in0.z, in0.x, in0.y), 5711 int[3] (in0.z, in0.x, in0.y) )); 5712 5713 int z[13][7][1]; 5714 5715 int ret[x.length()][z[0].length()][y[0][0].length()]; 5716 out0 = ivec3(ret.length(), ret[0].length(), ret[0][0].length()); 5717 ${OUTPUT} 5718 } 5719 "" 5720 end 5721 5722end # length 5723 5724group array_access "Test accessing arrays of arrays" 5725 5726 case constant_expression_access 5727 version 310 es 5728 desc "Testing accessing arrays of arrays" 5729 values 5730 { 5731 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ]; 5732 output vec3 out0 = [ vec3(-1.0, 0.5, -0.5) ]; 5733 } 5734 5735 both "" 5736 #version 310 es 5737 precision mediump float; 5738 ${DECLARATIONS} 5739 5740 const int a = 1; 5741 5742 void main () 5743 { 5744 ${SETUP} 5745 const int b = 2; 5746 float x = float[2][6] ( float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x), 5747 float[] (-in0.z, -in0.y, -in0.x, in0.x, in0.y, in0.z) ) [a][a]; 5748 5749 float y = float[][][] ( float[][] ( float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x), 5750 float[] (-in0.z, -in0.y, -in0.x, in0.x, in0.y, in0.z) ), 5751 float[][] ( float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x), 5752 float[] (-in0.z, -in0.y, -in0.x, in0.x, in0.y, in0.z) ), 5753 float[][] ( float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x), 5754 float[] (-in0.z, -in0.y, -in0.x, in0.x, in0.y, in0.z) ), 5755 float[][] ( float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x), 5756 float[] (-in0.z, -in0.y, -in0.x, in0.x, in0.y, in0.z) ), 5757 float[][] ( float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x), 5758 float[] (-in0.z, -in0.y, -in0.x, in0.x, in0.y, in0.z) )) [b+2][b-1][b+1]; 5759 5760 float z = float[][] ( float[] (-in0.z, -in0.y, -in0.x, in0.x, in0.y, in0.z), 5761 float[] (0.0, 0.0, 0.0, 0.0, 0.0, 0.0), 5762 float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x) ) [2][5]; 5763 5764 out0 = vec3(x, y, z); 5765 ${OUTPUT} 5766 } 5767 "" 5768 end # constant_expression_access 5769 5770 case dynamic_expression_access 5771 version 310 es 5772 desc "Testing accessing arrays of arrays" 5773 values 5774 { 5775 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ]; 5776 input ivec3 in1 = ivec3(3, 2, 1); 5777 output vec3 out0 = [ vec3(0.5, 2.0, -1.0) ]; 5778 } 5779 5780 both "" 5781 #version 310 es 5782 precision mediump float; 5783 ${DECLARATIONS} 5784 5785 void main () 5786 { 5787 ${SETUP} 5788 float x = float[2][6] ( float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x), 5789 float[] (-in0.z, -in0.y, -in0.x, in0.x, in0.y, in0.z) ) [in1.z][in1.x]; 5790 5791 float y = float[][][] ( float[][] ( float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x), 5792 float[] (-in0.z, -in0.y, -in0.x, in0.x, in0.y, in0.z) ), 5793 float[][] ( float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x), 5794 float[] (-in0.z, -in0.y, -in0.x, in0.x, in0.y, in0.z) ), 5795 float[][] ( float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x), 5796 float[] (-in0.z, -in0.y, -in0.x, in0.x, in0.y, in0.z) ), 5797 float[][] ( float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x), 5798 float[] (-in0.z, -in0.y, -in0.x, in0.x, in0.y, in0.z) ), 5799 float[][] ( float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x), 5800 float[] (-in0.z, -in0.y, -in0.x, in0.x, in0.y, in0.z) )) [in1.x+1][in1.y-1][in1.z+4]; 5801 5802 float z = float[][] ( float[] (0.0, 0.0, 0.0, 0.0, 0.0, 0.0), 5803 float[] (-in0.z, -in0.y, -in0.x, in0.x, in0.y, in0.z), 5804 float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x) ) [in1.x-in1.y][in1.z]; 5805 5806 out0 = vec3(x, y, z); 5807 ${OUTPUT} 5808 } 5809 "" 5810 end # dynamic_expression_access 5811 5812end # array_access 5813 5814 5815group single_statement_multiple_declarations "Testing multiple arrays of arrays declarations in a single statement" 5816 5817 group explicit_constructor "Testing single statement with multiple arrays of arrays with explicit constructor" 5818 5819 case float_2_dimensions 5820 version 310 es 5821 desc "Testing multiple two dimensional array declarations in a single statement" 5822 values 5823 { 5824 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) ]; 5825 output vec4 out0 = [ vec4(2.5, 0.7, 2.0, 2.5) | vec4(9.4, 6.1, -2.0, 9.4) | vec4(1.0, 3.5, 3.2, 1.0) ]; 5826 } 5827 5828 both "" 5829 #version 310 es 5830 precision mediump float; 5831 ${DECLARATIONS} 5832 5833 void main() 5834 { 5835 ${SETUP} 5836 float[][] x = float[3][3] ( float[3] (in0.z, in0.x, in0.y), 5837 float[3] (in0.z, in0.x, in0.y), 5838 float[3] (in0.z, in0.x, in0.y) ), 5839 5840 y = float[3][4] ( float[4] (in0.z, in0.x, in0.w, in0.y), 5841 float[4] (in0.z, in0.x, in0.w, in0.y), 5842 float[4] (in0.z, in0.x, in0.w, in0.y) ); 5843 5844 out0 = vec4(x[0][0]+y[1][1], x[1][1]+y[2][2], x[2][2]+y[2][3], x[0][1]+y[0][0]); 5845 ${OUTPUT} 5846 } 5847 "" 5848 end 5849 5850 case int_3_dimensions 5851 version 310 es 5852 desc "Testing multiple three dimensional array declarations in a single statement" 5853 values 5854 { 5855 input ivec4 in0 = [ ivec4(0, 1, 2, 0) | ivec4(7, -1, 2, -1) | ivec4(3, 1, -2, 0) ]; 5856 output ivec4 out0 = [ ivec4(2, 1, 2, 1) | ivec4(9, 6, 1, -2) | ivec4(1, 4, -2, 1) ]; 5857 } 5858 5859 both "" 5860 #version 310 es 5861 precision mediump int; 5862 precision mediump float; 5863 ${DECLARATIONS} 5864 5865 void main() 5866 { 5867 ${SETUP} 5868 int[][][] x = int[4][4][4] (int[4][4] ( (int[4] (in0.z, in0.x, in0.w, in0.y)), 5869 (int[4] (in0.z, in0.x, in0.w, in0.y)), 5870 (int[4] (in0.z, in0.x, in0.w, in0.y)), 5871 (int[4] (in0.z, in0.x, in0.w, in0.y))), 5872 5873 int[4][4] ( (int[4] (in0.z, in0.x, in0.w, in0.y)), 5874 (int[4] (in0.z, in0.x, in0.w, in0.y)), 5875 (int[4] (in0.z, in0.x, in0.w, in0.y)), 5876 (int[4] (in0.z, in0.x, in0.w, in0.y))), 5877 5878 int[4][4] ( (int[4] (in0.z, in0.x, in0.w, in0.y)), 5879 (int[4] (in0.z, in0.x, in0.w, in0.y)), 5880 (int[4] (in0.z, in0.x, in0.w, in0.y)), 5881 (int[4] (in0.z, in0.x, in0.w, in0.y))), 5882 5883 int[4][4] ( (int[4] (in0.z, in0.x, in0.w, in0.y)), 5884 (int[4] (in0.z, in0.x, in0.w, in0.y)), 5885 (int[4] (in0.z, in0.x, in0.w, in0.y)), 5886 (int[4] (in0.z, in0.x, in0.w, in0.y))) ), 5887 5888 y = int[2][2][4] (int[2][4] ( (int[4] (in0.x, in0.y, in0.z, in0.w)), 5889 (int[4] (in0.x, in0.y, in0.z, in0.w))), 5890 5891 int[2][4] ( (int[4] (in0.x, in0.y, in0.z, in0.w)), 5892 (int[4] (in0.x, in0.y, in0.z, in0.w))) ); 5893 5894 out0 = ivec4(x[0][0][0] + y[0][0][0], x[1][1][1] + y[1][1][1], x[2][2][2] + y[0][0][2], x[3][3][3] + y[0][0][3]); 5895 ${OUTPUT} 5896 } 5897 "" 5898 end 5899 5900 end # explicit_constructor 5901 5902 group implicit_constructor "Testing single statement with multiple arrays of arrays with implicit constructor" 5903 5904 case float_2_dimensions 5905 version 310 es 5906 desc "Testing multiple two dimensional array declarations in a single statement" 5907 values 5908 { 5909 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) ]; 5910 output vec4 out0 = [ vec4(2.5, 0.7, 2.0, 2.5) | vec4(9.4, 6.1, -2.0, 9.4) | vec4(1.0, 3.5, 3.2, 1.0) ]; 5911 } 5912 5913 both "" 5914 #version 310 es 5915 precision mediump float; 5916 ${DECLARATIONS} 5917 5918 void main() 5919 { 5920 ${SETUP} 5921 float[][] x = float[][] (float[] (in0.z, in0.x, in0.y), 5922 float[] (in0.z, in0.x, in0.y), 5923 float[] (in0.z, in0.x, in0.y) ), 5924 5925 y = float[][] (float[] (in0.z, in0.x, in0.w, in0.y), 5926 float[] (in0.z, in0.x, in0.w, in0.y), 5927 float[] (in0.z, in0.x, in0.w, in0.y) ); 5928 5929 out0 = vec4(x[0][0]+y[1][1], x[1][1]+y[2][2], x[2][2]+y[2][3], x[0][1]+y[0][0]); 5930 ${OUTPUT} 5931 } 5932 "" 5933 end 5934 5935 case int_3_dimensions 5936 version 310 es 5937 desc "Testing multiple three dimensional array declarations in a single statement" 5938 values 5939 { 5940 input ivec4 in0 = [ ivec4(0, 1, 2, 0) | ivec4(7, -1, 2, -1) | ivec4(3, 1, -2, 0) ]; 5941 output ivec4 out0 = [ ivec4(2, 1, 2, 1) | ivec4(9, 6, 1, -2) | ivec4(1, 4, -2, 1) ]; 5942 } 5943 5944 both "" 5945 #version 310 es 5946 precision mediump int; 5947 precision mediump float; 5948 ${DECLARATIONS} 5949 5950 void main() 5951 { 5952 ${SETUP} 5953 int[][][] x = int[][][] (int[][] ( (int[] (in0.z, in0.x, in0.w, in0.y)), 5954 (int[] (in0.z, in0.x, in0.w, in0.y)), 5955 (int[] (in0.z, in0.x, in0.w, in0.y)), 5956 (int[] (in0.z, in0.x, in0.w, in0.y))), 5957 5958 int[][] ( (int[] (in0.z, in0.x, in0.w, in0.y)), 5959 (int[] (in0.z, in0.x, in0.w, in0.y)), 5960 (int[] (in0.z, in0.x, in0.w, in0.y)), 5961 (int[] (in0.z, in0.x, in0.w, in0.y))), 5962 5963 int[][] ( (int[] (in0.z, in0.x, in0.w, in0.y)), 5964 (int[] (in0.z, in0.x, in0.w, in0.y)), 5965 (int[] (in0.z, in0.x, in0.w, in0.y)), 5966 (int[] (in0.z, in0.x, in0.w, in0.y))), 5967 5968 int[][] ( (int[] (in0.z, in0.x, in0.w, in0.y)), 5969 (int[] (in0.z, in0.x, in0.w, in0.y)), 5970 (int[] (in0.z, in0.x, in0.w, in0.y)), 5971 (int[] (in0.z, in0.x, in0.w, in0.y))) ), 5972 5973 y = int[][][] (int[][] ( (int[] (in0.x, in0.y, in0.z, in0.w)), 5974 (int[] (in0.x, in0.y, in0.z, in0.w))), 5975 5976 int[][] ((int[] (in0.x, in0.y, in0.z, in0.w)), 5977 (int[] (in0.x, in0.y, in0.z, in0.w))) ); 5978 5979 out0 = ivec4(x[0][0][0] + y[0][0][0], x[1][1][1] + y[1][1][1], x[2][2][2] + y[0][0][2], x[3][3][3] + y[0][0][3]); 5980 ${OUTPUT} 5981 } 5982 "" 5983 end 5984 5985 end # implicit_constructor 5986 5987end # single_statement_multiple_declarations 5988 5989 5990group invalid "Invalid functions" 5991 5992 case dynamic_expression_array_size 5993 version 310 es 5994 desc "Testing that compiler doesn't allow dynamic expressions in arrays of arrays sizes" 5995 expect compile_fail 5996 5997 both "" 5998 #version 310 es 5999 precision mediump float; 6000 ${DECLARATIONS} 6001 6002 void main () 6003 { 6004 int a = 5; 6005 float[a][a] array; 6006 ${POSITION_FRAG_COLOR} = vec4(1.0); 6007 } 6008 "" 6009 end # dynamic_expression_array_size 6010 6011 case empty_declaration_without_var_name 6012 version 310 es 6013 desc "Testing that compiler doesn't allow only an empty declaration" 6014 expect compile_or_link_fail 6015 6016 both "" 6017 #version 310 es 6018 precision mediump float; 6019 ${DECLARATIONS} 6020 6021 void main () 6022 { 6023 float[][]; 6024 ${POSITION_FRAG_COLOR} = vec4(1.0); 6025 } 6026 "" 6027 end # empty_declaration_without_var_name 6028 6029 case empty_declaration_with_var_name 6030 version 310 es 6031 desc "Testing that compiler doesn't allow only an empty declaration" 6032 expect compile_or_link_fail 6033 6034 both "" 6035 #version 310 es 6036 precision mediump float; 6037 ${DECLARATIONS} 6038 6039 void main () 6040 { 6041 int[][] a; 6042 ${POSITION_FRAG_COLOR} = vec4(1.0); 6043 } 6044 "" 6045 end # empty_declaration_with_var_name 6046 6047 case uniform_block 6048 version 310 es 6049 desc "Testing that compiler doesn't allow arrays of arrays of uniform blocks" 6050 expect compile_or_link_fail 6051 6052 both "" 6053 #version 310 es 6054 precision mediump float; 6055 ${DECLARATIONS} 6056 6057 layout(std140) uniform Transform { 6058 mat4 modelViewMatrix; 6059 mat4 modelViewProjectionMatrix; 6060 mat3 normalMatrix; 6061 float deformation; 6062 } TransformInstance [2][2]; 6063 6064 void main () 6065 { 6066 ${POSITION_FRAG_COLOR} = vec4(1.0); 6067 } 6068 "" 6069 end # uniform_block 6070 6071 case storage_block 6072 version 310 es 6073 desc "Testing that compiler doesn't allow arrays of arrays of SSBOs" 6074 expect compile_or_link_fail 6075 6076 both "" 6077 #version 310 es 6078 precision mediump float; 6079 ${DECLARATIONS} 6080 6081 layout(std430) buffer Transform { 6082 mat4 modelViewMatrix; 6083 mat4 modelViewProjectionMatrix; 6084 mat3 normalMatrix; 6085 float deformation; 6086 } TransformInstance [2][2]; 6087 6088 void main () 6089 { 6090 ${POSITION_FRAG_COLOR} = vec4(1.0); 6091 } 6092 "" 6093 end # storage_block 6094 6095end # negative 6096