diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/egl/drivers/dri2/platform_wayland.c | 41 |
1 files changed, 38 insertions, 3 deletions
diff --git a/src/egl/drivers/dri2/platform_wayland.c b/src/egl/drivers/dri2/platform_wayland.c index 3c34e071580..07f68a28534 100644 --- a/src/egl/drivers/dri2/platform_wayland.c +++ b/src/egl/drivers/dri2/platform_wayland.c @@ -292,6 +292,26 @@ get_back_bo(struct dri2_egl_surface *dri2_surf) struct dri2_egl_display *dri2_dpy = dri2_egl_display(dri2_surf->base.Resource.Display); int i; + unsigned int dri_image_format; + + /* currently supports three WL DRM formats, + * WL_DRM_FORMAT_ARGB8888, WL_DRM_FORMAT_XRGB8888, + * and WL_DRM_FORMAT_RGB565 + */ + switch (dri2_surf->format) { + case WL_DRM_FORMAT_ARGB8888: + dri_image_format = __DRI_IMAGE_FORMAT_ARGB8888; + break; + case WL_DRM_FORMAT_XRGB8888: + dri_image_format = __DRI_IMAGE_FORMAT_XRGB8888; + break; + case WL_DRM_FORMAT_RGB565: + dri_image_format = __DRI_IMAGE_FORMAT_RGB565; + break; + default: + /* format is not supported */ + return -1; + } /* We always want to throttle to some event (either a frame callback or * a sync request) after the commit so that we can be sure the @@ -322,7 +342,7 @@ get_back_bo(struct dri2_egl_surface *dri2_surf) dri2_dpy->image->createImage(dri2_dpy->dri_screen, dri2_surf->base.Width, dri2_surf->base.Height, - __DRI_IMAGE_FORMAT_ARGB8888, + dri_image_format, __DRI_IMAGE_USE_SHARE, NULL); dri2_surf->back->age = 0; @@ -462,11 +482,26 @@ dri2_wl_get_buffers(__DRIdrawable * driDrawable, unsigned int *attachments, int count, int *out_count, void *loaderPrivate) { + struct dri2_egl_surface *dri2_surf = loaderPrivate; unsigned int *attachments_with_format; __DRIbuffer *buffer; - const unsigned int format = 32; + unsigned int bpp; + int i; + switch (dri2_surf->format) { + case WL_DRM_FORMAT_ARGB8888: + case WL_DRM_FORMAT_XRGB8888: + bpp = 32; + break; + case WL_DRM_FORMAT_RGB565: + bpp = 16; + break; + default: + /* format is not supported */ + return NULL; + } + attachments_with_format = calloc(count, 2 * sizeof(unsigned int)); if (!attachments_with_format) { *out_count = 0; @@ -475,7 +510,7 @@ dri2_wl_get_buffers(__DRIdrawable * driDrawable, for (i = 0; i < count; ++i) { attachments_with_format[2*i] = attachments[i]; - attachments_with_format[2*i + 1] = format; + attachments_with_format[2*i + 1] = bpp; } buffer = |