On Friday, April 18, 2014 11:56:52 AM Matt Turner wrote: > Since CSE creates instructions, if we let CSE generate things register > coalescing can't remove, bad things will happen. Only let CSE combine > non-copy load_payloads. > > E.g., allow CSE to handle this > > load_payload vgrf4+0, vgrf5, vgrf6 > > but not this > > load_payload vgrf4+0, vgrf5+0, vgrf5+1 > --- > src/mesa/drivers/dri/i965/brw_fs_cse.cpp | 18 ++++++++++++++++++ > 1 file changed, 18 insertions(+) > > diff --git a/src/mesa/drivers/dri/i965/brw_fs_cse.cpp b/src/mesa/drivers/dri/i965/brw_fs_cse.cpp > index 44f1fe4..dc80968 100644 > --- a/src/mesa/drivers/dri/i965/brw_fs_cse.cpp > +++ b/src/mesa/drivers/dri/i965/brw_fs_cse.cpp > @@ -43,6 +43,22 @@ struct aeb_entry : public exec_node { > } > > static bool > +is_copy_payload(const fs_inst *inst) > +{ > + const int reg = inst->src[0].reg; > + if (inst->src[0].reg_offset != 0) > + return false; > + > + for (int i = 1; i < inst->sources; i++) { > + if (inst->src[i].reg != reg || > + inst->src[i].reg_offset != i) { > + return false; > + } > + } > + return true; > +}
This code is duplicated from patch 15. Why not make it a method of fs_inst with an additional "if (inst->opcode != SHADER_OPCODE_LOAD_PAYLOAD) return false" check? Or, share it somehow...it seems useful enough. > + > +static bool > is_expression(const fs_inst *const inst) > { > switch (inst->opcode) { > @@ -73,6 +89,8 @@ is_expression(const fs_inst *const inst) > case FS_OPCODE_CINTERP: > case FS_OPCODE_LINTERP: > return true; > + case SHADER_OPCODE_LOAD_PAYLOAD: > + return !is_copy_payload(inst); > default: > return false; > } >
signature.asc
Description: This is a digitally signed message part.
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev