[PATCH i-g-t v5 2/5] lib/intel_blt: Change surface size calculation
Zbigniew Kempczyński
zbigniew.kempczynski at intel.com
Thu Feb 1 20:03:09 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>
Reviewed-by: Karolina Stolarek <karolina.stolarek 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 755e708f15..315ae86922 100644
--- a/lib/intel_blt.c
+++ b/lib/intel_blt.c
@@ -1859,13 +1859,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, bpp, 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