diff --git a/src/intel/isl/isl.c b/src/intel/isl/isl.c index c4989dd7da9..0487515d1d6 100644 --- a/src/intel/isl/isl.c +++ b/src/intel/isl/isl.c @@ -1201,6 +1201,7 @@ isl_surf_init_s(const struct isl_device *dev, base_alignment = MAX(base_alignment, fmtl->bpb / 8); } } + base_alignment = isl_round_up_to_power_of_two(base_alignment); } else { assert(phys_slice0_sa.w % fmtl->bw == 0); const uint32_t total_w_el = phys_slice0_sa.width / fmtl->bw; diff --git a/src/intel/isl/isl_priv.h b/src/intel/isl/isl_priv.h index 3a7af1ae35f..9867e22a8ee 100644 --- a/src/intel/isl/isl_priv.h +++ b/src/intel/isl/isl_priv.h @@ -98,6 +98,15 @@ isl_log2u(uint32_t n) return 31 - __builtin_clz(n); } +static inline uint32_t +isl_round_up_to_power_of_two(uint32_t value) +{ + if (value <= 1) + return value; + + return 1 << (32 - __builtin_clz(value - 1)); +} + static inline uint32_t isl_minify(uint32_t n, uint32_t levels) {