diff --git a/src/amd/common/nir/ac_nir_lower_mem_access_bit_sizes.c b/src/amd/common/nir/ac_nir_lower_mem_access_bit_sizes.c index 9363e2abe99..d4a9afaac0a 100644 --- a/src/amd/common/nir/ac_nir_lower_mem_access_bit_sizes.c +++ b/src/amd/common/nir/ac_nir_lower_mem_access_bit_sizes.c @@ -103,8 +103,10 @@ lower_mem_access_cb(nir_intrinsic_op intrin, uint8_t bytes, uint8_t bit_size, ui } res.num_components = DIV_ROUND_UP(bytes, 4); + res.num_components = nir_round_down_components(res.num_components); } else { res.num_components = DIV_ROUND_UP(bytes + max_pad, 4); + res.num_components = nir_round_up_components(res.num_components); } res.num_components = MIN2(res.num_components, max_components); res.bit_size = 32; diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h index 14997a099ec..1eb2d58ee22 100644 --- a/src/compiler/nir/nir.h +++ b/src/compiler/nir/nir.h @@ -126,6 +126,12 @@ nir_round_up_components(unsigned n) return (n > 5) ? util_next_power_of_two(n) : n; } +static inline unsigned +nir_round_down_components(unsigned n) +{ + return (n > 5) ? MAX2(1 << util_logbase2(n), 5) : n; +} + static inline nir_component_mask_t nir_component_mask(unsigned num_components) {