[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