summaryrefslogtreecommitdiffstats
path: root/src/intel/isl
diff options
context:
space:
mode:
Diffstat (limited to 'src/intel/isl')
-rw-r--r--src/intel/isl/isl.c1
-rw-r--r--src/intel/isl/isl_priv.h9
2 files changed, 10 insertions, 0 deletions
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
@@ -99,6 +99,15 @@ isl_log2u(uint32_t 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)
{
if (unlikely(n == 0))