[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