The only current user of this open codes the ioctl. Let's add an entry
point for this to libdrm.

Signed-off-by: Kristian H. Kristensen <hoegsberg at chromium.org>
---
 xf86drmMode.c | 21 +++++++++++++++++----
 xf86drmMode.h |  7 +++++++
 2 files changed, 24 insertions(+), 4 deletions(-)

diff --git a/xf86drmMode.c b/xf86drmMode.c
index f7b5948..2907c5c 100644
--- a/xf86drmMode.c
+++ b/xf86drmMode.c
@@ -270,10 +270,10 @@ int drmModeAddFB(int fd, uint32_t width, uint32_t height, 
uint8_t depth,
        return 0;
 }

-int drmModeAddFB2(int fd, uint32_t width, uint32_t height,
-                 uint32_t pixel_format, uint32_t bo_handles[4],
-                 uint32_t pitches[4], uint32_t offsets[4],
-                 uint32_t *buf_id, uint32_t flags)
+int drmModeAddFB2WithModifiers(int fd, uint32_t width, uint32_t height,
+                               uint32_t pixel_format, uint32_t bo_handles[4],
+                               uint32_t pitches[4], uint32_t offsets[4],
+                               uint64_t modifier[4], uint32_t *buf_id, 
uint32_t flags)
 {
        struct drm_mode_fb_cmd2 f;
        int ret;
@@ -286,6 +286,8 @@ int drmModeAddFB2(int fd, uint32_t width, uint32_t height,
        memcpy(f.handles, bo_handles, 4 * sizeof(bo_handles[0]));
        memcpy(f.pitches, pitches, 4 * sizeof(pitches[0]));
        memcpy(f.offsets, offsets, 4 * sizeof(offsets[0]));
+        if (modifier)
+               memcpy(f.modifier, modifier, 4 * sizeof(modifier[0]));

        if ((ret = DRM_IOCTL(fd, DRM_IOCTL_MODE_ADDFB2, &f)))
                return ret;
@@ -294,6 +296,17 @@ int drmModeAddFB2(int fd, uint32_t width, uint32_t height,
        return 0;
 }

+int drmModeAddFB2(int fd, uint32_t width, uint32_t height,
+                  uint32_t pixel_format, uint32_t bo_handles[4],
+                  uint32_t pitches[4], uint32_t offsets[4],
+                  uint32_t *buf_id, uint32_t flags)
+{
+  return drmModeAddFB2WithModifiers(fd, width, height,
+                                    pixel_format, bo_handles,
+                                    pitches, offsets, NULL,
+                                    buf_id, flags);
+}
+
 int drmModeRmFB(int fd, uint32_t bufferId)
 {
        return DRM_IOCTL(fd, DRM_IOCTL_MODE_RMFB, &bufferId);
diff --git a/xf86drmMode.h b/xf86drmMode.h
index 4de7bbb..02190ea 100644
--- a/xf86drmMode.h
+++ b/xf86drmMode.h
@@ -369,6 +369,13 @@ extern int drmModeAddFB2(int fd, uint32_t width, uint32_t 
height,
                         uint32_t pixel_format, uint32_t bo_handles[4],
                         uint32_t pitches[4], uint32_t offsets[4],
                         uint32_t *buf_id, uint32_t flags);
+
+/* ...with format modifiers */
+int drmModeAddFB2WithModifiers(int fd, uint32_t width, uint32_t height,
+                               uint32_t pixel_format, uint32_t bo_handles[4],
+                               uint32_t pitches[4], uint32_t offsets[4],
+                               uint64_t modifier[4], uint32_t *buf_id, 
uint32_t flags);
+
 /**
  * Destroies the given framebuffer.
  */
-- 
2.8.0.rc3.226.g39d4020

Reply via email to