Re: [igt-dev] [PATCH i-g-t v6 03/10] igt: fb: Account for all planes bpp

Lyude Paul
2019-02-08T18:02:57Z

On Fri, 2019-02-08 at 14:18 +0100, Maxime Ripard wrote:
> When allocating a dumb buffer for a format with multiple plane, we need to
> account for all plane's bpp in order to allocate the proper size.
>
> Let's add all the planes bpp and use the result to allocate our buffer.
>
> Reviewed-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
> Signed-off-by: Maxime Ripard <maxime.ripard@bootlin.com>
> ---
> lib/igt_fb.c | 9 +++++++--
> 1 file changed, 7 insertions(+), 2 deletions(-)
>
> diff --git a/lib/igt_fb.c b/lib/igt_fb.c
> index ca4865519c13..ca19c034f4a3 100644
> --- a/lib/igt_fb.c
> +++ b/lib/igt_fb.c
> @@ -528,6 +528,9 @@ static void clear_yuv_buffer(struct igt_fb *fb)
> /* helpers to create nice-looking framebuffers */
> static int create_bo_for_fb(struct igt_fb *fb)
> {
> + const struct format_desc_struct *fmt = lookup_drm_format(fb-
> >drm_format);
> + unsigned int bpp = 0;
> + unsigned int plane;
> int fd = fb->fd;
>
> if (fb->tiling || fb->size || fb->strides[0] || igt_format_is_yuv(fb-
> >drm_format)) {
> @@ -570,11 +573,13 @@ static int create_bo_for_fb(struct igt_fb *fb)
> igt_assert(fb->strides[0] == 0);
>
> fb->size = calc_fb_size(fb);
> + for (plane = 0; plane < fb->num_planes; plane++)
> + bpp += DIV_ROUND_UP(fb->plane_bpp[plane],
> + plane ? fmt->hsub * fmt->vsub : 1);
>
> fb->is_dumb = true;
> fb->gem_handle = kmstest_dumb_create(fd, fb->width, fb->height,
> - fb->plane_bpp[0],
> - &fb->strides[0], &fb->size);
> + bpp, &fb->strides[0], &fb->size);
>
> return fb->gem_handle;
> }
--
Cheers,
Lyude Paul