yum-mirror/glslang
git clone https://git.yummers.dev/yum-mirror/glslang
b3f9e0a3
main
1#version 310 es 2 3// Check name mangling of functions with parameters that are multi-dimensional arrays. 4 5#define NX 2 6#define NY 3 7#define NZ 4 8void f (bool a ,float b ,uint [4 ]c ,int [NY ][NX ]d ) { 9} 10 11void main () { 12int [NY][NX] d; 13f(false, 12.1 , uint[NZ](uint( 0 ),uint( 1 ),uint( 1 ),uint( 2 )), d); 14} 15 16buffer b { 17float u []; // ERROR 18vec4 v []; 19} name[ 3 ]; 20 21uniform ub { 22float u ; 23vec4 v []; // ERROR 24} uname[ 3 ]; 25 26buffer b2 { 27float u ; 28vec4 v [][]; // ERROR 29} name2[ 3 ]; 30 31buffer b3 { 32float u ; 33vec4 v [][ 7 ]; 34} name3[ 3 ]; 35 36// General arrays of arrays 37 38float [ 4 ][ 5 ][ 6 ] many[ 1 ][ 2 ][ 3 ]; 39 40float gu[][ 7 ]; // ERROR, size required 41float g4[ 4 ][ 7 ]; 42float g5[ 5 ][ 7 ]; 43 44float [ 4 ][ 7 ] foo( float a[ 5 ][ 7 ]) 45{ 46float r[ 7 ]; 47r = a[ 2 ]; 48float []( a [ 0 ], a [ 1 ], r , a [ 3 ]); // ERROR, too few dims 49float [ 4 ][ 7 ][ 4 ]( a [ 0 ], a [ 1 ], r , a [ 3 ]); // ERROR, too many dims 50return float[ 4 ][ 7 ](a[ 0 ], a[ 1 ], r, a[ 3 ]); 51return float[][](a[ 0 ], a[ 1 ], r, a[ 3 ]); 52return float[][ 7 ](a[ 0 ], a[ 1 ], a[ 2 ], a[ 3 ]); 53} 54 55void bar( float [ 5 ][ 7 ]) {} 56 57void foo2() 58{ 59{ 60float gu[ 3 ][ 4 ][ 2 ]; 61 62gu[ 2 ][ 4 ][ 1 ] = 4.0 ; // ERROR, overflow 63} 64vec4 ca4[ 3 ][ 2 ] = vec4[][](vec4[ 2 ](vec4( 0.0 ), vec4( 1.0 )), 65vec4[ 2 ](vec4( 0.0 ), vec4( 1.0 )), 66vec4[ 2 ](vec4( 0.0 ), vec4( 1.0 ))); 67vec4 caim[][ 2 ] = vec4[][](vec4[ 2 ](vec4( 4.0 ), vec4( 2.0 )), 68vec4[ 2 ](vec4( 4.0 ), vec4( 2.0 )), 69vec4[ 2 ](vec4( 4.0 ), vec4( 2.0 ))); 70vec4 caim2[][] = vec4[][](vec4[ 2 ](vec4( 4.0 ), vec4( 2.0 )), 71vec4[ 2 ](vec4( 4.0 ), vec4( 2.0 )), 72vec4[ 2 ](vec4( 4.0 ), vec4( 2.0 ))); 73vec4 caim3[ 3 ][] = vec4[][](vec4[ 2 ](vec4( 4.0 ), vec4( 2.0 )), 74vec4[ 2 ](vec4( 4.0 ), vec4( 2.0 )), 75vec4[ 2 ](vec4( 4.0 ), vec4( 2.0 ))); 76 77g4 = foo(g5); 78g5 = g4; // ERROR, wrong types 79gu = g4; // ERROR, not yet sized 80 81foo(gu); // ERROR, not yet sized 82bar(g5); 83 84if (foo(g5) == g4) 85; 86if (foo(g5) == g5) // ERROR, different types 87; 88 89float u[ 5 ][ 7 ]; 90u[ 5 ][ 2 ] = 5.0 ; // ERROR 91foo(u); 92 93vec4 badAss[ 3 ]; 94name[ 1 ]. v [ -1 ]; // ERROR 95name[ 1 ]. v [ 1 ] = vec4( 4.3 ); 96name[ 1 ]. v = badAss; // ERROR, bad assignemnt 97 98name3[ 0 ]. v [ 1 ]. length (); // 7 99name3[ 0 ]. v . length (); // run time 100} 101 102struct badS { 103int sa []; // ERROR 104int a [][]; // ERROR 105int b [][ 2 ]; // ERROR 106int c [ 2 ][]; // ERROR 107int d [][ 4 ]; // ERROR 108}; 109 110in float inArray[ 2 ][ 3 ]; // ERROR 111out float outArray[ 2 ][ 3 ]; // ERROR 112 113uniform ubaa { 114int a ; 115} ubaaname[ 2 ][ 3 ]; // ERROR 116 117vec3 func( in mat3 [ 2 ] x[ 3 ]) 118{ 119mat3 a0 = x[ 2 ][ 1 ]; 120return a0[ 2 ]; 121}