From: Maxime Ripard <maxime@cerno.tech>
To: igt-dev@lists.freedesktop.org
Cc: Pekka Paalanen <ppaalanen@gmail.com>, Maxime Ripard <maxime@cerno.tech>
Subject: [igt-dev] [PATCH i-g-t 7/8] lib/igt_fb: Ignore the X component when computing CRC
Date: Tue, 8 Mar 2022 16:21:40 +0100 [thread overview]
Message-ID: <20220308152141.2457841-8-maxime@cerno.tech> (raw)
In-Reply-To: <20220308152141.2457841-1-maxime@cerno.tech>
The igt_fb_get_fnv1a_crc() function will compute a FNV-1a hash over the
content of the framebuffer. The sole user of this function is the
writeback test suite, which will use it to compare an XRGB8888 buffer
used in input to an XRGB8888 buffer filled by the writeback connector.
However, that function uses each bytes of each buffers to compute the
hash, and therefore the writeback code assumes that the hardware will
preserve the content of the X component through the writeback pipeline,
which isn't true for all hardware. VC4 doesn't for example.
Since that function is only ever used for XRGB8888 buffers, let's just
set the most significant to 0 (which is the X padding) for each pixel
when computing the hash, and thus ignore whatever the hardware will
return here.
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
---
lib/igt_fb.c | 20 ++++++++++++++++----
1 file changed, 16 insertions(+), 4 deletions(-)
diff --git a/lib/igt_fb.c b/lib/igt_fb.c
index 1530b96090b5..9720465d5b5f 100644
--- a/lib/igt_fb.c
+++ b/lib/igt_fb.c
@@ -4222,15 +4222,19 @@ int igt_fb_get_fnv1a_crc(struct igt_fb *fb, igt_crc_t *crc)
{
const uint32_t FNV1a_OFFSET_BIAS = 2166136261;
const uint32_t FNV1a_PRIME = 16777619;
+ uint32_t *line = NULL;
uint32_t hash;
void *map;
- char *ptr, *line = NULL;
+ char *ptr;
int x, y, cpp = igt_drm_format_to_bpp(fb->drm_format) / 8;
uint32_t stride = calc_plane_stride(fb, 0);
if (fb->num_planes != 1)
return -EINVAL;
+ if (fb->drm_format != DRM_FORMAT_XRGB8888)
+ return -EINVAL;
+
ptr = igt_fb_map_buffer(fb->fd, fb);
igt_assert(ptr);
map = ptr;
@@ -4252,9 +4256,17 @@ int igt_fb_get_fnv1a_crc(struct igt_fb *fb, igt_crc_t *crc)
igt_memcpy_from_wc(line, ptr, fb->width * cpp);
- for (x = 0; x < fb->width * cpp; x++) {
- hash ^= line[x];
- hash *= FNV1a_PRIME;
+ for (x = 0; x < fb->width; x++) {
+ unsigned int i;
+ uint32_t pixel = le32_to_cpu(line[x]);
+ pixel &= 0x00ffffff;
+
+ for (i = 0; i < sizeof(pixel); i++) {
+ uint8_t component = (pixel >> (i * 8)) & 0xff;
+
+ hash ^= component;
+ hash *= FNV1a_PRIME;
+ }
}
}
--
2.35.1
next prev parent reply other threads:[~2022-03-08 15:21 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-03-08 15:21 [igt-dev] [PATCH i-g-t 0/8] Writeback fixes and improvements Maxime Ripard
2022-03-08 15:21 ` [igt-dev] [PATCH i-g-t 1/8] lib/igt_frame: Rename summary fd variable Maxime Ripard
2022-03-08 15:21 ` [igt-dev] [PATCH i-g-t 2/8] lib/igt_frame: Move frame dump logging to function Maxime Ripard
2022-03-08 15:21 ` [igt-dev] [PATCH i-g-t 3/8] lib/igt_frame: Move frame path creation " Maxime Ripard
2022-03-08 15:21 ` [igt-dev] [PATCH i-g-t 4/8] lib/igt_frame: Add function to dump frames in RGB and raw Maxime Ripard
2022-03-08 15:21 ` [igt-dev] [PATCH i-g-t 5/8] tests/kms_writeback: Use endianness accessor to fill pixels Maxime Ripard
2022-03-08 15:21 ` [igt-dev] [PATCH i-g-t 6/8] tests/kms_writeback: Dump the frames if the don't match Maxime Ripard
2022-03-08 15:21 ` Maxime Ripard [this message]
2022-03-08 15:21 ` [igt-dev] [PATCH i-g-t 8/8] tests/kms_writeback: Use a garbage X value to create fill our test buffer Maxime Ripard
2022-03-08 21:36 ` [igt-dev] ✓ Fi.CI.BAT: success for Writeback fixes and improvements Patchwork
2022-03-09 4:07 ` [igt-dev] ✓ 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=20220308152141.2457841-8-maxime@cerno.tech \
--to=maxime@cerno.tech \
--cc=igt-dev@lists.freedesktop.org \
--cc=ppaalanen@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