mesa: fix copy & paste bugs in pack_ubyte_SRGB8()
[mesa.git] / src / mesa / main / format_pack.c
index dee253c40ea23aae5207d2933b32cc4bbfc100da..89958f79ff5df016d022b6edd5ea776138a374ec 100644 (file)
@@ -567,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
@@ -1044,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
@@ -1090,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);
 }
 
@@ -1880,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.
  */
@@ -1936,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;
@@ -2034,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;
    }
 
@@ -2099,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;
@@ -2197,6 +2213,8 @@ _mesa_get_pack_float_rgba_function(mesa_format format)
       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;
    }
 
@@ -2433,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;
@@ -2518,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;
@@ -2581,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;
@@ -2616,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);
@@ -2690,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);
@@ -2762,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);
@@ -2803,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;