diff options
author | Timothy Arceri <[email protected]> | 2017-11-15 14:30:22 +1100 |
---|---|---|
committer | Timothy Arceri <[email protected]> | 2017-12-04 12:52:18 +1100 |
commit | d99c7e0ff17208f82f254ef331e60a4005f4f6fa (patch) | |
tree | 92bf92e07718bcec9999201504b6aeaa8bfdbb89 /src/compiler/nir | |
parent | 2bc49ac3e6a6c8f93a2f32d62555bd653faf8d3e (diff) |
nir: allow builin arrays to be lowered
Galliums nir drivers expect this to be done.
Reviewed-by: Nicolai Hähnle <[email protected]>
Reviewed-by: Marek Olšák <[email protected]>
Diffstat (limited to 'src/compiler/nir')
-rw-r--r-- | src/compiler/nir/nir_lower_io_arrays_to_elements.c | 17 |
1 files changed, 10 insertions, 7 deletions
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 c785e22b0ea..dca5719f114 100644 --- a/src/compiler/nir/nir_lower_io_arrays_to_elements.c +++ b/src/compiler/nir/nir_lower_io_arrays_to_elements.c @@ -264,7 +264,8 @@ create_indirects_mask(nir_shader *shader, uint64_t *indirects, static void lower_io_arrays_to_elements(nir_shader *shader, nir_variable_mode mask, uint64_t *indirects, uint64_t *patch_indirects, - struct hash_table *varyings) + struct hash_table *varyings, + bool after_cross_stage_opts) { nir_foreach_function(function, shader) { if (function->impl) { @@ -313,14 +314,16 @@ lower_io_arrays_to_elements(nir_shader *shader, nir_variable_mode mask, glsl_type_is_struct(glsl_without_array(type))) continue; - if (var->data.location < VARYING_SLOT_VAR0 && + /* Skip builtins */ + if (!after_cross_stage_opts && + var->data.location < VARYING_SLOT_VAR0 && var->data.location >= 0) continue; /* Don't bother splitting if we can't opt away any unused * elements. */ - if (var->data.always_active_io) + if (!after_cross_stage_opts && var->data.always_active_io) continue; switch (intr->intrinsic) { @@ -355,10 +358,10 @@ nir_lower_io_arrays_to_elements_no_indirects(nir_shader *shader) uint64_t indirects[4] = {0}, patch_indirects[4] = {0}; lower_io_arrays_to_elements(shader, nir_var_shader_out, indirects, - patch_indirects, split_outputs); + patch_indirects, split_outputs, true); lower_io_arrays_to_elements(shader, nir_var_shader_in, indirects, - patch_indirects, split_inputs); + patch_indirects, split_inputs, true); /* Remove old input from the shaders inputs list */ struct hash_entry *entry; @@ -398,10 +401,10 @@ nir_lower_io_arrays_to_elements(nir_shader *producer, nir_shader *consumer) nir_var_shader_in); lower_io_arrays_to_elements(producer, nir_var_shader_out, indirects, - patch_indirects, split_outputs); + patch_indirects, split_outputs, false); lower_io_arrays_to_elements(consumer, nir_var_shader_in, indirects, - patch_indirects, split_inputs); + patch_indirects, split_inputs, false); /* Remove old input from the shaders inputs list */ struct hash_entry *entry; |