[PATCH i-g-t 3/4] lib/intel_blt: Change surface size calculation
Zbigniew Kempczyński
zbigniew.kempczynski at intel.com
Wed Jan 31 10:51:47 UTC 2024
For tiled surfaces we need to ensure stride and height are valid
from the blit operation perspective. Calculate required surface
size according to tiling constraints.
Signed-off-by: Zbigniew Kempczyński <zbigniew.kempczynski at intel.com>
Cc: Karolina Drobnik <karolina.drobnik at intel.com>
---
lib/intel_blt.c | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/lib/intel_blt.c b/lib/intel_blt.c
index 77017f4432..b2286934ce 100644
--- a/lib/intel_blt.c
+++ b/lib/intel_blt.c
@@ -1846,13 +1846,21 @@ blt_create_object(const struct blt_copy_data *blt, uint32_t region,
bool create_mapping)
{
struct blt_copy_object *obj;
- uint64_t size = width * height * bpp / 8;
- uint32_t stride = tiling == T_LINEAR ? width * 4 : width;
+ uint32_t stride, aligned_height;
+ uint64_t size;
uint32_t handle;
uint8_t pat_index = DEFAULT_PAT_INDEX;
igt_assert_f(blt->driver, "Driver isn't set, have you called blt_copy_init()?\n");
+ stride = blt_get_min_stride(width, bpp, tiling);
+ aligned_height = blt_get_aligned_height(height, tiling);
+ size = stride * aligned_height;
+
+ /* blitter command expects stride in dwords on tiled surfaces */
+ if (tiling)
+ stride /= 4;
+
obj = calloc(1, sizeof(*obj));
obj->size = size;
--
2.34.1
More information about the igt-dev
mailing list