[Mesa-dev] [PATCH 08/11] i965/vec4_nir: Use partial SSA form rather than full non-SSA
Eduardo Lima Mitev
elima at igalia.com
Fri Sep 11 03:25:38 PDT 2015
On 09/10/2015 02:50 AM, Jason Ekstrand wrote:
> We made this switch in the FS backend some time ago and it seems to make a
> number of things a bit easier.
>
The commit log could be a bit less abstract, like mentioning why this
change helps the subsequent passes. In any case, if it was only for
consistency with FS, this change is beneficial.
I also tested it with full dEQP GLES3 suite, apart from piglit, on HWS.
No regressions.
Reviewed-by: Eduardo Lima Mitev <elima at igalia.com>
> ---
> src/mesa/drivers/dri/i965/brw_nir.c | 2 +-
> src/mesa/drivers/dri/i965/brw_vec4.h | 1 +
> src/mesa/drivers/dri/i965/brw_vec4_nir.cpp | 21 ++++++++++++++++++---
> 3 files changed, 20 insertions(+), 4 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_nir.c b/src/mesa/drivers/dri/i965/brw_nir.c
> index 8f3edc5..f326b23 100644
> --- a/src/mesa/drivers/dri/i965/brw_nir.c
> +++ b/src/mesa/drivers/dri/i965/brw_nir.c
> @@ -183,7 +183,7 @@ brw_create_nir(struct brw_context *brw,
> nir_print_shader(nir, stderr);
> }
>
> - nir_convert_from_ssa(nir, is_scalar);
> + nir_convert_from_ssa(nir, true);
> nir_validate_shader(nir);
>
> if (!is_scalar) {
> diff --git a/src/mesa/drivers/dri/i965/brw_vec4.h b/src/mesa/drivers/dri/i965/brw_vec4.h
> index 01c6e84..de74ec9 100644
> --- a/src/mesa/drivers/dri/i965/brw_vec4.h
> +++ b/src/mesa/drivers/dri/i965/brw_vec4.h
> @@ -423,6 +423,7 @@ public:
> virtual void nir_emit_alu(nir_alu_instr *instr);
> virtual void nir_emit_jump(nir_jump_instr *instr);
> virtual void nir_emit_texture(nir_tex_instr *instr);
> + virtual void nir_emit_undef(nir_ssa_undef_instr *instr);
>
> dst_reg get_nir_dest(nir_dest dest, enum brw_reg_type type);
> dst_reg get_nir_dest(nir_dest dest, nir_alu_type type);
> diff --git a/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp b/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp
> index 751ec73..87a7941 100644
> --- a/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp
> @@ -367,6 +367,10 @@ vec4_visitor::nir_emit_instr(nir_instr *instr)
> nir_emit_texture(nir_instr_as_tex(instr));
> break;
>
> + case nir_instr_type_ssa_undef:
> + nir_emit_undef(nir_instr_as_ssa_undef(instr));
> + break;
> +
> default:
> fprintf(stderr, "VS instruction not yet implemented by NIR->vec4\n");
> break;
> @@ -393,9 +397,14 @@ dst_reg_for_nir_reg(vec4_visitor *v, nir_register *nir_reg,
> dst_reg
> vec4_visitor::get_nir_dest(nir_dest dest)
> {
> - assert(!dest.is_ssa);
> - return dst_reg_for_nir_reg(this, dest.reg.reg, dest.reg.base_offset,
> - dest.reg.indirect);
> + if (dest.is_ssa) {
> + dst_reg dst = dst_reg(GRF, alloc.allocate(1));
> + nir_ssa_values[dest.ssa.index] = dst;
> + return dst;
> + } else {
> + return dst_reg_for_nir_reg(this, dest.reg.reg, dest.reg.base_offset,
> + dest.reg.indirect);
> + }
> }
>
> dst_reg
> @@ -1528,4 +1537,10 @@ vec4_visitor::nir_emit_texture(nir_tex_instr *instr)
> mcs, is_cube_array, sampler, sampler_reg);
> }
>
> +void
> +vec4_visitor::nir_emit_undef(nir_ssa_undef_instr *instr)
> +{
> + nir_ssa_values[instr->def.index] = dst_reg(GRF, alloc.allocate(1));
> +}
> +
> }
>
More information about the mesa-dev
mailing list