summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/compiler/nir/nir.h3
-rw-r--r--src/compiler/nir/nir_lower_io_arrays_to_elements.c22
-rw-r--r--src/mesa/state_tracker/st_glsl_to_nir.cpp2
3 files changed, 16 insertions, 11 deletions
diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h
index 4bb96c3c952..86d1c68fa72 100644
--- a/src/compiler/nir/nir.h
+++ b/src/compiler/nir/nir.h
@@ -2522,7 +2522,8 @@ bool nir_lower_load_const_to_scalar(nir_shader *shader);
bool nir_lower_read_invocation_to_scalar(nir_shader *shader);
bool nir_lower_phis_to_scalar(nir_shader *shader);
void nir_lower_io_arrays_to_elements(nir_shader *producer, nir_shader *consumer);
-void nir_lower_io_arrays_to_elements_no_indirects(nir_shader *shader);
+void nir_lower_io_arrays_to_elements_no_indirects(nir_shader *shader,
+ bool outputs_only);
void nir_lower_io_to_scalar(nir_shader *shader, nir_variable_mode mask);
void nir_lower_io_to_scalar_early(nir_shader *shader, nir_variable_mode mask);
diff --git a/src/compiler/nir/nir_lower_io_arrays_to_elements.c b/src/compiler/nir/nir_lower_io_arrays_to_elements.c
index cdf9a76a881..9a5eec8f870 100644
--- a/src/compiler/nir/nir_lower_io_arrays_to_elements.c
+++ b/src/compiler/nir/nir_lower_io_arrays_to_elements.c
@@ -346,7 +346,8 @@ lower_io_arrays_to_elements(nir_shader *shader, nir_variable_mode mask,
}
void
-nir_lower_io_arrays_to_elements_no_indirects(nir_shader *shader)
+nir_lower_io_arrays_to_elements_no_indirects(nir_shader *shader,
+ bool outputs_only)
{
struct hash_table *split_inputs =
_mesa_hash_table_create(NULL, _mesa_hash_pointer,
@@ -360,19 +361,22 @@ nir_lower_io_arrays_to_elements_no_indirects(nir_shader *shader)
lower_io_arrays_to_elements(shader, nir_var_shader_out, indirects,
patch_indirects, split_outputs, true);
- lower_io_arrays_to_elements(shader, nir_var_shader_in, indirects,
- patch_indirects, split_inputs, true);
+ if (!outputs_only) {
+ lower_io_arrays_to_elements(shader, nir_var_shader_in, indirects,
+ patch_indirects, split_inputs, true);
- /* Remove old input from the shaders inputs list */
- struct hash_entry *entry;
- hash_table_foreach(split_inputs, entry) {
- nir_variable *var = (nir_variable *) entry->key;
- exec_node_remove(&var->node);
+ /* Remove old input from the shaders inputs list */
+ struct hash_entry *entry;
+ hash_table_foreach(split_inputs, entry) {
+ nir_variable *var = (nir_variable *) entry->key;
+ exec_node_remove(&var->node);
- free(entry->data);
+ free(entry->data);
+ }
}
/* Remove old output from the shaders outputs list */
+ struct hash_entry *entry;
hash_table_foreach(split_outputs, entry) {
nir_variable *var = (nir_variable *) entry->key;
exec_node_remove(&var->node);
diff --git a/src/mesa/state_tracker/st_glsl_to_nir.cpp b/src/mesa/state_tracker/st_glsl_to_nir.cpp
index 6d3a7c78dcd..a3d447c5a41 100644
--- a/src/mesa/state_tracker/st_glsl_to_nir.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_nir.cpp
@@ -660,7 +660,7 @@ st_finalize_nir(struct st_context *st, struct gl_program *prog,
NIR_PASS_V(nir, nir_lower_var_copies);
if (nir->info.stage != MESA_SHADER_TESS_CTRL &&
nir->info.stage != MESA_SHADER_TESS_EVAL)
- NIR_PASS_V(nir, nir_lower_io_arrays_to_elements_no_indirects);
+ NIR_PASS_V(nir, nir_lower_io_arrays_to_elements_no_indirects, false);
if (nir->info.stage == MESA_SHADER_VERTEX) {
/* Needs special handling so drvloc matches the vbo state: */