 141bc5a54f
			
		
	
	
		141bc5a54f
		
	
	
	
	
		
			
			* This primarily affects arrays-of-arrays but it can also affect arrays-of- structs if there are no further dereferences.
		
			
				
	
	
		
			246 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			GLSL
		
	
	
	
	
	
			
		
		
	
	
			246 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			GLSL
		
	
	
	
	
	
| #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;
 | |
| }
 |