glslang/Test/reflection.vert
baldurk 141bc5a54f Fix type recursion with EOpIndexIndirect dereferences
* This primarily affects arrays-of-arrays but it can also affect arrays-of-
  structs if there are no further dereferences.
2019-02-21 12:52:05 +00:00

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;
}