X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fmain%2Fformats.c;h=53f01ffc18a0ced67776a5ce505b878ba8ef37f9;hb=ff168b297d94f656899a904ac147a9ce5add65c9;hp=9c65e7decc7418604c2f019fd28b026f4face4b0;hpb=80a8021d6ce02be599b3befd2dae6506a91f174a;p=mesa.git diff --git a/src/mesa/main/formats.c b/src/mesa/main/formats.c index 9c65e7decc7..53f01ffc18a 100644 --- a/src/mesa/main/formats.c +++ b/src/mesa/main/formats.c @@ -25,7 +25,7 @@ #include "errors.h" -#include "imports.h" +#include "util/imports.h" #include "formats.h" #include "macros.h" #include "glformats.h" @@ -85,6 +85,13 @@ _mesa_get_format_info(mesa_format format) { const struct mesa_format_info *info = &format_info[format]; STATIC_ASSERT(ARRAY_SIZE(format_info) == MESA_FORMAT_COUNT); + + /* The MESA_FORMAT_* enums are sparse, don't return a format info + * for empty entries. + */ + if (info->Name == MESA_FORMAT_NONE && format != MESA_FORMAT_NONE) + return NULL; + assert(info->Name == format); return info; } @@ -95,6 +102,8 @@ const char * _mesa_get_format_name(mesa_format format) { const struct mesa_format_info *info = _mesa_get_format_info(format); + if (!info) + return NULL; return info->StrName; } @@ -465,7 +474,13 @@ format_array_format_table_init(void) for (f = 1; f < MESA_FORMAT_COUNT; ++f) { info = _mesa_get_format_info(f); - if (!info->ArrayFormat) + if (!info || !info->ArrayFormat) + continue; + + /* All sRGB formats should have an equivalent UNORM format, and that's + * the one we want in the table. + */ + if (_mesa_is_format_srgb(f)) continue; #if UTIL_ARCH_LITTLE_ENDIAN @@ -474,14 +489,6 @@ format_array_format_table_init(void) array_format = _mesa_array_format_flip_channels(info->ArrayFormat); #endif - /* This can happen and does for some of the BGR formats. Let's take - * the first one in the list. - */ - if (_mesa_hash_table_search_pre_hashed(format_array_format_table, - array_format, - (void *)(intptr_t)array_format)) - continue; - _mesa_hash_table_insert_pre_hashed(format_array_format_table, array_format, (void *)(intptr_t)array_format, @@ -1409,15 +1416,17 @@ _mesa_uncompressed_format_to_type_and_comps(mesa_format format, case MESA_FORMAT_COUNT: assert(0); return; - default: + default: { + const char *name = _mesa_get_format_name(format); /* Warn if any formats are not handled */ _mesa_problem(NULL, "bad format %s in _mesa_uncompressed_format_to_type_and_comps", - _mesa_get_format_name(format)); + name ? name : "???"); assert(format == MESA_FORMAT_NONE || _mesa_is_format_compressed(format)); *datatype = 0; *comps = 1; } + } } /**