wayland: ship with wayland-drm protocol.
authorZhao halley <halley.zhao@intel.com>
Thu, 24 May 2012 09:13:31 +0000 (17:13 +0800)
committerGwenole Beauchesne <gwenole.beauchesne@intel.com>
Mon, 6 Aug 2012 16:54:41 +0000 (18:54 +0200)
Signed-off-by: Zhao Halley <halley.zhao@intel.com>
Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
configure.ac
va/wayland/Makefile.am
va/wayland/protocol/Makefile.am [new file with mode: 0644]
va/wayland/protocol/wayland-drm.xml [new file with mode: 0644]
va/wayland/wayland-drm-client-protocol.h [new file with mode: 0644]

index 5dd63c9..9c282b2 100644 (file)
@@ -275,6 +275,10 @@ if test "$enable_wayland" = "yes"; then
 fi
 AM_CONDITIONAL(USE_WAYLAND, test "$USE_WAYLAND" = "yes")
 
+m4_ifdef([WAYLAND_SCANNER_RULES],
+    [WAYLAND_SCANNER_RULES(['$(top_srcdir)/va/wayland/protocol'])],
+    [wayland_scanner_rules=""; AC_SUBST(wayland_scanner_rules)])
+
 # We only need the headers, we don't link against the DRM libraries
 LIBVA_CFLAGS="$DRM_CFLAGS"
 AC_SUBST(LIBVA_CFLAGS)
@@ -325,6 +329,7 @@ AC_OUTPUT([
     va/glx/Makefile
     va/va_version.h
     va/wayland/Makefile
+    va/wayland/protocol/Makefile
     va/x11/Makefile
 ])
 
index 595fc91..9e97e2a 100644 (file)
@@ -20,6 +20,8 @@
 # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
 # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
+SUBDIRS = protocol
+
 INCLUDES = \
        -DLINUX                 \
        -I$(top_srcdir)         \
@@ -44,11 +46,19 @@ source_h_priv = \
        va_wayland_private.h    \
        $(NULL)
 
+protocol_source_h = \
+       wayland-drm-client-protocol.h   \
+       $(NULL)
+
 noinst_LTLIBRARIES             = libva_wayland.la
 libva_waylandincludedir                = ${includedir}/va
 libva_waylandinclude_HEADERS   = $(source_h)
-libva_wayland_la_SOURCES       = $(source_c)
+libva_wayland_la_SOURCES       = $(source_c) $(protocol_source_h)
 noinst_HEADERS                 = $(source_h_priv)
 
+# Wayland protocol
+va_wayland_drm.c: $(protocol_source_h)
+@wayland_scanner_rules@
+
 # Extra clean files so that maintainer-clean removes *everything*
 MAINTAINERCLEANFILES = Makefile.in
