mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 07:28:11 +02:00
nir: move nir_assign_var_locations to freedreno (its only use)
Acked-by: Alyssa Rosenzweig <alyssa@rosenzweig.io> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/35760>
This commit is contained in:
parent
c8cda0dc1a
commit
5bd3e0c08c
3 changed files with 23 additions and 27 deletions
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue