[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