Jason, This can't work. We care about the existing value in header.3 (it's a pointer to the base of the sampler state table) -- you can't just clobber it.
- Chris On Fri, Jan 23, 2015 at 10:50 AM, Jason Ekstrand <ja...@jlekstrand.net> wrote: > Prior to this commit, the adjust_sampler_state_pointer function took an > extra register that it could use as scratch space. The usual candidate was > the destination of the sampler instruction. However, if that register ever > aliased anything important such as the sampler index, this would scratch > all over important data. Fortunately, the calculation is such that we can > just do it in place and we don't need the scratch space at all. > > Cc: Chris Forbes <chr...@ijw.co.nz> > --- > src/mesa/drivers/dri/i965/brw_eu.h | 3 +-- > src/mesa/drivers/dri/i965/brw_eu_emit.c | 5 ++--- > src/mesa/drivers/dri/i965/brw_fs_generator.cpp | 2 +- > src/mesa/drivers/dri/i965/brw_vec4_generator.cpp | 2 +- > 4 files changed, 5 insertions(+), 7 deletions(-) > > diff --git a/src/mesa/drivers/dri/i965/brw_eu.h > b/src/mesa/drivers/dri/i965/brw_eu.h > index 22d5a0a..a94ea42 100644 > --- a/src/mesa/drivers/dri/i965/brw_eu.h > +++ b/src/mesa/drivers/dri/i965/brw_eu.h > @@ -283,8 +283,7 @@ void brw_SAMPLE(struct brw_compile *p, > > void brw_adjust_sampler_state_pointer(struct brw_compile *p, > struct brw_reg header, > - struct brw_reg sampler_index, > - struct brw_reg scratch); > + struct brw_reg sampler_index); > > void gen4_math(struct brw_compile *p, > struct brw_reg dest, > diff --git a/src/mesa/drivers/dri/i965/brw_eu_emit.c > b/src/mesa/drivers/dri/i965/brw_eu_emit.c > index c26bed2..39b2022 100644 > --- a/src/mesa/drivers/dri/i965/brw_eu_emit.c > +++ b/src/mesa/drivers/dri/i965/brw_eu_emit.c > @@ -2383,8 +2383,7 @@ void brw_SAMPLE(struct brw_compile *p, > */ > void brw_adjust_sampler_state_pointer(struct brw_compile *p, > struct brw_reg header, > - struct brw_reg sampler_index, > - struct brw_reg scratch) > + struct brw_reg sampler_index) > { > /* The "Sampler Index" field can only store values between 0 and 15. > * However, we can add an offset to the "Sampler State Pointer" > @@ -2414,7 +2413,7 @@ void brw_adjust_sampler_state_pointer(struct > brw_compile *p, > return; > } > > - struct brw_reg temp = vec1(retype(scratch, BRW_REGISTER_TYPE_UD)); > + struct brw_reg temp = get_element_ud(header, 3); > > brw_AND(p, temp, get_element_ud(sampler_index, 0), brw_imm_ud(0x0f0)); > brw_SHL(p, temp, temp, brw_imm_ud(4)); > diff --git a/src/mesa/drivers/dri/i965/brw_fs_generator.cpp > b/src/mesa/drivers/dri/i965/brw_fs_generator.cpp > index d473739..4474902 100644 > --- a/src/mesa/drivers/dri/i965/brw_fs_generator.cpp > +++ b/src/mesa/drivers/dri/i965/brw_fs_generator.cpp > @@ -697,7 +697,7 @@ fs_generator::generate_tex(fs_inst *inst, struct brw_reg > dst, struct brw_reg src > brw_imm_ud(inst->offset)); > } > > - brw_adjust_sampler_state_pointer(p, header_reg, sampler_index, dst); > + brw_adjust_sampler_state_pointer(p, header_reg, sampler_index); > brw_pop_insn_state(p); > } > } > diff --git a/src/mesa/drivers/dri/i965/brw_vec4_generator.cpp > b/src/mesa/drivers/dri/i965/brw_vec4_generator.cpp > index fd37a05..cb9ad6f 100644 > --- a/src/mesa/drivers/dri/i965/brw_vec4_generator.cpp > +++ b/src/mesa/drivers/dri/i965/brw_vec4_generator.cpp > @@ -354,7 +354,7 @@ vec4_generator::generate_tex(vec4_instruction *inst, > if (dw2) > brw_MOV(p, get_element_ud(header, 2), brw_imm_ud(dw2)); > > - brw_adjust_sampler_state_pointer(p, header, sampler_index, dst); > + brw_adjust_sampler_state_pointer(p, header, sampler_index); > brw_pop_insn_state(p); > } > } > -- > 2.2.1 > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev