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:
@@ -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);
|
||||||
|
@@ -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);
|
||||||
|
@@ -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);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user