summaryrefslogtreecommitdiff
path: root/lib/igt_fb.c
diff options
context:
space:
mode:
authorPaul Kocialkowski <paul.kocialkowski@bootlin.com>2018-12-05 16:10:35 +0100
committerPaul Kocialkowski <paul.kocialkowski@bootlin.com>2019-02-26 09:45:54 +0100
commit6e227181ab57e43f058edd76368b17d8c235aeb0 (patch)
tree6e1ee39fa353cc04be1e62afb1cf342a3a2747b4 /lib/igt_fb.c
parent3fa1953d28350929672cf90002fcfce34bc59f35 (diff)
lib/igt_fb: Add a stride-provisioned fashion of igt_fb_convert
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> Reviewed-by: Lyude Paul <lyude@redhat.com> Reviewed-by: Maxime Ripard <maxime.ripard@bootlin.com>
Diffstat (limited to 'lib/igt_fb.c')
-rw-r--r--lib/igt_fb.c38
1 files changed, 32 insertions, 6 deletions
diff --git a/lib/igt_fb.c b/lib/igt_fb.c
index 92899aa8..f1989249 100644
--- a/lib/igt_fb.c
+++ b/lib/igt_fb.c
@@ -2553,14 +2553,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: Stride for the resulting framebuffer (0 for automatic stride)
*
* 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.
@@ -2568,15 +2569,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);
@@ -2598,6 +2602,28 @@ unsigned int igt_fb_convert(struct igt_fb *dst, struct igt_fb *src,
}
/**
+ * 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
* @depth: desired depth