yum-mirror/glslang
git clone https://git.yummers.dev/yum-mirror/glslang
2e24222c
main
1#version 440 2 3// Note 'location' tests for enhanced layouts are in 330.frag 4 5layout (location = 2 ,component = 2 )in vec2 a ; 6layout (location = 2 ,component = 1 )in float b ; 7 8layout (location = 3 ,component = 2 )in vec3 c ;// ERROR: c overflows components 2 and 3 9 10layout (location = 0 ,component = 3 )in float d [4 ]; 11 12layout (location = 4 ,component = 0 )in vec3 e [5 ]; 13layout (location = 4 ,component = 3 )in float f [5 ]; 14 15layout (location = 9 ,component = 4 )in float g [6 ];// ERROR, component too big 16 17layout (location = 4 ,component = 2 )in vec2 h ;// component overlap okay for vertex in 18 19layout (location = 3 ,component = 2 )out vec2 i ; 20layout (location = 3 ,component = 0 )out vec2 j ; 21 22layout (location = 4 ,component = 2 )out vec2 k ; 23layout (location = 4 ,component = 2 )out vec2 m ;// ERROR, component overlap 24 25layout (location = 2 ,component = 2 )out vec2 n ; 26layout (location = 2 ,component = 0 )out vec3 p ;// ERROR, component overlap 27 28layout (location = 10 ,component = 3 )out float q [6 ]; 29layout (location = 10 ,component = 0 )out vec3 r [6 ]; 30 31layout (location = 15 ,component = 3 )out float s ;// ERROR, overlap 32layout (location = 10 ,component = 1 )out float t ;// ERROR, overlap 33 34layout (location = 20 ,component = 2 )out float u ; 35layout (location = 20 ,component = 0 )out float v ; 36layout (location = 20 ,component = 3 )out float w ; 37layout (location = 20 ,component = 1 )out vec2 x ;// ERROR, overlap 38 39layout (location = 30 ,component = 3 )out vec2 y ;// ERROR, goes to component 4 40layout (location = 31 ,component = 1 )out vec4 z ;// ERROR, goes to component 4 41 42layout (location = 32 ,component = 1 )out mat4 ba ;// ERROR 43layout (location = 33 ,component = 1 )out struct S {int a ;}Ss ;// ERROR 44layout (location = 34 ,component = 1 )out bn {int a ;}bb ;// ERROR 45 46layout (component = 1 )out float bc ;// ERROR, no location 47 48out blockname { 49layout (location = 40 ,component = 2 )out float u ; 50layout (location = 40 ,component = 0 )out float v ; 51layout (location = 40 ,component = 3 )out float w ; 52layout (location = 40 ,component = 1 )out vec2 x ;// ERROR, overlap 53 54layout (location = 41 ,component = 3 )out vec2 y ;// ERROR, goes to component 4 55layout (location = 42 ,component = 1 )out vec4 z ;// ERROR, goes to component 4 56 57layout (location = 42 ,component = 1 )out mat4 ba ;// ERROR 58layout (location = 43 ,component = 1 )out S Ss ;// ERROR 59}bd ; 60 61layout (location = 1 ,component = 1 )out ;// ERROR, no global setting 62 63layout (location = 50 ,component = 3 )out int be ; 64layout (location = 50 ,component = 0 )out vec3 bf ; 65 66layout (location = 51 ,component = 1 )out double dfo ;// ERROR, odd component 67layout (location = 52 ,component = 2 )out dvec2 dvo ;// ERROR, overflow 68layout (location = 53 )out double dfo2 ; 69layout (location = 53 ,component = 2 )out vec2 ffv2 ;// okay, fits 70layout (location = 54 )out dvec4 dvec4out ;// uses up location 55 too 71layout (location = 55 )out float overf ;// ERROR, collides with previous dvec4 72layout (location = 56 ,component = 1 )out vec2 df2o ; 73layout (location = 56 ,component = 3 )out float sf2o ; 74layout (location = 57 ,component = 2 )out vec2 dv3o ; 75layout (location = 57 ,component = 3 )out float sf4o ;// ERROR, overlapping component 76layout (location = 58 )out flat dvec3 dv3o2 ;// uses part of location 59 77layout (location = 59 ,component = 2 )out flat double dfo3 ;// okay, fits 78layout (location = 59 ,component = 0 )out flat double dfo4 ;// ERROR, overlaps the dvec3 in starting in 58 79 80out bblck1 { 81vec4 bbv ; 82}bbinst1 ; 83 84out bblck2 { 85layout (xfb_offset = 64 )vec4 bbv ; 86}bbinst2 ; 87 88layout (xfb_buffer = 3 ,xfb_stride = 64 )out ;// default buffer is 3 89 90out bblck3 { 91layout (xfb_offset = 16 )vec4 bbv ;// in xfb_buffer 3 92}bbinst3 ; 93 94uniform ubblck3 { 95layout (xfb_offset = 16 )vec4 bbv ;// ERROR, not in a uniform 96}ubbinst3 ; 97 98layout (xfb_buffer = 2 ,xfb_offset = 48 ,xfb_stride = 80 )out vec4 bg ; 99layout (xfb_offset = 32 ,xfb_stride = 64 )out vec4 bh ; 100 101layout (xfb_offset = 48 )out ;// ERROR 102 103layout (xfb_stride = 80 ,xfb_buffer = 2 ,xfb_offset = 16 )out bblck4 { 104vec4 bbv1 ; 105vec4 bbv2 ; 106}bbinst4 ; 107 108out bblck5 { 109layout (xfb_offset = 0 )vec4 bbv1 ; 110layout (xfb_stride = 64 ,xfb_buffer = 3 ,xfb_offset = 48 )vec4 bbv2 ; 111layout (xfb_buffer = 2 )vec4 bbv3 ;// ERROR, wrong buffer 112}bbinst5 ; 113 114out layout (xfb_buffer = 2 )bblck6 { 115layout (xfb_offset = 0 )vec4 bbv1 ; 116layout (xfb_stride = 64 ,xfb_buffer = 3 ,xfb_offset = 32 )vec4 bbv2 ;// ERROR, overlap 32 from bh, and buffer contradiction 117layout (xfb_buffer = 2 ,xfb_offset = 0 )vec4 bbv3 ;// ERROR, overlap 0 from bbinst5 118layout (xfb_buffer = 2 )vec4 bbv5 ; 119layout (xfb_offset = 24 )float bbf6 ;// ERROR, overlap 24 from bbv1 in bbinst4 120}bbinst6 ; 121 122layout (xfb_stride = 48 )out ;// ERROR, stride of buffer 3 123 124layout (xfb_buffer = 1 )out ;// default buffer is 1 125layout (xfb_offset = 4 )out float bj ; 126layout (xfb_offset = 0 )out ivec2 bk ;// ERROR, overlap 4 127 128layout (xfb_buffer = 3 ,xfb_stride = 48 )out ;// ERROR, stride of buffer 3 (default is now 3) 129layout (xfb_stride = 48 )out float bl ;// ERROR, stride of buffer 3 130 131layout (xfb_stride = 48 )out bblck7 {// ERROR, stride of buffer 3 132layout (xfb_stride = 64 )vec4 bbv1 ; 133layout (xfb_stride = 32 )vec4 bbv2 ;// ERROR, stride of buffer 3 134}bbinst7 ; 135 136struct S5 { 137int i ;// 4 bytes plus 4 byte hole 138double d ;// 8 bytes 139float f ;// 4 bytes 140};// total size = 20 141 142struct T { 143bool b ;// 4 plus 4 byte hole 144S5 s ;// 20 145vec2 v2 ;// 8 146};// total size = 36 147 148out layout (xfb_buffer = 0 ,xfb_offset = 0 ,xfb_stride = 92 )bblck8 {// ERROR, stride not multiple of 8 149bool b ;// offset 0 // ERROR, out block containing bool 150T t ;// offset 8, size 40 151int i ;// offset 40 + 4 = 48 152mat3x3 m3 ;// offset 52 153float f ;// offset 52 + 9*4 = 88 154float g ;// ERROR, overflow stride 155}bbinst8 ; 156 157out layout (xfb_buffer = 4 )bblck9 { 158layout (xfb_offset = 1 )bool b ;// ERROR 159layout (xfb_offset = 12 )T t ;// ERROR 160layout (xfb_offset = 52 )mat3x3 m3 ;// non-multiple of 8 okay 161layout (xfb_offset = 90 )int i ;// ERROR 162layout (xfb_offset = 98 )double d ;// ERROR 163layout (xfb_offset = 108 )S s ;// non-multiple of 8 okay 164}bbinst9 ; 165 166layout (xfb_buffer = 5 ,xfb_stride = 6 )out ;// link ERROR, stride not multiple of 4 167layout (xfb_offset = 0 )out float bm ; 168 169layout (xfb_buffer = 6 ,xfb_stride = 2000 )out ;// ERROR, stride too big 170 171out layout (xfb_buffer = 7 ,xfb_offset = 0 )bblck10 {// link ERROR, implicit stride too big 172dmat4x4 m1 ; 173dmat4x4 m2 ; 174float f ; 175}bbinst10 ; 176 177layout (xfb_buffer = 3 )out ; 178layout (xfb_offset = 32 )out gl_PerVertex { 179layout (xfb_buffer = 2 )float gl_PointSize ;// ERROR, change in xfb_buffer 180vec4 gl_Position ; 181}; 182 183int drawParamsBad () 184{ 185return gl_BaseVertexARB + gl_BaseInstanceARB + gl_DrawIDARB ;// ERROR, extension not requested 186} 187 188#extension GL_ARB_shader_draw_parameters : enable 189 190int drawParams () 191{ 192return gl_BaseVertexARB + gl_BaseInstanceARB + gl_DrawIDARB ; 193gl_BaseVertexARB = 3 ;// ERROR, can't write to shader 'in' 194gl_BaseInstanceARB = 3 ;// ERROR, can't write to shader 'in' 195gl_DrawIDARB = 3 ;// ERROR, can't write to shader 'in' 196glBaseInstanceARB ;// ERROR, not defined 197}