From: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
To: igt-dev@lists.freedesktop.org
Cc: Petri Latvala <petri.latvala@intel.com>,
Eben Upton <eben@raspberrypi.org>,
Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Subject: [igt-dev] [PATCH i-g-t v3 11/21] lib/igt_vc4: Add helpers for converting linear to SAND-tiled buffers
Date: Fri, 11 Jan 2019 10:05:22 +0100 [thread overview]
Message-ID: <20190111090532.19235-12-paul.kocialkowski@bootlin.com> (raw)
In-Reply-To: <20190111090532.19235-1-paul.kocialkowski@bootlin.com>
In order to test buffers with SAND tiling, it is useful to convert
linear buffers to SAND tiling mode.
Introduce helpers to assist in that direction, one that calculates the
memory offset in the SAND-tiled buffer for a given pixel position and
one that makes use of the latter for framebuffer conversion.
Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
---
lib/igt_vc4.c | 111 ++++++++++++++++++++++++++++++++++++++++++++++++++
lib/igt_vc4.h | 5 +++
2 files changed, 116 insertions(+)
diff --git a/lib/igt_vc4.c b/lib/igt_vc4.c
index b4b9c2fc6914..3137c0ef85fa 100644
--- a/lib/igt_vc4.c
+++ b/lib/igt_vc4.c
@@ -307,3 +307,114 @@ size_t igt_vc4_t_tiled_offset(size_t stride, size_t height, size_t bpp,
return offset;
}
+
+static void vc4_fb_sand_tiled_convert_plane(struct igt_fb *dst, void *dst_buf,
+ struct igt_fb *src, void *src_buf,
+ size_t column_width_bytes,
+ size_t column_height,
+ unsigned int plane)
+{
+ size_t bpp = dst->plane_bpp[plane];
+ size_t column_width = column_width_bytes * dst->plane_width[plane] /
+ dst->width;
+ size_t column_size = column_width_bytes * column_height;
+ unsigned int i, j;
+
+ for (i = 0; i < dst->plane_height[plane]; i++) {
+ for (j = 0; j < src->plane_width[plane]; j++) {
+ size_t src_offset = src->offsets[plane];
+ size_t dst_offset = dst->offsets[plane];
+
+ src_offset += src->strides[plane] * i + j * bpp / 8;
+ dst_offset += vc4_sand_tiled_offset(column_width,
+ column_size, j, i,
+ bpp);
+
+ switch (bpp) {
+ case 8:
+ *(uint8_t *)(dst_buf + dst_offset) =
+ *(uint8_t *)(src_buf + src_offset);
+ break;
+ case 16:
+ *(uint16_t *)(dst_buf + dst_offset) =
+ *(uint16_t *)(src_buf + src_offset);
+ break;
+ default:
+ igt_assert(false);
+ }
+ }
+ }
+}
+
+unsigned int vc4_fb_sand_tiled_convert(struct igt_fb *dst, struct igt_fb *src,
+ size_t column_width_bytes,
+ size_t column_height)
+{
+ unsigned int fb_id;
+ unsigned int i;
+ uint64_t modifier;
+ void *src_buf;
+ void *dst_buf;
+
+ if (!column_height)
+ column_height = src->height;
+
+ switch (column_width_bytes) {
+ case 32:
+ modifier =
+ DRM_FORMAT_MOD_BROADCOM_SAND32_COL_HEIGHT(column_height);
+ break;
+ case 64:
+ modifier =
+ DRM_FORMAT_MOD_BROADCOM_SAND64_COL_HEIGHT(column_height);
+ break;
+ case 128:
+ modifier =
+ DRM_FORMAT_MOD_BROADCOM_SAND128_COL_HEIGHT(column_height);
+ break;
+ case 256:
+ modifier =
+ DRM_FORMAT_MOD_BROADCOM_SAND256_COL_HEIGHT(column_height);
+ break;
+ default:
+ igt_assert(false);
+ }
+
+ fb_id = igt_create_fb(src->fd, src->width, src->height, src->drm_format,
+ modifier, dst);
+ igt_assert(fb_id > 0);
+
+ src_buf = igt_fb_map_buffer(src->fd, src);
+ igt_assert(src_buf);
+
+ dst_buf = igt_fb_map_buffer(dst->fd, dst);
+ igt_assert(dst_buf);
+
+ for (i = 0; i < dst->num_planes; i++)
+ vc4_fb_sand_tiled_convert_plane(dst, dst_buf, src, src_buf,
+ column_width_bytes,
+ column_height, i);
+
+ igt_fb_unmap_buffer(src, src_buf);
+ igt_fb_unmap_buffer(dst, dst_buf);
+
+ return fb_id;
+}
+
+size_t vc4_sand_tiled_offset(size_t column_width, size_t column_size, size_t x,
+ size_t y, size_t bpp)
+{
+ size_t offset = 0;
+ size_t cols_x;
+ size_t pix_x;
+
+ /* Offset to the beginning of the relevant column. */
+ cols_x = x / column_width;
+ offset += cols_x * column_size;
+
+ /* Offset to the relevant pixel. */
+ pix_x = x % column_width;
+ offset += (column_width * y + pix_x) * bpp / 8;
+
+ return offset;
+}
diff --git a/lib/igt_vc4.h b/lib/igt_vc4.h
index ee7af737ade9..9118ae193f60 100644
--- a/lib/igt_vc4.h
+++ b/lib/igt_vc4.h
@@ -45,5 +45,10 @@ uint64_t igt_vc4_get_tiling(int fd, uint32_t handle);
unsigned int igt_vc4_fb_t_tiled_convert(struct igt_fb *dst, struct igt_fb *src);
size_t igt_vc4_t_tiled_offset(size_t stride, size_t height, size_t bpp,
size_t x, size_t y);
+unsigned int vc4_fb_sand_tiled_convert(struct igt_fb *dst, struct igt_fb *src,
+ size_t column_width_bytes,
+ size_t column_height);
+size_t vc4_sand_tiled_offset(size_t column_width, size_t column_size, size_t x,
+ size_t y, size_t bpp);
#endif /* IGT_VC4_H */
--
2.20.1
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev
next prev parent reply other threads:[~2019-01-11 9:06 UTC|newest]
Thread overview: 67+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-01-11 9:05 [igt-dev] [PATCH i-g-t v3 00/21] Chamelium VC4 plane fuzzy testing, with SAND and T-tiled mode Paul Kocialkowski
2019-01-11 9:05 ` [igt-dev] [PATCH i-g-t v3 01/21] lib: drmtest: Add helpers to check and require the VC4 driver Paul Kocialkowski
2019-01-11 9:05 ` [igt-dev] [PATCH i-g-t v3 02/21] lib/igt_fb: Add checks on i915 for i915-specific tiled buffer allocation Paul Kocialkowski
2019-01-11 15:09 ` Maxime Ripard
2019-01-15 0:39 ` Lyude Paul
2019-01-11 9:05 ` [igt-dev] [PATCH i-g-t v3 03/21] lib/igt_fb: Add support for allocating T-tiled VC4 buffers Paul Kocialkowski
2019-01-11 15:09 ` Maxime Ripard
2019-01-15 0:41 ` Lyude Paul
2019-01-11 9:05 ` [igt-dev] [PATCH i-g-t v3 04/21] lib/igt_fb: Add support for VC4 SAND tiling modes Paul Kocialkowski
2019-01-11 15:09 ` Maxime Ripard
2019-01-15 0:43 ` Lyude Paul
2019-01-11 9:05 ` [igt-dev] [PATCH i-g-t v3 05/21] lib/igt_fb: Allow interpreting the tile height as a stride equivalent Paul Kocialkowski
2019-01-11 15:10 ` Maxime Ripard
2019-01-15 0:45 ` Lyude Paul
2019-01-11 9:05 ` [igt-dev] [PATCH i-g-t v3 06/21] lib/igt_fb: Add a stride-provisioned fashion of igt_fb_convert Paul Kocialkowski
2019-01-11 9:05 ` [igt-dev] [PATCH i-g-t v3 07/21] lib/igt_fb: Add a helper to retreive the plane bpp for a given format Paul Kocialkowski
2019-01-11 9:05 ` [igt-dev] [PATCH i-g-t v3 08/21] lib/igt_fb: Add a helper to fill-in the available DRM formats Paul Kocialkowski
2019-01-15 20:49 ` Lyude Paul
2019-01-11 9:05 ` [igt-dev] [PATCH i-g-t v3 09/21] lib/igt_vc4: Add helpers for converting linear to T-tiled RGB buffers Paul Kocialkowski
2019-01-11 15:25 ` Maxime Ripard
2019-01-14 14:57 ` Paul Kocialkowski
2019-01-15 21:20 ` Lyude Paul
2019-01-22 16:07 ` Paul Kocialkowski
2019-01-22 17:47 ` Lyude Paul
2019-01-11 9:05 ` [igt-dev] [PATCH i-g-t v3 10/21] lib/igt_vc4: Add helper for checking T-tiling support on plane Paul Kocialkowski
2019-01-11 15:11 ` Maxime Ripard
2019-01-15 21:49 ` Lyude Paul
2019-01-11 9:05 ` Paul Kocialkowski [this message]
2019-01-15 21:53 ` [igt-dev] [PATCH i-g-t v3 11/21] lib/igt_vc4: Add helpers for converting linear to SAND-tiled buffers Lyude Paul
2019-01-11 9:05 ` [igt-dev] [PATCH i-g-t v3 12/21] lib/igt_vc4: Add helper for checking SAND tiling support on plane Paul Kocialkowski
2019-01-11 15:15 ` Maxime Ripard
2019-01-14 15:01 ` Paul Kocialkowski
2019-01-15 8:25 ` Maxime Ripard
2019-01-15 21:54 ` Lyude Paul
2019-01-11 9:05 ` [igt-dev] [PATCH i-g-t v3 13/21] lib/igt_kms: Add helpers to count and iterate planes from pipe Paul Kocialkowski
2019-01-11 15:11 ` Maxime Ripard
2019-01-15 21:57 ` Lyude Paul
2019-01-11 9:05 ` [igt-dev] [PATCH i-g-t v3 14/21] lib/igt_kms: Add helpers to count and iterate planes from output Paul Kocialkowski
2019-01-11 15:12 ` Maxime Ripard
2019-01-15 22:00 ` Lyude Paul
2019-01-11 9:05 ` [igt-dev] [PATCH i-g-t v3 15/21] lib/igt_chamelium: Fixup resources liberation in comparison helpers Paul Kocialkowski
2019-01-11 15:15 ` Maxime Ripard
2019-01-15 22:01 ` Lyude Paul
2019-01-11 9:05 ` [igt-dev] [PATCH i-g-t v3 16/21] lib/igt_chamelium: Split frames dump logic and rework surroundings Paul Kocialkowski
2019-01-11 15:16 ` Maxime Ripard
2019-01-15 22:05 ` Lyude Paul
2019-01-11 9:05 ` [igt-dev] [PATCH i-g-t v3 17/21] lib/igt_chamelium: Generalize the frame match helper with check type Paul Kocialkowski
2019-01-11 15:17 ` Maxime Ripard
2019-01-15 22:07 ` Lyude Paul
2019-01-11 9:05 ` [igt-dev] [PATCH i-g-t v3 18/21] lib/igt_frame: Add a checkerboard frame comparison method Paul Kocialkowski
2019-01-11 15:19 ` Maxime Ripard
2019-01-14 15:04 ` Paul Kocialkowski
2019-01-15 16:13 ` Maxime Ripard
2019-01-15 22:14 ` Lyude Paul
2019-01-11 9:05 ` [igt-dev] [PATCH i-g-t v3 19/21] lib/igt_chamelium: Hook-in checkerboard comparison method in helpers Paul Kocialkowski
2019-01-11 15:19 ` Maxime Ripard
2019-01-15 22:14 ` Lyude Paul
2019-01-11 9:05 ` [igt-dev] [PATCH i-g-t v3 20/21] chamelium: Move the YUV tests over to the checkerboard checking method Paul Kocialkowski
2019-01-11 15:20 ` Maxime Ripard
2019-01-15 22:15 ` Lyude Paul
2019-01-11 9:05 ` [igt-dev] [PATCH i-g-t v3 21/21] chamelium: Add a display test for randomized planes Paul Kocialkowski
2019-01-11 15:23 ` Maxime Ripard
2019-01-15 22:56 ` Lyude Paul
2019-01-25 13:58 ` Paul Kocialkowski
2019-01-11 9:29 ` [igt-dev] ✗ Fi.CI.BAT: failure for Chamelium VC4 plane fuzzy testing, with SAND and T-tiled mode Patchwork
2019-01-15 0:46 ` [igt-dev] [PATCH i-g-t v3 00/21] " Lyude Paul
2019-01-15 9:34 ` Paul Kocialkowski
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=20190111090532.19235-12-paul.kocialkowski@bootlin.com \
--to=paul.kocialkowski@bootlin.com \
--cc=eben@raspberrypi.org \
--cc=igt-dev@lists.freedesktop.org \
--cc=petri.latvala@intel.com \
--cc=thomas.petazzoni@bootlin.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