egl/x11: deduplicate depth-to-format logic

Suggested-by: Emil Velikov <emil.l.velikov@gmail.com>
Signed-off-by: Eric Engestrom <eric.engestrom@intel.com>
Reviewed-by: Tapani Pälli <tapani.palli@intel.com>
This commit is contained in:
Eric Engestrom 2018-05-17 16:16:34 +01:00
parent 7b54404c9d
commit 473af0b541
3 changed files with 26 additions and 33 deletions

View File

@ -1006,6 +1006,24 @@ dri2_x11_copy_buffers(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *surf,
return EGL_TRUE; return EGL_TRUE;
} }
uint32_t
dri2_format_for_depth(uint32_t depth)
{
switch (depth) {
case 16:
return __DRI_IMAGE_FORMAT_RGB565;
case 24:
return __DRI_IMAGE_FORMAT_XRGB8888;
case 30:
return __DRI_IMAGE_FORMAT_XRGB2101010;
case 32:
return __DRI_IMAGE_FORMAT_ARGB8888;
default:
return __DRI_IMAGE_FORMAT_NONE;
}
}
static _EGLImage * static _EGLImage *
dri2_create_image_khr_pixmap(_EGLDisplay *disp, _EGLContext *ctx, dri2_create_image_khr_pixmap(_EGLDisplay *disp, _EGLContext *ctx,
EGLClientBuffer buffer, const EGLint *attr_list) EGLClientBuffer buffer, const EGLint *attr_list)
@ -1050,20 +1068,9 @@ dri2_create_image_khr_pixmap(_EGLDisplay *disp, _EGLContext *ctx,
return NULL; return NULL;
} }
switch (geometry_reply->depth) { format = dri2_format_for_depth(geometry_reply->depth);
case 16:
format = __DRI_IMAGE_FORMAT_RGB565; if (format == __DRI_IMAGE_FORMAT_NONE) {
break;
case 24:
format = __DRI_IMAGE_FORMAT_XRGB8888;
break;
case 30:
format = __DRI_IMAGE_FORMAT_XRGB2101010;
break;
case 32:
format = __DRI_IMAGE_FORMAT_ARGB8888;
break;
default:
_eglError(EGL_BAD_PARAMETER, _eglError(EGL_BAD_PARAMETER,
"dri2_create_image_khr: unsupported pixmap depth"); "dri2_create_image_khr: unsupported pixmap depth");
free(buffers_reply); free(buffers_reply);

View File

@ -39,23 +39,6 @@
#include "loader.h" #include "loader.h"
#include "loader_dri3_helper.h" #include "loader_dri3_helper.h"
static uint32_t
dri3_format_for_depth(uint32_t depth)
{
switch (depth) {
case 16:
return __DRI_IMAGE_FORMAT_RGB565;
case 24:
return __DRI_IMAGE_FORMAT_XRGB8888;
case 30:
return __DRI_IMAGE_FORMAT_XRGB2101010;
case 32:
return __DRI_IMAGE_FORMAT_ARGB8888;
default:
return __DRI_IMAGE_FORMAT_NONE;
}
}
static struct dri3_egl_surface * static struct dri3_egl_surface *
loader_drawable_to_egl_surface(struct loader_dri3_drawable *draw) { loader_drawable_to_egl_surface(struct loader_dri3_drawable *draw) {
size_t offset = offsetof(struct dri3_egl_surface, loader_drawable); size_t offset = offsetof(struct dri3_egl_surface, loader_drawable);
@ -298,7 +281,7 @@ dri3_create_image_khr_pixmap(_EGLDisplay *disp, _EGLContext *ctx,
return NULL; return NULL;
} }
format = dri3_format_for_depth(bp_reply->depth); format = dri2_format_for_depth(bp_reply->depth);
if (format == __DRI_IMAGE_FORMAT_NONE) { if (format == __DRI_IMAGE_FORMAT_NONE) {
_eglError(EGL_BAD_PARAMETER, _eglError(EGL_BAD_PARAMETER,
"dri3_create_image_khr: unsupported pixmap depth"); "dri3_create_image_khr: unsupported pixmap depth");
@ -350,7 +333,7 @@ dri3_create_image_khr_pixmap_from_buffers(_EGLDisplay *disp, _EGLContext *ctx,
return EGL_NO_IMAGE_KHR; return EGL_NO_IMAGE_KHR;
} }
format = dri3_format_for_depth(bp_reply->depth); format = dri2_format_for_depth(bp_reply->depth);
if (format == __DRI_IMAGE_FORMAT_NONE) { if (format == __DRI_IMAGE_FORMAT_NONE) {
_eglError(EGL_BAD_PARAMETER, _eglError(EGL_BAD_PARAMETER,
"dri3_create_image_khr: unsupported pixmap depth"); "dri3_create_image_khr: unsupported pixmap depth");

View File

@ -38,4 +38,7 @@ extern struct dri2_egl_display_vtbl dri3_x11_display_vtbl;
EGLBoolean EGLBoolean
dri3_x11_connect(struct dri2_egl_display *dri2_dpy); dri3_x11_connect(struct dri2_egl_display *dri2_dpy);
uint32_t
dri2_format_for_depth(uint32_t depth);
#endif #endif