From 17c81989521731af25a633622a0ded437538ab00 Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Tue, 18 Sep 2018 10:34:11 -0700 Subject: [PATCH] v3d: Use nir_lower_io_to_scalar_early to DCE unused VS input components. This lets us trim unused trailing components in the vertex attributes, reducing the size of our VPM allocations. --- src/broadcom/compiler/vir.c | 16 ++++++++++++++++ src/gallium/drivers/v3d/v3d_program.c | 5 ++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/broadcom/compiler/vir.c b/src/broadcom/compiler/vir.c index 6b55b0e03bc..faad6541151 100644 --- a/src/broadcom/compiler/vir.c +++ b/src/broadcom/compiler/vir.c @@ -585,6 +585,12 @@ vir_compile_init(const struct v3d_compiler *compiler, return c; } +static int +type_size_vec4(const struct glsl_type *type) +{ + return glsl_count_attribute_slots(type, false); +} + static void v3d_lower_nir(struct v3d_compile *c) { @@ -713,6 +719,16 @@ uint64_t *v3d_compile_vs(const struct v3d_compiler *compiler, c->vs_key = key; + /* Split our input vars and dead code eliminate the unused + * components. + */ + NIR_PASS_V(c->s, nir_lower_io_to_scalar_early, nir_var_shader_in); + v3d_optimize_nir(c->s); + NIR_PASS_V(c->s, nir_remove_dead_variables, nir_var_shader_in); + NIR_PASS_V(c->s, nir_lower_io, nir_var_shader_in, + type_size_vec4, + (nir_lower_io_options)0); + v3d_lower_nir(c); if (key->clamp_color) diff --git a/src/gallium/drivers/v3d/v3d_program.c b/src/gallium/drivers/v3d/v3d_program.c index 1d4b0bb2080..17ded7571c4 100644 --- a/src/gallium/drivers/v3d/v3d_program.c +++ b/src/gallium/drivers/v3d/v3d_program.c @@ -210,7 +210,10 @@ v3d_shader_state_create(struct pipe_context *pctx, so->was_tgsi = true; } - NIR_PASS_V(s, nir_lower_io, nir_var_all & ~nir_var_uniform, + nir_variable_mode lower_mode = nir_var_all & ~nir_var_uniform; + if (s->info.stage == MESA_SHADER_VERTEX) + lower_mode &= ~nir_var_shader_in; + NIR_PASS_V(s, nir_lower_io, lower_mode, type_size, (nir_lower_io_options)0); -- 2.30.2