From a5ec01fb1bd4ad5418eb16cb05e6f6929d1444e8 Mon Sep 17 00:00:00 2001 From: Matt Turner Date: Thu, 19 Sep 2013 19:48:22 -0700 Subject: [PATCH] i965: Don't copy prop source mods into instructions that can't take them. --- src/mesa/drivers/dri/i965/brw_fs.cpp | 3 +++ src/mesa/drivers/dri/i965/brw_shader.cpp | 19 +++++++++++++++++++ src/mesa/drivers/dri/i965/brw_shader.h | 1 + src/mesa/drivers/dri/i965/brw_vec4.cpp | 3 +++ 4 files changed, 26 insertions(+) diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp index e5d6e4b281e..85995df7869 100644 --- a/src/mesa/drivers/dri/i965/brw_fs.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp @@ -368,6 +368,9 @@ fs_visitor::can_do_source_mods(fs_inst *inst) if (inst->is_send_from_grf()) return false; + if (!inst->can_do_source_mods()) + return false; + return true; } diff --git a/src/mesa/drivers/dri/i965/brw_shader.cpp b/src/mesa/drivers/dri/i965/brw_shader.cpp index 61c4bf5a5ff..256f9b21e4c 100644 --- a/src/mesa/drivers/dri/i965/brw_shader.cpp +++ b/src/mesa/drivers/dri/i965/brw_shader.cpp @@ -568,6 +568,25 @@ backend_instruction::is_control_flow() } } +bool +backend_instruction::can_do_source_mods() +{ + switch (opcode) { + case BRW_OPCODE_ADDC: + case BRW_OPCODE_BFE: + case BRW_OPCODE_BFI1: + case BRW_OPCODE_BFI2: + case BRW_OPCODE_BFREV: + case BRW_OPCODE_CBIT: + case BRW_OPCODE_FBH: + case BRW_OPCODE_FBL: + case BRW_OPCODE_SUBB: + return false; + default: + return true; + } +} + void backend_visitor::dump_instructions() { diff --git a/src/mesa/drivers/dri/i965/brw_shader.h b/src/mesa/drivers/dri/i965/brw_shader.h index 4dbd38d4a52..21a0ad66c42 100644 --- a/src/mesa/drivers/dri/i965/brw_shader.h +++ b/src/mesa/drivers/dri/i965/brw_shader.h @@ -44,6 +44,7 @@ public: bool is_tex(); bool is_math(); bool is_control_flow(); + bool can_do_source_mods(); enum opcode opcode; /* BRW_OPCODE_* or FS_OPCODE_* */ diff --git a/src/mesa/drivers/dri/i965/brw_vec4.cpp b/src/mesa/drivers/dri/i965/brw_vec4.cpp index 149a1a0e165..bfd01068aba 100644 --- a/src/mesa/drivers/dri/i965/brw_vec4.cpp +++ b/src/mesa/drivers/dri/i965/brw_vec4.cpp @@ -222,6 +222,9 @@ vec4_visitor::can_do_source_mods(vec4_instruction *inst) if (inst->is_send_from_grf()) return false; + if (!inst->can_do_source_mods()) + return false; + return true; } -- 2.30.2