diff options
Diffstat (limited to 'src/compiler')
-rw-r--r-- | src/compiler/nir/nir.h | 3 | ||||
-rw-r--r-- | src/compiler/nir/nir_lower_io_arrays_to_elements.c | 22 |
2 files changed, 15 insertions, 10 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); |