[Piglit] [PATCH v2] es2_compat: run glReleaseShaderCompiler before link and use a builtin

Ilia Mirkin imirkin at alum.mit.edu
Sun Feb 7 15:09:59 UTC 2016


All that mesa does when releasing the shader compiler is clear its
builtins list. So make sure to use a builtin, and release the compiler
sooner, to trigger a bug in mesa.

This code sequence is hit by some core Android component.

Reported-by: Rob Herring <robh at kernel.org>
Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu>
---
 .../arb_es2_compatibility-releaseshadercompiler.c         | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/tests/spec/arb_es2_compatibility/arb_es2_compatibility-releaseshadercompiler.c b/tests/spec/arb_es2_compatibility/arb_es2_compatibility-releaseshadercompiler.c
index b5c476e..e7ce98a 100644
--- a/tests/spec/arb_es2_compatibility/arb_es2_compatibility-releaseshadercompiler.c
+++ b/tests/spec/arb_es2_compatibility/arb_es2_compatibility-releaseshadercompiler.c
@@ -28,7 +28,9 @@
 /** @file arb_es2_compatibility-releasecompiler.c
  *
  * Tests that compiling a shader works again after doing
- * glReleaseShaderCompiler().
+ * glReleaseShaderCompiler(). Note that it's important that one of the
+ * shaders use builtins, as that tests some of the shader compiler's
+ * innards.
  */
 
 #include "piglit-util-gl.h"
@@ -55,18 +57,20 @@ static const char fs_text[] =
 	"#version 100\n"
 	"uniform mediump vec4 color;\n"
 	"void main () {\n"
-	"    gl_FragColor = color;\n"
+	"    gl_FragColor = clamp(color, vec4(0), vec4(1));\n"
 	"}\n"
 	;
 
 void
-draw(const float *color, float x_offset)
+draw(const float *color, float x_offset, bool release)
 {
 	GLuint prog;
 	GLint color_location;
 	GLint offset_location;
 
 	prog = piglit_build_simple_program(vs_text, fs_text);
+	if (release)
+		glReleaseShaderCompiler();
 
 	glBindAttribLocation(prog, 0, "vertex");
 	glLinkProgram(prog);
@@ -91,9 +95,10 @@ piglit_display(void)
 	float green[] = {0.0, 1.0, 0.0, 0.0};
 	float blue[] = {0.0, 0.0, 1.0, 0.0};
 
-	draw(green, 0.0f);
+	draw(green, 0.0f, false);
+	glReleaseShaderCompiler();
+	draw(blue, 1.0f, true);
 	glReleaseShaderCompiler();
-	draw(blue, 1.0f);
 
 	pass &= piglit_probe_pixel_rgba(piglit_width / 4, piglit_height / 2,
 					green);
-- 
2.4.10



More information about the Piglit mailing list