From: Eric Anholt Date: Thu, 20 Sep 2012 09:06:07 +0000 (+0200) Subject: i965/fs: Add a couple more algebraic cases that help some ARB_fp patterns. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=9cfc00a84c7a7176a385808e0b92705e79955505;p=mesa.git i965/fs: Add a couple more algebraic cases that help some ARB_fp patterns. ARB_fp doesn't go through the GLSL optimizer, and these were things you see frequently thanks to conditionals being lowered to SLT/SGE and MUL. Reviewed-by: Kenneth Graunke --- diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp index 9ac2a49d948..fea598025ef 100644 --- a/src/mesa/drivers/dri/i965/brw_fs.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp @@ -1435,7 +1435,30 @@ fs_visitor::opt_algebraic() break; } + /* a * 0.0 = 0.0 */ + if (inst->src[1].type == BRW_REGISTER_TYPE_F && + inst->src[1].imm.f == 0.0) { + inst->opcode = BRW_OPCODE_MOV; + inst->src[0] = fs_reg(0.0f); + inst->src[1] = reg_undef; + progress = true; + break; + } + break; + case BRW_OPCODE_ADD: + if (inst->src[1].file != IMM) + continue; + + /* a + 0.0 = a */ + if (inst->src[1].type == BRW_REGISTER_TYPE_F && + inst->src[1].imm.f == 0.0) { + inst->opcode = BRW_OPCODE_MOV; + inst->src[1] = reg_undef; + progress = true; + break; + } + break; default: break; }