gallium/dri: Drop mesa_format indirection for lookup

Instead of looking up a mesa_format from a DRI_IMAGE_FORMAT, then
looking up the internal format from there, just go directly from A to B.

Inspired by an unmerged commit from Emma Anholt.

Signed-off-by: Daniel Stone <daniels@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30245>
This commit is contained in:
Daniel Stone
2024-05-15 13:18:27 +01:00
committed by Marge Bot
parent d62bea127d
commit 648d3da090
3 changed files with 5 additions and 48 deletions

View File

@@ -521,8 +521,7 @@ dri_get_egl_image(struct pipe_frontend_screen *fscreen,
/* Guess sized internal format for dma-bufs. Could be used
* by EXT_EGL_image_storage.
*/
mesa_format mesa_format = driImageFormatToGLFormat(map->dri_format);
stimg->internalformat = driGLFormatToSizedInternalGLFormat(mesa_format);
stimg->internalformat = driImageFormatToSizedInternalGLFormat(map->dri_format);
} else {
stimg->internalformat = img->internal_format;
}

View File

@@ -980,173 +980,134 @@ const __DRI2flushControlExtension dri2FlushControlExtension = {
*/
static const struct {
uint32_t image_format;
mesa_format mesa_format;
GLenum internal_format;
} format_mapping[] = {
{
.image_format = __DRI_IMAGE_FORMAT_RGB565,
.mesa_format = MESA_FORMAT_B5G6R5_UNORM,
.internal_format = GL_RGB565,
},
{
.image_format = __DRI_IMAGE_FORMAT_ARGB1555,
.mesa_format = MESA_FORMAT_B5G5R5A1_UNORM,
.internal_format = GL_RGB5_A1,
},
{
.image_format = __DRI_IMAGE_FORMAT_ABGR1555,
.mesa_format = MESA_FORMAT_R5G5B5A1_UNORM,
.internal_format = GL_RGB5_A1,
},
{
.image_format = __DRI_IMAGE_FORMAT_XRGB8888,
.mesa_format = MESA_FORMAT_B8G8R8X8_UNORM,
.internal_format = GL_RGB8,
},
{
.image_format = __DRI_IMAGE_FORMAT_ABGR16161616F,
.mesa_format = MESA_FORMAT_RGBA_FLOAT16,
.internal_format = GL_RGBA16F,
},
{
.image_format = __DRI_IMAGE_FORMAT_XBGR16161616F,
.mesa_format = MESA_FORMAT_RGBX_FLOAT16,
.internal_format = GL_RGB16F,
},
{
.image_format = __DRI_IMAGE_FORMAT_ABGR16161616,
.mesa_format = MESA_FORMAT_RGBA_UNORM16,
.internal_format = GL_RGBA16,
},
{
.image_format = __DRI_IMAGE_FORMAT_XBGR16161616,
.mesa_format = MESA_FORMAT_RGBX_UNORM16,
.internal_format = GL_RGB16,
},
{
.image_format = __DRI_IMAGE_FORMAT_ARGB2101010,
.mesa_format = MESA_FORMAT_B10G10R10A2_UNORM,
.internal_format = GL_RGB10_A2,
},
{
.image_format = __DRI_IMAGE_FORMAT_XRGB2101010,
.mesa_format = MESA_FORMAT_B10G10R10X2_UNORM,
.internal_format = GL_RGB10,
},
{
.image_format = __DRI_IMAGE_FORMAT_ABGR2101010,
.mesa_format = MESA_FORMAT_R10G10B10A2_UNORM,
.internal_format = GL_RGB10_A2,
},
{
.image_format = __DRI_IMAGE_FORMAT_XBGR2101010,
.mesa_format = MESA_FORMAT_R10G10B10X2_UNORM,
.internal_format = GL_RGB10,
},
{
.image_format = __DRI_IMAGE_FORMAT_ARGB8888,
.mesa_format = MESA_FORMAT_B8G8R8A8_UNORM,
.internal_format = GL_RGBA8,
},
{
.image_format = __DRI_IMAGE_FORMAT_ABGR8888,
.mesa_format = MESA_FORMAT_R8G8B8A8_UNORM,
.internal_format = GL_RGBA8,
},
{
.image_format = __DRI_IMAGE_FORMAT_XBGR8888,
.mesa_format = MESA_FORMAT_R8G8B8X8_UNORM,
.internal_format = GL_RGB8,
},
{
.image_format = __DRI_IMAGE_FORMAT_R8,
.mesa_format = MESA_FORMAT_R_UNORM8,
.internal_format = GL_R8,
},
{
.image_format = __DRI_IMAGE_FORMAT_R8,
.mesa_format = MESA_FORMAT_L_UNORM8,
.internal_format = GL_R8,
},
#if UTIL_ARCH_LITTLE_ENDIAN
{
.image_format = __DRI_IMAGE_FORMAT_GR88,
.mesa_format = MESA_FORMAT_RG_UNORM8,
.internal_format = GL_RG8,
},
{
.image_format = __DRI_IMAGE_FORMAT_GR88,
.mesa_format = MESA_FORMAT_LA_UNORM8,
.internal_format = GL_RG8,
},
#endif
{
.image_format = __DRI_IMAGE_FORMAT_SABGR8,
.mesa_format = MESA_FORMAT_R8G8B8A8_SRGB,
.internal_format = GL_SRGB8_ALPHA8,
},
{
.image_format = __DRI_IMAGE_FORMAT_SARGB8,
.mesa_format = MESA_FORMAT_B8G8R8A8_SRGB,
.internal_format = GL_SRGB8_ALPHA8,
},
{
.image_format = __DRI_IMAGE_FORMAT_SXRGB8,
.mesa_format = MESA_FORMAT_B8G8R8X8_SRGB,
.internal_format = GL_SRGB8,
},
{
.image_format = __DRI_IMAGE_FORMAT_R16,
.mesa_format = MESA_FORMAT_R_UNORM16,
.internal_format = GL_R16,
},
{
.image_format = __DRI_IMAGE_FORMAT_R16,
.mesa_format = MESA_FORMAT_L_UNORM16,
.internal_format = GL_R16,
},
#if UTIL_ARCH_LITTLE_ENDIAN
{
.image_format = __DRI_IMAGE_FORMAT_GR1616,
.mesa_format = MESA_FORMAT_RG_UNORM16,
.internal_format = GL_RG16,
},
{
.image_format = __DRI_IMAGE_FORMAT_GR1616,
.mesa_format = MESA_FORMAT_LA_UNORM16,
.internal_format = GL_RG16,
},
#endif
{
.image_format = __DRI_IMAGE_FORMAT_ARGB4444,
.mesa_format = MESA_FORMAT_B4G4R4A4_UNORM,
.internal_format = GL_RGBA4,
},
{
.image_format = __DRI_IMAGE_FORMAT_ABGR4444,
.mesa_format = MESA_FORMAT_R4G4B4A4_UNORM,
.internal_format = GL_RGBA4,
},
};
uint32_t
driGLFormatToSizedInternalGLFormat(mesa_format format)
{
for (size_t i = 0; i < ARRAY_SIZE(format_mapping); i++)
if (format_mapping[i].mesa_format == format)
return format_mapping[i].internal_format;
return GL_NONE;
}
mesa_format
driImageFormatToGLFormat(uint32_t image_format)
driImageFormatToSizedInternalGLFormat(uint32_t image_format)
{
for (size_t i = 0; i < ARRAY_SIZE(format_mapping); i++)
if (format_mapping[i].image_format == image_format)
return format_mapping[i].mesa_format;
return format_mapping[i].internal_format;
return MESA_FORMAT_NONE;
return GL_NONE;
}
/** Image driver interface */

View File

@@ -123,10 +123,7 @@ driCreateContextAttribs(__DRIscreen *psp, int api,
void *data);
extern uint32_t
driGLFormatToSizedInternalGLFormat(mesa_format format);
extern mesa_format
driImageFormatToGLFormat(uint32_t image_format);
driImageFormatToSizedInternalGLFormat(uint32_t image_format);
extern const __DRIimageDriverExtension driImageDriverExtension;