[PATCH] Add drmModeAddFB2WithModifiers() which takes format modifiers
Alexandre Courbot
acourbot at nvidia.com
Tue Sep 20 09:02:26 UTC 2016
On 09/14/2016 07:07 AM, Kristian H. Kristensen wrote:
> The only current user of this open codes the ioctl. Let's add an entry
> point for this to libdrm.
Tested-by: Alexandre Courbot <acourbot at nvidia.com>
Replaced one custom (staging) ioctl on Tegra with FB modifiers, noticed
this was missing!
>
> 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.
> */
>
More information about the dri-devel
mailing list