| #version 440 core | |
| layout(std140, row_major) uniform nameless { | |
| vec3 anonMember1; | |
| mat3x2 m23; | |
| int scalarAfterm23; | |
| vec4 anonDeadMember2; | |
| vec4 anonMember3; | |
| int scalarBeforeArray; | |
| float floatArray[5]; | |
| int scalarAfterArray; | |
| mat2x2 m22[9]; | |
| }; | |
| layout(std140, column_major) uniform c_nameless { | |
| vec3 c_anonMember1; | |
| mat3x2 c_m23; | |
| int c_scalarAfterm23; | |
| vec4 c_anonDeadMember2; | |
| vec4 c_anonMember3; | |
| }; | |
| layout(std140) uniform named { | |
| vec3 deadMember1; | |
| int scalar; | |
| vec4 member2; | |
| vec4 member3; | |
| vec2 memvec2; | |
| float memf1; | |
| bool memf2; | |
| int memf3; | |
| vec2 memvec2a; | |
| mat2x2 m22[7]; | |
| } ablock; | |
| layout(std140) uniform namelessdead { | |
| int a; | |
| }; | |
| layout(std140) uniform namedDead { | |
| int b; | |
| } bblock; | |
| struct N1 { | |
| float a; | |
| }; | |
| struct N2 { | |
| float b; | |
| float c; | |
| float d; | |
| }; | |
| struct N3 { | |
| N1 n1; | |
| N2 n2; | |
| }; | |
| layout(std140) uniform nested { | |
| N3 foo; | |
| } nest; | |
| layout(std140) uniform nested2 { | |
| vec4 padding; // offset 0, size 16 | |
| N3 a; // offset 16, size 32 | |
| N1 b[4]; // offset 48, size 64 | |
| N1 c[2]; // offset 112, size 32 | |
| N1 d[4]; // offset 144, size 64 | |
| } nest2; | |
| struct TS { | |
| int a; | |
| int dead; | |
| }; | |
| uniform TS s; | |
| uniform float uf1; | |
| uniform float uf2; | |
| uniform float ufDead3; | |
| uniform float ufDead4; | |
| uniform writeonly uimage2D image_ui2D; | |
| uniform sampler2D sampler_2D; | |
| uniform sampler2DMSArray sampler_2DMSArray; | |
| uniform mat2 dm22[10]; | |
| struct deep1 { | |
| vec2 va[3]; | |
| bool b; | |
| }; | |
| struct deep2 { | |
| int i; | |
| deep1 d1[4]; | |
| }; | |
| struct deep3 { | |
| vec4 iv4; | |
| deep2 d2; | |
| ivec3 v3; | |
| }; | |
| in float attributeFloat; | |
| layout(location = 2) in vec2 attributeFloat2; | |
| in vec3 attributeFloat3; | |
| in vec4 attributeFloat4; | |
| in mat4 attributeMat4; | |
| in float attributeFloatArray[3]; | |
| uniform deep3 deepA[2], deepB[2], deepC[3], deepD[2]; | |
| const bool control = true; | |
| void deadFunction() | |
| { | |
| vec3 v3 = ablock.deadMember1; | |
| vec4 v = anonDeadMember2; | |
| float f = ufDead4; | |
| } | |
| void liveFunction2() | |
| { | |
| vec3 v = anonMember1; | |
| float f = uf1; | |
| } | |
| void liveFunction1(writeonly uimage2D p_ui2D, sampler2D p_2D, sampler2DMSArray p_2DMSArray) | |
| { | |
| liveFunction2(); | |
| float f = uf2; | |
| vec4 v = ablock.member3; | |
| } | |
| uniform abl { | |
| float foo; | |
| } arrBl[4]; | |
| uniform abl2 { | |
| float foo; | |
| } arrBl2[4]; | |
| buffer buf1 { | |
| float scalar; | |
| float runtimeArray[]; | |
| } buf1i; | |
| buffer buf2 { | |
| float scalar; | |
| N2 runtimeArray[]; | |
| } buf2i; | |
| buffer buf3 { | |
| float scalar; | |
| float runtimeArray[]; | |
| } buf3i; | |
| buffer buf4 { | |
| float scalar; | |
| N2 runtimeArray[]; | |
| } buf4i; | |
| struct VertexInfo { | |
| float position[3]; | |
| float normal[3]; | |
| }; | |
| struct TriangleInfo { | |
| VertexInfo v[3]; | |
| }; | |
| buffer VertexCollection { | |
| TriangleInfo t[5]; | |
| uint padding[10]; | |
| }; | |
| out float outval; | |
| void main() | |
| { | |
| liveFunction1(image_ui2D, sampler_2D, sampler_2DMSArray); | |
| liveFunction2(); | |
| if (! control) | |
| deadFunction(); | |
| float f; | |
| int i; | |
| if (control) { | |
| liveFunction2(); | |
| f = anonMember3.z; | |
| f = s.a; | |
| f = ablock.scalar; | |
| f = m23[1].y + scalarAfterm23; | |
| f = c_m23[1].y + c_scalarAfterm23; | |
| f += scalarBeforeArray; | |
| f += floatArray[2]; | |
| f += floatArray[4]; | |
| f += scalarAfterArray; | |
| f += ablock.memvec2.x; | |
| f += ablock.memf1; | |
| f += float(ablock.memf2); | |
| f += ablock.memf3; | |
| f += ablock.memvec2a.y; | |
| f += ablock.m22[i][1][0]; | |
| f += dm22[3][0][1]; | |
| f += m22[2][1].y; | |
| f += nest.foo.n1.a + nest.foo.n2.b + nest.foo.n2.c + nest.foo.n2.d; | |
| f += deepA[i].d2.d1[2].va[1].x; | |
| f += deepB[1].d2.d1[i].va[1].x; | |
| f += deepB[i].d2.d1[i].va[1].x; | |
| deep3 d = deepC[1]; | |
| deep3 da[2] = deepD; | |
| deep1 db = deepA[i].d2.d1[i]; | |
| } else | |
| f = ufDead3; | |
| f += arrBl[2].foo + arrBl[0].foo; | |
| f += arrBl2[i].foo; | |
| f += attributeFloat; | |
| f += attributeFloat2.x; | |
| f += attributeFloat3.x; | |
| f += attributeFloat4.x; | |
| f += attributeMat4[0][1]; | |
| f += attributeFloatArray[2]; | |
| f += buf1i.runtimeArray[3]; | |
| f += buf2i.runtimeArray[3].c; | |
| f += buf3i.runtimeArray[gl_InstanceID]; | |
| f += buf4i.runtimeArray[gl_InstanceID].c; | |
| N3 n = nest2.a; | |
| N1 b[4] = nest2.b; | |
| f += nest2.c[1].a; | |
| f += nest2.d[gl_InstanceID].a; | |
| f += t[0].v[0].position[0]; | |
| f += t[gl_InstanceID].v[gl_InstanceID].position[gl_InstanceID]; | |
| f += t[gl_InstanceID].v[gl_InstanceID].normal[gl_InstanceID]; | |
| TriangleInfo tlocal[5] = t; | |
| outval = f; | |
| } |