diff --git a/src/gallium/frontends/dri/loader_dri3_helper.c b/src/gallium/frontends/dri/loader_dri3_helper.c index 7b0c4eacc0c..f53427a4981 100644 --- a/src/gallium/frontends/dri/loader_dri3_helper.c +++ b/src/gallium/frontends/dri/loader_dri3_helper.c @@ -1386,7 +1386,7 @@ dri3_alloc_render_buffer(struct loader_dri3_drawable *draw, unsigned int fourcc, { struct loader_dri3_buffer *buffer; struct dri_image *pixmap_buffer = NULL, *linear_buffer_display_gpu = NULL; - int format = loader_fourcc_to_image_format(fourcc); + enum pipe_format format = loader_fourcc_to_pipe_format(fourcc); xcb_pixmap_t pixmap; xcb_sync_fence_t sync_fence; struct xshmfence *shm_fence; @@ -2166,7 +2166,7 @@ loader_dri3_get_buffers(struct dri_drawable *driDrawable, { struct loader_dri3_drawable *draw = loaderPrivate; struct loader_dri3_buffer *front, *back; - int fourcc = loader_image_format_to_fourcc(format); + int fourcc = loader_pipe_format_to_fourcc(format); int buf_id; buffers->image_mask = 0; diff --git a/src/loader/loader_dri_helper.c b/src/loader/loader_dri_helper.c index ff224b02104..dee92c9a64d 100644 --- a/src/loader/loader_dri_helper.c +++ b/src/loader/loader_dri_helper.c @@ -31,61 +31,58 @@ #include "util/driconf.h" -/* the DRIimage createImage function takes __DRI_IMAGE_FORMAT codes, while - * the createImageFromDmaBufs call takes DRM_FORMAT codes. To avoid - * complete confusion, just deal in __DRI_IMAGE_FORMAT codes for now and - * translate to DRM_FORMAT codes in the call to createImageFromDmaBufs - */ -int -loader_fourcc_to_image_format(int fourcc) +/* Creating a DRIImage accepts a pipe_format, whilst DRM-based platforms + * like GBM, Wayland, and X11, all deal strictly in DRM FourCCs. Map + * between the two worlds. */ +enum pipe_format +loader_fourcc_to_pipe_format(uint32_t fourcc) { /* Convert from DRM_FORMAT to __DRI_IMAGE_FORMAT (sigh) */ switch (fourcc) { - case __DRI_IMAGE_FOURCC_SARGB8888: return __DRI_IMAGE_FORMAT_SARGB8; - case __DRI_IMAGE_FOURCC_SABGR8888: return __DRI_IMAGE_FORMAT_SABGR8; - case __DRI_IMAGE_FOURCC_SXRGB8888: return __DRI_IMAGE_FORMAT_SXRGB8; - case DRM_FORMAT_RGB565: return __DRI_IMAGE_FORMAT_RGB565; - case DRM_FORMAT_ARGB1555: return __DRI_IMAGE_FORMAT_ARGB1555; - case DRM_FORMAT_XRGB8888: return __DRI_IMAGE_FORMAT_XRGB8888; - case DRM_FORMAT_ARGB8888: return __DRI_IMAGE_FORMAT_ARGB8888; - case DRM_FORMAT_ABGR8888: return __DRI_IMAGE_FORMAT_ABGR8888; - case DRM_FORMAT_XBGR8888: return __DRI_IMAGE_FORMAT_XBGR8888; - case DRM_FORMAT_XRGB2101010: return __DRI_IMAGE_FORMAT_XRGB2101010; - case DRM_FORMAT_ARGB2101010: return __DRI_IMAGE_FORMAT_ARGB2101010; - case DRM_FORMAT_XBGR2101010: return __DRI_IMAGE_FORMAT_XBGR2101010; - case DRM_FORMAT_ABGR2101010: return __DRI_IMAGE_FORMAT_ABGR2101010; - case DRM_FORMAT_ABGR16161616: return __DRI_IMAGE_FORMAT_ABGR16161616; - case DRM_FORMAT_XBGR16161616: return __DRI_IMAGE_FORMAT_XBGR16161616; - case DRM_FORMAT_XBGR16161616F: return __DRI_IMAGE_FORMAT_XBGR16161616F; - case DRM_FORMAT_ABGR16161616F: return __DRI_IMAGE_FORMAT_ABGR16161616F; + case __DRI_IMAGE_FOURCC_SARGB8888: return PIPE_FORMAT_B8G8R8A8_SRGB; + case __DRI_IMAGE_FOURCC_SABGR8888: return PIPE_FORMAT_R8G8B8A8_SRGB; + case __DRI_IMAGE_FOURCC_SXRGB8888: return PIPE_FORMAT_B8G8R8X8_SRGB; + case DRM_FORMAT_RGB565: return PIPE_FORMAT_B5G6R5_UNORM; + case DRM_FORMAT_ARGB1555: return PIPE_FORMAT_B5G5R5A1_UNORM; + case DRM_FORMAT_XRGB8888: return PIPE_FORMAT_B8G8R8X8_UNORM; + case DRM_FORMAT_ARGB8888: return PIPE_FORMAT_B8G8R8A8_UNORM; + case DRM_FORMAT_ABGR8888: return PIPE_FORMAT_R8G8B8A8_UNORM; + case DRM_FORMAT_XBGR8888: return PIPE_FORMAT_R8G8B8X8_UNORM; + case DRM_FORMAT_XRGB2101010: return PIPE_FORMAT_B10G10R10X2_UNORM; + case DRM_FORMAT_ARGB2101010: return PIPE_FORMAT_B10G10R10A2_UNORM; + case DRM_FORMAT_XBGR2101010: return PIPE_FORMAT_R10G10B10X2_UNORM; + case DRM_FORMAT_ABGR2101010: return PIPE_FORMAT_R10G10B10A2_UNORM; + case DRM_FORMAT_ABGR16161616: return PIPE_FORMAT_R16G16B16A16_UNORM; + case DRM_FORMAT_XBGR16161616: return PIPE_FORMAT_R16G16B16X16_UNORM; + case DRM_FORMAT_XBGR16161616F: return PIPE_FORMAT_R16G16B16X16_FLOAT; + case DRM_FORMAT_ABGR16161616F: return PIPE_FORMAT_R16G16B16A16_FLOAT; + default: return PIPE_FORMAT_NONE; } - return 0; } -int -loader_image_format_to_fourcc(int format) +uint32_t +loader_pipe_format_to_fourcc(enum pipe_format pipe) { - /* Convert from __DRI_IMAGE_FORMAT to DRM_FORMAT (sigh) */ - switch (format) { - case __DRI_IMAGE_FORMAT_SARGB8: return __DRI_IMAGE_FOURCC_SARGB8888; - case __DRI_IMAGE_FORMAT_SABGR8: return __DRI_IMAGE_FOURCC_SABGR8888; - case __DRI_IMAGE_FORMAT_SXRGB8: return __DRI_IMAGE_FOURCC_SXRGB8888; - case __DRI_IMAGE_FORMAT_RGB565: return DRM_FORMAT_RGB565; - case __DRI_IMAGE_FORMAT_XRGB8888: return DRM_FORMAT_XRGB8888; - case __DRI_IMAGE_FORMAT_ARGB8888: return DRM_FORMAT_ARGB8888; - case __DRI_IMAGE_FORMAT_ABGR8888: return DRM_FORMAT_ABGR8888; - case __DRI_IMAGE_FORMAT_XBGR8888: return DRM_FORMAT_XBGR8888; - case __DRI_IMAGE_FORMAT_XRGB2101010: return DRM_FORMAT_XRGB2101010; - case __DRI_IMAGE_FORMAT_ARGB2101010: return DRM_FORMAT_ARGB2101010; - case __DRI_IMAGE_FORMAT_XBGR2101010: return DRM_FORMAT_XBGR2101010; - case __DRI_IMAGE_FORMAT_ABGR2101010: return DRM_FORMAT_ABGR2101010; - case __DRI_IMAGE_FORMAT_ABGR16161616: return DRM_FORMAT_ABGR16161616; - case __DRI_IMAGE_FORMAT_XBGR16161616: return DRM_FORMAT_XBGR16161616; - case __DRI_IMAGE_FORMAT_XBGR16161616F: return DRM_FORMAT_XBGR16161616F; - case __DRI_IMAGE_FORMAT_ABGR16161616F: return DRM_FORMAT_ABGR16161616F; - case __DRI_IMAGE_FORMAT_ARGB1555: return DRM_FORMAT_ARGB1555; + switch (pipe) { + case PIPE_FORMAT_B8G8R8A8_SRGB: return __DRI_IMAGE_FOURCC_SARGB8888; + case PIPE_FORMAT_R8G8B8A8_SRGB: return __DRI_IMAGE_FOURCC_SABGR8888; + case PIPE_FORMAT_B8G8R8X8_SRGB: return __DRI_IMAGE_FOURCC_SXRGB8888; + case PIPE_FORMAT_B5G6R5_UNORM: return DRM_FORMAT_RGB565; + case PIPE_FORMAT_B5G5R5A1_UNORM: return DRM_FORMAT_ARGB1555; + case PIPE_FORMAT_B8G8R8X8_UNORM: return DRM_FORMAT_XRGB8888; + case PIPE_FORMAT_B8G8R8A8_UNORM: return DRM_FORMAT_ARGB8888; + case PIPE_FORMAT_R8G8B8A8_UNORM: return DRM_FORMAT_ABGR8888; + case PIPE_FORMAT_R8G8B8X8_UNORM: return DRM_FORMAT_XBGR8888; + case PIPE_FORMAT_B10G10R10X2_UNORM: return DRM_FORMAT_XRGB2101010; + case PIPE_FORMAT_B10G10R10A2_UNORM: return DRM_FORMAT_ARGB2101010; + case PIPE_FORMAT_R10G10B10X2_UNORM: return DRM_FORMAT_XBGR2101010; + case PIPE_FORMAT_R10G10B10A2_UNORM: return DRM_FORMAT_ABGR2101010; + case PIPE_FORMAT_R16G16B16A16_UNORM: return DRM_FORMAT_ABGR16161616; + case PIPE_FORMAT_R16G16B16X16_UNORM: return DRM_FORMAT_XBGR16161616; + case PIPE_FORMAT_R16G16B16X16_FLOAT: return DRM_FORMAT_XBGR16161616F; + case PIPE_FORMAT_R16G16B16A16_FLOAT: return DRM_FORMAT_ABGR16161616F; + default: return DRM_FORMAT_INVALID; } - return 0; } #ifdef HAVE_X11_PLATFORM diff --git a/src/loader/loader_dri_helper.h b/src/loader/loader_dri_helper.h index 56322a6e571..169e36b5d80 100644 --- a/src/loader/loader_dri_helper.h +++ b/src/loader/loader_dri_helper.h @@ -104,11 +104,11 @@ struct loader_screen_resources { #define __DRI_IMAGE_FORMAT_ABGR1555 PIPE_FORMAT_R5G5B5A1_UNORM #define __DRI_IMAGE_FORMAT_XBGR1555 PIPE_FORMAT_R5G5B5X1_UNORM -int -loader_image_format_to_fourcc(int format); +uint32_t +loader_pipe_format_to_fourcc(enum pipe_format pipe); -int -loader_fourcc_to_image_format(int format); +enum pipe_format +loader_fourcc_to_pipe_format(uint32_t fourcc); #ifdef HAVE_X11_PLATFORM void