[Mesa-dev] [PATCH] st/egl: Prepare for EGL_ALPHA_FORMAT

Benjamin Franzke benjaminfranzke at googlemail.com
Thu Sep 1 02:53:05 PDT 2011


In preparation for wayland ALPHA_FORMAT usage,
see commit 7b1d94e5d1f53ac5f59000176aea1d02fc9a1181.

Changes:
 - New native_config surface_type bit: alpha_format_pre_bit
 - Introduction of native_surface_attribs
   (as new parameter in create_{window,pixmap}_surface)
 - New attrib alpha_format in native_surface_attribs

CC: Chia-I Wu <olv at lunarg.com>
---
 .../state_trackers/egl/android/native_android.cpp  |    3 ++-
 src/gallium/state_trackers/egl/common/egl_g3d.c    |    3 +++
 .../state_trackers/egl/common/egl_g3d_api.c        |   13 +++++++++++--
 .../state_trackers/egl/common/egl_g3d_image.c      |    2 +-
 src/gallium/state_trackers/egl/common/native.h     |   11 +++++++++--
 .../state_trackers/egl/common/native_helper.c      |    2 +-
 src/gallium/state_trackers/egl/drm/native_drm.c    |    3 ++-
 src/gallium/state_trackers/egl/gdi/native_gdi.c    |    3 ++-
 .../state_trackers/egl/wayland/native_wayland.c    |    6 ++++--
 src/gallium/state_trackers/egl/x11/native_dri2.c   |    6 ++++--
 src/gallium/state_trackers/egl/x11/native_ximage.c |    6 ++++--
 11 files changed, 43 insertions(+), 15 deletions(-)

diff --git a/src/gallium/state_trackers/egl/android/native_android.cpp b/src/gallium/state_trackers/egl/android/native_android.cpp
index 338427d..e4a74b3 100644
--- a/src/gallium/state_trackers/egl/android/native_android.cpp
+++ b/src/gallium/state_trackers/egl/android/native_android.cpp
@@ -494,7 +494,8 @@ android_surface_destroy(struct native_surface *nsurf)
 static struct native_surface *
 android_display_create_window_surface(struct native_display *ndpy,
                                       EGLNativeWindowType win,
-                                      const struct native_config *nconf)
+                                      const struct native_config *nconf,
+                                      const struct native_surface_attribs *attr)
 {
    struct android_display *adpy = android_display(ndpy);
    struct android_config *aconf = android_config(nconf);
diff --git a/src/gallium/state_trackers/egl/common/egl_g3d.c b/src/gallium/state_trackers/egl/common/egl_g3d.c
index b5e3d99..233867b 100644
--- a/src/gallium/state_trackers/egl/common/egl_g3d.c
+++ b/src/gallium/state_trackers/egl/common/egl_g3d.c
@@ -262,6 +262,9 @@ init_config_attributes(_EGLConfig *conf, const struct native_config *nconf,
       surface_type |= EGL_PBUFFER_BIT;
    }
 
+   if (nconf->alpha_format_pre_bit)
+      surface_type |= EGL_VG_ALPHA_FORMAT_PRE_BIT;
+
    conf->Conformant = api_mask;
    conf->RenderableType = api_mask;
 
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 f897054..1b81e78 100644
--- a/src/gallium/state_trackers/egl/common/egl_g3d_api.c
+++ b/src/gallium/state_trackers/egl/common/egl_g3d_api.c
@@ -217,6 +217,13 @@ struct egl_g3d_create_surface_arg {
    } u;
 };
 
