freedreno/ir3_cmdline: Rework i/o variable fixup

Reviewed-by: Rob Clark <robdclark@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5966>
This commit is contained in:
Jason Ekstrand
2020-07-20 15:53:59 -05:00
committed by Marge Bot
parent ce6e59b3d3
commit e4d812db10

View File

@@ -77,11 +77,11 @@ insert_sorted(struct exec_list *var_list, nir_variable *new_var)
} }
static void static void
sort_varyings(struct exec_list *var_list) sort_varyings(nir_shader *nir, nir_variable_mode mode)
{ {
struct exec_list new_list; struct exec_list new_list;
exec_list_make_empty(&new_list); exec_list_make_empty(&new_list);
nir_foreach_variable_safe(var, var_list) { nir_foreach_variable_with_modes_safe(var, nir, mode) {
exec_node_remove(&var->node); exec_node_remove(&var->node);
insert_sorted(&new_list, var); insert_sorted(&new_list, var);
} }
@@ -89,9 +89,9 @@ sort_varyings(struct exec_list *var_list)
} }
static void static void
fixup_varying_slots(struct exec_list *var_list) fixup_varying_slots(nir_shader *nir, nir_variable_mode mode)
{ {
nir_foreach_variable(var, var_list) { nir_foreach_variable_with_modes(var, nir, mode) {
if (var->data.location >= VARYING_SLOT_VAR0) { if (var->data.location >= VARYING_SLOT_VAR0) {
var->data.location += 9; var->data.location += 9;
} else if ((var->data.location >= VARYING_SLOT_TEX0) && } else if ((var->data.location >= VARYING_SLOT_TEX0) &&
@@ -154,18 +154,18 @@ load_glsl(unsigned num_files, char* const* files, gl_shader_stage stage)
/* Re-lower global vars, to deal with any dead VS inputs. */ /* Re-lower global vars, to deal with any dead VS inputs. */
NIR_PASS_V(nir, nir_lower_global_vars_to_local); NIR_PASS_V(nir, nir_lower_global_vars_to_local);
sort_varyings(&nir->outputs); sort_varyings(nir, nir_var_shader_out);
nir_assign_var_locations(nir, nir_var_shader_out, nir_assign_var_locations(nir, nir_var_shader_out,
&nir->num_outputs, &nir->num_outputs,
ir3_glsl_type_size); ir3_glsl_type_size);
fixup_varying_slots(&nir->outputs); fixup_varying_slots(nir, nir_var_shader_out);
break; break;
case MESA_SHADER_FRAGMENT: case MESA_SHADER_FRAGMENT:
sort_varyings(&nir->inputs); sort_varyings(nir, nir_var_shader_in);
nir_assign_var_locations(nir, nir_var_shader_in, nir_assign_var_locations(nir, nir_var_shader_in,
&nir->num_inputs, &nir->num_inputs,
ir3_glsl_type_size); ir3_glsl_type_size);
fixup_varying_slots(&nir->inputs); fixup_varying_slots(nir, nir_var_shader_in);
nir_assign_var_locations(nir, nir_var_shader_out, nir_assign_var_locations(nir, nir_var_shader_out,
&nir->num_outputs, &nir->num_outputs,
ir3_glsl_type_size); ir3_glsl_type_size);