From: Jason Ekstrand Date: Wed, 18 Mar 2015 22:04:15 +0000 (-0700) Subject: nir/lower_io: Make variable location assignment a manual operation X-Git-Tag: upstream/17.1.0~19963 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=25db44a84597960a6aea6b252bcf2c3d7e17fc74;p=platform%2Fupstream%2Fmesa.git 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 --- diff --git a/src/glsl/nir/nir.h b/src/glsl/nir/nir.h index 6b42df9..a2a03b2 100644 --- a/src/glsl/nir/nir.h +++ b/src/glsl/nir/nir.h @@ -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_assign_var_locations_scalar(struct exec_list *var_list, + unsigned *size); + void nir_lower_io(nir_shader *shader); void nir_lower_vars_to_ssa(nir_shader *shader); diff --git a/src/glsl/nir/nir_lower_io.c b/src/glsl/nir/nir_lower_io.c index 37c357e..602b8c9 100644 --- a/src/glsl/nir/nir_lower_io.c +++ b/src/glsl/nir/nir_lower_io.c @@ -76,8 +76,8 @@ type_size(const struct glsl_type *type) return 0; } -static void -assign_var_locations(struct exec_list *var_list, unsigned *size) +void +nir_assign_var_locations_scalar(struct exec_list *var_list, unsigned *size) { unsigned location = 0; @@ -96,14 +96,6 @@ assign_var_locations(struct exec_list *var_list, unsigned *size) *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 deref_has_indirect(nir_deref_var *deref) { @@ -304,8 +296,6 @@ nir_lower_io_impl(nir_function_impl *impl) void nir_lower_io(nir_shader *shader) { - assign_var_locations_shader(shader); - nir_foreach_overload(shader, overload) { if (overload->impl) nir_lower_io_impl(overload->impl); diff --git a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp index 9431e5d..8ef57af 100644 --- a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp @@ -105,6 +105,10 @@ fs_visitor::emit_nir_code() /* Get rid of split copies */ 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_validate_shader(nir);