diff --git a/va/wayland/protocol/Makefile.am b/va/wayland/protocol/Makefile.am
new file mode 100644 (file)
index 0000000..614d8a4
--- /dev/null
@@ -0,0 +1,28 @@
+# Copyright (C) 2012 Intel Corporation. All Rights Reserved.
+#
+# 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, sub license, 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 NON-INFRINGEMENT.
+# IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS 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.
+
+EXTRA_DIST = \
+       wayland-drm.xml         \
+       $(NULL)
+
+# Extra clean files so that maintainer-clean removes *everything*
+MAINTAINERCLEANFILES = Makefile.in
diff --git a/va/wayland/protocol/wayland-drm.xml b/va/wayland/protocol/wayland-drm.xml
new file mode 100644 (file)
index 0000000..265d4f8
--- /dev/null
@@ -0,0 +1,155 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<protocol name="drm">
+
+  <copyright>
+    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.
+  </copyright>
+
+  <!-- drm support. This object is created by the server and published
+       using the display's global event. -->
+  <interface name="wl_drm" version="1">
+    <enum name="error">
+      <entry name="authenticate_fail" value="0"/>
+      <entry name="invalid_format" value="1"/>
+      <entry name="invalid_name" value="2"/>
+    </enum>
+
+    <enum name="format">
+      <!-- The drm format codes match the #defines in drm_fourcc.h.
+           The formats actually supported by the compositor will be
+           reported by the format event. -->
+      <entry name="c8" value="0x20203843"/>
+      <entry name="rgb332" value="0x38424752"/>
+      <entry name="bgr233" value="0x38524742"/>
+      <entry name="xrgb4444" value="0x32315258"/>
+      <entry name="xbgr4444" value="0x32314258"/>
+      <entry name="rgbx4444" value="0x32315852"/>
+      <entry name="bgrx4444" value="0x32315842"/>
+      <entry name="argb4444" value="0x32315241"/>
+      <entry name="abgr4444" value="0x32314241"/>
+      <entry name="rgba4444" value="0x32314152"/>
+      <entry name="bgra4444" value="0x32314142"/>
+      <entry name="xrgb1555" value="0x35315258"/>
+      <entry name="xbgr1555" value="0x35314258"/>
+      <entry name="rgbx5551" value="0x35315852"/>
+      <entry name="bgrx5551" value="0x35315842"/>
+      <entry name="argb1555" value="0x35315241"/>
+      <entry name="abgr1555" value="0x35314241"/>
+      <entry name="rgba5551" value="0x35314152"/>
+      <entry name="bgra5551" value="0x35314142"/>
+      <entry name="rgb565" value="0x36314752"/>
+      <entry name="bgr565" value="0x36314742"/>
+      <entry name="rgb888" value="0x34324752"/>
+      <entry name="bgr888" value="0x34324742"/>
+      <entry name="xrgb8888" value="0x34325258"/>
+      <entry name="xbgr8888" value="0x34324258"/>
+      <entry name="rgbx8888" value="0x34325852"/>
+      <entry name="bgrx8888" value="0x34325842"/>
+      <entry name="argb8888" value="0x34325241"/>
+      <entry name="abgr8888" value="0x34324241"/>
+      <entry name="rgba8888" value="0x34324152"/>
+      <entry name="bgra8888" value="0x34324142"/>
+      <entry name="xrgb2101010" value="0x30335258"/>
+      <entry name="xbgr2101010" value="0x30334258"/>
+      <entry name="rgbx1010102" value="0x30335852"/>
+      <entry name="bgrx1010102" value="0x30335842"/>
+      <entry name="argb2101010" value="0x30335241"/>
+      <entry name="abgr2101010" value="0x30334241"/>
+      <entry name="rgba1010102" value="0x30334152"/>
+      <entry name="bgra1010102" value="0x30334142"/>
+      <entry name="yuyv" value="0x56595559"/>
+      <entry name="yvyu" value="0x55595659"/>
+      <entry name="uyvy" value="0x59565955"/>
+      <entry name="vyuy" value="0x59555956"/>
+      <entry name="ayuv" value="0x56555941"/>
+      <entry name="nv12" value="0x3231564e"/>
+      <entry name="nv21" value="0x3132564e"/>
+      <entry name="nv16" value="0x3631564e"/>
+      <entry name="nv61" value="0x3136564e"/>
+      <entry name="yuv410" value="0x39565559"/>
+      <entry name="yvu410" value="0x39555659"/>
+      <entry name="yuv411" value="0x31315559"/>
+      <entry name="yvu411" value="0x31315659"/>
+      <entry name="yuv420" value="0x32315559"/>
+      <entry name="yvu420" value="0x32315659"/>
+      <entry name="yuv422" value="0x36315559"/>
+      <entry name="yvu422" value="0x36315659"/>
+      <entry name="yuv444" value="0x34325559"/>
+      <entry name="yvu444" value="0x34325659"/>
+    </enum>
+
+    <!-- Call this request with the magic received from drmGetMagic().
+         It will be passed on to the drmAuthMagic() or
+         DRIAuthConnection() call.  This authentication must be
+         completed before create_buffer could be used. -->
+    <request name="authenticate">
+      <arg name="id" type="uint"/>
+    </request>
+
+    <!-- Create a wayland buffer for the named DRM buffer.  The DRM
+         surface must have a name using the flink ioctl -->
+    <request name="create_buffer">
+      <arg name="id" type="new_id" interface="wl_buffer"/>
+      <arg name="name" type="uint"/>
+      <arg name="width" type="int"/>
+      <arg name="height" type="int"/>
+      <arg name="stride" type="uint"/>
+      <arg name="format" type="uint"/>
+    </request>
+
+    <!-- Create a wayland buffer for the named DRM buffer.  The DRM
+         surface must have a name using the flink ioctl -->
+    <request name="create_planar_buffer">
+      <arg name="id" type="new_id" interface="wl_buffer"/>
+      <arg name="name" type="uint"/>
+      <arg name="width" type="int"/>
+      <arg name="height" type="int"/>
+      <arg name="format" type="uint"/>
+      <arg name="offset0" type="int"/>
+      <arg name="stride0" type="int"/>
+      <arg name="offset1" type="int"/>
+      <arg name="stride1" type="int"/>
+      <arg name="offset2" type="int"/>
+      <arg name="stride2" type="int"/>
+    </request>
+
+    <!-- Notification of the path of the drm device which is used by
+         the server.  The client should use this device for creating
+         local buffers.  Only buffers created from this device should
+         be be passed to the server using this drm object's
+         create_buffer request. -->
+    <event name="device">
+      <arg name="name" type="string"/>
+    </event>
+
+    <event name="format">
+      <arg name="format" type="uint"/>
+    </event>
+
+    <!-- Raised if the authenticate request succeeded -->
+    <event name="authenticated"/>
+  </interface>
+
+</protocol>
diff --git a/va/wayland/wayland-drm-client-protocol.h b/va/wayland/wayland-drm-client-protocol.h
new file mode 100644 (file)
index 0000000..cba188e
--- /dev/null
@@ -0,0 +1,213 @@
+/* 
+ * 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.
+ */
+
+#ifndef DRM_CLIENT_PROTOCOL_H
+#define DRM_CLIENT_PROTOCOL_H
+
+#ifdef  __cplusplus
+extern "C" {
+#endif
+
+#include <stdint.h>
+#include <stddef.h>
+#include "wayland-client.h"
+
+struct wl_client;
+struct wl_resource;
+
+struct wl_drm;
+
+extern const struct wl_interface wl_drm_interface;
+
+#ifndef WL_DRM_ERROR_ENUM
+#define WL_DRM_ERROR_ENUM
+enum wl_drm_error {
+       WL_DRM_ERROR_AUTHENTICATE_FAIL = 0,
+       WL_DRM_ERROR_INVALID_FORMAT = 1,
+       WL_DRM_ERROR_INVALID_NAME = 2,
+};
+#endif /* WL_DRM_ERROR_ENUM */
+
+#ifndef WL_DRM_FORMAT_ENUM
+#define WL_DRM_FORMAT_ENUM
+enum wl_drm_format {
+       WL_DRM_FORMAT_C8 = 0x20203843,
+       WL_DRM_FORMAT_RGB332 = 0x38424752,
+       WL_DRM_FORMAT_BGR233 = 0x38524742,
+       WL_DRM_FORMAT_XRGB4444 = 0x32315258,
+       WL_DRM_FORMAT_XBGR4444 = 0x32314258,
+       WL_DRM_FORMAT_RGBX4444 = 0x32315852,
+       WL_DRM_FORMAT_BGRX4444 = 0x32315842,
+       WL_DRM_FORMAT_ARGB4444 = 0x32315241,
+       WL_DRM_FORMAT_ABGR4444 = 0x32314241,
+       WL_DRM_FORMAT_RGBA4444 = 0x32314152,
+       WL_DRM_FORMAT_BGRA4444 = 0x32314142,
+       WL_DRM_FORMAT_XRGB1555 = 0x35315258,
+       WL_DRM_FORMAT_XBGR1555 = 0x35314258,
+       WL_DRM_FORMAT_RGBX5551 = 0x35315852,
+       WL_DRM_FORMAT_BGRX5551 = 0x35315842,
+       WL_DRM_FORMAT_ARGB1555 = 0x35315241,
+       WL_DRM_FORMAT_ABGR1555 = 0x35314241,
+       WL_DRM_FORMAT_RGBA5551 = 0x35314152,
+       WL_DRM_FORMAT_BGRA5551 = 0x35314142,
+       WL_DRM_FORMAT_RGB565 = 0x36314752,
+       WL_DRM_FORMAT_BGR565 = 0x36314742,
+       WL_DRM_FORMAT_RGB888 = 0x34324752,
+       WL_DRM_FORMAT_BGR888 = 0x34324742,
+       WL_DRM_FORMAT_XRGB8888 = 0x34325258,
+       WL_DRM_FORMAT_XBGR8888 = 0x34324258,
+       WL_DRM_FORMAT_RGBX8888 = 0x34325852,
+       WL_DRM_FORMAT_BGRX8888 = 0x34325842,
+       WL_DRM_FORMAT_ARGB8888 = 0x34325241,
+       WL_DRM_FORMAT_ABGR8888 = 0x34324241,
+       WL_DRM_FORMAT_RGBA8888 = 0x34324152,
+       WL_DRM_FORMAT_BGRA8888 = 0x34324142,
+       WL_DRM_FORMAT_XRGB2101010 = 0x30335258,
+       WL_DRM_FORMAT_XBGR2101010 = 0x30334258,
+       WL_DRM_FORMAT_RGBX1010102 = 0x30335852,
+       WL_DRM_FORMAT_BGRX1010102 = 0x30335842,
+       WL_DRM_FORMAT_ARGB2101010 = 0x30335241,
+       WL_DRM_FORMAT_ABGR2101010 = 0x30334241,
+       WL_DRM_FORMAT_RGBA1010102 = 0x30334152,
+       WL_DRM_FORMAT_BGRA1010102 = 0x30334142,
+       WL_DRM_FORMAT_YUYV = 0x56595559,
+       WL_DRM_FORMAT_YVYU = 0x55595659,
+       WL_DRM_FORMAT_UYVY = 0x59565955,
+       WL_DRM_FORMAT_VYUY = 0x59555956,
+       WL_DRM_FORMAT_AYUV = 0x56555941,
+       WL_DRM_FORMAT_NV12 = 0x3231564e,
+       WL_DRM_FORMAT_NV21 = 0x3132564e,
+       WL_DRM_FORMAT_NV16 = 0x3631564e,
+       WL_DRM_FORMAT_NV61 = 0x3136564e,
+       WL_DRM_FORMAT_YUV410 = 0x39565559,
+       WL_DRM_FORMAT_YVU410 = 0x39555659,
+       WL_DRM_FORMAT_YUV411 = 0x31315559,
+       WL_DRM_FORMAT_YVU411 = 0x31315659,
+       WL_DRM_FORMAT_YUV420 = 0x32315559,
+       WL_DRM_FORMAT_YVU420 = 0x32315659,
+       WL_DRM_FORMAT_YUV422 = 0x36315559,
+       WL_DRM_FORMAT_YVU422 = 0x36315659,
+       WL_DRM_FORMAT_YUV444 = 0x34325559,
+       WL_DRM_FORMAT_YVU444 = 0x34325659,
+};
+#endif /* WL_DRM_FORMAT_ENUM */
+
+struct wl_drm_listener {
+       /**
+        * device - device
+        * @name: name
+        */
+       void (*device)(void *data,
+                      struct wl_drm *wl_drm,
+                      const char *name);
+       /**
+        * format - format
+        * @format: format
+        */
+       void (*format)(void *data,
+                      struct wl_drm *wl_drm,
+                      uint32_t format);
+       /**
+        * authenticated - authenticated
+        */
+       void (*authenticated)(void *data,
+                             struct wl_drm *wl_drm);
+};
+
+static inline int
+wl_drm_add_listener(struct wl_drm *wl_drm,
+                   const struct wl_drm_listener *listener, void *data)
+{
+       return wl_proxy_add_listener((struct wl_proxy *) wl_drm,
+                                    (void (**)(void)) listener, data);
+}
+
+#define WL_DRM_AUTHENTICATE    0
+#define WL_DRM_CREATE_BUFFER   1
+#define WL_DRM_CREATE_PLANAR_BUFFER    2
+
+static inline void
+wl_drm_set_user_data(struct wl_drm *wl_drm, void *user_data)
+{
+       wl_proxy_set_user_data((struct wl_proxy *) wl_drm, user_data);
+}
+
+static inline void *
+wl_drm_get_user_data(struct wl_drm *wl_drm)
+{
+       return wl_proxy_get_user_data((struct wl_proxy *) wl_drm);
+}
+
+static inline void
+wl_drm_destroy(struct wl_drm *wl_drm)
+{
+       wl_proxy_destroy((struct wl_proxy *) wl_drm);
+}
+
+static inline void
+wl_drm_authenticate(struct wl_drm *wl_drm, uint32_t id)
+{
+       wl_proxy_marshal((struct wl_proxy *) wl_drm,
+                        WL_DRM_AUTHENTICATE, id);
+}
+
+static inline struct wl_buffer *
+wl_drm_create_buffer(struct wl_drm *wl_drm, uint32_t name, int32_t width, int32_t height, uint32_t stride, uint32_t format)
+{
+       struct wl_proxy *id;
+
+       id = wl_proxy_create((struct wl_proxy *) wl_drm,
+                            &wl_buffer_interface);
+       if (!id)
+               return NULL;
+
+       wl_proxy_marshal((struct wl_proxy *) wl_drm,
+                        WL_DRM_CREATE_BUFFER, id, name, width, height, stride, format);
+
+       return (struct wl_buffer *) id;
+}
+
+static inline struct wl_buffer *
+wl_drm_create_planar_buffer(struct wl_drm *wl_drm, uint32_t name, int32_t width, int32_t height, uint32_t format, int32_t offset0, int32_t stride0, int32_t offset1, int32_t stride1, int32_t offset2, int32_t stride2)
+{
+       struct wl_proxy *id;
+
+       id = wl_proxy_create((struct wl_proxy *) wl_drm,
+                            &wl_buffer_interface);
+       if (!id)
+               return NULL;
+
+       wl_proxy_marshal((struct wl_proxy *) wl_drm,
+                        WL_DRM_CREATE_PLANAR_BUFFER, id, name, width, height, format, offset0, stride0, offset1, stride1, offset2, stride2);
+
+       return (struct wl_buffer *) id;
+}
+
+#ifdef  __cplusplus
+}
+#endif
+
+#endif