wayland: Support EGL_WIDTH and EGL_HEIGHT queries for wl_buffer
authorKristian Høgsberg <krh@bitplanet.net>
Thu, 19 Jul 2012 13:02:25 +0000 (09:02 -0400)
committerKristian Høgsberg <krh@bitplanet.net>
Thu, 19 Jul 2012 18:03:17 +0000 (14:03 -0400)
We're going to make the public wl_buffer struct as small as possible.

Signed-off-by: Kristian Høgsberg <krh@bitplanet.net>
docs/WL_bind_wayland_display.spec
src/egl/drivers/dri2/egl_dri2.c
src/gallium/state_trackers/egl/common/egl_g3d_api.c

index eca6acd5b785444bb5f11586e243053a4014dca4..02bd6ea21129341b3b89e497bef416cc993f915a 100644 (file)
@@ -154,6 +154,9 @@ Additions to the EGL 1.4 Specification:
     from a wl_buffer in any way (such as glTexImage2D, binding the
     EGLImage as a renderbuffer etc) will result in undefined behavior.
 
+    Further, eglQueryWaylandBufferWL accepts attributes EGL_WIDTH and
+    EGL_HEIGHT to query the width and height of the wl_buffer.
+
 Issues
 
 Revision History
@@ -168,4 +171,5 @@ Revision History
         formats. (Kristian Høgsberg)
     Version 4, July 19, 2012
         Use EGL_TEXTURE_FORMAT, EGL_TEXTURE_RGB, and EGL_TEXTURE_RGBA,
-        and just define the new YUV texture formats. (Kristian Høgsberg)
+        and just define the new YUV texture formats.  Add support for
+        EGL_WIDTH and EGL_HEIGHT in the query attributes (Kristian Høgsberg)
index 8d82c19d72fec402af57e258826f4407ea87a31a..f86ed0bd5fca3d627c8a349d716475339167ae83 100644 (file)
@@ -1414,9 +1414,16 @@ dri2_query_wayland_buffer_wl(_EGLDriver *drv, _EGLDisplay *disp,
       return EGL_FALSE;
 
    format = buffer->driver_format;
-   if (attribute == EGL_TEXTURE_FORMAT) {
+   switch (attribute) {
+   case EGL_TEXTURE_FORMAT:
       *value = format->components;
       return EGL_TRUE;
+   case EGL_WIDTH:
+      *value = buffer->buffer.width;
+      break;
+   case EGL_HEIGHT:
+      *value = buffer->buffer.height;
+      break;
    }
 
    return EGL_FALSE;
index b3941f2467b1b919f6840e1e58c3f246678bdd31..a73859c0b9da44a8304a2b5cccb2899fc77a8b45 100644 (file)
@@ -888,7 +888,8 @@ egl_g3d_query_wayland_buffer_wl(_EGLDriver *drv, _EGLDisplay *dpy,
    if (!wayland_buffer_is_drm(&buffer->buffer))
       return EGL_FALSE;
 
-   if (attribute == EGL_TEXTURE_FORMAT) {
+   switch (attribute) {
+   case EGL_TEXTURE_FORMAT:
       switch (resource->format) {
       case PIPE_FORMAT_B8G8R8A8_UNORM:
          *value = EGL_TEXTURE_RGBA;
@@ -899,9 +900,15 @@ egl_g3d_query_wayland_buffer_wl(_EGLDriver *drv, _EGLDisplay *dpy,
       default:
          return EGL_FALSE;
       }
+   case EGL_WIDTH:
+      *value = buffer->buffer.width;
+      return EGL_TRUE;
+   case EGL_HEIGHT:
+      *value = buffer->buffer.height;
+      return EGL_TRUE;
+   default:
+      return EGL_FALSE;
    }
-
-   return EGL_FALSE;
 }
 #endif /* EGL_WL_bind_wayland_display */