[Piglit] [PATCH 3/3] arb_uniform_buffer_objects: add a test for a GLSL bug

Marek Olšák maraeo at gmail.com
Thu Jan 1 06:17:12 PST 2015


From: Marek Olšák <marek.olsak at amd.com>

---
 .../2-buffers-bug.shader_test                      | 58 ++++++++++++++++++++++
 1 file changed, 58 insertions(+)
 create mode 100644 tests/spec/arb_uniform_buffer_object/2-buffers-bug.shader_test

diff --git a/tests/spec/arb_uniform_buffer_object/2-buffers-bug.shader_test b/tests/spec/arb_uniform_buffer_object/2-buffers-bug.shader_test
new file mode 100644
index 0000000..6c45946
--- /dev/null
+++ b/tests/spec/arb_uniform_buffer_object/2-buffers-bug.shader_test
@@ -0,0 +1,58 @@
+[require]
+GLSL >= 1.30
+GL_ARB_uniform_buffer_object
+
+[vertex shader]
+#extension GL_ARB_uniform_buffer_object : require
+
+uniform test_unif1
+{
+	float test1;
+	float test2;
+};
+
+uniform test_unif2
+{
+	float test3;
+	float test4;
+};
+
+in vec4 piglit_vertex;
+out vec4 fcolor;
+
+void main(void)
+{
+	gl_Position = piglit_vertex;
+
+	// The GLSL compiler has a bug that compiles this expression as:
+	//    vec4(test1, test2, test1, test2)
+	//
+	// In other words, it only fetches from the first uniform block.
+	//
+	// This bug can be avoided by doing:
+	//    vec4(test1, test2, test3, 0.4)
+	//
+	// In this case, the GLSL compiler correctly generates a fetch
+	// from the second uniform block.
+
+	fcolor = vec4(test1, test2, test3, test4);
+}
+
+[fragment shader]
+in vec4 fcolor;
+
+void main()
+{
+	gl_FragColor = fcolor;
+}
+
+[test]
+link success
+
+uniform float test1 0.1
+uniform float test2 0.2
+uniform float test3 0.3
+uniform float test4 0.4
+
+draw rect -1 -1 2 2
+probe all rgba 0.1 0.2 0.3 0.4
-- 
2.1.0



More information about the Piglit mailing list