On Mon, 4 Jun 2012 14:15:10 -0700, Kenneth Graunke <kenn...@whitecape.org> wrote: > Commit f41ecade7b458c02d504158b522acb2231585040 fixed texelFetchOffset() > on Ivybridge, but didn't update the Ironlake/Sandybridge code. > > +15 piglits on Sandybridge. > > NOTE: This and f41ecade7b458 are both candidates for stable branches. > > Signed-off-by: Kenneth Graunke <kenn...@whitecape.org> > --- > src/mesa/drivers/dri/i965/brw_fs_visitor.cpp | 45 > +++++++++++++++++++------- > 1 file changed, 33 insertions(+), 12 deletions(-) > > diff --git a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp > b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp > index 275a1f4..8d124a0 100644 > --- a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp > +++ b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp > @@ -884,20 +884,41 @@ fs_visitor::emit_texture_gen5(ir_texture *ir, fs_reg > dst, fs_reg coordinate, > const int vector_elements = > ir->coordinate ? ir->coordinate->type->vector_elements : 0; > > - if (ir->offset) { > - /* The offsets set up by the ir_texture visitor are in the > - * m1 header, so we can't go headerless. > + if (ir->offset != NULL && ir->op == ir_txf) { > + /* It appears that the ld instruction used for txf does its > + * address bounds check before adding in the offset. To work > + * around this, just add the integer offset to the integer texel > + * coordinate, and don't put the offset in the header. > */ > - header_present = true; > - mlen++; > - base_mrf--; > - } > + int offsets[3]; > + ir_constant *offset = ir->offset->as_constant(); > + offsets[0] = offset->value.i[0]; > + offsets[1] = offset->value.i[1]; > + offsets[2] = offset->value.i[2];
No need for this temporary array (unlike in the fs where it was shared with a non-offset path). Other than that, Reviewed-by: Eric Anholt <e...@anholt.net>
pgp2P0DAYKMFW.pgp
Description: PGP signature
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev