mesa: fix copy & paste bugs in pack_ubyte_SRGB8()
[mesa.git] / src / mesa / main / format_pack.c
index 624f1a62cd2085aec00daffa54b0c93da79a557f..89958f79ff5df016d022b6edd5ea776138a374ec 100644 (file)
@@ -492,6 +492,8 @@ pack_row_float_RGB565(GLuint n, const GLfloat src[][4], void *dst)
 
 /*
  * MESA_FORMAT_R5G6B5_UNORM
+ * Warning: these functions do not match the current Mesa definition
+ * of MESA_FORMAT_R5G6B5_UNORM.
  */
 
 static void
@@ -565,7 +567,7 @@ static void
 pack_ubyte_ARGB4444_REV(const GLubyte src[4], void *dst)
 {
    GLushort *d = ((GLushort *) dst);
-   *d = PACK_COLOR_4444(src[GCOMP], src[BCOMP], src[ACOMP], src[RCOMP]);
+   *d = PACK_COLOR_4444(src[BCOMP], src[GCOMP], src[RCOMP], src[ACOMP]);
 }
 
 static void
@@ -621,7 +623,10 @@ pack_float_ARGB1555(const GLfloat src[4], void *dst)
 }
 
 
-/* MESA_FORMAT_A1R5G5B5_UNORM */
+/* MESA_FORMAT_A1R5G5B5_UNORM
+ * Warning: these functions do not match the current Mesa definition
+ * of MESA_FORMAT_A1R5G5B5_UNORM.
+ */
 
 static void
 pack_ubyte_ARGB1555_REV(const GLubyte src[4], void *dst)
@@ -1039,8 +1044,8 @@ pack_ubyte_SRGB8(const GLubyte src[4], void *dst)
 {
    GLubyte *d = ((GLubyte *) dst);
    d[2] = linear_ubyte_to_srgb_ubyte(src[RCOMP]);
-   d[1] = linear_ubyte_to_srgb_ubyte(src[RCOMP]);
-   d[0] = linear_ubyte_to_srgb_ubyte(src[RCOMP]);
+   d[1] = linear_ubyte_to_srgb_ubyte(src[GCOMP]);
+   d[0] = linear_ubyte_to_srgb_ubyte(src[BCOMP]);
 }
 
 static void
@@ -1085,8 +1090,8 @@ pack_ubyte_SARGB8(const GLubyte src[4], void *dst)
 {
    GLuint *d = ((GLuint *) dst);
    GLubyte r = linear_ubyte_to_srgb_ubyte(src[RCOMP]);
-   GLubyte g = linear_ubyte_to_srgb_ubyte(src[RCOMP]);
-   GLubyte b = linear_ubyte_to_srgb_ubyte(src[RCOMP]);
+   GLubyte g = linear_ubyte_to_srgb_ubyte(src[GCOMP]);
+   GLubyte b = linear_ubyte_to_srgb_ubyte(src[BCOMP]);
    *d = PACK_COLOR_8888(src[ACOMP], r, g, b);
 }
 
@@ -1419,7 +1424,7 @@ pack_float_RGBA_16(const GLfloat src[4], void *dst)
 
 
 /*
- * MESA_FORMAT_SIGNED_R8
+ * MESA_FORMAT_R_SNORM8
  */
 
 static void
@@ -1431,7 +1436,7 @@ pack_float_SIGNED_R8(const GLfloat src[4], void *dst)
 
 
 /*
- * MESA_FORMAT_SIGNED_RG88_REV
+ * MESA_FORMAT_R8G8_SNORM
  */
 
 static void
@@ -1445,7 +1450,7 @@ pack_float_SIGNED_RG88_REV(const GLfloat src[4], void *dst)
 
 
 /*
- * MESA_FORMAT_SIGNED_RGBX8888
+ * MESA_FORMAT_X8B8G8R8_SNORM
  */
 
 static void
@@ -1461,7 +1466,7 @@ pack_float_SIGNED_RGBX8888(const GLfloat src[4], void *dst)
 
 
 /*
- * MESA_FORMAT_SIGNED_RGBA8888
+ * MESA_FORMAT_A8B8G8R8_SNORM
  */
 
 static void
@@ -1477,7 +1482,7 @@ pack_float_SIGNED_RGBA8888(const GLfloat src[4], void *dst)
 
 
 /*
- * MESA_FORMAT_SIGNED_RGBA8888_REV
+ * MESA_FORMAT_R8G8B8A8_SNORM
  */
 
 static void
@@ -1493,7 +1498,7 @@ pack_float_SIGNED_RGBA8888_REV(const GLfloat src[4], void *dst)
 
 
 /*
- * MESA_FORMAT_SIGNED_R16
+ * MESA_FORMAT_R_SNORM16
  */
 
 static void
@@ -1505,7 +1510,7 @@ pack_float_SIGNED_R16(const GLfloat src[4], void *dst)
 
 
 /*
- * MESA_FORMAT_SIGNED_GR1616
+ * MESA_FORMAT_R16G16_SNORM
  */
 
 static void
@@ -1519,7 +1524,7 @@ pack_float_SIGNED_GR1616(const GLfloat src[4], void *dst)
 
 
 /*
- * MESA_FORMAT_SIGNED_RGB_16
+ * MESA_FORMAT_RGB_SNORM16
  */
 
 static void
@@ -1533,7 +1538,7 @@ pack_float_SIGNED_RGB_16(const GLfloat src[4], void *dst)
 
 
 /*
- * MESA_FORMAT_SIGNED_RGBA_16
+ * MESA_FORMAT_RGBA_SNORM16
  */
 
 static void
@@ -1548,7 +1553,7 @@ pack_float_SIGNED_RGBA_16(const GLfloat src[4], void *dst)
 
 
 /*
- * MESA_FORMAT_SIGNED_A8
+ * MESA_FORMAT_A_SNORM8
  */
 
 static void
@@ -1560,7 +1565,7 @@ pack_float_SIGNED_A8(const GLfloat src[4], void *dst)
 
 
 /*
- * MESA_FORMAT_SIGNED_L8
+ * MESA_FORMAT_L_SNORM8
  */
 
 static void
@@ -1572,7 +1577,7 @@ pack_float_SIGNED_L8(const GLfloat src[4], void *dst)
 
 
 /*
- * MESA_FORMAT_SIGNED_AL88
+ * MESA_FORMAT_L8A8_SNORM
  */
 
 static void
@@ -1586,7 +1591,7 @@ pack_float_SIGNED_AL88(const GLfloat src[4], void *dst)
 
 
 /*
- * MESA_FORMAT_SIGNED_A16
+ * MESA_FORMAT_A_SNORM16
  */
 
 static void
@@ -1598,7 +1603,7 @@ pack_float_SIGNED_A16(const GLfloat src[4], void *dst)
 
 
 /*
- * MESA_FORMAT_SIGNED_L16
+ * MESA_FORMAT_L_SNORM16
  */
 
 static void
@@ -1610,7 +1615,7 @@ pack_float_SIGNED_L16(const GLfloat src[4], void *dst)
 
 
 /*
- * MESA_FORMAT_SIGNED_AL1616
+ * MESA_FORMAT_LA_SNORM16
  */
 
 static void
@@ -1850,7 +1855,7 @@ pack_float_ABGR2101010(const GLfloat src[4], void *dst)
 }
 
 /*
- * MESA_FORMAT_SIGNED_RG88
+ * MESA_FORMAT_G8R8_SNORM
  */
 
 static void
@@ -1863,7 +1868,7 @@ pack_float_SIGNED_RG88(const GLfloat src[4], void *dst)
 }
 
 /*
- * MESA_FORMAT_SIGNED_RG1616
+ * MESA_FORMAT_G16R16_SNORM
  */
 
 static void
@@ -1875,6 +1880,20 @@ pack_float_SIGNED_RG1616(const GLfloat src[4], void *dst)
    *d = (r << 16) | (g & 0xffff);
 }
 
+/*
+ * MESA_FORMAT_B8G8R8X8_SRGB
+ */
+
+static void
+pack_float_XRGB8888_SRGB(const GLfloat src[4], void *dst)
+{
+   GLuint *d = (GLuint *) dst;
+   GLubyte r = linear_float_to_srgb_ubyte(src[RCOMP]);
+   GLubyte g = linear_float_to_srgb_ubyte(src[GCOMP]);
+   GLubyte b = linear_float_to_srgb_ubyte(src[BCOMP]);
+   *d = PACK_COLOR_8888(127, r, g, b);
+}
+
 /**
  * Return a function that can pack a GLubyte rgba[4] color.
  */
@@ -1931,9 +1950,9 @@ _mesa_get_pack_ubyte_rgba_function(mesa_format format)
 
       /* should never convert RGBA to these formats */
       table[MESA_FORMAT_S8_UINT_Z24_UNORM] = NULL;
-      table[MESA_FORMAT_Z24_UNORM_X8_UINT] = NULL;
-      table[MESA_FORMAT_Z_UNORM16] = NULL;
       table[MESA_FORMAT_Z24_UNORM_S8_UINT] = NULL;
+      table[MESA_FORMAT_Z_UNORM16] = NULL;
+      table[MESA_FORMAT_Z24_UNORM_X8_UINT] = NULL;
       table[MESA_FORMAT_X8Z24_UNORM] = NULL;
       table[MESA_FORMAT_Z_UNORM32] = NULL;
       table[MESA_FORMAT_S_UINT8] = NULL;
@@ -1975,9 +1994,9 @@ _mesa_get_pack_ubyte_rgba_function(mesa_format format)
       table[MESA_FORMAT_RG_FLOAT16] = pack_ubyte_RG_FLOAT16;
 
       /* n/a */
-      table[MESA_FORMAT_RGBA_INT8] = NULL; /* pack_ubyte_RGBA_INT8 */
-      table[MESA_FORMAT_RGBA_INT16] = NULL; /* pack_ubyte_RGBA_INT16 */
-      table[MESA_FORMAT_RGBA_INT32] = NULL; /* pack_ubyte_RGBA_INT32 */
+      table[MESA_FORMAT_RGBA_SINT8] = NULL; /* pack_ubyte_RGBA_INT8 */
+      table[MESA_FORMAT_RGBA_SINT16] = NULL; /* pack_ubyte_RGBA_INT16 */
+      table[MESA_FORMAT_RGBA_SINT32] = NULL; /* pack_ubyte_RGBA_INT32 */
       table[MESA_FORMAT_RGBA_UINT8] = NULL; /* pack_ubyte_RGBA_UINT8 */
       table[MESA_FORMAT_RGBA_UINT16] = NULL; /* pack_ubyte_RGBA_UINT16 */
       table[MESA_FORMAT_RGBA_UINT32] = NULL; /* pack_ubyte_RGBA_UINT32 */
@@ -1987,23 +2006,23 @@ _mesa_get_pack_ubyte_rgba_function(mesa_format format)
       table[MESA_FORMAT_RGBA_UNORM16] = pack_ubyte_RGBA_16;
 
       /* n/a */
-      table[MESA_FORMAT_SIGNED_R8] = NULL;
-      table[MESA_FORMAT_SIGNED_RG88_REV] = NULL;
-      table[MESA_FORMAT_SIGNED_RGBX8888] = NULL;
-      table[MESA_FORMAT_SIGNED_RGBA8888] = NULL;
-      table[MESA_FORMAT_SIGNED_RGBA8888_REV] = NULL;
-      table[MESA_FORMAT_SIGNED_R16] = NULL;
-      table[MESA_FORMAT_SIGNED_GR1616] = NULL;
-      table[MESA_FORMAT_SIGNED_RGB_16] = NULL;
-      table[MESA_FORMAT_SIGNED_RGBA_16] = NULL;
-      table[MESA_FORMAT_SIGNED_A8] = NULL;
-      table[MESA_FORMAT_SIGNED_L8] = NULL;
-      table[MESA_FORMAT_SIGNED_AL88] = NULL;
-      table[MESA_FORMAT_SIGNED_I8] = NULL;
-      table[MESA_FORMAT_SIGNED_A16] = NULL;
-      table[MESA_FORMAT_SIGNED_L16] = NULL;
-      table[MESA_FORMAT_SIGNED_AL1616] = NULL;
-      table[MESA_FORMAT_SIGNED_I16] = NULL;
+      table[MESA_FORMAT_R_SNORM8] = NULL;
+      table[MESA_FORMAT_R8G8_SNORM] = NULL;
+      table[MESA_FORMAT_X8B8G8R8_SNORM] = NULL;
+      table[MESA_FORMAT_A8B8G8R8_SNORM] = NULL;
+      table[MESA_FORMAT_R8G8B8A8_SNORM] = NULL;
+      table[MESA_FORMAT_R_SNORM16] = NULL;
+      table[MESA_FORMAT_R16G16_SNORM] = NULL;
+      table[MESA_FORMAT_RGB_SNORM16] = NULL;
+      table[MESA_FORMAT_RGBA_SNORM16] = NULL;
+      table[MESA_FORMAT_A_SNORM8] = NULL;
+      table[MESA_FORMAT_L_SNORM8] = NULL;
+      table[MESA_FORMAT_L8A8_SNORM] = NULL;
+      table[MESA_FORMAT_I_SNORM8] = NULL;
+      table[MESA_FORMAT_A_SNORM16] = NULL;
+      table[MESA_FORMAT_L_SNORM16] = NULL;
+      table[MESA_FORMAT_LA_SNORM16] = NULL;
+      table[MESA_FORMAT_I_SNORM16] = NULL;
 
 
       table[MESA_FORMAT_RGBA_UNORM16] = pack_ubyte_RGBA_16;
@@ -2029,6 +2048,8 @@ _mesa_get_pack_ubyte_rgba_function(mesa_format format)
 
       table[MESA_FORMAT_R10G10B10A2_UNORM] = pack_ubyte_ABGR2101010;
 
+      table[MESA_FORMAT_B8G8R8X8_SRGB] = NULL;
+
       initialized = GL_TRUE;
    }
 
@@ -2094,9 +2115,9 @@ _mesa_get_pack_float_rgba_function(mesa_format format)
 
       /* should never convert RGBA to these formats */
       table[MESA_FORMAT_S8_UINT_Z24_UNORM] = NULL;
-      table[MESA_FORMAT_Z24_UNORM_X8_UINT] = NULL;
-      table[MESA_FORMAT_Z_UNORM16] = NULL;
       table[MESA_FORMAT_Z24_UNORM_S8_UINT] = NULL;
+      table[MESA_FORMAT_Z_UNORM16] = NULL;
+      table[MESA_FORMAT_Z24_UNORM_X8_UINT] = NULL;
       table[MESA_FORMAT_X8Z24_UNORM] = NULL;
       table[MESA_FORMAT_Z_UNORM32] = NULL;
       table[MESA_FORMAT_S_UINT8] = NULL;
@@ -2139,9 +2160,9 @@ _mesa_get_pack_float_rgba_function(mesa_format format)
       table[MESA_FORMAT_RG_FLOAT16] = pack_float_RG_FLOAT16;
 
       /* n/a */
-      table[MESA_FORMAT_RGBA_INT8] = NULL;
-      table[MESA_FORMAT_RGBA_INT16] = NULL;
-      table[MESA_FORMAT_RGBA_INT32] = NULL;
+      table[MESA_FORMAT_RGBA_SINT8] = NULL;
+      table[MESA_FORMAT_RGBA_SINT16] = NULL;
+      table[MESA_FORMAT_RGBA_SINT32] = NULL;
       table[MESA_FORMAT_RGBA_UINT8] = NULL;
       table[MESA_FORMAT_RGBA_UINT16] = NULL;
       table[MESA_FORMAT_RGBA_UINT32] = NULL;
@@ -2150,23 +2171,23 @@ _mesa_get_pack_float_rgba_function(mesa_format format)
 
       table[MESA_FORMAT_RGBA_UNORM16] = pack_float_RGBA_16;
 
-      table[MESA_FORMAT_SIGNED_R8] = pack_float_SIGNED_R8;
-      table[MESA_FORMAT_SIGNED_RG88_REV] = pack_float_SIGNED_RG88_REV;
-      table[MESA_FORMAT_SIGNED_RGBX8888] = pack_float_SIGNED_RGBX8888;
-      table[MESA_FORMAT_SIGNED_RGBA8888] = pack_float_SIGNED_RGBA8888;
-      table[MESA_FORMAT_SIGNED_RGBA8888_REV] = pack_float_SIGNED_RGBA8888_REV;
-      table[MESA_FORMAT_SIGNED_R16] = pack_float_SIGNED_R16;
-      table[MESA_FORMAT_SIGNED_GR1616] = pack_float_SIGNED_GR1616;
-      table[MESA_FORMAT_SIGNED_RGB_16] = pack_float_SIGNED_RGB_16;
-      table[MESA_FORMAT_SIGNED_RGBA_16] = pack_float_SIGNED_RGBA_16;
-      table[MESA_FORMAT_SIGNED_A8] = pack_float_SIGNED_A8;
-      table[MESA_FORMAT_SIGNED_L8] = pack_float_SIGNED_L8;
-      table[MESA_FORMAT_SIGNED_AL88] = pack_float_SIGNED_AL88;
-      table[MESA_FORMAT_SIGNED_I8] = pack_float_SIGNED_L8; /* reused */
-      table[MESA_FORMAT_SIGNED_A16] = pack_float_SIGNED_A16;
-      table[MESA_FORMAT_SIGNED_L16] = pack_float_SIGNED_L16;
-      table[MESA_FORMAT_SIGNED_AL1616] = pack_float_SIGNED_AL1616;
-      table[MESA_FORMAT_SIGNED_I16] = pack_float_SIGNED_L16; /* reused */
+      table[MESA_FORMAT_R_SNORM8] = pack_float_SIGNED_R8;
+      table[MESA_FORMAT_R8G8_SNORM] = pack_float_SIGNED_RG88_REV;
+      table[MESA_FORMAT_X8B8G8R8_SNORM] = pack_float_SIGNED_RGBX8888;
+      table[MESA_FORMAT_A8B8G8R8_SNORM] = pack_float_SIGNED_RGBA8888;
+      table[MESA_FORMAT_R8G8B8A8_SNORM] = pack_float_SIGNED_RGBA8888_REV;
+      table[MESA_FORMAT_R_SNORM16] = pack_float_SIGNED_R16;
+      table[MESA_FORMAT_R16G16_SNORM] = pack_float_SIGNED_GR1616;
+      table[MESA_FORMAT_RGB_SNORM16] = pack_float_SIGNED_RGB_16;
+      table[MESA_FORMAT_RGBA_SNORM16] = pack_float_SIGNED_RGBA_16;
+      table[MESA_FORMAT_A_SNORM8] = pack_float_SIGNED_A8;
+      table[MESA_FORMAT_L_SNORM8] = pack_float_SIGNED_L8;
+      table[MESA_FORMAT_L8A8_SNORM] = pack_float_SIGNED_AL88;
+      table[MESA_FORMAT_I_SNORM8] = pack_float_SIGNED_L8; /* reused */
+      table[MESA_FORMAT_A_SNORM16] = pack_float_SIGNED_A16;
+      table[MESA_FORMAT_L_SNORM16] = pack_float_SIGNED_L16;
+      table[MESA_FORMAT_LA_SNORM16] = pack_float_SIGNED_AL1616;
+      table[MESA_FORMAT_I_SNORM16] = pack_float_SIGNED_L16; /* reused */
 
       table[MESA_FORMAT_R9G9B9E5_FLOAT] = pack_float_RGB9_E5_FLOAT;
       table[MESA_FORMAT_R11G11B10_FLOAT] = pack_float_R11_G11_B10_FLOAT;
@@ -2189,8 +2210,10 @@ _mesa_get_pack_float_rgba_function(mesa_format format)
 
       table[MESA_FORMAT_R10G10B10A2_UNORM] = pack_float_ABGR2101010;
 
