nir: Take a mode in remove_unused_io_vars

Reviewed-by: Jose Maria Casanova Crespo <jmcasanova@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5966>
This commit is contained in:
Jason Ekstrand 2020-05-20 10:09:05 -05:00 committed by Marge Bot
parent fd91744bd4
commit 5746af4446
3 changed files with 12 additions and 8 deletions

View File

@ -809,7 +809,7 @@ v3d_nir_lower_vs_early(struct v3d_compile *c)
used_outputs[comp] |= 1ull << slot; used_outputs[comp] |= 1ull << slot;
} }
NIR_PASS_V(c->s, nir_remove_unused_io_vars, NIR_PASS_V(c->s, nir_remove_unused_io_vars,
&c->s->outputs, used_outputs, NULL); /* demotes to globals */ nir_var_shader_out, used_outputs, NULL); /* demotes to globals */
NIR_PASS_V(c->s, nir_lower_global_vars_to_local); NIR_PASS_V(c->s, nir_lower_global_vars_to_local);
v3d_optimize_nir(c->s); v3d_optimize_nir(c->s);
NIR_PASS_V(c->s, nir_remove_dead_variables, nir_var_shader_in, NULL); NIR_PASS_V(c->s, nir_remove_dead_variables, nir_var_shader_in, NULL);
@ -840,7 +840,7 @@ v3d_nir_lower_gs_early(struct v3d_compile *c)
used_outputs[comp] |= 1ull << slot; used_outputs[comp] |= 1ull << slot;
} }
NIR_PASS_V(c->s, nir_remove_unused_io_vars, NIR_PASS_V(c->s, nir_remove_unused_io_vars,
&c->s->outputs, used_outputs, NULL); /* demotes to globals */ nir_var_shader_out, used_outputs, NULL); /* demotes to globals */
NIR_PASS_V(c->s, nir_lower_global_vars_to_local); NIR_PASS_V(c->s, nir_lower_global_vars_to_local);
v3d_optimize_nir(c->s); v3d_optimize_nir(c->s);
NIR_PASS_V(c->s, nir_remove_dead_variables, nir_var_shader_in, NULL); NIR_PASS_V(c->s, nir_remove_dead_variables, nir_var_shader_in, NULL);

View File

@ -3941,7 +3941,7 @@ void nir_assign_var_locations(struct exec_list *var_list, unsigned *size,
/* Some helpers to do very simple linking */ /* Some helpers to do very simple linking */
bool nir_remove_unused_varyings(nir_shader *producer, nir_shader *consumer); bool nir_remove_unused_varyings(nir_shader *producer, nir_shader *consumer);
bool nir_remove_unused_io_vars(nir_shader *shader, struct exec_list *var_list, bool nir_remove_unused_io_vars(nir_shader *shader, nir_variable_mode mode,
uint64_t *used_by_other_stage, uint64_t *used_by_other_stage,
uint64_t *used_by_other_stage_patches); uint64_t *used_by_other_stage_patches);
void nir_compact_varyings(nir_shader *producer, nir_shader *consumer, void nir_compact_varyings(nir_shader *producer, nir_shader *consumer,

View File

@ -109,8 +109,7 @@ tcs_add_output_reads(nir_shader *shader, uint64_t *read, uint64_t *patches_read)
* *
* Example usage is: * Example usage is:
* *
* progress = nir_remove_unused_io_vars(producer, * progress = nir_remove_unused_io_vars(producer, nir_var_shader_out,
* &producer->outputs,
* read, patches_read) || * read, patches_read) ||
* progress; * progress;
* *
@ -120,13 +119,18 @@ tcs_add_output_reads(nir_shader *shader, uint64_t *read, uint64_t *patches_read)
* variable is used! * variable is used!
*/ */
bool bool
nir_remove_unused_io_vars(nir_shader *shader, struct exec_list *var_list, nir_remove_unused_io_vars(nir_shader *shader,
nir_variable_mode mode,
uint64_t *used_by_other_stage, uint64_t *used_by_other_stage,
uint64_t *used_by_other_stage_patches) uint64_t *used_by_other_stage_patches)
{ {
bool progress = false; bool progress = false;
uint64_t *used; uint64_t *used;
assert(mode == nir_var_shader_in || mode == nir_var_shader_out);
struct exec_list *var_list =
mode == nir_var_shader_in ? &shader->inputs : &shader->outputs;
nir_foreach_variable_safe(var, var_list) { nir_foreach_variable_safe(var, var_list) {
if (var->data.patch) if (var->data.patch)
used = used_by_other_stage_patches; used = used_by_other_stage_patches;
@ -203,10 +207,10 @@ nir_remove_unused_varyings(nir_shader *producer, nir_shader *consumer)
tcs_add_output_reads(producer, read, patches_read); tcs_add_output_reads(producer, read, patches_read);
bool progress = false; bool progress = false;
progress = nir_remove_unused_io_vars(producer, &producer->outputs, read, progress = nir_remove_unused_io_vars(producer, nir_var_shader_out, read,
patches_read); patches_read);
progress = nir_remove_unused_io_vars(consumer, &consumer->inputs, written, progress = nir_remove_unused_io_vars(consumer, nir_var_shader_in, written,
patches_written) || progress; patches_written) || progress;
return progress; return progress;