[igt-dev] [PATCH i-g-t 7/9] lib/igt_fb: Add a stride-provisioned fashion of igt_fb_convert

Lyude Paul lyude at redhat.com
Thu Dec 6 22:57:52 UTC 2018


With the changes that Maxime mentioned:

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

On Thu, 2018-12-06 at 15:11 +0100, Paul Kocialkowski wrote:
> The current implementation of igt_fb_convert does not allow passing
> the destination stride, which is something we want to change for tests.
> 
> Add a new fashion of this function that allocates the desintation buffer
> with a given stride. Since the current function does the same thing with
> an unspecified stride (set to zero, which will be filled later), make it
> call our new fashion with the stride set to zero to avoid duplication.
> 
> Signed-off-by: Paul Kocialkowski <paul.kocialkowski at bootlin.com>
> ---
>  lib/igt_fb.c | 38 ++++++++++++++++++++++++++++++++------
>  lib/igt_fb.h |  3 +++
>  2 files changed, 35 insertions(+), 6 deletions(-)
> 
> diff --git a/lib/igt_fb.c b/lib/igt_fb.c
> index 61250b0e..1548bf4e 100644
> --- a/lib/igt_fb.c
> +++ b/lib/igt_fb.c
> @@ -2253,14 +2253,15 @@ void igt_remove_fb(int fd, struct igt_fb *fb)
>  }
>  
>  /**
> - * igt_fb_convert:
> + * igt_fb_convert_with_stride:
>   * @dst: pointer to the #igt_fb structure that will store the conversion
> result
>   * @src: pointer to the #igt_fb structure that stores the frame we convert
>   * @dst_fourcc: DRM format specifier to convert to
> + * @dst_stride: DRM format specifier to convert to
>   *
>   * This will convert a given @src content to the @dst_fourcc format,
>   * storing the result in the @dst fb, allocating the @dst fb
> - * underlying buffer.
> + * underlying buffer with a stride of @dst_stride stride.
>   *
>   * Once done with @dst, the caller will have to call igt_remove_fb()
>   * on it to free the associated resources.
> @@ -2268,15 +2269,18 @@ void igt_remove_fb(int fd, struct igt_fb *fb)
>   * Returns:
>   * The kms id of the created framebuffer.
>   */
> -unsigned int igt_fb_convert(struct igt_fb *dst, struct igt_fb *src,
> -			    uint32_t dst_fourcc)
> +unsigned int igt_fb_convert_with_stride(struct igt_fb *dst, struct igt_fb
> *src,
> +					uint32_t dst_fourcc,
> +					unsigned int dst_stride)
>  {
>  	struct fb_convert cvt = { };
>  	void *dst_ptr, *src_ptr;
>  	int fb_id;
>  
> -	fb_id = igt_create_fb(src->fd, src->width, src->height,
> -			      dst_fourcc, LOCAL_DRM_FORMAT_MOD_NONE, dst);
> +	fb_id = igt_create_fb_with_bo_size(src->fd, src->width, src->height,
> +					   dst_fourcc,
> +					   LOCAL_DRM_FORMAT_MOD_NONE,
> +					   dst, 0, dst_stride);
>  	igt_assert(fb_id > 0);
>  
>  	src_ptr = igt_fb_map_buffer(src->fd, src);
> @@ -2297,6 +2301,28 @@ unsigned int igt_fb_convert(struct igt_fb *dst,
> struct igt_fb *src,
>  	return fb_id;
>  }
>  
> +/**
> + * igt_fb_convert:
> + * @dst: pointer to the #igt_fb structure that will store the conversion
> result
> + * @src: pointer to the #igt_fb structure that stores the frame we convert
> + * @dst_fourcc: DRM format specifier to convert to
> + *
> + * This will convert a given @src content to the @dst_fourcc format,
> + * storing the result in the @dst fb, allocating the @dst fb
> + * underlying buffer.
> + *
> + * Once done with @dst, the caller will have to call igt_remove_fb()
> + * on it to free the associated resources.
> + *
> + * Returns:
> + * The kms id of the created framebuffer.
> + */
> +unsigned int igt_fb_convert(struct igt_fb *dst, struct igt_fb *src,
> +			    uint32_t dst_fourcc)
> +{
> +	return igt_fb_convert_with_stride(dst, src, dst_fourcc, 0);
> +}
> +
>  /**
>   * igt_bpp_depth_to_drm_format:
>   * @bpp: desired bits per pixel
> diff --git a/lib/igt_fb.h b/lib/igt_fb.h
> index 9f027deb..cb21fdbc 100644
> --- a/lib/igt_fb.h
> +++ b/lib/igt_fb.h
> @@ -130,6 +130,9 @@ unsigned int igt_create_image_fb(int drm_fd,  int width,
> int height,
>  				 struct igt_fb *fb /* out */);
>  unsigned int igt_create_stereo_fb(int drm_fd, drmModeModeInfo *mode,
>  				  uint32_t format, uint64_t tiling);
> +unsigned int igt_fb_convert_with_stride(struct igt_fb *dst, struct igt_fb
> *src,
> +					uint32_t dst_fourcc,
> +					unsigned int stride);
>  unsigned int igt_fb_convert(struct igt_fb *dst, struct igt_fb *src,
>  			    uint32_t dst_fourcc);
>  void igt_remove_fb(int fd, struct igt_fb *fb);
-- 
Cheers,
	Lyude Paul



More information about the igt-dev mailing list