On Thu, Apr 26, 2012 at 08:46:52AM -0400, Tom Stellard wrote: > Setting this flag will skip the merge_inst_groups() function. > --- > src/gallium/drivers/r600/r600_asm.c | 3 ++- > src/gallium/drivers/r600/r600_asm.h | 10 ++++++++++ > 2 files changed, 12 insertions(+), 1 deletions(-) > > diff --git a/src/gallium/drivers/r600/r600_asm.c > b/src/gallium/drivers/r600/r600_asm.c > index 0ecca36..5f83879 100644 > --- a/src/gallium/drivers/r600/r600_asm.c > +++ b/src/gallium/drivers/r600/r600_asm.c > @@ -1034,6 +1034,7 @@ static int merge_inst_groups(struct r600_bytecode *bc, > struct r600_bytecode_alu > int have_mova = 0, have_rel = 0; > int max_slots = bc->chip_class == CAYMAN ? 4 : 5; > > + assert(!bc->no_merge_inst_groups); > r = assign_alu_units(bc, alu_prev, prev); > if (r) > return r; > @@ -1481,7 +1482,7 @@ int r600_bytecode_add_alu_type(struct r600_bytecode > *bc, const struct r600_bytec > if (r) > return r; > > - if (bc->cf_last->prev_bs_head) { > + if (!bc->no_merge_inst_groups && bc->cf_last->prev_bs_head) { > r = merge_inst_groups(bc, slots, > bc->cf_last->prev_bs_head); > if (r) > return r; > diff --git a/src/gallium/drivers/r600/r600_asm.h > b/src/gallium/drivers/r600/r600_asm.h > index 5790ead..86d44d3 100644 > --- a/src/gallium/drivers/r600/r600_asm.h > +++ b/src/gallium/drivers/r600/r600_asm.h > @@ -205,6 +205,16 @@ struct r600_bytecode { > unsigned ar_reg; > unsigned ar_handling; > unsigned r6xx_nop_after_rel_dst; > + > + /* Setting this bit will prevent the r600 assembler from trying to > + * merge instruction groups. This is necessary for compute shaders, > + * because the CF_ALLOC_EXPORT_WORD0_RAT instructions expects the index > + * values to be in the X, Y, and Z channels depending on the > + * dimension of the surface. The merge_inst_groups function will move > + * these values around to the wrong channels and the RAT read or write > + * will fail. > + */
vadimg has pointed out on IRC that this comment is wrong, and the merge_inst_groups function won't rewrite the destination channels. I think this patch might still be useful, so I'll just drop this comment from the final version. -Tom > + unsigned no_merge_inst_groups; > }; > > /* eg_asm.c */ > -- > 1.7.7.6 > > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev