mesa: Add MESA_FORMAT_ABGR2101010.
[mesa.git] / src / mesa / main / format_pack.c
index 826fc10a604d6cbeba5d484fe13eacbbcddef6bc..9b6929d44868a717b775388e5eee3f69c929e324 100644 (file)
@@ -1824,6 +1824,31 @@ pack_float_XBGR32323232_FLOAT(const GLfloat src[4], void *dst)
    d[3] = 1.0;
 }
 
+/* MESA_FORMAT_ABGR2101010 */
+
+static void
+pack_ubyte_ABGR2101010(const GLubyte src[4], void *dst)
+{
+   GLuint *d = ((GLuint *) dst);
+   GLushort r = UBYTE_TO_USHORT(src[RCOMP]);
+   GLushort g = UBYTE_TO_USHORT(src[GCOMP]);
+   GLushort b = UBYTE_TO_USHORT(src[BCOMP]);
+   GLushort a = UBYTE_TO_USHORT(src[ACOMP]);
+   *d = PACK_COLOR_2101010_US(a, b, g, r);
+}
+
+static void
+pack_float_ABGR2101010(const GLfloat src[4], void *dst)
+{
+   GLuint *d = ((GLuint *) dst);
+   GLushort r, g, b, a;
+   UNCLAMPED_FLOAT_TO_USHORT(r, src[RCOMP]);
+   UNCLAMPED_FLOAT_TO_USHORT(g, src[GCOMP]);
+   UNCLAMPED_FLOAT_TO_USHORT(b, src[BCOMP]);
+   UNCLAMPED_FLOAT_TO_USHORT(a, src[ACOMP]);
+   *d = PACK_COLOR_2101010_US(a, b, g, r);
+}
+
 
 /**
  * Return a function that can pack a GLubyte rgba[4] color.
@@ -1978,6 +2003,8 @@ _mesa_get_pack_ubyte_rgba_function(gl_format format)
       table[MESA_FORMAT_XBGR32323232_UINT] = NULL;
       table[MESA_FORMAT_XBGR32323232_SINT] = NULL;
 
+      table[MESA_FORMAT_ABGR2101010] = pack_ubyte_ABGR2101010;
+
       initialized = GL_TRUE;
    }
 
@@ -2136,6 +2163,8 @@ _mesa_get_pack_float_rgba_function(gl_format format)
       table[MESA_FORMAT_XBGR32323232_UINT] = NULL;
       table[MESA_FORMAT_XBGR32323232_SINT] = NULL;
 
+      table[MESA_FORMAT_ABGR2101010] = pack_float_ABGR2101010;
+
       initialized = GL_TRUE;
    }