mesa: combined PBO validate/map helpers
[mesa.git] / src / mesa / main / texformat.c
index 60f36c4a87faf676441b1b46dec9e6371bfdd06c..c709004784b624d15664a5bf6d9982429cdf9bc9 100644 (file)
@@ -3,6 +3,7 @@
  * Version:  6.5.1
  *
  * Copyright (C) 1999-2006  Brian Paul   All Rights Reserved.
+ * Copyright (c) 2008 VMware, Inc.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
@@ -153,9 +154,9 @@ const struct gl_texture_format _mesa_texformat_rgba = {
    0,                                  /* StencilBits */
    4 * sizeof(GLchan),                 /* TexelBytes */
    _mesa_texstore_rgba,                        /* StoreTexImageFunc */
-   fetch_texel_1d_rgba,                        /* FetchTexel1D */
-   fetch_texel_2d_rgba,                        /* FetchTexel2D */
-   fetch_texel_3d_rgba,                        /* FetchTexel3D */
+   NULL,                               /* FetchTexel1D */
+   NULL,                               /* FetchTexel2D */
+   NULL,                               /* FetchTexel3D */
    fetch_texel_1d_f_rgba,              /* FetchTexel1Df */
    fetch_texel_2d_f_rgba,              /* FetchTexel2Df */
    fetch_texel_3d_f_rgba,              /* FetchTexel3Df */
@@ -177,9 +178,9 @@ const struct gl_texture_format _mesa_texformat_rgb = {
    0,                                  /* StencilBits */
    3 * sizeof(GLchan),                 /* TexelBytes */
    _mesa_texstore_rgba,/*yes*/         /* StoreTexImageFunc */
-   fetch_texel_1d_rgb,                 /* FetchTexel1D */
-   fetch_texel_2d_rgb,                 /* FetchTexel2D */
-   fetch_texel_3d_rgb,                 /* FetchTexel3D */
+   NULL,                               /* FetchTexel1D */
+   NULL,                               /* FetchTexel2D */
+   NULL,                               /* FetchTexel3D */
    fetch_texel_1d_f_rgb,               /* FetchTexel1Df */
    fetch_texel_2d_f_rgb,               /* FetchTexel2Df */
    fetch_texel_3d_f_rgb,               /* FetchTexel3Df */
@@ -201,12 +202,12 @@ const struct gl_texture_format _mesa_texformat_alpha = {
    0,                                  /* StencilBits */
    sizeof(GLchan),                     /* TexelBytes */
    _mesa_texstore_rgba,/*yes*/         /* StoreTexImageFunc */
-   fetch_texel_1d_alpha,               /* FetchTexel1D */
-   fetch_texel_2d_alpha,               /* FetchTexel2D */
-   fetch_texel_3d_alpha,               /* FetchTexel3D */
-   NULL,                               /* FetchTexel1Df */
-   NULL,                               /* FetchTexel2Df */
-   NULL,                               /* FetchTexel3Df */
+   NULL,                               /* FetchTexel1D */
+   NULL,                               /* FetchTexel2D */
+   NULL,                               /* FetchTexel3D */
+   fetch_texel_1d_f_alpha,             /* FetchTexel1Df */
+   fetch_texel_2d_f_alpha,             /* FetchTexel2Df */
+   fetch_texel_3d_f_alpha,             /* FetchTexel3Df */
    store_texel_alpha                   /* StoreTexel */
 };
 
@@ -225,12 +226,12 @@ const struct gl_texture_format _mesa_texformat_luminance = {
    0,                                  /* StencilBits */
    sizeof(GLchan),                     /* TexelBytes */
    _mesa_texstore_rgba,/*yes*/         /* StoreTexImageFunc */
-   fetch_texel_1d_luminance,           /* FetchTexel1D */
-   fetch_texel_2d_luminance,           /* FetchTexel2D */
-   fetch_texel_3d_luminance,           /* FetchTexel3D */
-   NULL,                               /* FetchTexel1Df */
-   NULL,                               /* FetchTexel2Df */
-   NULL,                               /* FetchTexel3Df */
+   NULL,                               /* FetchTexel1D */
+   NULL,                               /* FetchTexel2D */
+   NULL,                               /* FetchTexel3D */
+   fetch_texel_1d_f_luminance,         /* FetchTexel1Df */
+   fetch_texel_2d_f_luminance,         /* FetchTexel2Df */
+   fetch_texel_3d_f_luminance,         /* FetchTexel3Df */
    store_texel_luminance               /* StoreTexel */
 };
 
@@ -249,12 +250,12 @@ const struct gl_texture_format _mesa_texformat_luminance_alpha = {
    0,                                  /* StencilBits */
    2 * sizeof(GLchan),                 /* TexelBytes */
    _mesa_texstore_rgba,/*yes*/         /* StoreTexImageFunc */
-   fetch_texel_1d_luminance_alpha,     /* FetchTexel1D */
-   fetch_texel_2d_luminance_alpha,     /* FetchTexel2D */
-   fetch_texel_3d_luminance_alpha,     /* FetchTexel3D */
-   NULL,                               /* FetchTexel1Df */
-   NULL,                               /* FetchTexel2Df */
-   NULL,                               /* FetchTexel3Df */
+   NULL,                               /* FetchTexel1D */
+   NULL,                               /* FetchTexel2D */
+   NULL,                               /* FetchTexel3D */
+   fetch_texel_1d_f_luminance_alpha,   /* FetchTexel1Df */
+   fetch_texel_2d_f_luminance_alpha,   /* FetchTexel2Df */
+   fetch_texel_3d_f_luminance_alpha,   /* FetchTexel3Df */
    store_texel_luminance_alpha         /* StoreTexel */
 };
 
@@ -273,12 +274,12 @@ const struct gl_texture_format _mesa_texformat_intensity = {
    0,                                  /* StencilBits */
    sizeof(GLchan),                     /* TexelBytes */
    _mesa_texstore_rgba,/*yes*/         /* StoreTexImageFunc */
-   fetch_texel_1d_intensity,           /* FetchTexel1D */
-   fetch_texel_2d_intensity,           /* FetchTexel2D */
-   fetch_texel_3d_intensity,           /* FetchTexel3D */
-   NULL,                               /* FetchTexel1Df */
-   NULL,                               /* FetchTexel2Df */
-   NULL,                               /* FetchTexel3Df */
+   NULL,                               /* FetchTexel1D */
+   NULL,                               /* FetchTexel2D */
+   NULL,                               /* FetchTexel3D */
+   fetch_texel_1d_f_intensity,         /* FetchTexel1Df */
+   fetch_texel_2d_f_intensity,         /* FetchTexel2Df */
+   fetch_texel_3d_f_intensity,         /* FetchTexel3Df */
    store_texel_intensity               /* StoreTexel */
 };
 
@@ -333,6 +334,30 @@ const struct gl_texture_format _mesa_texformat_srgba8 = {
    store_texel_srgba8                  /* StoreTexel */
 };
 
+const struct gl_texture_format _mesa_texformat_sargb8 = {
+   MESA_FORMAT_SARGB8,                 /* MesaFormat */
+   GL_RGBA,                            /* BaseFormat */
+   GL_UNSIGNED_NORMALIZED_ARB,         /* DataType */
+   8,                                  /* RedBits */
+   8,                                  /* GreenBits */
+   8,                                  /* BlueBits */
+   8,                                  /* AlphaBits */
+   0,                                  /* LuminanceBits */
+   0,                                  /* IntensityBits */
+   0,                                  /* IndexBits */
+   0,                                  /* DepthBits */
+   0,                                  /* StencilBits */
+   4,                                  /* TexelBytes */
+   _mesa_texstore_sargb8,              /* StoreTexImageFunc */
+   NULL,                               /* FetchTexel1D */
+   NULL,                               /* FetchTexel2D */
+   NULL,                               /* FetchTexel3D */
+   fetch_texel_1d_sargb8,              /* FetchTexel1Df */
+   fetch_texel_2d_sargb8,              /* FetchTexel2Df */
+   fetch_texel_3d_sargb8,              /* FetchTexel3Df */
+   store_texel_sargb8                  /* StoreTexel */
+};
+
 const struct gl_texture_format _mesa_texformat_sl8 = {
    MESA_FORMAT_SL8,                    /* MesaFormat */
    GL_LUMINANCE,                       /* BaseFormat */
@@ -357,6 +382,7 @@ const struct gl_texture_format _mesa_texformat_sl8 = {
    store_texel_sl8                     /* StoreTexel */
 };
 
+/* Note: this format name looks like a misnomer, make it sal8? */
 const struct gl_texture_format _mesa_texformat_sla8 = {
    MESA_FORMAT_SLA8,                   /* MesaFormat */
    GL_LUMINANCE_ALPHA,                 /* BaseFormat */
@@ -671,6 +697,79 @@ const struct gl_texture_format _mesa_texformat_intensity_float16 = {
    store_texel_intensity_f16           /* StoreTexel */
 };
 
+const struct gl_texture_format _mesa_texformat_dudv8 = {
+   MESA_FORMAT_DUDV8,                  /* MesaFormat */
+   GL_DUDV_ATI,                                /* BaseFormat */
+   GL_SIGNED_NORMALIZED,               /* DataType */
+   /* maybe should add dudvBits field, but spec seems to be
+      lacking the ability to query with GetTexLevelParameter anyway */
+   0,                                  /* RedBits */
+   0,                                  /* GreenBits */
+   0,                                  /* BlueBits */
+   0,                                  /* AlphaBits */
+   0,                                  /* LuminanceBits */
+   0,                                  /* IntensityBits */
+   0,                                  /* IndexBits */
+   0,                                  /* DepthBits */
+   0,                                  /* StencilBits */
+   2,                                  /* TexelBytes */
+   _mesa_texstore_dudv8,               /* StoreTexImageFunc */
+   NULL,                               /* FetchTexel1D */
+   NULL,                               /* FetchTexel2D */
+   NULL,                               /* FetchTexel3D */
+   fetch_texel_1d_dudv8,               /* FetchTexel1Df */
+   fetch_texel_2d_dudv8,               /* FetchTexel2Df */
+   fetch_texel_3d_dudv8,               /* FetchTexel3Df */
+   NULL                                        /* StoreTexel */
+};
+
+const struct gl_texture_format _mesa_texformat_signed_rgba8888 = {
+   MESA_FORMAT_SIGNED_RGBA8888,                /* MesaFormat */
+   GL_RGBA,                            /* BaseFormat */
+   GL_SIGNED_NORMALIZED,               /* DataType */
+   8,                                  /* RedBits */
+   8,                                  /* GreenBits */
+   8,                                  /* BlueBits */
+   8,                                  /* AlphaBits */
+   0,                                  /* LuminanceBits */
+   0,                                  /* IntensityBits */
+   0,                                  /* IndexBits */
+   0,                                  /* DepthBits */
+   0,                                  /* StencilBits */
+   4,                                  /* TexelBytes */
+   _mesa_texstore_signed_rgba8888,     /* StoreTexImageFunc */
+   NULL,                               /* FetchTexel1D */
+   NULL,                               /* FetchTexel2D */
+   NULL,                               /* FetchTexel3D */
+   fetch_texel_1d_signed_rgba8888,     /* FetchTexel1Df */
+   fetch_texel_2d_signed_rgba8888,     /* FetchTexel2Df */
+   fetch_texel_3d_signed_rgba8888,     /* FetchTexel3Df */
+   store_texel_signed_rgba8888         /* StoreTexel */
+};
+
+const struct gl_texture_format _mesa_texformat_signed_rgba8888_rev = {
+   MESA_FORMAT_SIGNED_RGBA8888_REV,    /* MesaFormat */
+   GL_RGBA,                            /* BaseFormat */
+   GL_SIGNED_NORMALIZED,               /* DataType */
+   8,                                  /* RedBits */
+   8,                                  /* GreenBits */
+   8,                                  /* BlueBits */
+   8,                                  /* AlphaBits */
+   0,                                  /* LuminanceBits */
+   0,                                  /* IntensityBits */
+   0,                                  /* IndexBits */
+   0,                                  /* DepthBits */
+   0,                                  /* StencilBits */
+   4,                                  /* TexelBytes */
+   _mesa_texstore_signed_rgba8888,     /* StoreTexImageFunc */
+   NULL,                               /* FetchTexel1D */
+   NULL,                               /* FetchTexel2D */
+   NULL,                               /* FetchTexel3D */
+   fetch_texel_1d_signed_rgba8888_rev, /* FetchTexel1Df */
+   fetch_texel_2d_signed_rgba8888_rev, /* FetchTexel2Df */
+   fetch_texel_3d_signed_rgba8888_rev, /* FetchTexel3Df */
+   store_texel_signed_rgba8888_rev             /* StoreTexel */
+};
 
 /*@}*/
 
@@ -694,12 +793,12 @@ const struct gl_texture_format _mesa_texformat_rgba8888 = {
    0,                                  /* StencilBits */
    4,                                  /* TexelBytes */
    _mesa_texstore_rgba8888,            /* StoreTexImageFunc */
-   fetch_texel_1d_rgba8888,            /* FetchTexel1D */
-   fetch_texel_2d_rgba8888,            /* FetchTexel2D */
-   fetch_texel_3d_rgba8888,            /* FetchTexel3D */
-   NULL,                               /* FetchTexel1Df */
-   NULL,                               /* FetchTexel2Df */
-   NULL,                               /* FetchTexel3Df */
+   NULL,                               /* FetchTexel1D */
+   NULL,                               /* FetchTexel2D */
+   NULL,                               /* FetchTexel3D */
+   fetch_texel_1d_f_rgba8888,          /* FetchTexel1Df */
+   fetch_texel_2d_f_rgba8888,          /* FetchTexel2Df */
+   fetch_texel_3d_f_rgba8888,          /* FetchTexel3Df */
    store_texel_rgba8888                        /* StoreTexel */
 };
 
@@ -718,12 +817,12 @@ const struct gl_texture_format _mesa_texformat_rgba8888_rev = {
    0,                                  /* StencilBits */
    4,                                  /* TexelBytes */
    _mesa_texstore_rgba8888,            /* StoreTexImageFunc */
-   fetch_texel_1d_rgba8888_rev,                /* FetchTexel1D */
-   fetch_texel_2d_rgba8888_rev,                /* FetchTexel2D */
-   fetch_texel_3d_rgba8888_rev,                /* FetchTexel3D */
-   NULL,                               /* FetchTexel1Df */
-   NULL,                               /* FetchTexel2Df */
-   NULL,                               /* FetchTexel3Df */
+   NULL,                               /* FetchTexel1D */
+   NULL,                               /* FetchTexel2D */
+   NULL,                               /* FetchTexel3D */
+   fetch_texel_1d_f_rgba8888_rev,      /* FetchTexel1Df */
+   fetch_texel_2d_f_rgba8888_rev,      /* FetchTexel2Df */
+   fetch_texel_3d_f_rgba8888_rev,      /* FetchTexel3Df */
    store_texel_rgba8888_rev            /* StoreTexel */
 };
 
@@ -742,12 +841,12 @@ const struct gl_texture_format _mesa_texformat_argb8888 = {
    0,                                  /* StencilBits */
    4,                                  /* TexelBytes */
    _mesa_texstore_argb8888,            /* StoreTexImageFunc */
-   fetch_texel_1d_argb8888,            /* FetchTexel1D */
-   fetch_texel_2d_argb8888,            /* FetchTexel2D */
-   fetch_texel_3d_argb8888,            /* FetchTexel3D */
-   NULL,                               /* FetchTexel1Df */
-   NULL,                               /* FetchTexel2Df */
-   NULL,                               /* FetchTexel3Df */
+   NULL,                               /* FetchTexel1D */
+   NULL,                               /* FetchTexel2D */
+   NULL,                               /* FetchTexel3D */
+   fetch_texel_1d_f_argb8888,          /* FetchTexel1Df */
+   fetch_texel_2d_f_argb8888,          /* FetchTexel2Df */
+   fetch_texel_3d_f_argb8888,          /* FetchTexel3Df */
    store_texel_argb8888                        /* StoreTexel */
 };
 
@@ -766,12 +865,12 @@ const struct gl_texture_format _mesa_texformat_argb8888_rev = {
    0,                                  /* StencilBits */
    4,                                  /* TexelBytes */
    _mesa_texstore_argb8888,            /* StoreTexImageFunc */
-   fetch_texel_1d_argb8888_rev,                /* FetchTexel1D */
-   fetch_texel_2d_argb8888_rev,                /* FetchTexel2D */
-   fetch_texel_3d_argb8888_rev,                /* FetchTexel3D */
-   NULL,                               /* FetchTexel1Df */
-   NULL,                               /* FetchTexel2Df */
-   NULL,                               /* FetchTexel3Df */
+   NULL,                               /* FetchTexel1D */
+   NULL,                               /* FetchTexel2D */
+   NULL,                               /* FetchTexel3D */
+   fetch_texel_1d_f_argb8888_rev,      /* FetchTexel1Df */
+   fetch_texel_2d_f_argb8888_rev,      /* FetchTexel2Df */
+   fetch_texel_3d_f_argb8888_rev,      /* FetchTexel3Df */
    store_texel_argb8888_rev            /* StoreTexel */
 };
 
@@ -790,12 +889,12 @@ const struct gl_texture_format _mesa_texformat_rgb888 = {
    0,                                  /* StencilBits */
    3,                                  /* TexelBytes */
    _mesa_texstore_rgb888,              /* StoreTexImageFunc */
-   fetch_texel_1d_rgb888,              /* FetchTexel1D */
-   fetch_texel_2d_rgb888,              /* FetchTexel2D */
-   fetch_texel_3d_rgb888,              /* FetchTexel3D */
-   NULL,                               /* FetchTexel1Df */
-   NULL,                               /* FetchTexel2Df */
-   NULL,                               /* FetchTexel3Df */
+   NULL,                               /* FetchTexel1D */
+   NULL,                               /* FetchTexel2D */
+   NULL,                               /* FetchTexel3D */
+   fetch_texel_1d_f_rgb888,            /* FetchTexel1Df */
+   fetch_texel_2d_f_rgb888,            /* FetchTexel2Df */
+   fetch_texel_3d_f_rgb888,            /* FetchTexel3Df */
    store_texel_rgb888                  /* StoreTexel */
 };
 
@@ -814,12 +913,12 @@ const struct gl_texture_format _mesa_texformat_bgr888 = {
    0,                                  /* StencilBits */
    3,                                  /* TexelBytes */
    _mesa_texstore_bgr888,              /* StoreTexImageFunc */
-   fetch_texel_1d_bgr888,              /* FetchTexel1D */
-   fetch_texel_2d_bgr888,              /* FetchTexel2D */
-   fetch_texel_3d_bgr888,              /* FetchTexel3D */
-   NULL,                               /* FetchTexel1Df */
-   NULL,                               /* FetchTexel2Df */
-   NULL,                               /* FetchTexel3Df */
+   NULL,                               /* FetchTexel1D */
+   NULL,                               /* FetchTexel2D */
+   NULL,                               /* FetchTexel3D */
+   fetch_texel_1d_f_bgr888,            /* FetchTexel1Df */
+   fetch_texel_2d_f_bgr888,            /* FetchTexel2Df */
+   fetch_texel_3d_f_bgr888,            /* FetchTexel3Df */
    store_texel_bgr888                  /* StoreTexel */
 };
 
@@ -838,12 +937,12 @@ const struct gl_texture_format _mesa_texformat_rgb565 = {
    0,                                  /* StencilBits */
    2,                                  /* TexelBytes */
    _mesa_texstore_rgb565,              /* StoreTexImageFunc */
-   fetch_texel_1d_rgb565,              /* FetchTexel1D */
-   fetch_texel_2d_rgb565,              /* FetchTexel2D */
-   fetch_texel_3d_rgb565,              /* FetchTexel3D */
-   NULL,                               /* FetchTexel1Df */
-   NULL,                               /* FetchTexel2Df */
-   NULL,                               /* FetchTexel3Df */
+   NULL,                               /* FetchTexel1D */
+   NULL,                               /* FetchTexel2D */
+   NULL,                               /* FetchTexel3D */
+   fetch_texel_1d_f_rgb565,            /* FetchTexel1Df */
+   fetch_texel_2d_f_rgb565,            /* FetchTexel2Df */
+   fetch_texel_3d_f_rgb565,            /* FetchTexel3Df */
    store_texel_rgb565                  /* StoreTexel */
 };
 
@@ -862,15 +961,39 @@ const struct gl_texture_format _mesa_texformat_rgb565_rev = {
    0,                                  /* StencilBits */
    2,                                  /* TexelBytes */
    _mesa_texstore_rgb565,              /* StoreTexImageFunc */
-   fetch_texel_1d_rgb565_rev,          /* FetchTexel1D */
-   fetch_texel_2d_rgb565_rev,          /* FetchTexel2D */
-   fetch_texel_3d_rgb565_rev,          /* FetchTexel3D */
-   NULL,                               /* FetchTexel1Df */
-   NULL,                               /* FetchTexel2Df */
-   NULL,                               /* FetchTexel3Df */
+   NULL,                               /* FetchTexel1D */
+   NULL,                               /* FetchTexel2D */
+   NULL,                               /* FetchTexel3D */
+   fetch_texel_1d_f_rgb565_rev,                /* FetchTexel1Df */
+   fetch_texel_2d_f_rgb565_rev,                /* FetchTexel2Df */
+   fetch_texel_3d_f_rgb565_rev,                /* FetchTexel3Df */
    store_texel_rgb565_rev              /* StoreTexel */
 };
 
+const struct gl_texture_format _mesa_texformat_rgba4444 = {
+   MESA_FORMAT_RGBA4444,               /* MesaFormat */
+   GL_RGBA,                            /* BaseFormat */
+   GL_UNSIGNED_NORMALIZED_ARB,         /* DataType */
+   4,                                  /* RedBits */
+   4,                                  /* GreenBits */
+   4,                                  /* BlueBits */
+   4,                                  /* AlphaBits */
+   0,                                  /* LuminanceBits */
+   0,                                  /* IntensityBits */
+   0,                                  /* IndexBits */
+   0,                                  /* DepthBits */
+   0,                                  /* StencilBits */
+   2,                                  /* TexelBytes */
+   _mesa_texstore_rgba4444,            /* StoreTexImageFunc */
+   NULL,                               /* FetchTexel1D */
+   NULL,                               /* FetchTexel2D */
+   NULL,                               /* FetchTexel3D */
+   fetch_texel_1d_f_rgba4444,          /* FetchTexel1Df */
+   fetch_texel_2d_f_rgba4444,          /* FetchTexel2Df */
+   fetch_texel_3d_f_rgba4444,          /* FetchTexel3Df */
+   store_texel_rgba4444                        /* StoreTexel */
+};
+
 const struct gl_texture_format _mesa_texformat_argb4444 = {
    MESA_FORMAT_ARGB4444,               /* MesaFormat */
    GL_RGBA,                            /* BaseFormat */
@@ -886,12 +1009,12 @@ const struct gl_texture_format _mesa_texformat_argb4444 = {
    0,                                  /* StencilBits */
    2,                                  /* TexelBytes */
    _mesa_texstore_argb4444,            /* StoreTexImageFunc */
-   fetch_texel_1d_argb4444,            /* FetchTexel1D */
-   fetch_texel_2d_argb4444,            /* FetchTexel2D */
-   fetch_texel_3d_argb4444,            /* FetchTexel3D */
-   NULL,                               /* FetchTexel1Df */
-   NULL,                               /* FetchTexel2Df */
-   NULL,                               /* FetchTexel3Df */
+   NULL,                               /* FetchTexel1D */
+   NULL,                               /* FetchTexel2D */
+   NULL,                               /* FetchTexel3D */
+   fetch_texel_1d_f_argb4444,          /* FetchTexel1Df */
+   fetch_texel_2d_f_argb4444,          /* FetchTexel2Df */
+   fetch_texel_3d_f_argb4444,          /* FetchTexel3Df */
    store_texel_argb4444                        /* StoreTexel */
 };
 
@@ -910,15 +1033,39 @@ const struct gl_texture_format _mesa_texformat_argb4444_rev = {
    0,                                  /* StencilBits */
    2,                                  /* TexelBytes */
    _mesa_texstore_argb4444,            /* StoreTexImageFunc */
-   fetch_texel_1d_argb4444_rev,                /* FetchTexel1D */
-   fetch_texel_2d_argb4444_rev,                /* FetchTexel2D */
-   fetch_texel_3d_argb4444_rev,                /* FetchTexel3D */
-   NULL,                               /* FetchTexel1Df */
-   NULL,                               /* FetchTexel2Df */
-   NULL,                               /* FetchTexel3Df */
+   NULL,                               /* FetchTexel1D */
+   NULL,                               /* FetchTexel2D */
+   NULL,                               /* FetchTexel3D */
+   fetch_texel_1d_f_argb4444_rev,      /* FetchTexel1Df */
+   fetch_texel_2d_f_argb4444_rev,      /* FetchTexel2Df */
+   fetch_texel_3d_f_argb4444_rev,      /* FetchTexel3Df */
    store_texel_argb4444_rev            /* StoreTexel */
 };
 
+const struct gl_texture_format _mesa_texformat_rgba5551 = {
+   MESA_FORMAT_RGBA5551,               /* MesaFormat */
+   GL_RGBA,                            /* BaseFormat */
+   GL_UNSIGNED_NORMALIZED_ARB,         /* DataType */
+   5,                                  /* RedBits */
+   5,                                  /* GreenBits */
+   5,                                  /* BlueBits */
+   1,                                  /* AlphaBits */
+   0,                                  /* LuminanceBits */
+   0,                                  /* IntensityBits */
+   0,                                  /* IndexBits */
+   0,                                  /* DepthBits */
+   0,                                  /* StencilBits */
+   2,                                  /* TexelBytes */
+   _mesa_texstore_rgba5551,            /* StoreTexImageFunc */
+   NULL,                               /* FetchTexel1D */
+   NULL,                               /* FetchTexel2D */
+   NULL,                               /* FetchTexel3D */
+   fetch_texel_1d_f_rgba5551,          /* FetchTexel1Df */
+   fetch_texel_2d_f_rgba5551,          /* FetchTexel2Df */
+   fetch_texel_3d_f_rgba5551,          /* FetchTexel3Df */
+   store_texel_rgba5551                        /* StoreTexel */
+};
+
 const struct gl_texture_format _mesa_texformat_argb1555 = {
    MESA_FORMAT_ARGB1555,               /* MesaFormat */
    GL_RGBA,                            /* BaseFormat */
@@ -934,12 +1081,12 @@ const struct gl_texture_format _mesa_texformat_argb1555 = {
    0,                                  /* StencilBits */
    2,                                  /* TexelBytes */
    _mesa_texstore_argb1555,            /* StoreTexImageFunc */
-   fetch_texel_1d_argb1555,            /* FetchTexel1D */
-   fetch_texel_2d_argb1555,            /* FetchTexel2D */
-   fetch_texel_3d_argb1555,            /* FetchTexel3D */
-   NULL,                               /* FetchTexel1Df */
-   NULL,                               /* FetchTexel2Df */
-   NULL,                               /* FetchTexel3Df */
+   NULL,                               /* FetchTexel1D */
+   NULL,                               /* FetchTexel2D */
+   NULL,                               /* FetchTexel3D */
+   fetch_texel_1d_f_argb1555,          /* FetchTexel1Df */
+   fetch_texel_2d_f_argb1555,          /* FetchTexel2Df */
+   fetch_texel_3d_f_argb1555,          /* FetchTexel3Df */
    store_texel_argb1555                        /* StoreTexel */
 };
 
@@ -958,12 +1105,12 @@ const struct gl_texture_format _mesa_texformat_argb1555_rev = {
    0,                                  /* StencilBits */
    2,                                  /* TexelBytes */
    _mesa_texstore_argb1555,            /* StoreTexImageFunc */
-   fetch_texel_1d_argb1555_rev,                /* FetchTexel1D */
-   fetch_texel_2d_argb1555_rev,                /* FetchTexel2D */
-   fetch_texel_3d_argb1555_rev,                /* FetchTexel3D */
-   NULL,                               /* FetchTexel1Df */
-   NULL,                               /* FetchTexel2Df */
-   NULL,                               /* FetchTexel3Df */
+   NULL,                               /* FetchTexel1D */
+   NULL,                               /* FetchTexel2D */
+   NULL,                               /* FetchTexel3D */
+   fetch_texel_1d_f_argb1555_rev,      /* FetchTexel1Df */
+   fetch_texel_2d_f_argb1555_rev,      /* FetchTexel2Df */
+   fetch_texel_3d_f_argb1555_rev,      /* FetchTexel3Df */
    store_texel_argb1555_rev            /* StoreTexel */
 };
 
@@ -982,12 +1129,12 @@ const struct gl_texture_format _mesa_texformat_al88 = {
    0,                                  /* StencilBits */
    2,                                  /* TexelBytes */
    _mesa_texstore_al88,                        /* StoreTexImageFunc */
-   fetch_texel_1d_al88,                        /* FetchTexel1D */
-   fetch_texel_2d_al88,                        /* FetchTexel2D */
-   fetch_texel_3d_al88,                        /* FetchTexel3D */
-   NULL,                               /* FetchTexel1Df */
-   NULL,                               /* FetchTexel2Df */
-   NULL,                               /* FetchTexel3Df */
+   NULL,                               /* FetchTexel1D */
+   NULL,                               /* FetchTexel2D */
+   NULL,                               /* FetchTexel3D */
+   fetch_texel_1d_f_al88,              /* FetchTexel1Df */
+   fetch_texel_2d_f_al88,              /* FetchTexel2Df */
+   fetch_texel_3d_f_al88,              /* FetchTexel3Df */
    store_texel_al88                    /* StoreTexel */
 };
 
@@ -1006,12 +1153,12 @@ const struct gl_texture_format _mesa_texformat_al88_rev = {
    0,                                  /* StencilBits */
    2,                                  /* TexelBytes */
    _mesa_texstore_al88,                        /* StoreTexImageFunc */
-   fetch_texel_1d_al88_rev,            /* FetchTexel1D */
-   fetch_texel_2d_al88_rev,            /* FetchTexel2D */
-   fetch_texel_3d_al88_rev,            /* FetchTexel3D */
-   NULL,                               /* FetchTexel1Df */
-   NULL,                               /* FetchTexel2Df */
-   NULL,                               /* FetchTexel3Df */
+   NULL,                               /* FetchTexel1D */
+   NULL,                               /* FetchTexel2D */
+   NULL,                               /* FetchTexel3D */
+   fetch_texel_1d_f_al88_rev,          /* FetchTexel1Df */
+   fetch_texel_2d_f_al88_rev,          /* FetchTexel2Df */
+   fetch_texel_3d_f_al88_rev,          /* FetchTexel3Df */
    store_texel_al88_rev                        /* StoreTexel */
 };
 
@@ -1030,12 +1177,12 @@ const struct gl_texture_format _mesa_texformat_rgb332 = {
    0,                                  /* StencilBits */
    1,                                  /* TexelBytes */
    _mesa_texstore_rgb332,              /* StoreTexImageFunc */
-   fetch_texel_1d_rgb332,              /* FetchTexel1D */
-   fetch_texel_2d_rgb332,              /* FetchTexel2D */
-   fetch_texel_3d_rgb332,              /* FetchTexel3D */
-   NULL,                               /* FetchTexel1Df */
-   NULL,                               /* FetchTexel2Df */
-   NULL,                               /* FetchTexel3Df */
+   NULL,                               /* FetchTexel1D */
+   NULL,                               /* FetchTexel2D */
+   NULL,                               /* FetchTexel3D */
+   fetch_texel_1d_f_rgb332,            /* FetchTexel1Df */
+   fetch_texel_2d_f_rgb332,            /* FetchTexel2Df */
+   fetch_texel_3d_f_rgb332,            /* FetchTexel3Df */
    store_texel_rgb332                  /* StoreTexel */
 };
 
@@ -1054,12 +1201,12 @@ const struct gl_texture_format _mesa_texformat_a8 = {
    0,                                  /* StencilBits */
    1,                                  /* TexelBytes */
    _mesa_texstore_a8,                  /* StoreTexImageFunc */
-   fetch_texel_1d_a8,                  /* FetchTexel1D */
-   fetch_texel_2d_a8,                  /* FetchTexel2D */
-   fetch_texel_3d_a8,                  /* FetchTexel3D */
-   NULL,                               /* FetchTexel1Df */
-   NULL,                               /* FetchTexel2Df */
-   NULL,                               /* FetchTexel3Df */
+   NULL,                               /* FetchTexel1D */
+   NULL,                               /* FetchTexel2D */
+   NULL,                               /* FetchTexel3D */
+   fetch_texel_1d_f_a8,                        /* FetchTexel1Df */
+   fetch_texel_2d_f_a8,                        /* FetchTexel2Df */
+   fetch_texel_3d_f_a8,                        /* FetchTexel3Df */
    store_texel_a8                      /* StoreTexel */
 };
 
@@ -1078,12 +1225,12 @@ const struct gl_texture_format _mesa_texformat_l8 = {
    0,                                  /* StencilBits */
    1,                                  /* TexelBytes */
    _mesa_texstore_a8,/*yes*/           /* StoreTexImageFunc */
-   fetch_texel_1d_l8,                  /* FetchTexel1D */
-   fetch_texel_2d_l8,                  /* FetchTexel2D */
-   fetch_texel_3d_l8,                  /* FetchTexel3D */
-   NULL,                               /* FetchTexel1Df */
-   NULL,                               /* FetchTexel2Df */
-   NULL,                               /* FetchTexel3Df */
+   NULL,                               /* FetchTexel1D */
+   NULL,                               /* FetchTexel2D */
+   NULL,                               /* FetchTexel3D */
+   fetch_texel_1d_f_l8,                        /* FetchTexel1Df */
+   fetch_texel_2d_f_l8,                        /* FetchTexel2Df */
+   fetch_texel_3d_f_l8,                        /* FetchTexel3Df */
    store_texel_l8                      /* StoreTexel */
 };
 
@@ -1102,12 +1249,12 @@ const struct gl_texture_format _mesa_texformat_i8 = {
    0,                                  /* StencilBits */
    1,                                  /* TexelBytes */
    _mesa_texstore_a8,/*yes*/           /* StoreTexImageFunc */
-   fetch_texel_1d_i8,                  /* FetchTexel1D */
-   fetch_texel_2d_i8,                  /* FetchTexel2D */
-   fetch_texel_3d_i8,                  /* FetchTexel3D */
-   NULL,                               /* FetchTexel1Df */
-   NULL,                               /* FetchTexel2Df */
-   NULL,                               /* FetchTexel3Df */
+   NULL,                               /* FetchTexel1D */
+   NULL,                               /* FetchTexel2D */
+   NULL,                               /* FetchTexel3D */
+   fetch_texel_1d_f_i8,                        /* FetchTexel1Df */
+   fetch_texel_2d_f_i8,                        /* FetchTexel2Df */
+   fetch_texel_3d_f_i8,                        /* FetchTexel3Df */
    store_texel_i8                      /* StoreTexel */
 };
 
@@ -1126,12 +1273,12 @@ const struct gl_texture_format _mesa_texformat_ci8 = {
    0,                                  /* StencilBits */
    1,                                  /* TexelBytes */
    _mesa_texstore_ci8,                 /* StoreTexImageFunc */
-   fetch_texel_1d_ci8,                 /* FetchTexel1D */
-   fetch_texel_2d_ci8,                 /* FetchTexel2D */
-   fetch_texel_3d_ci8,                 /* FetchTexel3D */
-   NULL,                               /* FetchTexel1Df */
-   NULL,                               /* FetchTexel2Df */
-   NULL,                               /* FetchTexel3Df */
+   NULL,                               /* FetchTexel1D */
+   NULL,                               /* FetchTexel2D */
+   NULL,                               /* FetchTexel3D */
+   fetch_texel_1d_f_ci8,               /* FetchTexel1Df */
+   fetch_texel_2d_f_ci8,               /* FetchTexel2Df */
+   fetch_texel_3d_f_ci8,               /* FetchTexel3Df */
    store_texel_ci8                     /* StoreTexel */
 };
 
@@ -1150,12 +1297,12 @@ const struct gl_texture_format _mesa_texformat_ycbcr = {
    0,                                  /* StencilBits */
    2,                                  /* TexelBytes */
    _mesa_texstore_ycbcr,               /* StoreTexImageFunc */
-   fetch_texel_1d_ycbcr,               /* FetchTexel1D */
-   fetch_texel_2d_ycbcr,               /* FetchTexel2D */
-   fetch_texel_3d_ycbcr,               /* FetchTexel3D */
-   NULL,                               /* FetchTexel1Df */
-   NULL,                               /* FetchTexel2Df */
-   NULL,                               /* FetchTexel3Df */
+   NULL,                               /* FetchTexel1D */
+   NULL,                               /* FetchTexel2D */
+   NULL,                               /* FetchTexel3D */
+   fetch_texel_1d_f_ycbcr,             /* FetchTexel1Df */
+   fetch_texel_2d_f_ycbcr,             /* FetchTexel2Df */
+   fetch_texel_3d_f_ycbcr,             /* FetchTexel3Df */
    store_texel_ycbcr                   /* StoreTexel */
 };
 
@@ -1174,12 +1321,12 @@ const struct gl_texture_format _mesa_texformat_ycbcr_rev = {
    0,                                  /* StencilBits */
    2,                                  /* TexelBytes */
    _mesa_texstore_ycbcr,               /* StoreTexImageFunc */
-   fetch_texel_1d_ycbcr_rev,           /* FetchTexel1D */
-   fetch_texel_2d_ycbcr_rev,           /* FetchTexel2D */
-   fetch_texel_3d_ycbcr_rev,           /* FetchTexel3D */
-   NULL,                               /* FetchTexel1Df */
-   NULL,                               /* FetchTexel2Df */
-   NULL,                               /* FetchTexel3Df */
+   NULL,                               /* FetchTexel1D */
+   NULL,                               /* FetchTexel2D */
+   NULL,                               /* FetchTexel3D */
+   fetch_texel_1d_f_ycbcr_rev,         /* FetchTexel1Df */
+   fetch_texel_2d_f_ycbcr_rev,         /* FetchTexel2Df */
+   fetch_texel_3d_f_ycbcr_rev,         /* FetchTexel3Df */
    store_texel_ycbcr_rev               /* StoreTexel */
 };
 
@@ -1420,55 +1567,52 @@ _mesa_choose_tex_format( GLcontext *ctx, GLint internalFormat,
          ; /* fallthrough */
    }
 
-   if (ctx->Extensions.SGIX_depth_texture ||
-       ctx->Extensions.ARB_depth_texture) {
+   if (ctx->Extensions.ARB_depth_texture) {
       switch (internalFormat) {
          case GL_DEPTH_COMPONENT:
-         case GL_DEPTH_COMPONENT24_SGIX:
-         case GL_DEPTH_COMPONENT32_SGIX:
+         case GL_DEPTH_COMPONENT24:
+         case GL_DEPTH_COMPONENT32:
             return &_mesa_texformat_z32;
-         case GL_DEPTH_COMPONENT16_SGIX:
+         case GL_DEPTH_COMPONENT16:
             return &_mesa_texformat_z16;
          default:
             ; /* fallthrough */
       }
    }
 
-   if (ctx->Extensions.ARB_texture_compression) {
-      switch (internalFormat) {
-         case GL_COMPRESSED_ALPHA_ARB:
-            return &_mesa_texformat_alpha;
-         case GL_COMPRESSED_LUMINANCE_ARB:
-            return &_mesa_texformat_luminance;
-         case GL_COMPRESSED_LUMINANCE_ALPHA_ARB:
-            return &_mesa_texformat_luminance_alpha;
-         case GL_COMPRESSED_INTENSITY_ARB:
-            return &_mesa_texformat_intensity;
-         case GL_COMPRESSED_RGB_ARB:
+   switch (internalFormat) {
+      case GL_COMPRESSED_ALPHA_ARB:
+         return &_mesa_texformat_alpha;
+      case GL_COMPRESSED_LUMINANCE_ARB:
+         return &_mesa_texformat_luminance;
+      case GL_COMPRESSED_LUMINANCE_ALPHA_ARB:
+         return &_mesa_texformat_luminance_alpha;
+      case GL_COMPRESSED_INTENSITY_ARB:
+         return &_mesa_texformat_intensity;
+      case GL_COMPRESSED_RGB_ARB:
 #if FEATURE_texture_fxt1
-            if (ctx->Extensions.TDFX_texture_compression_FXT1)
-               return &_mesa_texformat_rgb_fxt1;
+         if (ctx->Extensions.TDFX_texture_compression_FXT1)
+            return &_mesa_texformat_rgb_fxt1;
 #endif
 #if FEATURE_texture_s3tc
-            if (ctx->Extensions.EXT_texture_compression_s3tc ||
-                ctx->Extensions.S3_s3tc)
-               return &_mesa_texformat_rgb_dxt1;
+         if (ctx->Extensions.EXT_texture_compression_s3tc ||
+             ctx->Extensions.S3_s3tc)
+            return &_mesa_texformat_rgb_dxt1;
 #endif
-            return &_mesa_texformat_rgb;
-         case GL_COMPRESSED_RGBA_ARB:
+         return &_mesa_texformat_rgb;
+      case GL_COMPRESSED_RGBA_ARB:
 #if FEATURE_texture_fxt1
-            if (ctx->Extensions.TDFX_texture_compression_FXT1)
-               return &_mesa_texformat_rgba_fxt1;
+         if (ctx->Extensions.TDFX_texture_compression_FXT1)
+            return &_mesa_texformat_rgba_fxt1;
 #endif
 #if FEATURE_texture_s3tc
-            if (ctx->Extensions.EXT_texture_compression_s3tc ||
-                ctx->Extensions.S3_s3tc)
-               return &_mesa_texformat_rgba_dxt3; /* Not rgba_dxt1, see spec */
+         if (ctx->Extensions.EXT_texture_compression_s3tc ||
+             ctx->Extensions.S3_s3tc)
+            return &_mesa_texformat_rgba_dxt3; /* Not rgba_dxt1, see spec */
 #endif
-            return &_mesa_texformat_rgba;
-         default:
-            ; /* fallthrough */
-      }
+         return &_mesa_texformat_rgba;
+      default:
+         ; /* fallthrough */
    }
 
    if (ctx->Extensions.MESA_ycbcr_texture) {
@@ -1564,6 +1708,27 @@ _mesa_choose_tex_format( GLcontext *ctx, GLint internalFormat,
       }
    }
 
+   if (ctx->Extensions.ATI_envmap_bumpmap) {
+      switch (internalFormat) {
+         case GL_DUDV_ATI:
+         case GL_DU8DV8_ATI:
+            return &_mesa_texformat_dudv8;
+         default:
+            ; /* fallthrough */
+      }
+   }
+
+   if (ctx->Extensions.MESA_texture_signed_rgba) {
+      switch (internalFormat) {
+         case GL_RGBA_SNORM:
+         case GL_RGBA8_SNORM:
+            return &_mesa_texformat_signed_rgba8888;
+         default:
+            ; /* fallthrough */
+      }
+   }
+
+
 #if FEATURE_EXT_texture_sRGB
    if (ctx->Extensions.EXT_texture_sRGB) {
       switch (internalFormat) {
@@ -1579,21 +1744,40 @@ _mesa_choose_tex_format( GLcontext *ctx, GLint internalFormat,
          case GL_SLUMINANCE_ALPHA_EXT:
          case GL_SLUMINANCE8_ALPHA8_EXT:
             return &_mesa_texformat_sla8;
-         /* NOTE: not supporting any compression of sRGB at this time */
-         case GL_COMPRESSED_SRGB_EXT:
-            return &_mesa_texformat_srgb8;
-         case GL_COMPRESSED_SRGB_ALPHA_EXT:
-            return &_mesa_texformat_srgba8;
          case GL_COMPRESSED_SLUMINANCE_EXT:
             return &_mesa_texformat_sl8;
          case GL_COMPRESSED_SLUMINANCE_ALPHA_EXT:
             return &_mesa_texformat_sla8;
-         case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT:
+         case GL_COMPRESSED_SRGB_EXT:
+#if FEATURE_texture_s3tc
+            if (ctx->Extensions.EXT_texture_compression_s3tc)
+               return &_mesa_texformat_srgb_dxt1;
+#endif
             return &_mesa_texformat_srgb8;
+         case GL_COMPRESSED_SRGB_ALPHA_EXT:
+#if FEATURE_texture_s3tc
+            if (ctx->Extensions.EXT_texture_compression_s3tc)
+               return &_mesa_texformat_srgba_dxt3; /* Not srgba_dxt1, see spec */
+#endif
+            return &_mesa_texformat_srgba8;
+#if FEATURE_texture_s3tc
+         case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT:
+            if (ctx->Extensions.EXT_texture_compression_s3tc)
+               return &_mesa_texformat_srgb_dxt1;
+            break;
          case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT:
+            if (ctx->Extensions.EXT_texture_compression_s3tc)
+               return &_mesa_texformat_srgba_dxt1;
+            break;
          case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT:
+            if (ctx->Extensions.EXT_texture_compression_s3tc)
+               return &_mesa_texformat_srgba_dxt3;
+            break;
          case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT:
-            return &_mesa_texformat_srgba8;
+            if (ctx->Extensions.EXT_texture_compression_s3tc)
+               return &_mesa_texformat_srgba_dxt5;
+            break;
+#endif
          default:
             ; /* fallthrough */
       }
@@ -1642,7 +1826,7 @@ _mesa_format_to_type_and_comps(const struct gl_texture_format *format,
    case MESA_FORMAT_ARGB1555:
    case MESA_FORMAT_ARGB1555_REV:
       *datatype = GL_UNSIGNED_SHORT_1_5_5_5_REV;
-      *comps = 3;
+      *comps = 4;
       return;
 
    case MESA_FORMAT_AL88:
@@ -1689,12 +1873,24 @@ _mesa_format_to_type_and_comps(const struct gl_texture_format *format,
       *comps = 1;
       return;
 
+   case MESA_FORMAT_DUDV8:
+      *datatype = GL_BYTE;
+      *comps = 2;
+      return;
+
+   case MESA_FORMAT_SIGNED_RGBA8888:
+   case MESA_FORMAT_SIGNED_RGBA8888_REV:
+      *datatype = GL_BYTE;
+      *comps = 4;
+      return;
+
 #if FEATURE_EXT_texture_sRGB
    case MESA_FORMAT_SRGB8:
       *datatype = GL_UNSIGNED_BYTE;
       *comps = 3;
       return;
    case MESA_FORMAT_SRGBA8:
+   case MESA_FORMAT_SARGB8:
       *datatype = GL_UNSIGNED_BYTE;
       *comps = 4;
       return;
@@ -1717,6 +1913,12 @@ _mesa_format_to_type_and_comps(const struct gl_texture_format *format,
    case MESA_FORMAT_RGBA_DXT1:
    case MESA_FORMAT_RGBA_DXT3:
    case MESA_FORMAT_RGBA_DXT5:
+#if FEATURE_EXT_texture_sRGB
+   case MESA_FORMAT_SRGB_DXT1:
+   case MESA_FORMAT_SRGBA_DXT1:
+   case MESA_FORMAT_SRGBA_DXT3:
+   case MESA_FORMAT_SRGBA_DXT5:
+#endif
       /* XXX generate error instead? */
       *datatype = GL_UNSIGNED_BYTE;
       *comps = 0;