[Mesa-dev] [PATCH 12/15] i965/vec4: add support for packing tes inputs

Alejandro Piñeiro apinheiro at igalia.com
Wed Jul 20 16:04:09 UTC 2016


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


On 19/07/16 08:33, Timothy Arceri wrote:
> ---
>  src/mesa/drivers/dri/i965/brw_vec4_tes.cpp | 14 ++++++++++----
>  1 file changed, 10 insertions(+), 4 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_vec4_tes.cpp b/src/mesa/drivers/dri/i965/brw_vec4_tes.cpp
> index 6639c86..8266a9d 100644
> --- a/src/mesa/drivers/dri/i965/brw_vec4_tes.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_vec4_tes.cpp
> @@ -177,7 +177,9 @@ vec4_tes_visitor::nir_emit_intrinsic(nir_intrinsic_instr *instr)
>     case nir_intrinsic_load_input:
>     case nir_intrinsic_load_per_vertex_input: {
>        src_reg indirect_offset = get_indirect_offset(instr);
> +      dst_reg dst = get_nir_dest(instr->dest, BRW_REGISTER_TYPE_D);
>        unsigned imm_offset = instr->const_index[0];
> +      unsigned fist_component = nir_intrinsic_component(instr);
>        src_reg header = input_read_header;
>  
>        if (indirect_offset.file != BAD_FILE) {
> @@ -190,8 +192,10 @@ vec4_tes_visitor::nir_emit_intrinsic(nir_intrinsic_instr *instr)
>            */
>           const unsigned max_push_slots = 24;
>           if (imm_offset < max_push_slots) {
> -            emit(MOV(get_nir_dest(instr->dest, BRW_REGISTER_TYPE_D),
> -                     src_reg(ATTR, imm_offset, glsl_type::ivec4_type)));
> +            src_reg src = src_reg(ATTR, imm_offset, glsl_type::ivec4_type);
> +            src.swizzle = BRW_SWZ_COMP_INPUT(fist_component);
> +
> +            emit(MOV(dst, src));
>              prog_data->urb_read_length =
>                 MAX2(prog_data->urb_read_length,
>                      DIV_ROUND_UP(imm_offset + 1, 2));
> @@ -205,12 +209,14 @@ vec4_tes_visitor::nir_emit_intrinsic(nir_intrinsic_instr *instr)
>        read->offset = imm_offset;
>        read->urb_write_flags = BRW_URB_WRITE_PER_SLOT_OFFSET;
>  
> +      src_reg src = src_reg(temp);
> +      src.swizzle = BRW_SWZ_COMP_INPUT(fist_component);
> +
>        /* Copy to target.  We might end up with some funky writemasks landing
>         * in here, but we really don't want them in the above pseudo-ops.
>         */
> -      dst_reg dst = get_nir_dest(instr->dest, BRW_REGISTER_TYPE_D);
>        dst.writemask = brw_writemask_for_size(instr->num_components);
> -      emit(MOV(dst, src_reg(temp)));
> +      emit(MOV(dst, src));
>        break;
>     }
>     default:



More information about the mesa-dev mailing list