mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 20:28:04 +02:00
dri: Convert pipe_format <-> FourCC lookup to a table
Saves typing it out twice. Signed-off-by: Daniel Stone <daniels@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/36081>
This commit is contained in:
parent
b6332eb43b
commit
d6e639816f
1 changed files with 33 additions and 39 deletions
|
|
@ -34,55 +34,49 @@
|
|||
/* 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. */
|
||||
static const struct {
|
||||
enum pipe_format pipe;
|
||||
uint32_t fourcc;
|
||||
} pipe_format_to_fourcc[] = {
|
||||
{ PIPE_FORMAT_B8G8R8X8_SRGB, __DRI_IMAGE_FOURCC_SXRGB8888 },
|
||||
{ PIPE_FORMAT_B8G8R8A8_SRGB, __DRI_IMAGE_FOURCC_SARGB8888 },
|
||||
{ PIPE_FORMAT_R8G8B8A8_SRGB, __DRI_IMAGE_FOURCC_SABGR8888 },
|
||||
{ PIPE_FORMAT_B5G5R5A1_UNORM, DRM_FORMAT_ARGB1555 },
|
||||
{ PIPE_FORMAT_B5G6R5_UNORM, DRM_FORMAT_RGB565 },
|
||||
{ PIPE_FORMAT_B8G8R8X8_UNORM, DRM_FORMAT_XRGB8888 },
|
||||
{ PIPE_FORMAT_B8G8R8A8_UNORM, DRM_FORMAT_ARGB8888 },
|
||||
{ PIPE_FORMAT_R8G8B8X8_UNORM, DRM_FORMAT_XBGR8888 },
|
||||
{ PIPE_FORMAT_R8G8B8A8_UNORM, DRM_FORMAT_ABGR8888 },
|
||||
{ PIPE_FORMAT_B10G10R10X2_UNORM, DRM_FORMAT_XRGB2101010 },
|
||||
{ PIPE_FORMAT_B10G10R10A2_UNORM, DRM_FORMAT_ARGB2101010 },
|
||||
{ PIPE_FORMAT_R10G10B10X2_UNORM, DRM_FORMAT_XBGR2101010 },
|
||||
{ PIPE_FORMAT_R10G10B10A2_UNORM, DRM_FORMAT_ABGR2101010 },
|
||||
{ PIPE_FORMAT_R16G16B16X16_UNORM, DRM_FORMAT_XBGR16161616 },
|
||||
{ PIPE_FORMAT_R16G16B16A16_UNORM, DRM_FORMAT_ABGR16161616 },
|
||||
{ PIPE_FORMAT_R16G16B16X16_FLOAT, DRM_FORMAT_XBGR16161616F },
|
||||
{ PIPE_FORMAT_R16G16B16A16_FLOAT, DRM_FORMAT_ABGR16161616F },
|
||||
};
|
||||
|
||||
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 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;
|
||||
for (int i = 0; i < ARRAY_SIZE(pipe_format_to_fourcc); i++) {
|
||||
if (pipe_format_to_fourcc[i].fourcc == fourcc)
|
||||
return pipe_format_to_fourcc[i].pipe;
|
||||
}
|
||||
|
||||
return PIPE_FORMAT_NONE;
|
||||
}
|
||||
|
||||
uint32_t
|
||||
loader_pipe_format_to_fourcc(enum pipe_format pipe)
|
||||
{
|
||||
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;
|
||||
for (int i = 0; i < ARRAY_SIZE(pipe_format_to_fourcc); i++) {
|
||||
if (pipe_format_to_fourcc[i].pipe == pipe)
|
||||
return pipe_format_to_fourcc[i].fourcc;
|
||||
}
|
||||
|
||||
return DRM_FORMAT_INVALID;
|
||||
}
|
||||
|
||||
#ifdef HAVE_X11_PLATFORM
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue