A few inline asserts in anv assume alignments are power of 2, but with formats like R8G8B8 we have odd alignments.
v2: round up to power of 2 (Ilia) Signed-off-by: Lionel Landwerlin <lionel.g.landwer...@intel.com> Cc: Ilia Mirkin <imir...@alum.mit.edu> Cc: Jason Ekstrand <ja...@jlekstrand.net> --- src/intel/isl/isl.c | 1 + src/intel/isl/isl_priv.h | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/src/intel/isl/isl.c b/src/intel/isl/isl.c index 18e95e2..ae7b9af 100644 --- a/src/intel/isl/isl.c +++ b/src/intel/isl/isl.c @@ -1182,6 +1182,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 3a7af1a..19b5176 100644 --- a/src/intel/isl/isl_priv.h +++ b/src/intel/isl/isl_priv.h @@ -99,6 +99,16 @@ isl_log2u(uint32_t n) } static inline uint32_t +isl_round_up_to_power_of_two(uint32_t value) +{ + uint32_t r = 1 << isl_log2u(value); + + if ((~r & value) != 0) + return r << 1; + return r; +} + +static inline uint32_t isl_minify(uint32_t n, uint32_t levels) { if (unlikely(n == 0)) -- 2.9.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev