nir: Pull nir_lower_io's load_op selection into a helper function.
Makes the function a bit smaller. Signed-off-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Jason Ekstrand <jason.ekstrand@intel.com>
This commit is contained in:
@@ -299,6 +299,25 @@ get_io_offset(nir_deref_var *deref, nir_instr *instr, nir_src *indirect,
|
||||
return base_offset;
|
||||
}
|
||||
|
||||
static nir_intrinsic_op
|
||||
load_op(nir_variable_mode mode, bool has_indirect)
|
||||
{
|
||||
nir_intrinsic_op op;
|
||||
switch (mode) {
|
||||
case nir_var_shader_in:
|
||||
op = has_indirect ? nir_intrinsic_load_input_indirect :
|
||||
nir_intrinsic_load_input;
|
||||
break;
|
||||
case nir_var_uniform:
|
||||
op = has_indirect ? nir_intrinsic_load_uniform_indirect :
|
||||
nir_intrinsic_load_uniform;
|
||||
break;
|
||||
default:
|
||||
unreachable("Unknown variable mode");
|
||||
}
|
||||
return op;
|
||||
}
|
||||
|
||||
static bool
|
||||
nir_lower_io_block(nir_block *block, void *void_state)
|
||||
{
|
||||
@@ -318,23 +337,9 @@ nir_lower_io_block(nir_block *block, void *void_state)
|
||||
|
||||
bool has_indirect = deref_has_indirect(intrin->variables[0]);
|
||||
|
||||
/* Figure out the opcode */
|
||||
nir_intrinsic_op load_op;
|
||||
switch (mode) {
|
||||
case nir_var_shader_in:
|
||||
load_op = has_indirect ? nir_intrinsic_load_input_indirect :
|
||||
nir_intrinsic_load_input;
|
||||
break;
|
||||
case nir_var_uniform:
|
||||
load_op = has_indirect ? nir_intrinsic_load_uniform_indirect :
|
||||
nir_intrinsic_load_uniform;
|
||||
break;
|
||||
default:
|
||||
unreachable("Unknown variable mode");
|
||||
}
|
||||
|
||||
nir_intrinsic_instr *load = nir_intrinsic_instr_create(state->mem_ctx,
|
||||
load_op);
|
||||
nir_intrinsic_instr *load =
|
||||
nir_intrinsic_instr_create(state->mem_ctx,
|
||||
load_op(mode, has_indirect));
|
||||
load->num_components = intrin->num_components;
|
||||
|
||||
nir_src indirect;
|
||||
|
Reference in New Issue
Block a user