dri: Convert DRI_IMAGE_FORMAT to pipe_format

No functional change.

Signed-off-by: Daniel Stone <daniels@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/36081>
This commit is contained in:
Daniel Stone 2025-07-02 18:16:30 +01:00 committed by Marge Bot
parent 3fcf63f364
commit b6332eb43b
3 changed files with 50 additions and 53 deletions

View file

@ -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;

View file

@ -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

View file

@ -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