On Mon, Jul 7, 2014 at 6:57 AM, Abdiel Janulgue <abdiel.janul...@linux.intel.com> wrote: > When sel conditon is bounded within 0 and 1.0. This allows code as: > mov.sat a b > sel.ge dst a 0.25F > > To be propagated as: > sel.ge.sat dst b 0.25F > > Signed-off-by: Abdiel Janulgue <abdiel.janul...@linux.intel.com> > --- > src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp | 18 +++++++++++++++++- > 1 file changed, 17 insertions(+), 1 deletion(-) > > diff --git a/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp > b/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp > index 28e59c6..f72ed23 100644 > --- a/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp > +++ b/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp > @@ -43,6 +43,7 @@ struct acp_entry : public exec_node { > fs_reg dst; > fs_reg src; > enum opcode opcode; > + bool saturate; > }; > > struct block_data { > @@ -348,11 +349,26 @@ fs_visitor::try_copy_propagate(fs_inst *inst, int arg, > acp_entry *entry) > } > } > > + if (entry->saturate) { > + switch(inst->opcode) { > + case BRW_OPCODE_SEL: > + if (inst->src[1].file != IMM || > + inst->src[1].fixed_hw_reg.dw1.f < 0.0 || > + inst->src[1].fixed_hw_reg.dw1.f > 1.0) { > + return false; > + } > + break; > + default: > + return false; > + } > + } > + > inst->src[arg].file = entry->src.file; > inst->src[arg].reg = entry->src.reg; > inst->src[arg].reg_offset = entry->src.reg_offset; > inst->src[arg].subreg_offset = entry->src.subreg_offset; > inst->src[arg].stride *= entry->src.stride; > + inst->saturate = inst->saturate ? true : entry->saturate;
I'd probably write this as inst->saturate = inst->saturate || entry->saturate; _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev