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