[Piglit] [PATCH 4/5] GLSL 1.40: Add a nasty test for UBO structure copying.

Eric Anholt eric at anholt.net
Thu Jul 26 16:23:47 PDT 2012


This is totally hand-written awfulness.
---
 .../fs-struct-copy-complicated.shader_test         |  123 +++++++++++++++++++
 .../vs-struct-copy-complicated.shader_test         |  126 ++++++++++++++++++++
 2 files changed, 249 insertions(+)
 create mode 100644 tests/spec/glsl-1.40/uniform_buffer/fs-struct-copy-complicated.shader_test
 create mode 100644 tests/spec/glsl-1.40/uniform_buffer/vs-struct-copy-complicated.shader_test

diff --git a/tests/spec/glsl-1.40/uniform_buffer/fs-struct-copy-complicated.shader_test b/tests/spec/glsl-1.40/uniform_buffer/fs-struct-copy-complicated.shader_test
new file mode 100644
index 0000000..c799691
--- /dev/null
+++ b/tests/spec/glsl-1.40/uniform_buffer/fs-struct-copy-complicated.shader_test
@@ -0,0 +1,123 @@
+[require]
+GLSL >= 1.40
+
+[vertex shader]
+#version 140
+
+in vec4 vertex;
+
+void main()
+{
+	gl_Position = vertex;
+}
+
+[fragment shader]
+#version 140
+
+struct S2 {
+	vec2 v2;
+	mat2 m22[2];
+};
+
+uniform ubo1 {
+	struct S {
+		S2 arr[2];
+		vec3 v3;
+		bool b;
+	} s[2];
+};
+
+void main()
+{
+	S temp[2] = s;
+
+	/* Try to prevent copy propagation */
+	temp[0].arr[0].v2 = vec2(0.01, 0.02);
+
+	vec4 v = vec4(0, 1, 0, 0);
+
+	if (temp[0].arr[0].v2 != vec2(0.01, 0.02))
+		v = vec4(0.02, 0, temp[0].arr[0].v2);
+	else if (temp[0].arr[0].m22[0][0] != vec2(0.03, 0.04))
+		v = vec4(0.04, 0, temp[0].arr[0].m22[0][0]);
+	else if (temp[0].arr[0].m22[0][1] != vec2(0.05, 0.06))
+		v = vec4(0.06, 0, temp[0].arr[0].m22[0][1]);
+	else if (temp[0].arr[0].m22[1][0] != vec2(0.07, 0.08))
+		v = vec4(0.08, 0, temp[0].arr[0].m22[1][0]);
+	else if (temp[0].arr[0].m22[1][1] != vec2(0.09, 0.10))
+		v = vec4(0.10, 0, temp[0].arr[0].m22[1][1]);
+
+	else if (temp[0].arr[1].v2 != vec2(0.21, 0.22))
+		v = vec4(0.22, 0, temp[0].arr[1].v2);
+	else if (temp[0].arr[1].m22[0][0] != vec2(0.23, 0.24))
+		v = vec4(0.24, 0, temp[0].arr[1].m22[0][0]);
+	else if (temp[0].arr[1].m22[0][1] != vec2(0.25, 0.26))
+		v = vec4(0.26, 0, temp[0].arr[1].m22[0][1]);
+	else if (temp[0].arr[1].m22[1][0] != vec2(0.27, 0.28))
+		v = vec4(0.28, 0, temp[0].arr[1].m22[1][0]);
+	else if (temp[0].arr[1].m22[1][1] != vec2(0.29, 0.30))
+		v = vec4(0.30, 0, temp[0].arr[1].m22[1][1]);
+
+	else if (temp[0].v3 != vec3(0.31, 0.32, 0.33))
+		v = vec4(0.32, temp[0].v3);
+	else if (temp[0].b != false)
+		v = vec4(0.34, 0, 0, temp[0].b);
+
+	else if (temp[1].arr[0].v2 != vec2(0.41, 0.42))
+		v = vec4(0.42, 0, temp[1].arr[0].v2);
+	else if (temp[1].arr[0].m22[0][0] != vec2(0.43, 0.44))
+		v = vec4(0.44, 0, temp[1].arr[0].m22[0][0]);
+	else if (temp[1].arr[0].m22[0][1] != vec2(0.45, 0.46))
+		v = vec4(0.46, 0, temp[1].arr[0].m22[0][1]);
+	else if (temp[1].arr[0].m22[1][0] != vec2(0.47, 0.48))
+		v = vec4(0.48, 0, temp[1].arr[0].m22[1][0]);
+	else if (temp[1].arr[0].m22[1][1] != vec2(0.49, 0.50))
+		v = vec4(0.50, 0, temp[1].arr[0].m22[1][1]);
+
+	else if (temp[1].arr[1].v2 != vec2(0.61, 0.62))
+		v = vec4(0.62, 0, temp[1].arr[1].v2);
+	else if (temp[1].arr[1].m22[0][0] != vec2(0.63, 0.64))
+		v = vec4(0.64, 0, temp[1].arr[1].m22[0][0]);
+	else if (temp[1].arr[1].m22[0][1] != vec2(0.65, 0.66))
+		v = vec4(0.66, 0, temp[1].arr[1].m22[0][1]);
+	else if (temp[1].arr[1].m22[1][0] != vec2(0.67, 0.68))
+		v = vec4(0.68, 0, temp[1].arr[1].m22[1][0]);
+	else if (temp[1].arr[1].m22[1][1] != vec2(0.69, 0.70))
+		v = vec4(0.70, 0, temp[1].arr[1].m22[1][1]);
+
+	else if (temp[1].v3 != vec3(0.71, 0.72, 0.73))
+		v = vec4(0.72, temp[1].v3);
+	else if (temp[1].b != true)
+		v = vec4(0.74, 0, 0, temp[1].b);
+
+	gl_FragColor = v;
+}
+
+[vertex data]
+vertex/float/2
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+
+[test]
+uniform vec2 s[0].arr[0].v2 0.99 0.99
+uniform mat2 s[0].arr[0].m22[0] 0.03 0.04 0.05 0.06
+uniform mat2 s[0].arr[0].m22[1] 0.07 0.08 0.09 0.10
+uniform vec2 s[0].arr[1].v2 0.21 0.22
+uniform mat2 s[0].arr[1].m22[0] 0.23 0.24 0.25 0.26
+uniform mat2 s[0].arr[1].m22[1] 0.27 0.28 0.29 0.30
+uniform vec3 s[0].v3 0.31 0.32 0.33
+uniform int s[0].b 0
+
+uniform vec2 s[1].arr[0].v2 0.41 0.42
+uniform mat2 s[1].arr[0].m22[0] 0.43 0.44 0.45 0.46
+uniform mat2 s[1].arr[0].m22[1] 0.47 0.48 0.49 0.50
+uniform vec2 s[1].arr[1].v2 0.61 0.62
+uniform mat2 s[1].arr[1].m22[0] 0.63 0.64 0.65 0.66
+uniform mat2 s[1].arr[1].m22[1] 0.67 0.68 0.69 0.70
+uniform vec3 s[1].v3 0.71 0.72 0.73
+uniform int s[1].b 2
+
+draw arrays GL_TRIANGLE_FAN 0 4
+probe all rgba 0.0 1.0 0.0 0.0
diff --git a/tests/spec/glsl-1.40/uniform_buffer/vs-struct-copy-complicated.shader_test b/tests/spec/glsl-1.40/uniform_buffer/vs-struct-copy-complicated.shader_test
new file mode 100644
index 0000000..1e034e7
--- /dev/null
+++ b/tests/spec/glsl-1.40/uniform_buffer/vs-struct-copy-complicated.shader_test
@@ -0,0 +1,126 @@
+[require]
+GLSL >= 1.40
+
+[vertex shader]
+#version 140
+
+struct S2 {
+	vec2 v2;
+	mat2 m22[2];
+};
+
+uniform ubo1 {
+	struct S {
+		S2 arr[2];
+		vec3 v3;
+		bool b;
+	} s[2];
+};
+
+in vec4 vertex;
+out vec4 v;
+
+void main()
+{
+	gl_Position = vertex;
+
+	S temp[2] = s;
+
+	/* Try to prevent copy propagation */
+	temp[0].arr[0].v2 = vec2(0.01, 0.02);
+
+	v = vec4(0, 1, 0, 0);
+
+	if (temp[0].arr[0].v2 != vec2(0.01, 0.02))
+		v = vec4(0.02, 0, temp[0].arr[0].v2);
+	else if (temp[0].arr[0].m22[0][0] != vec2(0.03, 0.04))
+		v = vec4(0.04, 0, temp[0].arr[0].m22[0][0]);
+	else if (temp[0].arr[0].m22[0][1] != vec2(0.05, 0.06))
+		v = vec4(0.06, 0, temp[0].arr[0].m22[0][1]);
+	else if (temp[0].arr[0].m22[1][0] != vec2(0.07, 0.08))
+		v = vec4(0.08, 0, temp[0].arr[0].m22[1][0]);
+	else if (temp[0].arr[0].m22[1][1] != vec2(0.09, 0.10))
+		v = vec4(0.10, 0, temp[0].arr[0].m22[1][1]);
+
+	else if (temp[0].arr[1].v2 != vec2(0.21, 0.22))
+		v = vec4(0.22, 0, temp[0].arr[1].v2);
+	else if (temp[0].arr[1].m22[0][0] != vec2(0.23, 0.24))
+		v = vec4(0.24, 0, temp[0].arr[1].m22[0][0]);
+	else if (temp[0].arr[1].m22[0][1] != vec2(0.25, 0.26))
+		v = vec4(0.26, 0, temp[0].arr[1].m22[0][1]);
+	else if (temp[0].arr[1].m22[1][0] != vec2(0.27, 0.28))
+		v = vec4(0.28, 0, temp[0].arr[1].m22[1][0]);
+	else if (temp[0].arr[1].m22[1][1] != vec2(0.29, 0.30))
+		v = vec4(0.30, 0, temp[0].arr[1].m22[1][1]);
+
+	else if (temp[0].v3 != vec3(0.31, 0.32, 0.33))
+		v = vec4(0.32, temp[0].v3);
+	else if (temp[0].b != false)
+		v = vec4(0.34, 0, 0, temp[0].b);
+
+	else if (temp[1].arr[0].v2 != vec2(0.41, 0.42))
+		v = vec4(0.42, 0, temp[1].arr[0].v2);
+	else if (temp[1].arr[0].m22[0][0] != vec2(0.43, 0.44))
+		v = vec4(0.44, 0, temp[1].arr[0].m22[0][0]);
+	else if (temp[1].arr[0].m22[0][1] != vec2(0.45, 0.46))
+		v = vec4(0.46, 0, temp[1].arr[0].m22[0][1]);
+	else if (temp[1].arr[0].m22[1][0] != vec2(0.47, 0.48))
+		v = vec4(0.48, 0, temp[1].arr[0].m22[1][0]);
+	else if (temp[1].arr[0].m22[1][1] != vec2(0.49, 0.50))
+		v = vec4(0.50, 0, temp[1].arr[0].m22[1][1]);
+
+	else if (temp[1].arr[1].v2 != vec2(0.61, 0.62))
+		v = vec4(0.62, 0, temp[1].arr[1].v2);
+	else if (temp[1].arr[1].m22[0][0] != vec2(0.63, 0.64))
+		v = vec4(0.64, 0, temp[1].arr[1].m22[0][0]);
+	else if (temp[1].arr[1].m22[0][1] != vec2(0.65, 0.66))
+		v = vec4(0.66, 0, temp[1].arr[1].m22[0][1]);
+	else if (temp[1].arr[1].m22[1][0] != vec2(0.67, 0.68))
+		v = vec4(0.68, 0, temp[1].arr[1].m22[1][0]);
+	else if (temp[1].arr[1].m22[1][1] != vec2(0.69, 0.70))
+		v = vec4(0.70, 0, temp[1].arr[1].m22[1][1]);
+
+	else if (temp[1].v3 != vec3(0.71, 0.72, 0.73))
+		v = vec4(0.72, temp[1].v3);
+	else if (temp[1].b != true)
+		v = vec4(0.74, 0, 0, temp[1].b);
+}
+
+[fragment shader]
+#version 140
+
+in vec4 v;
+
+void main()
+{
+	gl_FragColor = v;
+}
+
+[vertex data]
+vertex/float/2
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+
+[test]
+uniform vec2 s[0].arr[0].v2 0.99 0.99
+uniform mat2 s[0].arr[0].m22[0] 0.03 0.04 0.05 0.06
+uniform mat2 s[0].arr[0].m22[1] 0.07 0.08 0.09 0.10
+uniform vec2 s[0].arr[1].v2 0.21 0.22
+uniform mat2 s[0].arr[1].m22[0] 0.23 0.24 0.25 0.26
+uniform mat2 s[0].arr[1].m22[1] 0.27 0.28 0.29 0.30
+uniform vec3 s[0].v3 0.31 0.32 0.33
+uniform int s[0].b 0
+
+uniform vec2 s[1].arr[0].v2 0.41 0.42
+uniform mat2 s[1].arr[0].m22[0] 0.43 0.44 0.45 0.46
+uniform mat2 s[1].arr[0].m22[1] 0.47 0.48 0.49 0.50
+uniform vec2 s[1].arr[1].v2 0.61 0.62
+uniform mat2 s[1].arr[1].m22[0] 0.63 0.64 0.65 0.66
+uniform mat2 s[1].arr[1].m22[1] 0.67 0.68 0.69 0.70
+uniform vec3 s[1].v3 0.71 0.72 0.73
+uniform int s[1].b 2
+
+draw arrays GL_TRIANGLE_FAN 0 4
+probe all rgba 0.0 1.0 0.0 0.0
-- 
1.7.10.4



More information about the Piglit mailing list