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

Lyude Paul lyude at redhat.com
Fri Feb 8 18:02:53 UTC 2019


Reviewed-by: Lyude Paul <lyude at redhat.com>

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 at bootlin.com>
> Signed-off-by: Maxime Ripard <maxime.ripard at 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



More information about the igt-dev mailing list