[PATCH i-g-t 23/37] lib/igt_fb: Fix planar block copy

Ville Syrjala ville.syrjala at linux.intel.com
Tue Jul 2 23:28:03 UTC 2024


From: Ville Syrjälä <ville.syrjala at linux.intel.com>

The block copy code tries to handle planar formats by blitting
each color plane separately. But it incorrectly picks some of
the parameters (size, bpp, etc.) from the first color plane
instead of the one it's actually copying. Pick the parameters
from the correct color plane.

Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
---
 lib/igt_fb.c | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/lib/igt_fb.c b/lib/igt_fb.c
index c0b157ee44fa..64be4bffdea8 100644
--- a/lib/igt_fb.c
+++ b/lib/igt_fb.c
@@ -2802,7 +2802,8 @@ static struct blt_copy_object *allocate_and_initialize_blt(const struct igt_fb *
 		       igt_fb_is_ccs_modifier(fb->modifier) ? COMPRESSION_ENABLED : COMPRESSION_DISABLED,
 		       igt_fb_is_gen12_mc_ccs_modifier(fb->modifier) ? COMPRESSION_TYPE_MEDIA : COMPRESSION_TYPE_3D);
 
-	blt_set_geom(blt, stride, 0, 0, fb->width, fb->plane_height[plane], 0, 0);
+	blt_set_geom(blt, stride, 0, 0,
+		     fb->plane_width[plane], fb->plane_height[plane], 0, 0);
 	blt->plane_offset = fb->offsets[plane];
 
 	return blt;
@@ -2848,9 +2849,10 @@ static struct blt_copy_object *blt_fb_init(const struct igt_fb *fb,
 	return blt;
 }
 
-static enum blt_color_depth blt_get_bpp(const struct igt_fb *fb)
+static enum blt_color_depth blt_get_bpp(const struct igt_fb *fb,
+					int color_plane)
 {
-	switch (fb->plane_bpp[0]) {
+	switch (fb->plane_bpp[color_plane]) {
 	case 8:
 		return CD_8bit;
 	case 16:
@@ -2995,19 +2997,19 @@ static void do_block_copy(const struct igt_fb *src_fb,
 	igt_assert(src && dst);
 
 	blt_copy_init(src_fb->fd, &blt);
-	blt.color_depth = blt_get_bpp(src_fb);
+	blt.color_depth = blt_get_bpp(src_fb, i);
 	blt_set_copy_object(&blt.src, src);
 	blt_set_copy_object(&blt.dst, dst);
 
 	if (blt_uses_extended_block_copy(src_fb->fd)) {
 		blt_set_object_ext(&ext.src,
 				   blt_compression_format(&blt, src_fb),
-				   src_fb->width, src_fb->height,
+				   src_fb->plane_width[i], src_fb->plane_height[i],
 				   SURFACE_TYPE_2D);
 
 		blt_set_object_ext(&ext.dst,
 				   blt_compression_format(&blt, dst_fb),
-				   dst_fb->width, dst_fb->height,
+				   dst_fb->plane_width[i], dst_fb->plane_height[i],
 				   SURFACE_TYPE_2D);
 		pext = &ext;
 	}
-- 
2.44.2



More information about the igt-dev mailing list