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

Iago Toral itoral at igalia.com
Fri Oct 27 06:35:57 UTC 2017


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(...) ?

>           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));


More information about the mesa-dev mailing list