From patchwork Tue Jan 7 17:41:42 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Benjamin Gaignard X-Patchwork-Id: 22918 Return-Path: X-Original-To: linaro@patches.linaro.org Delivered-To: linaro@patches.linaro.org Received: from mail-gg0-f200.google.com (mail-gg0-f200.google.com [209.85.161.200]) by ip-10-151-82-157.ec2.internal (Postfix) with ESMTPS id 497A1216D9 for ; Tue, 7 Jan 2014 17:42:18 +0000 (UTC) Received: by mail-gg0-f200.google.com with SMTP id g10sf461526gga.3 for ; Tue, 07 Jan 2014 09:42:17 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:delivered-to:from:to:date:message-id:in-reply-to :references:mime-version:subject:precedence:list-id:list-unsubscribe :list-archive:list-post:list-help:list-subscribe:errors-to:sender :x-original-sender:x-original-authentication-results:mailing-list :content-type:content-transfer-encoding; bh=wdPf6IgbA4s7jbI0cjKkykCOD/Dc9h9kt3P2witZnfA=; b=TR9AaElYncf59DcLKzzskctTChLw9HlJ0NbbjR3GITRzB9jOvmUPLU2WGt8lXGsLxl TA9A+ONDySNV3mtaxgN2kF8UsT0BhSRNDIuxtHkC095lMDgWhnOqbxWAH6wQ9SXqjJJy qvslHJyQ2MuT2TySHnCnX4Cj7X7+kXFPBOOtNXDGkZ0hQcbbb8AFcG0x7uig5cPNRALz dZKjS3UrwJlbqNtjB0+8AjCJRRqoan9zWmIYOlGtLuafO3DoVhnoGLlKIMeB4nSQOqgz 29/cNX1tY6OOkVdPzssBdtLy4no3s7Ox0ILIphhkOdqiF07Ish/XzRyYHYwlHPefdsKd qbZg== X-Gm-Message-State: ALoCoQkiuevdoBshnyfgJL574VVuRD+7EUI4Gz90snv7zOss3fe8UM1SsParoj9lWjuIlKWNlUS0 X-Received: by 10.58.206.47 with SMTP id ll15mr7753998vec.28.1389116537438; Tue, 07 Jan 2014 09:42:17 -0800 (PST) X-BeenThere: patchwork-forward@linaro.org Received: by 10.49.12.11 with SMTP id u11ls198293qeb.25.gmail; Tue, 07 Jan 2014 09:42:17 -0800 (PST) X-Received: by 10.58.243.37 with SMTP id wv5mr4108186vec.41.1389116537332; Tue, 07 Jan 2014 09:42:17 -0800 (PST) Received: from mail-ve0-f172.google.com (mail-ve0-f172.google.com [209.85.128.172]) by mx.google.com with ESMTPS id gs2si34306876vdc.96.2014.01.07.09.42.17 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Tue, 07 Jan 2014 09:42:17 -0800 (PST) Received-SPF: neutral (google.com: 209.85.128.172 is neither permitted nor denied by best guess record for domain of patch+caf_=patchwork-forward=linaro.org@linaro.org) client-ip=209.85.128.172; Received: by mail-ve0-f172.google.com with SMTP id jw12so380719veb.31 for ; Tue, 07 Jan 2014 09:42:17 -0800 (PST) X-Received: by 10.58.134.40 with SMTP id ph8mr2808984veb.61.1389116537165; Tue, 07 Jan 2014 09:42:17 -0800 (PST) X-Forwarded-To: patchwork-forward@linaro.org X-Forwarded-For: patch@linaro.org patchwork-forward@linaro.org Delivered-To: patches@linaro.org Received: by 10.59.13.131 with SMTP id ey3csp174185ved; Tue, 7 Jan 2014 09:42:16 -0800 (PST) X-Received: by 10.14.107.3 with SMTP id n3mr22398038eeg.67.1389116535744; Tue, 07 Jan 2014 09:42:15 -0800 (PST) Received: from ip-10-141-164-156.ec2.internal (lists.linaro.org. [54.225.227.206]) by mx.google.com with ESMTPS id p46si89761590eem.231.2014.01.07.09.42.13 for (version=TLSv1 cipher=RC4-SHA bits=128/128); Tue, 07 Jan 2014 09:42:15 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linaro-mm-sig-bounces@lists.linaro.org designates 54.225.227.206 as permitted sender) client-ip=54.225.227.206; Received: from localhost ([127.0.0.1] helo=ip-10-141-164-156.ec2.internal) by ip-10-141-164-156.ec2.internal with esmtp (Exim 4.76) (envelope-from ) id 1W0af5-0006Dc-7s; Tue, 07 Jan 2014 17:41:55 +0000 Received: from mail-wi0-f181.google.com ([209.85.212.181]) by ip-10-141-164-156.ec2.internal with esmtp (Exim 4.76) (envelope-from ) id 1W0aew-0006D9-T7 for linaro-mm-sig@lists.linaro.org; Tue, 07 Jan 2014 17:41:47 +0000 Received: by mail-wi0-f181.google.com with SMTP id hq4so1032869wib.8 for ; Tue, 07 Jan 2014 09:41:53 -0800 (PST) X-Received: by 10.180.85.71 with SMTP id f7mr18045153wiz.41.1389116513863; Tue, 07 Jan 2014 09:41:53 -0800 (PST) Received: from lmenx321.lme.st.com (lya72-2-88-175-155-153.fbx.proxad.net. [88.175.155.153]) by mx.google.com with ESMTPSA id f7sm45992553wjb.7.2014.01.07.09.41.52 for (version=TLSv1.1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Tue, 07 Jan 2014 09:41:53 -0800 (PST) From: benjamin.gaignard@linaro.org To: wayland-devel@lists.freedesktop.org, linaro-mm-sig@lists.linaro.org Date: Tue, 7 Jan 2014 18:41:42 +0100 Message-Id: <1389116504-3923-2-git-send-email-benjamin.gaignard@linaro.org> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1389116504-3923-1-git-send-email-benjamin.gaignard@linaro.org> References: <1389116504-3923-1-git-send-email-benjamin.gaignard@linaro.org> MIME-Version: 1.0 Subject: [Linaro-mm-sig] =?utf-8?q?=5BPATCH_v4_1/3=5D_Add_wl=5Fdmabuf_prot?= =?utf-8?q?ocol?= X-BeenThere: linaro-mm-sig@lists.linaro.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: , List-Help: , List-Subscribe: , Errors-To: linaro-mm-sig-bounces@lists.linaro.org Sender: linaro-mm-sig-bounces@lists.linaro.org X-Removed-Original-Auth: Dkim didn't pass. X-Original-Sender: benjamin.gaignard@linaro.org X-Original-Authentication-Results: mx.google.com; spf=neutral (google.com: 209.85.128.172 is neither permitted nor denied by best guess record for domain of patch+caf_=patchwork-forward=linaro.org@linaro.org) smtp.mail=patch+caf_=patchwork-forward=linaro.org@linaro.org Mailing-list: list patchwork-forward@linaro.org; contact patchwork-forward+owners@linaro.org X-Google-Group-Id: 836684582541 From: Benjamin Gaignard It allow to use a dmabuf file descriptor in a wayland protocol. To make as generic as possible it is up to the server to call wl_dmabuf_send_format() and/or wl_dmabuf_send_device() to signal it capabilities. Signed-off-by: Benjamin Gaignard --- protocol/Makefile.am | 6 +- protocol/wayland-dmabuf.xml | 128 ++++++++++++++++++++++++ src/Makefile.am | 12 ++- src/wayland-dmabuf.c | 231 +++++++++++++++++++++++++++++++++++++++++++ src/wayland-dmabuf.h | 123 +++++++++++++++++++++++ 5 files changed, 496 insertions(+), 4 deletions(-) create mode 100644 protocol/wayland-dmabuf.xml create mode 100644 src/wayland-dmabuf.c create mode 100644 src/wayland-dmabuf.h diff --git a/protocol/Makefile.am b/protocol/Makefile.am index e8b6290..8c9499f 100644 --- a/protocol/Makefile.am +++ b/protocol/Makefile.am @@ -1,4 +1,4 @@ -dist_pkgdata_DATA = wayland.xml wayland.dtd +dist_pkgdata_DATA = wayland.xml wayland-dmabuf.xml wayland.dtd if HAVE_XMLLINT .PHONY: validate @@ -6,9 +6,9 @@ if HAVE_XMLLINT .%.xml.valid: %.xml $(AM_V_GEN)$(XMLLINT) --noout --dtdvalid $(srcdir)/wayland.dtd $^ > $@ -validate: .wayland.xml.valid +validate: .wayland.xml.valid .wayland-dmabuf.xml.valid all-local: validate -CLEANFILES = .wayland.xml.valid +CLEANFILES = .wayland.xml.valid .wayland-dmabuf.xml.valid endif diff --git a/protocol/wayland-dmabuf.xml b/protocol/wayland-dmabuf.xml new file mode 100644 index 0000000..f84edb5 --- /dev/null +++ b/protocol/wayland-dmabuf.xml @@ -0,0 +1,128 @@ + + + + + Copyright © 2008-2011 Kristian Høgsberg + Copyright © 2010-2011 Intel Corporation + + Permission to use, copy, modify, distribute, and sell this + software and its documentation for any purpose is hereby granted + without fee, provided that\n the above copyright notice appear in + all copies and that both that copyright notice and this permission + notice appear in supporting documentation, and that the name of + the copyright holders not be used in advertising or publicity + pertaining to distribution of the software without specific, + written prior permission. The copyright holders make no + representations about the suitability of this software for any + purpose. It is provided "as is" without express or implied + warranty. + + THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS + SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY + SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, + ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF + THIS SOFTWARE. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Makefile.am b/src/Makefile.am index 15f44a5..b3c414c 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -4,8 +4,11 @@ noinst_LTLIBRARIES = libwayland-util.la include_HEADERS = \ wayland-util.h \ wayland-server-protocol.h \ + wayland-dmabuf-server-protocol.h \ wayland-server.h \ + wayland-dmabuf.h \ wayland-client-protocol.h \ + wayland-dmabuf-client-protocol.h \ wayland-client.h \ wayland-egl.h \ wayland-version.h @@ -22,14 +25,17 @@ libwayland_server_la_LIBADD = $(FFI_LIBS) libwayland-util.la -lrt -lm libwayland_server_la_LDFLAGS = -version-info 1:0:1 libwayland_server_la_SOURCES = \ wayland-protocol.c \ + wayland-dmabuf-protocol.c \ wayland-server.c \ wayland-shm.c \ + wayland-dmabuf.c \ event-loop.c libwayland_client_la_LIBADD = $(FFI_LIBS) libwayland-util.la -lrt -lm libwayland_client_la_LDFLAGS = -version-info 2:0:2 libwayland_client_la_SOURCES = \ wayland-protocol.c \ + wayland-dmabuf-protocol.c \ wayland-client.c pkgconfigdir = $(libdir)/pkgconfig @@ -65,7 +71,11 @@ endif BUILT_SOURCES = \ wayland-server-protocol.h \ wayland-client-protocol.h \ - wayland-protocol.c + wayland-protocol.c \ + wayland-dmabuf-server-protocol.h \ + wayland-dmabuf-client-protocol.h \ + wayland-dmabuf-protocol.c + CLEANFILES = $(BUILT_SOURCES) DISTCLEANFILES = wayland-version.h diff --git a/src/wayland-dmabuf.c b/src/wayland-dmabuf.c new file mode 100644 index 0000000..ce6dc4c --- /dev/null +++ b/src/wayland-dmabuf.c @@ -0,0 +1,231 @@ +/* + * Copyright © 2011 Kristian Høgsberg + * Copyright © 2011 Benjamin Franzke + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + * Authors: + * Kristian Høgsberg + * Benjamin Franzke + */ + +#include +#include +#include +#include +#include +#include + +#include "wayland-server.h" +#include "wayland-dmabuf.h" +#include "wayland-dmabuf-server-protocol.h" + +struct wl_dmabuf { + struct wl_global *wl_dmabuf_global; + void *user_data; + struct wl_dmabuf_callbacks *callbacks; +}; + +static void +destroy_buffer(struct wl_resource *resource) +{ + struct wl_dmabuf_buffer *buffer = wl_resource_get_user_data(resource); + + buffer->refcount--; + + if (buffer->refcount) + return; + + close(buffer->fd); + free(buffer); +} + +static void +buffer_destroy(struct wl_client *client, struct wl_resource *resource) +{ + wl_resource_destroy(resource); +} + +static const struct wl_buffer_interface dmabuf_buffer_interface = { + buffer_destroy +}; + +static void +dmabuf_create_prime_buffer(struct wl_client *client, struct wl_resource *resource, + uint32_t id, int fd, + int32_t width, int32_t height, + uint32_t format, int32_t stride) +{ + struct wl_dmabuf *dmabuf = wl_resource_get_user_data(resource); + struct wl_dmabuf_buffer *buffer; + + buffer = calloc(1, sizeof *buffer); + if (buffer == NULL) { + wl_resource_post_no_memory(resource); + return; + } + + buffer->resource = + wl_resource_create(client, &wl_buffer_interface, 1, id); + if (!buffer->resource) { + wl_resource_post_no_memory(resource); + free(buffer); + return; + } + + buffer->dmabuf = dmabuf; + buffer->width = width; + buffer->height = height; + buffer->format = format; + buffer->data = NULL; + buffer->mmapcount = 0; + buffer->refcount = 1; + /* make sure we have your own file descriptor */ + buffer->fd = dup(fd); + close(fd); + buffer->stride = stride; + + wl_resource_set_implementation(buffer->resource, + &dmabuf_buffer_interface, + buffer, destroy_buffer); +} + +static const struct wl_dmabuf_interface dmabuf_interface = { + dmabuf_create_prime_buffer +}; + +static void +bind_dmabuf(struct wl_client *client, void *data, uint32_t version, uint32_t id) +{ + struct wl_dmabuf *dmabuf = data; + struct wl_resource *resource; + + resource = wl_resource_create(client, &wl_dmabuf_interface, 1, id); + if (!resource) { + wl_client_post_no_memory(client); + return; + } + + wl_resource_set_implementation(resource, &dmabuf_interface, data, NULL); + + if (dmabuf->callbacks->send_server_info) + dmabuf->callbacks->send_server_info(dmabuf->user_data, resource); +} + +WL_EXPORT struct wl_dmabuf * +wl_dmabuf_init(struct wl_display *display, struct wl_dmabuf_callbacks *callbacks, + void *user_data, uint32_t flags) +{ + struct wl_dmabuf *dmabuf; + + dmabuf = malloc(sizeof *dmabuf); + + dmabuf->callbacks = callbacks; + dmabuf->user_data = user_data; + + dmabuf->wl_dmabuf_global = + wl_global_create(display, &wl_dmabuf_interface, 1, dmabuf, bind_dmabuf); + + return dmabuf; +} + +WL_EXPORT void +wl_dmabuf_uninit(struct wl_dmabuf *dmabuf) +{ + wl_global_destroy(dmabuf->wl_dmabuf_global); + + free(dmabuf); +} + +WL_EXPORT struct wl_dmabuf_buffer * +wl_dmabuf_buffer_get(struct wl_resource *resource) +{ + if (resource == NULL) + return NULL; + + if (wl_resource_instance_of(resource, &wl_buffer_interface, + &dmabuf_buffer_interface)) + return wl_resource_get_user_data(resource); + + return NULL; +} + +WL_EXPORT uint32_t +wl_dmabuf_buffer_get_format(struct wl_dmabuf_buffer *buffer) +{ + return buffer->format; +} + +WL_EXPORT int32_t +wl_dmabuf_buffer_get_stride(struct wl_dmabuf_buffer *buffer) +{ + return buffer->stride; +} + +WL_EXPORT void * +wl_dmabuf_buffer_get_data(struct wl_dmabuf_buffer *buffer) +{ + uint32_t size; + + buffer->refcount++; + + if (buffer->mmapcount++) + return buffer->data; + + size = buffer->width * buffer->height * 4; + buffer->data = mmap (0, size, PROT_READ | PROT_WRITE, MAP_SHARED, buffer->fd, 0); + + return buffer->data; +} + +WL_EXPORT void +wl_dmabuf_buffer_put_data(struct wl_dmabuf_buffer *buffer) +{ + uint32_t size; + + buffer->mmapcount--; + buffer->refcount--; + + if (buffer->mmapcount) + return; + + size = buffer->width * buffer->height * 4; + munmap (buffer->data, size); + buffer->data = NULL; + + if (buffer->refcount) + return; + + close(buffer->fd); + free(buffer); +} + +WL_EXPORT int32_t +wl_dmabuf_buffer_get_width(struct wl_dmabuf_buffer *buffer) +{ + return buffer->width; +} + +WL_EXPORT int32_t +wl_dmabuf_buffer_get_height(struct wl_dmabuf_buffer *buffer) +{ + return buffer->height; +} diff --git a/src/wayland-dmabuf.h b/src/wayland-dmabuf.h new file mode 100644 index 0000000..f9eb230 --- /dev/null +++ b/src/wayland-dmabuf.h @@ -0,0 +1,123 @@ +#ifndef WAYLAND_DMABUF_H +#define WAYLAND_DMABUF_H + +#include + +#ifndef WL_DMABUF_FORMAT_ENUM +#define WL_DMABUF_FORMAT_ENUM + +enum wl_dmabuf_format { + WL_DMABUF_FORMAT_C8 = 0x20203843, + WL_DMABUF_FORMAT_RGB332 = 0x38424752, + WL_DMABUF_FORMAT_BGR233 = 0x38524742, + WL_DMABUF_FORMAT_XRGB4444 = 0x32315258, + WL_DMABUF_FORMAT_XBGR4444 = 0x32314258, + WL_DMABUF_FORMAT_RGBX4444 = 0x32315852, + WL_DMABUF_FORMAT_BGRX4444 = 0x32315842, + WL_DMABUF_FORMAT_ARGB4444 = 0x32315241, + WL_DMABUF_FORMAT_ABGR4444 = 0x32314241, + WL_DMABUF_FORMAT_RGBA4444 = 0x32314152, + WL_DMABUF_FORMAT_BGRA4444 = 0x32314142, + WL_DMABUF_FORMAT_XRGB1555 = 0x35315258, + WL_DMABUF_FORMAT_XBGR1555 = 0x35314258, + WL_DMABUF_FORMAT_RGBX5551 = 0x35315852, + WL_DMABUF_FORMAT_BGRX5551 = 0x35315842, + WL_DMABUF_FORMAT_ARGB1555 = 0x35315241, + WL_DMABUF_FORMAT_ABGR1555 = 0x35314241, + WL_DMABUF_FORMAT_RGBA5551 = 0x35314152, + WL_DMABUF_FORMAT_BGRA5551 = 0x35314142, + WL_DMABUF_FORMAT_RGB565 = 0x36314752, + WL_DMABUF_FORMAT_BGR565 = 0x36314742, + WL_DMABUF_FORMAT_RGB888 = 0x34324752, + WL_DMABUF_FORMAT_BGR888 = 0x34324742, + WL_DMABUF_FORMAT_XRGB8888 = 0x34325258, + WL_DMABUF_FORMAT_XBGR8888 = 0x34324258, + WL_DMABUF_FORMAT_RGBX8888 = 0x34325852, + WL_DMABUF_FORMAT_BGRX8888 = 0x34325842, + WL_DMABUF_FORMAT_ARGB8888 = 0x34325241, + WL_DMABUF_FORMAT_ABGR8888 = 0x34324241, + WL_DMABUF_FORMAT_RGBA8888 = 0x34324152, + WL_DMABUF_FORMAT_BGRA8888 = 0x34324142, + WL_DMABUF_FORMAT_XRGB2101010 = 0x30335258, + WL_DMABUF_FORMAT_XBGR2101010 = 0x30334258, + WL_DMABUF_FORMAT_RGBX1010102 = 0x30335852, + WL_DMABUF_FORMAT_BGRX1010102 = 0x30335842, + WL_DMABUF_FORMAT_ARGB2101010 = 0x30335241, + WL_DMABUF_FORMAT_ABGR2101010 = 0x30334241, + WL_DMABUF_FORMAT_RGBA1010102 = 0x30334152, + WL_DMABUF_FORMAT_BGRA1010102 = 0x30334142, + WL_DMABUF_FORMAT_YUYV = 0x56595559, + WL_DMABUF_FORMAT_YVYU = 0x55595659, + WL_DMABUF_FORMAT_UYVY = 0x59565955, + WL_DMABUF_FORMAT_VYUY = 0x59555956, + WL_DMABUF_FORMAT_AYUV = 0x56555941, + WL_DMABUF_FORMAT_NV12 = 0x3231564e, + WL_DMABUF_FORMAT_NV21 = 0x3132564e, + WL_DMABUF_FORMAT_NV16 = 0x3631564e, + WL_DMABUF_FORMAT_NV61 = 0x3136564e, + WL_DMABUF_FORMAT_YUV410 = 0x39565559, + WL_DMABUF_FORMAT_YVU410 = 0x39555659, + WL_DMABUF_FORMAT_YUV411 = 0x31315559, + WL_DMABUF_FORMAT_YVU411 = 0x31315659, + WL_DMABUF_FORMAT_YUV420 = 0x32315559, + WL_DMABUF_FORMAT_YVU420 = 0x32315659, + WL_DMABUF_FORMAT_YUV422 = 0x36315559, + WL_DMABUF_FORMAT_YVU422 = 0x36315659, + WL_DMABUF_FORMAT_YUV444 = 0x34325559, + WL_DMABUF_FORMAT_YVU444 = 0x34325659, +}; +#endif /* WL_DMABUF_FORMAT_ENUM */ + +struct wl_dmabuf; + +struct wl_dmabuf_buffer { + struct wl_resource *resource; + struct wl_dmabuf *dmabuf; + int32_t width, height; + int32_t stride; + uint32_t format; + uint8_t *data; + int mmapcount; + int refcount; + int fd; +}; + +/* struct wl_dmabuf_callbacks + * + * @send_server_info: ask to the server to send all + * supported pixel formats and device name + */ +struct wl_dmabuf_callbacks { + void (*send_server_info)(void *user_data, struct wl_resource *resource); +}; + +struct wl_dmabuf * +wl_dmabuf_init(struct wl_display *display, + struct wl_dmabuf_callbacks *callbacks, + void *user_data, uint32_t flags); + +void +wl_dmabuf_uninit(struct wl_dmabuf *dmabuf); + +struct wl_dmabuf_buffer * +wl_dmabuf_buffer_get(struct wl_resource *resource); + +uint32_t +wl_dmabuf_buffer_get_format(struct wl_dmabuf_buffer *buffer); + +int32_t +wl_dmabuf_buffer_get_stride(struct wl_dmabuf_buffer *buffer); + +void * +wl_dmabuf_buffer_get_data(struct wl_dmabuf_buffer *buffer); + +void +wl_dmabuf_buffer_put_data(struct wl_dmabuf_buffer *buffer); + +int32_t +wl_dmabuf_buffer_get_width(struct wl_dmabuf_buffer *buffer); + +int32_t +wl_dmabuf_buffer_get_height(struct wl_dmabuf_buffer *buffer); + +#endif