[Mesa-dev] [PATCH] i965/fs: Fix gen<6 LRP opcode

Juha-Pekka Heikkila juhapekka.heikkila at gmail.com
Fri May 9 06:21:29 PDT 2014


On ILK implicit accumulator write from MUL opcode seem to
behave sometime unexpected. This patch change implicit
accumulator write to explicit on emitting LRP for gen<6.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=77707
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=77703
Signed-off-by: Juha-Pekka Heikkila <juhapekka.heikkila at gmail.com>
---
 src/mesa/drivers/dri/i965/brw_fs_visitor.cpp | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
index d2dc5fa..c09f0a7 100644
--- a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
@@ -226,8 +226,10 @@ fs_visitor::emit_lrp(const fs_reg &dst, const fs_reg &x, const fs_reg &y,
       fs_reg negative_a = a;
       negative_a.negate = !a.negate;
 
+      struct brw_reg acc = retype(brw_acc_reg(), this->result.type);
+
       emit(ADD(one_minus_a, negative_a, fs_reg(1.0f)));
-      fs_inst *mul = emit(MUL(reg_null_f, y, a));
+      fs_inst *mul = emit(MUL(acc, y, a));
       mul->writes_accumulator = true;
       emit(MAC(dst, x, one_minus_a));
    } else {
-- 
1.8.1.2



More information about the mesa-dev mailing list