-      table[MESA_FORMAT_SIGNED_RG88] = pack_float_SIGNED_RG88;
-      table[MESA_FORMAT_SIGNED_RG1616] = pack_float_SIGNED_RG1616;
+      table[MESA_FORMAT_G8R8_SNORM] = pack_float_SIGNED_RG88;
+      table[MESA_FORMAT_G16R16_SNORM] = pack_float_SIGNED_RG1616;
+
+      table[MESA_FORMAT_B8G8R8X8_SRGB] = pack_float_XRGB8888_SRGB;
 
       initialized = GL_TRUE;
    }
@@ -2428,8 +2451,8 @@ _mesa_get_pack_float_z_func(mesa_format format)
    case MESA_FORMAT_S8_UINT_Z24_UNORM:
    case MESA_FORMAT_X8Z24_UNORM:
       return pack_float_z_Z24_S8;
-   case MESA_FORMAT_Z24_UNORM_X8_UINT:
    case MESA_FORMAT_Z24_UNORM_S8_UINT:
+   case MESA_FORMAT_Z24_UNORM_X8_UINT:
       return pack_float_z_S8_Z24;
    case MESA_FORMAT_Z_UNORM16:
       return pack_float_z_Z16;
@@ -2513,8 +2536,8 @@ _mesa_get_pack_uint_z_func(mesa_format format)
    case MESA_FORMAT_S8_UINT_Z24_UNORM:
    case MESA_FORMAT_X8Z24_UNORM:
       return pack_uint_z_Z24_S8;
-   case MESA_FORMAT_Z24_UNORM_X8_UINT:
    case MESA_FORMAT_Z24_UNORM_S8_UINT:
+   case MESA_FORMAT_Z24_UNORM_X8_UINT:
       return pack_uint_z_S8_Z24;
    case MESA_FORMAT_Z_UNORM16:
       return pack_uint_z_Z16;
@@ -2576,7 +2599,7 @@ _mesa_get_pack_ubyte_stencil_func(mesa_format format)
    switch (format) {
    case MESA_FORMAT_S8_UINT_Z24_UNORM:
       return pack_ubyte_stencil_Z24_S8;
-   case MESA_FORMAT_Z24_UNORM_X8_UINT:
+   case MESA_FORMAT_Z24_UNORM_S8_UINT:
       return pack_ubyte_stencil_S8_Z24;
    case MESA_FORMAT_S_UINT8:
       return pack_ubyte_stencil_S8;
@@ -2611,8 +2634,8 @@ _mesa_pack_float_z_row(mesa_format format, GLuint n,
          }
       }
       break;
-   case MESA_FORMAT_Z24_UNORM_X8_UINT:
    case MESA_FORMAT_Z24_UNORM_S8_UINT:
+   case MESA_FORMAT_Z24_UNORM_X8_UINT:
       {
          /* don't disturb the stencil values */
          GLuint *d = ((GLuint *) dst);
@@ -2685,8 +2708,8 @@ _mesa_pack_uint_z_row(mesa_format format, GLuint n,
          }
       }
       break;
-   case MESA_FORMAT_Z24_UNORM_X8_UINT:
    case MESA_FORMAT_Z24_UNORM_S8_UINT:
+   case MESA_FORMAT_Z24_UNORM_X8_UINT:
       {
          /* don't disturb the stencil values */
          GLuint *d = ((GLuint *) dst);
@@ -2757,7 +2780,7 @@ _mesa_pack_ubyte_stencil_row(mesa_format format, GLuint n,
          }
       }
       break;
-   case MESA_FORMAT_Z24_UNORM_X8_UINT:
+   case MESA_FORMAT_Z24_UNORM_S8_UINT:
       {
          /* don't disturb the Z values */
          GLuint *d = ((GLuint *) dst);
@@ -2798,7 +2821,7 @@ _mesa_pack_uint_24_8_depth_stencil_row(mesa_format format, GLuint n,
    case MESA_FORMAT_S8_UINT_Z24_UNORM:
       memcpy(dst, src, n * sizeof(GLuint));
       break;
-   case MESA_FORMAT_Z24_UNORM_X8_UINT:
+   case MESA_FORMAT_Z24_UNORM_S8_UINT:
       {
          GLuint *d = ((GLuint *) dst);
          GLuint i;