mesa: add a format table for GL_BGRA vertex format translation too
authorMarek Olšák <marek.olsak@amd.com>
Tue, 8 Nov 2022 00:55:20 +0000 (19:55 -0500)
committerMarge Bot <emma+marge@anholt.net>
Fri, 9 Dec 2022 03:18:53 +0000 (03:18 +0000)
Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19783>

src/mesa/main/varray.c

index 8ea0c41..0806008 100644 (file)
@@ -571,6 +571,23 @@ static const uint8_t vertex_formats[][4][4] = {
    },
 };
 
+/* bgra_vertex_formats[type & 0x3][normalized] */
+static const uint8_t bgra_vertex_formats[4][2] = {
+   { /* GL_UNSIGNED_INT_2_10_10_10_REV */
+      PIPE_FORMAT_B10G10R10A2_USCALED,
+      PIPE_FORMAT_B10G10R10A2_UNORM
+   },
+   { /* GL_UNSIGNED_BYTE */
+      0,
+      PIPE_FORMAT_B8G8R8A8_UNORM
+   },
+   {0}, /* unused (2) */
+   { /* GL_INT_2_10_10_10_REV */
+      PIPE_FORMAT_B10G10R10A2_SSCALED,
+      PIPE_FORMAT_B10G10R10A2_SNORM
+   }
+};
+
 /**
  * Return a PIPE_FORMAT_x for the given GL datatype and size.
  */
@@ -585,36 +602,16 @@ vertex_format_to_pipe_format(GLubyte size, GLenum16 type, GLenum16 format,
    if (doubles)
       return PIPE_FORMAT_R64_UINT + size - 1;
 
-   switch (type) {
-   case GL_INT_2_10_10_10_REV:
-      assert(size == 4 && !integer);
-
-      if (format == GL_BGRA) {
-         if (normalized)
-            return PIPE_FORMAT_B10G10R10A2_SNORM;
-         else
-            return PIPE_FORMAT_B10G10R10A2_SSCALED;
-      }
-      break;
-
-   case GL_UNSIGNED_INT_2_10_10_10_REV:
+   if (format == GL_BGRA) {
       assert(size == 4 && !integer);
-
-      if (format == GL_BGRA) {
-         if (normalized)
-            return PIPE_FORMAT_B10G10R10A2_UNORM;
-         else
-            return PIPE_FORMAT_B10G10R10A2_USCALED;
-      }
-      break;
-
-   case GL_UNSIGNED_BYTE:
-      if (format == GL_BGRA) {
-         /* this is an odd-ball case */
-         assert(normalized);
-         return PIPE_FORMAT_B8G8R8A8_UNORM;
-      }
-      break;
+      assert(type == GL_UNSIGNED_BYTE ||
+             type == GL_INT_2_10_10_10_REV ||
+             type == GL_UNSIGNED_INT_2_10_10_10_REV);
+
+      enum pipe_format pipe_format =
+         bgra_vertex_formats[type & 0x3][normalized];
+      assert(pipe_format);
+      return pipe_format;
    }
 
    unsigned index = integer*2 + normalized;