We can just get the swizzle from the instruction. --- src/compiler/nir/nir_search.c | 3 +-- src/compiler/nir/nir_search.h | 3 +-- src/compiler/nir/nir_search_helpers.h | 22 ++++++++++------------ 3 files changed, 12 insertions(+), 16 deletions(-)
diff --git a/src/compiler/nir/nir_search.c b/src/compiler/nir/nir_search.c index 7a84b18..cc17642 100644 --- a/src/compiler/nir/nir_search.c +++ b/src/compiler/nir/nir_search.c @@ -155,8 +155,7 @@ match_value(const nir_search_value *value, nir_alu_instr *instr, unsigned src, instr->src[src].src.ssa->parent_instr->type != nir_instr_type_load_const) return false; - if (var->cond && !var->cond(instr, src, num_components, - instr->src[src].swizzle)) + if (var->cond && !var->cond(instr, src, num_components)) return false; if (var->type != nir_type_invalid && diff --git a/src/compiler/nir/nir_search.h b/src/compiler/nir/nir_search.h index dec19d5..357509a 100644 --- a/src/compiler/nir/nir_search.h +++ b/src/compiler/nir/nir_search.h @@ -76,8 +76,7 @@ typedef struct { * variables to require, for example, power-of-two in order for the search * to match. */ - bool (*cond)(nir_alu_instr *instr, unsigned src, - unsigned num_components, const uint8_t *swizzle); + bool (*cond)(nir_alu_instr *instr, unsigned src, unsigned num_components); } nir_search_variable; typedef struct { diff --git a/src/compiler/nir/nir_search_helpers.h b/src/compiler/nir/nir_search_helpers.h index 20fdae6..59b7a0a 100644 --- a/src/compiler/nir/nir_search_helpers.h +++ b/src/compiler/nir/nir_search_helpers.h @@ -36,8 +36,7 @@ __is_power_of_two(unsigned int x) } static inline bool -is_pos_power_of_two(nir_alu_instr *instr, unsigned src, unsigned num_components, - const uint8_t *swizzle) +is_pos_power_of_two(nir_alu_instr *instr, unsigned src, unsigned num_components) { nir_const_value *val = nir_src_as_const_value(instr->src[src].src); @@ -48,13 +47,13 @@ is_pos_power_of_two(nir_alu_instr *instr, unsigned src, unsigned num_components, for (unsigned i = 0; i < num_components; i++) { switch (nir_op_infos[instr->op].input_types[src]) { case nir_type_int: - if (val->i32[swizzle[i]] < 0) + if (val->i32[instr->src[src].swizzle[i]] < 0) return false; - if (!__is_power_of_two(val->i32[swizzle[i]])) + if (!__is_power_of_two(val->i32[instr->src[src].swizzle[i]])) return false; break; case nir_type_uint: - if (!__is_power_of_two(val->u32[swizzle[i]])) + if (!__is_power_of_two(val->u32[instr->src[src].swizzle[i]])) return false; break; default: @@ -66,8 +65,7 @@ is_pos_power_of_two(nir_alu_instr *instr, unsigned src, unsigned num_components, } static inline bool -is_neg_power_of_two(nir_alu_instr *instr, unsigned src, unsigned num_components, - const uint8_t *swizzle) +is_neg_power_of_two(nir_alu_instr *instr, unsigned src, unsigned num_components) { nir_const_value *val = nir_src_as_const_value(instr->src[src].src); @@ -78,9 +76,9 @@ is_neg_power_of_two(nir_alu_instr *instr, unsigned src, unsigned num_components, for (unsigned i = 0; i < num_components; i++) { switch (nir_op_infos[instr->op].input_types[src]) { case nir_type_int: - if (val->i32[swizzle[i]] > 0) + if (val->i32[instr->src[src].swizzle[i]] > 0) return false; - if (!__is_power_of_two(abs(val->i32[swizzle[i]]))) + if (!__is_power_of_two(abs(val->i32[instr->src[src].swizzle[i]]))) return false; break; default: @@ -92,8 +90,7 @@ is_neg_power_of_two(nir_alu_instr *instr, unsigned src, unsigned num_components, } static inline bool -is_zero_to_one(nir_alu_instr *instr, unsigned src, unsigned num_components, - const uint8_t *swizzle) +is_zero_to_one(nir_alu_instr *instr, unsigned src, unsigned num_components) { nir_const_value *val = nir_src_as_const_value(instr->src[src].src); @@ -103,7 +100,8 @@ is_zero_to_one(nir_alu_instr *instr, unsigned src, unsigned num_components, for (unsigned i = 0; i < num_components; i++) { switch (nir_op_infos[instr->op].input_types[src]) { case nir_type_float: - if (val->f32[swizzle[i]] < 0.0f || val->f32[swizzle[i]] > 1.0f) + if (val->f32[instr->src[src].swizzle[i]] < 0.0f || + val->f32[instr->src[src].swizzle[i]] > 1.0f) return false; break; default: -- 2.9.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev