[Mesa-dev] [PATCH 4/7] i965/nir: Remove unused indirect handling
Jason Ekstrand
jason at jlekstrand.net
Mon Nov 23 22:21:25 PST 2015
On Nov 23, 2015 20:51, "Matt Turner" <mattst88 at gmail.com> wrote:
>
> On Mon, Nov 23, 2015 at 6:11 PM, Jason Ekstrand <jason at jlekstrand.net>
wrote:
> > The one and only place where the FS backend allows reladdr is on
uniforms.
> > For locals, inputs, and outputs, we lower it away before the backend
ever
> > sees it. This commit gets rid of the dead indirect handling code.
> > ---
> > src/mesa/drivers/dri/i965/brw_fs_nir.cpp | 44
++++++++------------------------
> > 1 file changed, 11 insertions(+), 33 deletions(-)
> >
> > diff --git a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
> > index 062ae08..39111ba 100644
> > --- a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
> > +++ b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
> > @@ -1076,28 +1076,6 @@ fs_visitor::nir_emit_undef(const fs_builder
&bld, nir_ssa_undef_instr *instr)
> >
instr->def.num_components);
> > }
> >
> > -static fs_reg
> > -fs_reg_for_nir_reg(fs_visitor *v, nir_register *nir_reg,
> > - unsigned base_offset, nir_src *indirect)
> > -{
> > - fs_reg reg;
> > -
> > - assert(!nir_reg->is_global);
> > -
> > - reg = v->nir_locals[nir_reg->index];
> > -
> > - reg = offset(reg, v->bld, base_offset * nir_reg->num_components);
> > - if (indirect) {
> > - int multiplier = nir_reg->num_components * (v->dispatch_width /
8);
> > -
> > - reg.reladdr = new(v->mem_ctx)
fs_reg(v->vgrf(glsl_type::int_type));
> > - v->bld.MUL(*reg.reladdr, v->get_nir_src(*indirect),
> > - brw_imm_d(multiplier));
> > - }
> > -
> > - return reg;
> > -}
> > -
> > fs_reg
> > fs_visitor::get_nir_src(nir_src src)
> > {
> > @@ -1105,8 +1083,10 @@ fs_visitor::get_nir_src(nir_src src)
> > if (src.is_ssa) {
> > reg = nir_ssa_values[src.ssa->index];
> > } else {
> > - reg = fs_reg_for_nir_reg(this, src.reg.reg, src.reg.base_offset,
> > - src.reg.indirect);
> > + /* We don't handle indirects on locals */
> > + assert(src.reg.indirect == NULL);
> > + reg = offset(nir_locals[src.reg.reg->index], bld,
> > + src.reg.base_offset * src.reg.reg->num_components);
> > }
> >
> > /* to avoid floating-point denorm flushing problems, set the type by
> > @@ -1123,10 +1103,12 @@ fs_visitor::get_nir_dest(nir_dest dest)
> > nir_ssa_values[dest.ssa.index] = bld.vgrf(BRW_REGISTER_TYPE_F,
> >
dest.ssa.num_components);
> > return nir_ssa_values[dest.ssa.index];
> > + } else {
> > + /* We don't handle indirects on locals */
> > + assert(dest.reg.indirect == NULL);
> > + return offset(nir_locals[dest.reg.reg->index], bld,
> > + dest.reg.base_offset *
dest.reg.reg->num_components);
> > }
> > -
> > - return fs_reg_for_nir_reg(this, dest.reg.reg, dest.reg.base_offset,
> > - dest.reg.indirect);
> > }
> >
> > fs_reg
> > @@ -2422,7 +2404,7 @@ fs_visitor::nir_emit_intrinsic(const fs_builder
&bld, nir_intrinsic_instr *instr
> > }
> >
> > case nir_intrinsic_load_input_indirect:
> > - has_indirect = true;
> > + assert(!"Not allowed");
>
> unreachable
>
> > /* fallthrough */
> > case nir_intrinsic_load_input: {
> > unsigned index = 0;
> > @@ -2434,8 +2416,6 @@ fs_visitor::nir_emit_intrinsic(const fs_builder
&bld, nir_intrinsic_instr *instr
> > src = offset(retype(nir_inputs, dest.type), bld,
> > instr->const_index[0] + index);
> > }
> > - if (has_indirect)
> > - src.reladdr = new(mem_ctx)
fs_reg(get_nir_src(instr->src[0]));
> > index++;
> >
> > bld.MOV(dest, src);
> > @@ -2508,7 +2488,7 @@ fs_visitor::nir_emit_intrinsic(const fs_builder
&bld, nir_intrinsic_instr *instr
> > }
> >
> > case nir_intrinsic_store_output_indirect:
> > - has_indirect = true;
> > + assert(!"Not allowed");
>
> unreachable
Sure.
> > /* fallthrough */
> > case nir_intrinsic_store_output: {
> > fs_reg src = get_nir_src(instr->src[0]);
> > @@ -2516,8 +2496,6 @@ fs_visitor::nir_emit_intrinsic(const fs_builder
&bld, nir_intrinsic_instr *instr
> > for (unsigned j = 0; j < instr->num_components; j++) {
> > fs_reg new_dest = offset(retype(nir_outputs, src.type), bld,
> > instr->const_index[0] + index);
> > - if (has_indirect)
> > - src.reladdr = new(mem_ctx)
fs_reg(get_nir_src(instr->src[1]));
> > index++;
> > bld.MOV(new_dest, src);
> > src = offset(src, bld, 1);
> > --
> > 2.5.0.400.gff86faf
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20151123/1b968e06/attachment-0001.html>
More information about the mesa-dev
mailing list