+static void
+egl_g3d_fill_surface_attribs(struct egl_g3d_surface *gsurf,
+                             struct native_surface_attribs *attr)
+{
+   attr->alpha_format = gsurf->base.VGAlphaFormat;
+}
+
 static _EGLSurface *
 egl_g3d_create_surface(_EGLDriver *drv, _EGLDisplay *dpy, _EGLConfig *conf,
                        struct egl_g3d_create_surface_arg *arg,
@@ -226,6 +233,7 @@ egl_g3d_create_surface(_EGLDriver *drv, _EGLDisplay *dpy, _EGLConfig *conf,
    struct egl_g3d_config *gconf = egl_g3d_config(conf);
    struct egl_g3d_surface *gsurf;
    struct native_surface *nsurf;
+   struct native_surface_attribs nsurf_attr;
    const char *err;
 
    switch (arg->type) {
@@ -255,16 +263,17 @@ egl_g3d_create_surface(_EGLDriver *drv, _EGLDisplay *dpy, _EGLConfig *conf,
       FREE(gsurf);
       return NULL;
    }
+   egl_g3d_fill_surface_attribs(gsurf, &nsurf_attr);
 
    /* create the native surface */
    switch (arg->type) {
    case EGL_WINDOW_BIT:
       nsurf = gdpy->native->create_window_surface(gdpy->native,
-            arg->u.win, gconf->native);
+            arg->u.win, gconf->native, &nsurf_attr);
       break;
    case EGL_PIXMAP_BIT:
       nsurf = gdpy->native->create_pixmap_surface(gdpy->native,
-            arg->u.pix, gconf->native);
+            arg->u.pix, gconf->native, &nsurf_attr);
       break;
 #ifdef EGL_MESA_screen_surface
    case EGL_SCREEN_BIT_MESA:
diff --git a/src/gallium/state_trackers/egl/common/egl_g3d_image.c b/src/gallium/state_trackers/egl/common/egl_g3d_image.c
index 4d90c40..6d3315a 100644
--- a/src/gallium/state_trackers/egl/common/egl_g3d_image.c
+++ b/src/gallium/state_trackers/egl/common/egl_g3d_image.c
@@ -48,7 +48,7 @@ egl_g3d_reference_native_pixmap(_EGLDisplay *dpy, EGLNativePixmapType pix)
    struct pipe_resource *textures[NUM_NATIVE_ATTACHMENTS];
    enum native_attachment natt;
 
-   nsurf = gdpy->native->create_pixmap_surface(gdpy->native, pix, NULL);
+   nsurf = gdpy->native->create_pixmap_surface(gdpy->native, pix, NULL, NULL);
    if (!nsurf)
       return NULL;
 
diff --git a/src/gallium/state_trackers/egl/common/native.h b/src/gallium/state_trackers/egl/common/native.h
index 58593a4..5df8e7d 100644
--- a/src/gallium/state_trackers/egl/common/native.h
+++ b/src/gallium/state_trackers/egl/common/native.h
@@ -111,6 +111,10 @@ struct native_surface {
    void (*wait)(struct native_surface *nsurf);
 };
 
+struct native_surface_attribs {
+   uint alpha_format;
+};
+
 /**
  * Describe a native display config.
  */
@@ -123,6 +127,7 @@ struct native_config {
    boolean window_bit;
    boolean pixmap_bit;
    boolean scanout_bit;
+   boolean alpha_format_pre_bit;
 
    int native_visual_id;
    int native_visual_type;
@@ -196,7 +201,8 @@ struct native_display {
     */
    struct native_surface *(*create_window_surface)(struct native_display *ndpy,
                                                    EGLNativeWindowType win,
-                                                   const struct native_config *nconf);
+                                                   const struct native_config *nconf,
+                                                   const struct native_surface_attribs *attribs);
 
    /**
     * Create a pixmap surface.  The native config may be NULL.  In that case, a
@@ -205,7 +211,8 @@ struct native_display {
     */
    struct native_surface *(*create_pixmap_surface)(struct native_display *ndpy,
                                                    EGLNativePixmapType pix,
-                                                   const struct native_config *nconf);
+                                                   const struct native_config *nconf,
+                                                   const struct native_surface_attribs *attribs);
 
    const struct native_display_buffer *buffer;
    const struct native_display_modeset *modeset;
diff --git a/src/gallium/state_trackers/egl/common/native_helper.c b/src/gallium/state_trackers/egl/common/native_helper.c
index cca1e1c..bea7635 100644
--- a/src/gallium/state_trackers/egl/common/native_helper.c
+++ b/src/gallium/state_trackers/egl/common/native_helper.c
@@ -383,7 +383,7 @@ native_display_copy_to_pixmap(struct native_display *ndpy,
    if (!pipe)
       return FALSE;
 
-   nsurf = ndpy->create_pixmap_surface(ndpy, pix, NULL);
+   nsurf = ndpy->create_pixmap_surface(ndpy, pix, NULL, NULL);
    if (!nsurf)
       return FALSE;
 
diff --git a/src/gallium/state_trackers/egl/drm/native_drm.c b/src/gallium/state_trackers/egl/drm/native_drm.c
index c013769..0c4e496 100644
--- a/src/gallium/state_trackers/egl/drm/native_drm.c
+++ b/src/gallium/state_trackers/egl/drm/native_drm.c
@@ -247,7 +247,8 @@ static struct native_display_wayland_bufmgr drm_display_wayland_bufmgr = {
 static struct native_surface *
 drm_create_pixmap_surface(struct native_display *ndpy,
                               EGLNativePixmapType pix,
-                              const struct native_config *nconf)
+                              const struct native_config *nconf,
+                              const struct native_surface_attribs *attr)
 {
    struct gbm_gallium_drm_bo *bo = (void *) pix;
 
diff --git a/src/gallium/state_trackers/egl/gdi/native_gdi.c b/src/gallium/state_trackers/egl/gdi/native_gdi.c
index 6bf0d4e..548d402 100644
--- a/src/gallium/state_trackers/egl/gdi/native_gdi.c
+++ b/src/gallium/state_trackers/egl/gdi/native_gdi.c
@@ -229,7 +229,8 @@ gdi_surface_destroy(struct native_surface *nsurf)
 static struct native_surface *
 gdi_display_create_window_surface(struct native_display *ndpy,
                                   EGLNativeWindowType win,
-                                  const struct native_config *nconf)
+                                  const struct native_config *nconf,
+                                  const struct native_surface_attribs *attr)
 {
    struct gdi_display *gdpy = gdi_display(ndpy);
    struct gdi_surface *gsurf;
diff --git a/src/gallium/state_trackers/egl/wayland/native_wayland.c b/src/gallium/state_trackers/egl/wayland/native_wayland.c
index 544d4be..548a340 100644
--- a/src/gallium/state_trackers/egl/wayland/native_wayland.c
+++ b/src/gallium/state_trackers/egl/wayland/native_wayland.c
@@ -352,7 +352,8 @@ wayland_surface_destroy(struct native_surface *nsurf)
 static struct native_surface *
 wayland_create_pixmap_surface(struct native_display *ndpy,
                               EGLNativePixmapType pix,
-                              const struct native_config *nconf)
+                              const struct native_config *nconf,
+                              const struct native_surface_attribs *attr)
 {
    struct wayland_display *display = wayland_display(ndpy);
    struct wayland_surface *surface;
@@ -406,7 +407,8 @@ wayland_create_pixmap_surface(struct native_display *ndpy,
 static struct native_surface *
 wayland_create_window_surface(struct native_display *ndpy,
                               EGLNativeWindowType win,
-                              const struct native_config *nconf)
+                              const struct native_config *nconf,
+                              const struct native_surface_attribs *attr)
 {
    struct wayland_display *display = wayland_display(ndpy);
    struct wayland_config *config = wayland_config(nconf);
diff --git a/src/gallium/state_trackers/egl/x11/native_dri2.c b/src/gallium/state_trackers/egl/x11/native_dri2.c
index 4b8be7b..385810e 100644
--- a/src/gallium/state_trackers/egl/x11/native_dri2.c
+++ b/src/gallium/state_trackers/egl/x11/native_dri2.c
@@ -475,7 +475,8 @@ dri2_display_create_surface(struct native_display *ndpy,
 static struct native_surface *
 dri2_display_create_window_surface(struct native_display *ndpy,
                                    EGLNativeWindowType win,
-                                   const struct native_config *nconf)
+                                   const struct native_config *nconf,
+                                   const struct native_surface_attribs *attr)
 {
    struct dri2_surface *dri2surf;
 
@@ -487,7 +488,8 @@ dri2_display_create_window_surface(struct native_display *ndpy,
 static struct native_surface *
 dri2_display_create_pixmap_surface(struct native_display *ndpy,
                                    EGLNativePixmapType pix,
-                                   const struct native_config *nconf)
+                                   const struct native_config *nconf,
+                                   const struct native_surface_attribs *attr)
 {
    struct dri2_surface *dri2surf;
 
diff --git a/src/gallium/state_trackers/egl/x11/native_ximage.c b/src/gallium/state_trackers/egl/x11/native_ximage.c
index e7794f0..e5cf860 100644
--- a/src/gallium/state_trackers/egl/x11/native_ximage.c
+++ b/src/gallium/state_trackers/egl/x11/native_ximage.c
@@ -285,7 +285,8 @@ ximage_display_create_surface(struct native_display *ndpy,
 static struct native_surface *
 ximage_display_create_window_surface(struct native_display *ndpy,
                                      EGLNativeWindowType win,
-                                     const struct native_config *nconf)
+                                     const struct native_config *nconf,
+                                     const struct native_surface_attribs *attr)
 {
    struct ximage_surface *xsurf;
 
@@ -323,7 +324,8 @@ get_pixmap_format(struct native_display *ndpy, EGLNativePixmapType pix)
 static struct native_surface *
 ximage_display_create_pixmap_surface(struct native_display *ndpy,
                                      EGLNativePixmapType pix,
-                                     const struct native_config *nconf)
+                                     const struct native_config *nconf,
+                                     const struct native_surface_attribs *attr)
 {
    struct ximage_surface *xsurf;
 
-- 
1.7.3.4



More information about the mesa-dev mailing list