nir/lower_io: Make variable location assignment a manual operation

Previously, we just assigned variable locations in nir_lower_io.  Now, we
force the user to assign variable locations for us.  This gives the backend
a bit more control over where variables are placed.

v2: Rename from _packed to _scalar

Reviewed-by: Connor Abbott <cwabbott0@gmail.com>
This commit is contained in:
Jason Ekstrand
2015-03-18 15:04:15 -07:00
parent 639115123e
commit 25db44a845
3 changed files with 9 additions and 12 deletions

View File

@@ -1577,6 +1577,9 @@ void nir_lower_global_vars_to_local(nir_shader *shader);
void nir_lower_locals_to_regs(nir_shader *shader); void nir_lower_locals_to_regs(nir_shader *shader);
void nir_assign_var_locations_scalar(struct exec_list *var_list,
unsigned *size);
void nir_lower_io(nir_shader *shader); void nir_lower_io(nir_shader *shader);
void nir_lower_vars_to_ssa(nir_shader *shader); void nir_lower_vars_to_ssa(nir_shader *shader);

View File

@@ -76,8 +76,8 @@ type_size(const struct glsl_type *type)
return 0; return 0;
} }
static void void
assign_var_locations(struct exec_list *var_list, unsigned *size) nir_assign_var_locations_scalar(struct exec_list *var_list, unsigned *size)
{ {
unsigned location = 0; unsigned location = 0;
@@ -96,14 +96,6 @@ assign_var_locations(struct exec_list *var_list, unsigned *size)
*size = location; *size = location;
} }
static void
assign_var_locations_shader(nir_shader *shader)
{
assign_var_locations(&shader->inputs, &shader->num_inputs);
assign_var_locations(&shader->outputs, &shader->num_outputs);
assign_var_locations(&shader->uniforms, &shader->num_uniforms);
}
static bool static bool
deref_has_indirect(nir_deref_var *deref) deref_has_indirect(nir_deref_var *deref)
{ {
@@ -304,8 +296,6 @@ nir_lower_io_impl(nir_function_impl *impl)
void void
nir_lower_io(nir_shader *shader) nir_lower_io(nir_shader *shader)
{ {
assign_var_locations_shader(shader);
nir_foreach_overload(shader, overload) { nir_foreach_overload(shader, overload) {
if (overload->impl) if (overload->impl)
nir_lower_io_impl(overload->impl); nir_lower_io_impl(overload->impl);

View File

@@ -105,6 +105,10 @@ fs_visitor::emit_nir_code()
/* Get rid of split copies */ /* Get rid of split copies */
nir_optimize(nir); nir_optimize(nir);
nir_assign_var_locations_scalar(&nir->uniforms, &nir->num_uniforms);
nir_assign_var_locations_scalar(&nir->inputs, &nir->num_inputs);
nir_assign_var_locations_scalar(&nir->outputs, &nir->num_outputs);
nir_lower_io(nir); nir_lower_io(nir);
nir_validate_shader(nir); nir_validate_shader(nir);