Re: [Piglit] [PATCH] shaders: Add test for conditional mod propagation with different types.

2015-03-03 Thread Kenneth Graunke
On Monday, March 02, 2015 11:03:01 AM Matt Turner wrote:
 The i965 driver has a pass that merges comparisons with zero into the
 instruction that generated the result. For example:
 
   addtmpx y
   cmp.ge.f0  null   tmp   0.0
 
 is optimized into
 
   add.ge.f0  tmpx y
 
 If the types of tmp are different in the add and cmp, comparisons
 against zero might not work the same. For instance if the addition is on
 unsigned integers, they may generate a result of 0x8000 which is
 -0.0 reinterpreted as a float.
 
 I think this test triggers the same bug as this bug report.
 
 Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=89317

Reviewed-by: Kenneth Graunke kenn...@whitecape.org


signature.asc
Description: This is a digitally signed message part.
___
Piglit mailing list
Piglit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/piglit


[Piglit] [PATCH] shaders: Add test for conditional mod propagation with different types.

2015-03-02 Thread Matt Turner
The i965 driver has a pass that merges comparisons with zero into the
instruction that generated the result. For example:

addtmpx y
cmp.ge.f0  null   tmp   0.0

is optimized into

add.ge.f0  tmpx y

If the types of tmp are different in the add and cmp, comparisons
against zero might not work the same. For instance if the addition is on
unsigned integers, they may generate a result of 0x8000 which is
-0.0 reinterpreted as a float.

I think this test triggers the same bug as this bug report.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=89317
---
 ...s-unsigned-comparison-negative-zero.shader_test | 37 ++
 1 file changed, 37 insertions(+)
 create mode 100644 
tests/shaders/glsl-fs-unsigned-comparison-negative-zero.shader_test

diff --git 
a/tests/shaders/glsl-fs-unsigned-comparison-negative-zero.shader_test 
b/tests/shaders/glsl-fs-unsigned-comparison-negative-zero.shader_test
new file mode 100644
index 000..13c224f
--- /dev/null
+++ b/tests/shaders/glsl-fs-unsigned-comparison-negative-zero.shader_test
@@ -0,0 +1,37 @@
+[require]
+GLSL = 1.30
+GL_ARB_shader_bit_encoding
+
+[vertex shader passthrough]
+
+[fragment shader]
+#extension GL_ARB_shader_bit_encoding: require
+
+out vec4 frag_color;
+
+uniform uint a, b;
+
+void main()
+{
+   /* Adding a + b yields 0x8000, which when reinterpreted as a float
+* is -0.0. -0.0 == +0.0 is true, but if we did the comparison against
+* the unsigned value it would incorrectly be false.
+*/
+   if (uintBitsToFloat(a + b) == 0.0)
+   frag_color = vec4(0.0, 1.0, 0.0, 1.0);
+   else
+   frag_color = vec4(1.0, 0.0, 0.0, 1.0);
+}
+
+[vertex data]
+piglit_vertex/float/2
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+
+[test]
+uniform uint a 0x4000
+uniform uint b 0x4000
+draw arrays GL_TRIANGLE_FAN 0 4
+probe all rgba 0.0 1.0 0.0 1.0
-- 
2.0.5

___
Piglit mailing list
Piglit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/piglit