[Piglit] [PATCH] Add a test to reproduce an exact/inexact built-in matching bug in Mesa.

Kenneth Graunke kenneth at whitecape.org
Fri Nov 11 02:57:19 PST 2011


Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
---
 .../glsl2/builtin-overload-matching.frag           |   34 ++++++++++++++++++++
 1 files changed, 34 insertions(+), 0 deletions(-)
 create mode 100644 tests/glslparsertest/glsl2/builtin-overload-matching.frag

diff --git a/tests/glslparsertest/glsl2/builtin-overload-matching.frag b/tests/glslparsertest/glsl2/builtin-overload-matching.frag
new file mode 100644
index 0000000..3526007
--- /dev/null
+++ b/tests/glslparsertest/glsl2/builtin-overload-matching.frag
@@ -0,0 +1,34 @@
+// [config]
+// expect_result: pass
+// glsl_version: 1.10
+// [end config]
+
+/**
+ * PASS
+ *
+ * This shader triggered a bug in Mesa's lazy built-in prototype importing.
+ *
+ * The first call, abs(f), would fail to find a local signature, look through
+ * the built-ins, and import the signature
+ *
+ *    float abs(float);
+ *
+ * The second call, abs(i), would also look for a local signature first,
+ * finding the float signature.  Unfortunately, it settled for this inexact
+ * match, failing to search the built-ins to find the correct signature:
+ *
+ *    int abs(int);
+ *
+ * So abs(i) ended up being a float, leading to bizarre type errors.
+ */
+
+uniform float f;
+uniform int i;
+
+void main()
+{
+    float af = abs(f);
+    int ai = abs(i);
+
+    gl_FragColor = vec4(af, af, ai, ai);
+}
-- 
1.7.7.2



More information about the Piglit mailing list