summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gallium/state_trackers/egl/wayland/native_wayland.c38
1 files changed, 21 insertions, 17 deletions
diff --git a/src/gallium/state_trackers/egl/wayland/native_wayland.c b/src/gallium/state_trackers/egl/wayland/native_wayland.c
index e7ed9d64b7e..0292d5631d6 100644
--- a/src/gallium/state_trackers/egl/wayland/native_wayland.c
+++ b/src/gallium/state_trackers/egl/wayland/native_wayland.c
@@ -61,31 +61,35 @@ wayland_display_get_configs (struct native_display *ndpy, int *num_configs)
{
struct wayland_display *display = wayland_display(ndpy);
const struct native_config **configs;
+ int i;
if (!display->config) {
struct native_config *nconf;
- enum pipe_format format;
- display->config = CALLOC(1, sizeof(*display->config));
+ display->config = CALLOC(2, sizeof(*display->config));
if (!display->config)
return NULL;
- nconf = &display->config->base;
-
- nconf->buffer_mask =
- (1 << NATIVE_ATTACHMENT_FRONT_LEFT) |
- (1 << NATIVE_ATTACHMENT_BACK_LEFT);
- format = PIPE_FORMAT_B8G8R8A8_UNORM;
+ for (i = 0; i < 2; ++i) {
+ nconf = &display->config[i].base;
+
+ nconf->buffer_mask =
+ (1 << NATIVE_ATTACHMENT_FRONT_LEFT) |
+ (1 << NATIVE_ATTACHMENT_BACK_LEFT);
+
+ nconf->window_bit = TRUE;
+ nconf->pixmap_bit = TRUE;
+ }
- nconf->color_format = format;
- nconf->window_bit = TRUE;
- nconf->pixmap_bit = TRUE;
+ display->config[0].base.color_format = PIPE_FORMAT_B8G8R8A8_UNORM;
+ display->config[1].base.color_format = PIPE_FORMAT_B8G8R8X8_UNORM;
}
- configs = MALLOC(sizeof(*configs));
+ configs = MALLOC(2 * sizeof(*configs));
if (configs) {
- configs[0] = &display->config->base;
+ configs[0] = &display->config[0].base;
+ configs[1] = &display->config[1].base;
if (num_configs)
- *num_configs = 1;
+ *num_configs = 2;
}
return configs;
@@ -368,9 +372,9 @@ wayland_create_pixmap_surface(struct native_display *ndpy,
surface->type = WL_PIXMAP_SURFACE;
surface->pix = egl_pixmap;
- if (surface->pix->visual == wl_display_get_rgb_visual(display->dpy))
- surface->color_format = PIPE_FORMAT_B8G8R8X8_UNORM;
- else
+ if (nconf)
+ surface->color_format = nconf->color_format;
+ else /* FIXME: derive format from wl_visual */
surface->color_format = PIPE_FORMAT_B8G8R8A8_UNORM;
surface->attachment_mask = (1 << NATIVE_ATTACHMENT_FRONT_LEFT);