From: Ville Syrjala <ville.syrjala@linux.intel.com>
To: igt-dev@lists.freedesktop.org
Cc: Juha-Pekka Heikkila <juhapekka.heikkila@gmail.com>
Subject: [PATCH i-g-t v2 08/18] lib/igt_fb: Try to fix block copy media compression handling
Date: Wed, 18 Sep 2024 15:05:08 +0300 [thread overview]
Message-ID: <20240918120518.30258-9-ville.syrjala@linux.intel.com> (raw)
In-Reply-To: <20240918120518.30258-1-ville.syrjala@linux.intel.com>
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
The media compression format handling for the block
copy seems to be very broken.
Empirical findings from dg2:
- the compression format needs to be based on bspec's
render compression format list even when doing media
compression
- 0x8/B8G8G8A8 doesn't work correctly for XYUV8888 for
some reason, but using 0x18/R8 does seem to work
- YUYV/etc. packed formats don't work any which way
- planar formats can be handled as R8/R8G8/etc.
- RGB+media compression is a lost cause (black turns white
when you try it)
This is all based on very cursory testing, so no idea if any
of it is actually correct. Doesn't actually matter currently
as we take the enginecopy path for media compression always.
Reviewed-by: Juha-Pekka Heikkila <juhapekka.heikkila@gmail.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
lib/igt_fb.c | 30 ++++++++++++++++++------------
1 file changed, 18 insertions(+), 12 deletions(-)
diff --git a/lib/igt_fb.c b/lib/igt_fb.c
index e9cd575bf925..0a30148ef5df 100644
--- a/lib/igt_fb.c
+++ b/lib/igt_fb.c
@@ -2908,23 +2908,29 @@ static enum blt_color_depth blt_get_bpp(const struct igt_fb *fb,
const struct {
uint32_t format;
+ int color_plane;
enum blt_compression_type type;
uint32_t return_value;
} compression_mappings[] = {
- { DRM_FORMAT_XRGB16161616F, COMPRESSION_TYPE_3D, 0x5 },
- { DRM_FORMAT_XRGB2101010, COMPRESSION_TYPE_3D, 0xc },
- { DRM_FORMAT_XRGB8888, COMPRESSION_TYPE_3D, 0x8 },
- { DRM_FORMAT_XRGB8888, COMPRESSION_TYPE_MEDIA, 8 },
- { DRM_FORMAT_XYUV8888, COMPRESSION_TYPE_MEDIA, 9 },
- { DRM_FORMAT_NV12, COMPRESSION_TYPE_MEDIA, 9 },
- { DRM_FORMAT_P010, COMPRESSION_TYPE_MEDIA, 8 },
+ { DRM_FORMAT_XRGB16161616F, 0, COMPRESSION_TYPE_3D, 0x5 }, /* R16G16B16A16_FLOAT */
+ { DRM_FORMAT_XRGB2101010, 0, COMPRESSION_TYPE_3D, 0xc }, /* B10G10R10A2_UNORM */
+ { DRM_FORMAT_XRGB8888, 0, COMPRESSION_TYPE_3D, 0x8 }, /* B8G8R8A8_UNORM */
+
+ /* FIXME why doesn't 0x8/B8G8R8A8_UNORM work here? */
+ { DRM_FORMAT_XYUV8888, 0, COMPRESSION_TYPE_MEDIA, 0x18 }, /* R8_UNORM */
+
+ { DRM_FORMAT_NV12, 0, COMPRESSION_TYPE_MEDIA, 0x18 }, /* R8_UNORM */
+ { DRM_FORMAT_NV12, 1, COMPRESSION_TYPE_MEDIA, 0xa }, /* R8G8_UNORM */
+ { DRM_FORMAT_P010, 0, COMPRESSION_TYPE_MEDIA, 0x14 }, /* R16_UNORM */
+ { DRM_FORMAT_P010, 1, COMPRESSION_TYPE_MEDIA, 0x6 }, /* R16G16_UNORM */
};
-static uint32_t get_compression_return_value(uint32_t format,
+static uint32_t get_compression_return_value(uint32_t format, int color_plane,
enum blt_compression_type type)
{
for (int i = 0; i < ARRAY_SIZE(compression_mappings); i++) {
if (compression_mappings[i].format == format &&
+ compression_mappings[i].color_plane == color_plane &&
compression_mappings[i].type == type) {
return compression_mappings[i].return_value;
}
@@ -2934,13 +2940,13 @@ static uint32_t get_compression_return_value(uint32_t format,
}
static uint32_t blt_compression_format(const struct blt_copy_object *obj,
- const struct igt_fb *fb)
+ const struct igt_fb *fb, int color_plane)
{
if (obj->compression == COMPRESSION_DISABLED)
return 0;
return get_compression_return_value(igt_reduce_format(fb->drm_format),
- obj->compression_type);
+ color_plane, obj->compression_type);
}
static void setup_context_and_memory_region(const struct igt_fb *fb, uint32_t *ctx,
@@ -3026,12 +3032,12 @@ static void do_block_copy(const struct igt_fb *src_fb,
if (blt_uses_extended_block_copy(src_fb->fd)) {
blt_set_object_ext(&ext.src,
- blt_compression_format(&blt.src, src_fb),
+ blt_compression_format(&blt.src, src_fb, i),
src_fb->plane_width[i], src_fb->plane_height[i],
SURFACE_TYPE_2D);
blt_set_object_ext(&ext.dst,
- blt_compression_format(&blt.dst, dst_fb),
+ blt_compression_format(&blt.dst, dst_fb, i),
dst_fb->plane_width[i], dst_fb->plane_height[i],
SURFACE_TYPE_2D);
pext = &ext;
--
2.44.2
next prev parent reply other threads:[~2024-09-18 12:05 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-18 12:05 [PATCH i-g-t v2 00/18] Intel CCS + 10bpc/fp16 stuff Ville Syrjala
2024-09-18 12:05 ` [PATCH i-g-t v2 01/18] lib/intel_aux_pgtable: Library to add support for RGB16161616_64B format Ville Syrjala
2024-09-23 9:51 ` Juha-Pekka Heikkila
2024-09-18 12:05 ` [PATCH i-g-t v2 02/18] lib/rendercopy: Add specific support for 2:10:10:10 formats Ville Syrjala
2024-09-18 12:05 ` [PATCH i-g-t v2 03/18] lib/rendercopy: Use the proper compression format for 10bpc on dg2/lnl+ Ville Syrjala
2024-09-18 12:05 ` [PATCH i-g-t v2 04/18] lib/rendercopy: Use the proper compression format for 16bpc " Ville Syrjala
2024-09-18 12:05 ` [PATCH i-g-t v2 05/18] lib/rendercopy: Skip AUX surface setup in TGL+ Ville Syrjala
2024-09-23 9:51 ` Juha-Pekka Heikkila
2024-09-23 20:04 ` Ville Syrjälä
2024-09-18 12:05 ` [PATCH i-g-t v2 06/18] lib/igt_fb: Add 10bpc compression format for the blitter Ville Syrjala
2024-09-18 12:05 ` [PATCH i-g-t v2 07/18] lib/igt_fb: Add 16bpc " Ville Syrjala
2024-09-18 12:05 ` Ville Syrjala [this message]
2024-09-18 12:05 ` [PATCH i-g-t v2 09/18] tests/kms_plane: Skip 10bpc formats with media compression Ville Syrjala
2024-09-18 12:05 ` [PATCH i-g-t v2 10/18] tests/kms_ccs: " Ville Syrjala
2024-09-23 9:52 ` Juha-Pekka Heikkila
2024-09-18 12:05 ` [PATCH i-g-t v2 11/18] lib/igt_fb: Treat 2:10:10:10 properly Ville Syrjala
2024-09-18 12:05 ` [PATCH i-g-t v2 12/18] lib/vebox: Add support for fp16 RGB formats Ville Syrjala
2024-09-18 12:05 ` [PATCH i-g-t v2 13/18] lib/vebox: Document that 2:10:10:10 is unusable with VEBOX Ville Syrjala
2024-09-23 9:54 ` Juha-Pekka Heikkila
2024-09-18 12:05 ` [PATCH i-g-t v2 14/18] tests/kms_ccs: Correctly check clear color for 10bpc formats Ville Syrjala
2024-09-18 12:05 ` [PATCH i-g-t v2 15/18] tests/kms_ccs: Correctly check clear color for fp16 formats Ville Syrjala
2024-09-23 11:00 ` Juha-Pekka Heikkila
2024-09-23 16:39 ` Juha-Pekka Heikkila
2024-09-18 12:05 ` [PATCH i-g-t v2 16/18] tests/kms_ccs: Fix planar blits for xe2 Ville Syrjala
2024-09-23 16:53 ` Juha-Pekka Heikkila
2024-09-18 12:05 ` [PATCH i-g-t v2 17/18] tests/kms_ccs: Try to fix the xe2 blitter compression format Ville Syrjala
2024-09-23 17:28 ` Juha-Pekka Heikkila
2024-09-18 12:05 ` [PATCH i-g-t v2 18/18] lib/intel_aux_pgtable: Pick a more optimal aux format for 10bpc Ville Syrjala
2024-09-23 17:30 ` Juha-Pekka Heikkila
2024-09-18 13:59 ` ✓ Fi.CI.BAT: success for Intel CCS + 10bpc/fp16 stuff (rev4) Patchwork
2024-09-18 14:40 ` ✓ CI.xeBAT: " Patchwork
2024-09-18 20:53 ` ✗ CI.xeFULL: failure " Patchwork
2024-09-19 4:08 ` ✗ Fi.CI.IGT: " Patchwork
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240918120518.30258-9-ville.syrjala@linux.intel.com \
--to=ville.syrjala@linux.intel.com \
--cc=igt-dev@lists.freedesktop.org \
--cc=juhapekka.heikkila@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox