summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Kocialkowski <paul.kocialkowski@bootlin.com>2018-12-28 10:59:05 +0100
committerPaul Kocialkowski <paul.kocialkowski@bootlin.com>2019-02-26 09:45:54 +0100
commit3fa1953d28350929672cf90002fcfce34bc59f35 (patch)
tree9c191706f678792f8dcd13329618cf5520f5eaf1
parent9f9e7c4213b1696c7f7b143d32b2bccebd0a8245 (diff)
lib/igt_fb: Allow interpreting the tile height as a stride equivalent
The VC4 SAND tiling modes are disposed in columns that follow each other in memory. The column height defines the number of fixed-width lines from the beginning of one column to the other, which may be greater than the display height. In this case, the extra lines are used as padding and the column height becomes a height-based stride equivalent. Support this when calculating the plane size by using the tile height directly if it is greater than the plane height. This works better than alignment for non-power-of-two cases (no space is wasted) and it is equivalent to alignment for power-of-two tile heights. Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com> Reviewed-by: Lyude Paul <lyude@redhat.com> Reviewed-by: Maxime Ripard <maxime.ripard@bootlin.com>
-rw-r--r--lib/igt_fb.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/lib/igt_fb.c b/lib/igt_fb.c
index a02b3621..92899aa8 100644
--- a/lib/igt_fb.c
+++ b/lib/igt_fb.c
@@ -483,6 +483,13 @@ static uint64_t calc_plane_size(struct igt_fb *fb, int plane)
igt_get_fb_tile_size(fb->fd, fb->tiling, fb->plane_bpp[plane],
&tile_width, &tile_height);
+ /* Special case where the "tile height" represents a
+ * height-based stride, such as with VC4 SAND tiling modes.
+ */
+
+ if (tile_height > fb->plane_height[plane])
+ return fb->strides[plane] * tile_height;
+
return (uint64_t) fb->strides[plane] *
ALIGN(fb->plane_height[plane], tile_height);
}