On Nov 23, 2015 20:51, "Matt Turner" <matts...@gmail.com> wrote: > > On Mon, Nov 23, 2015 at 6:11 PM, Jason Ekstrand <ja...@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
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev