[Mesa-dev] [PATCH] isl: round format alignment to nearest power of 2

Lionel Landwerlin llandwerlin at gmail.com
Wed Aug 24 09:37:30 UTC 2016


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.landwerlin at intel.com>
Cc: Ilia Mirkin <imirkin at alum.mit.edu>
Cc: Jason Ekstrand <jason at 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



More information about the mesa-dev mailing list