nir: Add nir_op_vec helper

with that we can simplify code where nir vectors are created

v2: merge both lines in nir_vec

Signed-off-by: Karol Herbst <kherbst@redhat.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
This commit is contained in:
Karol Herbst
2019-03-20 18:11:20 +01:00
parent 681fb7ea05
commit d11b807da5
3 changed files with 14 additions and 22 deletions

View File

@@ -862,6 +862,18 @@ nir_get_nir_type_for_glsl_type(const struct glsl_type *type)
nir_op nir_type_conversion_op(nir_alu_type src, nir_alu_type dst,
nir_rounding_mode rnd);
static inline nir_op
nir_op_vec(unsigned components)
{
switch (components) {
case 1: return nir_op_imov;
case 2: return nir_op_vec2;
case 3: return nir_op_vec3;
case 4: return nir_op_vec4;
default: unreachable("bad component count");
}
}
typedef enum {
NIR_OP_IS_COMMUTATIVE = (1 << 0),
NIR_OP_IS_ASSOCIATIVE = (1 << 1),

View File

@@ -489,19 +489,7 @@ nir_build_alu_src_arr(nir_builder *build, nir_op op, nir_ssa_def **srcs)
static inline nir_ssa_def *
nir_vec(nir_builder *build, nir_ssa_def **comp, unsigned num_components)
{
switch (num_components) {
case 4:
return nir_vec4(build, comp[0], comp[1], comp[2], comp[3]);
case 3:
return nir_vec3(build, comp[0], comp[1], comp[2]);
case 2:
return nir_vec2(build, comp[0], comp[1]);
case 1:
return comp[0];
default:
unreachable("bad component count");
return NULL;
}
return nir_build_alu_src_arr(build, nir_op_vec(num_components), comp);
}
/**

View File

@@ -2984,15 +2984,7 @@ vtn_handle_atomics(struct vtn_builder *b, SpvOp opcode,
static nir_alu_instr *
create_vec(struct vtn_builder *b, unsigned num_components, unsigned bit_size)
{
nir_op op;
switch (num_components) {
case 1: op = nir_op_imov; break;
case 2: op = nir_op_vec2; break;
case 3: op = nir_op_vec3; break;
case 4: op = nir_op_vec4; break;
default: vtn_fail("bad vector size: %u", num_components);
}
nir_op op = nir_op_vec(num_components);
nir_alu_instr *vec = nir_alu_instr_create(b->shader, op);
nir_ssa_dest_init(&vec->instr, &vec->dest.dest, num_components,
bit_size, NULL);