#include "errors.h"
-#include "imports.h"
+#include "util/imports.h"
#include "formats.h"
#include "macros.h"
#include "glformats.h"
{
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;
}
_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;
}
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
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,
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;
}
+ }
}
/**