From d11b807da52c0ca3fddb5eae8f99a4f5696b3282 Mon Sep 17 00:00:00 2001 From: Karol Herbst Date: Wed, 20 Mar 2019 18:11:20 +0100 Subject: [PATCH] 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 Reviewed-by: Jason Ekstrand --- src/compiler/nir/nir.h | 12 ++++++++++++ src/compiler/nir/nir_builder.h | 14 +------------- src/compiler/spirv/spirv_to_nir.c | 10 +--------- 3 files changed, 14 insertions(+), 22 deletions(-) diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h index ed21032..37161e8 100644 --- a/src/compiler/nir/nir.h +++ b/src/compiler/nir/nir.h @@ -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), diff --git a/src/compiler/nir/nir_builder.h b/src/compiler/nir/nir_builder.h index 5f6bb0b..ced009a 100644 --- a/src/compiler/nir/nir_builder.h +++ b/src/compiler/nir/nir_builder.h @@ -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); } /** diff --git a/src/compiler/spirv/spirv_to_nir.c b/src/compiler/spirv/spirv_to_nir.c index 7d2fafe..5e91f88 100644 --- a/src/compiler/spirv/spirv_to_nir.c +++ b/src/compiler/spirv/spirv_to_nir.c @@ -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); -- 2.7.4