[Mesa-dev] [PATCH v3 18/48] i965/fs/nir: Minor refactor of store_output

Jason Ekstrand jason at jlekstrand.net
Fri Oct 27 19:20:15 UTC 2017


On Thu, Oct 26, 2017 at 11:35 PM, Iago Toral <itoral at igalia.com> wrote:

> On Wed, 2017-10-25 at 16:25 -0700, Jason Ekstrand wrote:
> > Stop retyping the output of shuffle_64bit_data_for_32bit_write.  It's
> > always BRW_REGISTER_TYPE_D which is perfectly fine for writing out.
> > Also, when we change get_nir_src to return something with a 64-bit
> > type
> > for 64-bit values, the retyping will not be at all what we
> > want.  Also,
> > retyping the output based on src.type before we whack it back to 32
> > bits
> > is a problem because the output is always 32 bits.
> > ---
> >  src/intel/compiler/brw_fs_nir.cpp | 6 +++---
> >  1 file changed, 3 insertions(+), 3 deletions(-)
> >
> > diff --git a/src/intel/compiler/brw_fs_nir.cpp
> > b/src/intel/compiler/brw_fs_nir.cpp
> > index 5bcdb1a..e008e2e 100644
> > --- a/src/intel/compiler/brw_fs_nir.cpp
> > +++ b/src/intel/compiler/brw_fs_nir.cpp
> > @@ -4058,18 +4058,18 @@ fs_visitor::nir_emit_intrinsic(const
> > fs_builder &bld, nir_intrinsic_instr *instr
> >
> >        nir_const_value *const_offset = nir_src_as_const_value(instr-
> > >src[1]);
> >        assert(const_offset && "Indirect output stores not allowed");
> > -      fs_reg new_dest = retype(offset(outputs[instr-
> > >const_index[0]], bld,
> > -                                      4 * const_offset->u32[0]),
> > src.type);
> >
> >        unsigned num_components = instr->num_components;
> >        unsigned first_component = nir_intrinsic_component(instr);
> >        if (nir_src_bit_size(instr->src[0]) == 64) {
> >           fs_reg tmp = shuffle_64bit_data_for_32bit_write(bld,
> >              retype(src, BRW_REGISTER_TYPE_DF), num_components);
> > -         src = retype(tmp, src.type);
> > +         src = tmp;
>
> Maybe just make this:
>
> src = suffle_64bit_data_for_32bit_write(...) ?
>

Fixed locally.


> >           num_components *= 2;
> >        }
> >
> > +      fs_reg new_dest = retype(offset(outputs[instr-
> > >const_index[0]], bld,
> > +                                      4 * const_offset->u32[0]),
> > src.type);
> >        for (unsigned j = 0; j < num_components; j++) {
> >           bld.MOV(offset(new_dest, bld, j + first_component),
> >                   offset(src, bld, j));
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20171027/731b8cf4/attachment.html>


More information about the mesa-dev mailing list