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

Submitted by Paul Kocialkowski on Dec. 6, 2018, 2:11 p.m.

Details

Message ID 20181206141132.23349-8-paul.kocialkowski@bootlin.com
State New
Series "Chamelium VC4 plane testing, with T-tiled mode"
Headers show

Commit Message

Paul Kocialkowski Dec. 6, 2018, 2:11 p.m.
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@bootlin.com>
---
 lib/igt_fb.c | 38 ++++++++++++++++++++++++++++++++------
 lib/igt_fb.h |  3 +++
 2 files changed, 35 insertions(+), 6 deletions(-)

Patch hide | download patch | download mbox

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);

Comments

Maxime Ripard Dec. 6, 2018, 2:32 p.m.
65;5402;1c
On Thu, Dec 06, 2018 at 03:11:30PM +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@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

I'm not sure that's what you meant :)

Maxime
Lyude Paul Dec. 6, 2018, 10:57 p.m.
With the changes that Maxime mentioned:

Reviewed-by: Lyude Paul <lyude@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@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);