Mesa (master): i965/vec4: unit test for copy propagation and writemask

Chia-I Wu olv at kemper.freedesktop.org
Wed Jun 18 05:43:22 UTC 2014


Module: Mesa
Branch: master
Commit: 88b887faa9209a58d29c819e01f9ad37ebc99a36
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=88b887faa9209a58d29c819e01f9ad37ebc99a36

Author: Chia-I Wu <olvaffe at gmail.com>
Date:   Mon Apr 14 21:52:34 2014 +0800

i965/vec4: unit test for copy propagation and writemask

This unit test demonstrates a subtle bug fixed by
4ddf51db6af36736d5d42c1043eeea86e47459ce.

Signed-off-by: Chia-I Wu <olv at lunarg.com>
Reviewed-by: Eric Anholt <eric at anholt.net>

---

 .../dri/i965/test_vec4_copy_propagation.cpp        |   30 ++++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/src/mesa/drivers/dri/i965/test_vec4_copy_propagation.cpp b/src/mesa/drivers/dri/i965/test_vec4_copy_propagation.cpp
index cb70096..fd517f8 100644
--- a/src/mesa/drivers/dri/i965/test_vec4_copy_propagation.cpp
+++ b/src/mesa/drivers/dri/i965/test_vec4_copy_propagation.cpp
@@ -154,3 +154,33 @@ TEST_F(copy_propagation_test, test_swizzle_swizzle)
                                                     SWIZZLE_X,
                                                     SWIZZLE_Y));
 }
+
+TEST_F(copy_propagation_test, test_swizzle_writemask)
+{
+   dst_reg a = dst_reg(v, glsl_type::vec4_type);
+   dst_reg b = dst_reg(v, glsl_type::vec4_type);
+   dst_reg c = dst_reg(v, glsl_type::vec4_type);
+
+   v->emit(v->MOV(b, swizzle(src_reg(a), BRW_SWIZZLE4(SWIZZLE_X,
+                                                      SWIZZLE_Y,
+                                                      SWIZZLE_X,
+                                                      SWIZZLE_Z))));
+
+   v->emit(v->MOV(writemask(a, WRITEMASK_XYZ), src_reg(1.0f)));
+
+   vec4_instruction *test_mov =
+      v->MOV(c, swizzle(src_reg(b), BRW_SWIZZLE4(SWIZZLE_W,
+                                                 SWIZZLE_W,
+                                                 SWIZZLE_W,
+                                                 SWIZZLE_W)));
+   v->emit(test_mov);
+
+   copy_propagation(v);
+
+   /* should not copy propagate */
+   EXPECT_EQ(test_mov->src[0].reg, b.reg);
+   EXPECT_EQ(test_mov->src[0].swizzle, BRW_SWIZZLE4(SWIZZLE_W,
+                                                    SWIZZLE_W,
+                                                    SWIZZLE_W,
+                                                    SWIZZLE_W));
+}




More information about the mesa-commit mailing list