summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJason Ekstrand <[email protected]>2015-03-18 15:04:15 -0700
committerJason Ekstrand <[email protected]>2015-03-19 13:18:39 -0700
commit25db44a84597960a6aea6b252bcf2c3d7e17fc74 (patch)
tree81f3bda89f306267ae3034a06f80eb09b15a4bfb /src
parent639115123efe7f71d432e24b1719adda7d23e97e (diff)
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 <[email protected]>
Diffstat (limited to 'src')
-rw-r--r--src/glsl/nir/nir.h3
-rw-r--r--src/glsl/nir/nir_lower_io.c14
-rw-r--r--src/mesa/drivers/dri/i965/brw_fs_nir.cpp4
3 files changed, 9 insertions, 12 deletions
diff --git a/src/glsl/nir/nir.h b/src/glsl/nir/nir.h
index 6b42df953da..a2a03b22707 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 37c357e893b..602b8c95b8e 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 9431e5dd74e..8ef57af2c48 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);