[Mesa-dev] [PATCH 03/15] i965: add component packing support for load_output intrinsics

Alejandro Piñeiro apinheiro at igalia.com
Wed Jul 20 15:59:21 UTC 2016


I miss a little explanation on the commit message (like on commit 8),
but that is just personal preference (and in general I personally tend
to be too verbose on the commit messages).

Either if you add a little explanation or not:

Reviewed-by: Alejandro Piñeiro <apinheiro at igalia.com>


On 19/07/16 08:33, Timothy Arceri wrote:
> ---
>  src/mesa/drivers/dri/i965/brw_fs_nir.cpp | 38 +++++++++++++++++++++++++++-----
>  1 file changed, 33 insertions(+), 5 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
> index 395594f..e75e7f7 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
> @@ -2481,6 +2481,7 @@ fs_visitor::nir_emit_tcs_intrinsic(const fs_builder &bld,
>     case nir_intrinsic_load_per_vertex_output: {
>        fs_reg indirect_offset = get_indirect_offset(instr);
>        unsigned imm_offset = instr->const_index[0];
> +      unsigned first_component = nir_intrinsic_component(instr);
>  
>        fs_inst *inst;
>        if (indirect_offset.file == BAD_FILE) {
> @@ -2561,10 +2562,24 @@ fs_visitor::nir_emit_tcs_intrinsic(const fs_builder &bld,
>              }
>              bld.LOAD_PAYLOAD(dst, srcs, num_components, 0);
>           } else {
> -            inst = bld.emit(SHADER_OPCODE_URB_READ_SIMD8, dst, patch_handle);
> +            if (first_component != 0) {
> +               unsigned read_components =
> +                  instr->num_components + first_component;
> +               fs_reg tmp = bld.vgrf(dst.type, read_components);
> +               inst = bld.emit(SHADER_OPCODE_URB_READ_SIMD8, tmp,
> +                               patch_handle);
> +               inst->regs_written = read_components;
> +               for (unsigned i = 0; i < instr->num_components; i++) {
> +                  bld.MOV(offset(dst, bld, i),
> +                          offset(tmp, bld, i + first_component));
> +               }
> +            } else {
> +               inst = bld.emit(SHADER_OPCODE_URB_READ_SIMD8, dst,
> +                               patch_handle);
> +               inst->regs_written = instr->num_components;
> +            }
>              inst->offset = imm_offset;
>              inst->mlen = 1;
> -            inst->regs_written = instr->num_components;
>           }
>        } else {
>           /* Indirect indexing - use per-slot offsets as well. */
> @@ -2574,11 +2589,24 @@ fs_visitor::nir_emit_tcs_intrinsic(const fs_builder &bld,
>           };
>           fs_reg payload = bld.vgrf(BRW_REGISTER_TYPE_UD, 2);
>           bld.LOAD_PAYLOAD(payload, srcs, ARRAY_SIZE(srcs), 0);
> -
> -         inst = bld.emit(SHADER_OPCODE_URB_READ_SIMD8_PER_SLOT, dst, payload);
> +         if (first_component != 0) {
> +            unsigned read_components =
> +               instr->num_components + first_component;
> +            fs_reg tmp = bld.vgrf(dst.type, read_components);
> +            inst = bld.emit(SHADER_OPCODE_URB_READ_SIMD8_PER_SLOT, tmp,
> +                            payload);
> +            inst->regs_written = read_components;
> +            for (unsigned i = 0; i < instr->num_components; i++) {
> +               bld.MOV(offset(dst, bld, i),
> +                       offset(tmp, bld, i + first_component));
> +            }
> +         } else {
> +            inst = bld.emit(SHADER_OPCODE_URB_READ_SIMD8_PER_SLOT, dst,
> +                            payload);
> +            inst->regs_written = instr->num_components;
> +         }
>           inst->offset = imm_offset;
>           inst->mlen = 2;
> -         inst->regs_written = instr->num_components;
>        }
>        break;
>     }



More information about the mesa-dev mailing list