summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/igt_fb.c38
-rw-r--r--lib/igt_fb.h3
2 files changed, 35 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
diff --git a/lib/igt_fb.h b/lib/igt_fb.h
index 8c683db5..232370bd 100644
--- a/lib/igt_fb.h
+++ b/lib/igt_fb.h
@@ -136,6 +136,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);