On Wed, Jul 8, 2015 at 10:58 PM, Zhenyu Wang <zhen...@linux.intel.com> wrote: > NOP actually has no compact version, but we use it for instruction > alignment for compact kernel. Although it seems working on HW, it is > illegal and might not be valid for any future one. > > This trys to get a temporary compact instruction with no effect for > alignment to replace compacted NOP. G45 spec has note that HW compact > logic could determine NENOP and drop it right away, so we can still > keep with that. > > v2: rebase to master, we still need this to work with internal tool. > > Signed-off-by: Zhenyu Wang <zhen...@linux.intel.com> > --- > src/mesa/drivers/dri/i965/brw_eu_compact.c | 41 > +++++++++++++++++++++++++----- > 1 file changed, 35 insertions(+), 6 deletions(-) > > diff --git a/src/mesa/drivers/dri/i965/brw_eu_compact.c > b/src/mesa/drivers/dri/i965/brw_eu_compact.c > index 67f0b45..719667a 100644 > --- a/src/mesa/drivers/dri/i965/brw_eu_compact.c > +++ b/src/mesa/drivers/dri/i965/brw_eu_compact.c > @@ -1367,6 +1367,39 @@ brw_init_compaction_tables(const struct > brw_device_info *devinfo) > } > } > > +static void > +brw_get_noop_compact(struct brw_codegen *p, brw_compact_inst *dst)
I'd rather call this function fill_compaction_padding() or something similar -- there's no need for the brw_ prefix since it's static, it's not "get"ting anything, and "noop" in the name is a little confusing since it's not emitting a NOP. :) > +{ > + const struct brw_device_info *devinfo = p->devinfo; > + brw_inst *inst, i; > + struct brw_reg g0 = brw_vec8_grf(0, 0); > + > + memset(dst, 0, sizeof(*dst)); > + > + /* G45 compact logic could recognize NENOP and drop right away. */ > + if (devinfo->is_g4x) { > + brw_compact_inst_set_opcode(dst, BRW_OPCODE_NENOP); > + brw_compact_inst_set_cmpt_control(dst, true); > + return; > + } > + > + /* > + * As NOP has no legal compact version, try to use a legal compact > + * instruction for compact instruction alignment. > + */ > + brw_push_insn_state(p); > + brw_set_default_predicate_control(p, BRW_PREDICATE_NONE); > + brw_set_default_access_mode(p, BRW_ALIGN_1); > + inst = brw_MOV(p, g0, g0); > + memcpy(&i, inst, sizeof(brw_inst)); > + brw_pop_insn_state(p); > + > + if (!brw_try_compact_instruction(devinfo, dst, &i)) { > + fprintf(stderr, "Failed to generate compact inst for alignment!\n"); > + exit(1); This isn't an error we ever expect a user to hit, to let's make it an assert: bool UNUSED ret = brw_try_compact_instruction(devinfo, dst, &i); assert(ret); With those small changes, this patch is Reviewed-by: Matt Turner <matts...@gmail.com> I'd be happy to make the changes myself and commit the patch if you'd like -- just tell me so. :) Thanks Zhenyu! _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev