[Mesa-dev] [PATCH 2/2] i965/nir: Use nir_system_value_from_intrinsic to reduce duplication.

Iago Toral itoral at igalia.com
Mon Sep 7 07:07:36 PDT 2015


Reviewed-by: Iago Toral Quiroga <itoral at igalia.com>

On Mon, 2015-09-07 at 00:30 -0700, Kenneth Graunke wrote:
> This code is all pretty much identical.  We just needed the translation
> from one enum value to the other.
> 
> Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
> ---
>  src/mesa/drivers/dri/i965/brw_fs_nir.cpp   | 47 +++++++-----------------------
>  src/mesa/drivers/dri/i965/brw_vec4_nir.cpp | 30 +++++--------------
>  2 files changed, 17 insertions(+), 60 deletions(-)
> 
> diff --git a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
> index 419ab6d..dbf10d6 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
> @@ -1408,35 +1408,16 @@ fs_visitor::nir_emit_intrinsic(const fs_builder &bld, nir_intrinsic_instr *instr
>     case nir_intrinsic_load_vertex_id:
>        unreachable("should be lowered by lower_vertex_id()");
>  
> -   case nir_intrinsic_load_vertex_id_zero_base: {
> -      fs_reg vertex_id = nir_system_values[SYSTEM_VALUE_VERTEX_ID_ZERO_BASE];
> -      assert(vertex_id.file != BAD_FILE);
> -      dest.type = vertex_id.type;
> -      bld.MOV(dest, vertex_id);
> -      break;
> -   }
> -
> -   case nir_intrinsic_load_base_vertex: {
> -      fs_reg base_vertex = nir_system_values[SYSTEM_VALUE_BASE_VERTEX];
> -      assert(base_vertex.file != BAD_FILE);
> -      dest.type = base_vertex.type;
> -      bld.MOV(dest, base_vertex);
> -      break;
> -   }
> -
> -   case nir_intrinsic_load_instance_id: {
> -      fs_reg instance_id = nir_system_values[SYSTEM_VALUE_INSTANCE_ID];
> -      assert(instance_id.file != BAD_FILE);
> -      dest.type = instance_id.type;
> -      bld.MOV(dest, instance_id);
> -      break;
> -   }
> -
> -   case nir_intrinsic_load_sample_mask_in: {
> -      fs_reg sample_mask_in = nir_system_values[SYSTEM_VALUE_SAMPLE_MASK_IN];
> -      assert(sample_mask_in.file != BAD_FILE);
> -      dest.type = sample_mask_in.type;
> -      bld.MOV(dest, sample_mask_in);
> +   case nir_intrinsic_load_vertex_id_zero_base:
> +   case nir_intrinsic_load_base_vertex:
> +   case nir_intrinsic_load_instance_id:
> +   case nir_intrinsic_load_sample_mask_in:
> +   case nir_intrinsic_load_sample_id: {
> +      gl_system_value sv = nir_system_value_from_intrinsic(instr->intrinsic);
> +      fs_reg val = nir_system_values[sv];
> +      assert(val.file != BAD_FILE);
> +      dest.type = val.type;
> +      bld.MOV(dest, val);
>        break;
>     }
>  
> @@ -1449,14 +1430,6 @@ fs_visitor::nir_emit_intrinsic(const fs_builder &bld, nir_intrinsic_instr *instr
>        break;
>     }
>  
> -   case nir_intrinsic_load_sample_id: {
> -      fs_reg sample_id = nir_system_values[SYSTEM_VALUE_SAMPLE_ID];
> -      assert(sample_id.file != BAD_FILE);
> -      dest.type = sample_id.type;
> -      bld.MOV(dest, sample_id);
> -      break;
> -   }
> -
>     case nir_intrinsic_load_uniform_indirect:
>        has_indirect = true;
>        /* fallthrough */
> diff --git a/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp b/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp
> index f3dc112..751ec73 100644
> --- a/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp
> @@ -533,30 +533,14 @@ vec4_visitor::nir_emit_intrinsic(nir_intrinsic_instr *instr)
>     case nir_intrinsic_load_vertex_id:
>        unreachable("should be lowered by lower_vertex_id()");
>  
> -   case nir_intrinsic_load_vertex_id_zero_base: {
> -      src_reg vertex_id =
> -         src_reg(nir_system_values[SYSTEM_VALUE_VERTEX_ID_ZERO_BASE]);
> -      assert(vertex_id.file != BAD_FILE);
> -      dest = get_nir_dest(instr->dest, vertex_id.type);
> -      emit(MOV(dest, vertex_id));
> -      break;
> -   }
> -
> -   case nir_intrinsic_load_base_vertex: {
> -      src_reg base_vertex =
> -         src_reg(nir_system_values[SYSTEM_VALUE_BASE_VERTEX]);
> -      assert(base_vertex.file != BAD_FILE);
> -      dest = get_nir_dest(instr->dest, base_vertex.type);
> -      emit(MOV(dest, base_vertex));
> -      break;
> -   }
> -
> +   case nir_intrinsic_load_vertex_id_zero_base:
> +   case nir_intrinsic_load_base_vertex:
>     case nir_intrinsic_load_instance_id: {
> -      src_reg instance_id =
> -         src_reg(nir_system_values[SYSTEM_VALUE_INSTANCE_ID]);
> -      assert(instance_id.file != BAD_FILE);
> -      dest = get_nir_dest(instr->dest, instance_id.type);
> -      emit(MOV(dest, instance_id));
> +      gl_system_value sv = nir_system_value_from_intrinsic(instr->intrinsic);
> +      src_reg val = src_reg(nir_system_values[sv]);
> +      assert(val.file != BAD_FILE);
> +      dest = get_nir_dest(instr->dest, val.type);
> +      emit(MOV(dest, val));
>        break;
>     }
>  




More information about the mesa-dev mailing list