diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h index b5207f4f3bb..1d1b69dc08f 100644 --- a/src/compiler/nir/nir.h +++ b/src/compiler/nir/nir.h @@ -4954,10 +4954,6 @@ void nir_gather_types(nir_function_impl *impl, BITSET_WORD *float_types, BITSET_WORD *int_types); -void nir_assign_var_locations(nir_shader *shader, nir_variable_mode mode, - unsigned *size, - int (*type_size)(const struct glsl_type *, bool)); - /* Some helpers to do very simple linking */ bool nir_remove_unused_varyings(nir_shader *producer, nir_shader *consumer); bool nir_remove_unused_io_vars(nir_shader *shader, nir_variable_mode mode, diff --git a/src/compiler/nir/nir_lower_io.c b/src/compiler/nir/nir_lower_io.c index 1ee38706db5..21aaf5aa7ce 100644 --- a/src/compiler/nir/nir_lower_io.c +++ b/src/compiler/nir/nir_lower_io.c @@ -115,24 +115,6 @@ task_payload_atomic_for_deref(nir_intrinsic_op deref_op) } } -void -nir_assign_var_locations(nir_shader *shader, nir_variable_mode mode, - unsigned *size, - int (*type_size)(const struct glsl_type *, bool)) -{ - unsigned location = 0; - - nir_foreach_variable_with_modes(var, shader, mode) { - var->data.driver_location = location; - bool bindless_type_size = var->data.mode == nir_var_shader_in || - var->data.mode == nir_var_shader_out || - var->data.bindless; - location += type_size(var->type, bindless_type_size); - } - - *size = location; -} - /** * Some inputs and outputs are arrayed, meaning that there is an extra level * of array indexing to handle mismatches between the shader interface and the diff --git a/src/gallium/drivers/freedreno/ir3/ir3_cmdline.c b/src/gallium/drivers/freedreno/ir3/ir3_cmdline.c index 69a94b38288..ed71806e5f7 100644 --- a/src/gallium/drivers/freedreno/ir3/ir3_cmdline.c +++ b/src/gallium/drivers/freedreno/ir3/ir3_cmdline.c @@ -84,6 +84,24 @@ fixup_varying_slots(nir_shader *nir, nir_variable_mode mode) } } +static void +assign_var_locations(nir_shader *shader, nir_variable_mode mode, + unsigned *size, + int (*type_size)(const struct glsl_type *, bool)) +{ + unsigned location = 0; + + nir_foreach_variable_with_modes(var, shader, mode) { + var->data.driver_location = location; + bool bindless_type_size = var->data.mode == nir_var_shader_in || + var->data.mode == nir_var_shader_out || + var->data.bindless; + location += type_size(var->type, bindless_type_size); + } + + *size = location; +} + static struct ir3_compiler *compiler; static nir_shader * @@ -131,23 +149,23 @@ load_glsl(unsigned num_files, char *const *files, gl_shader_stage stage) switch (stage) { case MESA_SHADER_VERTEX: - nir_assign_var_locations(nir, nir_var_shader_in, &nir->num_inputs, + assign_var_locations(nir, nir_var_shader_in, &nir->num_inputs, ir3_glsl_type_size); /* Re-lower global vars, to deal with any dead VS inputs. */ NIR_PASS_V(nir, nir_lower_global_vars_to_local); sort_varyings(nir, nir_var_shader_out); - nir_assign_var_locations(nir, nir_var_shader_out, &nir->num_outputs, + assign_var_locations(nir, nir_var_shader_out, &nir->num_outputs, ir3_glsl_type_size); fixup_varying_slots(nir, nir_var_shader_out); break; case MESA_SHADER_FRAGMENT: sort_varyings(nir, nir_var_shader_in); - nir_assign_var_locations(nir, nir_var_shader_in, &nir->num_inputs, + assign_var_locations(nir, nir_var_shader_in, &nir->num_inputs, ir3_glsl_type_size); fixup_varying_slots(nir, nir_var_shader_in); - nir_assign_var_locations(nir, nir_var_shader_out, &nir->num_outputs, + assign_var_locations(nir, nir_var_shader_out, &nir->num_outputs, ir3_glsl_type_size); break; case MESA_SHADER_COMPUTE: @@ -157,7 +175,7 @@ load_glsl(unsigned num_files, char *const *files, gl_shader_stage stage) errx(1, "unhandled shader stage: %d", stage); } - nir_assign_var_locations(nir, nir_var_uniform, &nir->num_uniforms, + assign_var_locations(nir, nir_var_uniform, &nir->num_uniforms, ir3_glsl_type_size); NIR_PASS_V(nir, nir_lower_system_values);