Mesa (master): gallium-egl: Implement eglQueryWaylandBufferWL

Kristian Høgsberg krh at kemper.freedesktop.org
Thu Jul 19 18:18:36 UTC 2012


Module: Mesa
Branch: master
Commit: e1b45a3c06ec19a2b9f1e0d3f8732aaad2d932da
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=e1b45a3c06ec19a2b9f1e0d3f8732aaad2d932da

Author: Kristian Høgsberg <krh at bitplanet.net>
Date:   Thu Jul 19 08:48:45 2012 -0400

gallium-egl: Implement eglQueryWaylandBufferWL

Support this query for gallium EGL too.

Signed-off-by: Kristian Høgsberg <krh at bitplanet.net>

---

 .../state_trackers/egl/common/egl_g3d_api.c        |   32 +++++++++++++++++++-
 1 files changed, 31 insertions(+), 1 deletions(-)

diff --git a/src/gallium/state_trackers/egl/common/egl_g3d_api.c b/src/gallium/state_trackers/egl/common/egl_g3d_api.c
index 58e772f..f2e86de 100644
--- a/src/gallium/state_trackers/egl/common/egl_g3d_api.c
+++ b/src/gallium/state_trackers/egl/common/egl_g3d_api.c
@@ -39,6 +39,10 @@
 #include "egl_g3d_st.h"
 #include "native.h"
 
+#ifdef EGL_WL_bind_wayland_display
+#include <wayland-drm.h>
+#endif
+
 /**
  * Return the state tracker for the given context.
  */
@@ -873,6 +877,32 @@ egl_g3d_unbind_wayland_display_wl(_EGLDriver *drv, _EGLDisplay *dpy,
    return gdpy->native->wayland_bufmgr->unbind_display(gdpy->native, wl_dpy);
 }
 
+static EGLBoolean
+egl_g3d_query_wayland_buffer_wl(_EGLDriver *drv, _EGLDisplay *dpy,
+                                struct wl_buffer *_buffer,
+                                EGLint attribute, EGLint *value)
+{
+   struct wl_drm_buffer *buffer = (struct wl_drm_buffer *) _buffer;
+   struct pipe_resource *resource = buffer->driver_buffer;
+
+   if (!wayland_buffer_is_drm(&buffer->buffer))
+      return EGL_FALSE;
+
+   if (attribute == EGL_WAYLAND_BUFFER_COMPONENTS_WL) {
+      switch (resource->format) {
+      case PIPE_FORMAT_B8G8R8A8_UNORM:
+         *value = EGL_WAYLAND_BUFFER_RGBA_WL;
+         return EGL_TRUE;
+      case PIPE_FORMAT_B8G8R8X8_UNORM:
+         *value = EGL_WAYLAND_BUFFER_RGB_WL;
+         return EGL_TRUE;
+      default:
+         return EGL_FALSE;
+      }
+   }
+
+   return EGL_FALSE;
+}
 #endif /* EGL_WL_bind_wayland_display */
 
 void
@@ -907,7 +937,7 @@ egl_g3d_init_driver_api(_EGLDriver *drv)
 #ifdef EGL_WL_bind_wayland_display
    drv->API.BindWaylandDisplayWL = egl_g3d_bind_wayland_display_wl;
    drv->API.UnbindWaylandDisplayWL = egl_g3d_unbind_wayland_display_wl;
-
+   drv->API.QueryWaylandBufferWL = egl_g3d_query_wayland_buffer_wl;
 #endif
 
    drv->API.CreateSyncKHR = egl_g3d_create_sync;




More information about the mesa-commit mailing list