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;
|
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
|
static bool
|
||||||
nir_lower_io_block(nir_block *block, void *void_state)
|
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]);
|
bool has_indirect = deref_has_indirect(intrin->variables[0]);
|
||||||
|
|
||||||
/* Figure out the opcode */
|
nir_intrinsic_instr *load =
|
||||||
nir_intrinsic_op load_op;
|
nir_intrinsic_instr_create(state->mem_ctx,
|
||||||
switch (mode) {
|
load_op(mode, has_indirect));
|
||||||
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);
|
|
||||||
load->num_components = intrin->num_components;
|
load->num_components = intrin->num_components;
|
||||||
|
|
||||||
nir_src indirect;
|
nir_src indirect;
|
||||||
|
Reference in New Issue
Block a user