From 5ea73dbed93585e16e0f3af0b9a079d6e12cefaf Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Tue, 1 Jun 2021 19:32:43 -0400 Subject: [PATCH] pan/indirect: Factor out is_power_of_two_or_zero The function is complicated enough as it is -- hide the bit twiddling behind a helper function. Signed-off-by: Alyssa Rosenzweig Reviewed-by: Boris Brezillon Part-of: --- src/panfrost/lib/pan_indirect_draw.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/panfrost/lib/pan_indirect_draw.c b/src/panfrost/lib/pan_indirect_draw.c index af840d47ff0..b3728225b8b 100644 --- a/src/panfrost/lib/pan_indirect_draw.c +++ b/src/panfrost/lib/pan_indirect_draw.c @@ -558,6 +558,14 @@ adjust_attrib_offset(struct indirect_draw_shader_builder *builder, } ENDIF } +/* x is power of two or zero <===> x has 0 (zero) or 1 (POT) bits set */ + +static nir_ssa_def * +nir_is_power_of_two_or_zero(nir_builder *b, nir_ssa_def *x) +{ + return nir_ilt(b, nir_bit_count(b, x), nir_imm_int(b, 2)); +} + /* Based on panfrost_emit_vertex_data() */ static void @@ -636,10 +644,7 @@ update_vertex_attribs(struct indirect_draw_shader_builder *builder) IF (nir_ine(b, div, nir_imm_int(b, 0))) { IF (multi_instance) { - nir_ssa_def *div_pow2 = - nir_ilt(b, nir_bit_count(b, div), nir_imm_int(b, 2)); - - IF (div_pow2) { + IF (nir_is_power_of_two_or_zero(b, div)) { nir_ssa_def *exp = nir_imax(b, nir_ufind_msb(b, div), nir_imm_int(b, 0));