- Add a few more hardware internal formats that are supported. Some remaining
authorEric Anholt <anholt@FreeBSD.org>
Mon, 24 Oct 2005 09:59:43 +0000 (09:59 +0000)
committerEric Anholt <anholt@FreeBSD.org>
Mon, 24 Oct 2005 09:59:43 +0000 (09:59 +0000)
  ones require custom texstore, so they aren't done yet.
- Add YCBCR support commented out, since the yuvsquare test didn't work with
  just the bits I've added.
- Add the no-compression GL_ARB_texture_compression support.
- Add the driconf texture depth option and try to respect it.

src/mesa/drivers/dri/sis/sis_context.c
src/mesa/drivers/dri/sis/sis_context.h
src/mesa/drivers/dri/sis/sis_screen.c
src/mesa/drivers/dri/sis/sis_tex.c

index fab3847496504c9256680c9d09b017ac17bfecf7..8e2aa88ca39da3f44546c02b6d2a666ac93a7bd1 100644 (file)
@@ -59,6 +59,7 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "tnl/t_pipeline.h"
 
 #define need_GL_ARB_multisample
+#define need_GL_ARB_texture_compression
 #include "extension_helper.h"
 
 #ifndef SIS_DEBUG
@@ -74,9 +75,11 @@ struct dri_extension card_extensions[] =
     { "GL_ARB_multisample",                GL_ARB_multisample_functions },
     { "GL_ARB_multitexture",               NULL },
     { "GL_ARB_texture_border_clamp",       NULL },
+    { "GL_ARB_texture_compression",        GL_ARB_texture_compression_functions },
     { "GL_ARB_texture_mirrored_repeat",    NULL },
     { "GL_EXT_texture_lod_bias",           NULL },
     { "GL_EXT_stencil_wrap",               NULL },
+    /*{ "GL_MESA_ycbcr_texture",             NULL },*/ /* not working yet */
     { "GL_NV_blend_square",                NULL },
     { NULL,                                NULL }
 };
@@ -290,6 +293,7 @@ sisCreateContext( const __GLcontextModes *glVisual,
       fprintf(stderr, "disabling 3D acceleration\n");
       FALLBACK(smesa, SIS_FALLBACK_DISABLE, 1);
    }
+   smesa->texture_depth = driQueryOptioni(&smesa->optionCache, "texture_depth");
 
    return GL_TRUE;
 }
index 17d283995fc9b38029493f5b043812c8b51f2013..54c1f0458f2f61734e2e7d05da379a09541afb01 100644 (file)
@@ -367,6 +367,7 @@ struct sis_context
 
    /* Configuration cache */
    driOptionCache optionCache;
+    GLint texture_depth;
 };
 
 #define SIS_CONTEXT(ctx)               ((sisContextPtr)(ctx->DriverCtx))
index d213cc406ce0dcfa27d0190c2ac74aaa622a67fd..7409fd5939894e8fc50f220c82e24091ab191c2d 100644 (file)
@@ -46,16 +46,22 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 #include "GL/internal/dri_interface.h"
 
+#define SIS_AGP_DISABLE(def) \
+DRI_CONF_OPT_BEGIN(agp_disable,bool,def)                               \
+       DRI_CONF_DESC(en,"Disable AGP vertex dispatch")                 \
+DRI_CONF_OPT_END
+
 PUBLIC const char __driConfigOptions[] =
 DRI_CONF_BEGIN
+       DRI_CONF_SECTION_QUALITY
+               DRI_CONF_TEXTURE_DEPTH(DRI_CONF_TEXTURE_DEPTH_FB)
+       DRI_CONF_SECTION_END
        DRI_CONF_SECTION_DEBUG
-               DRI_CONF_OPT_BEGIN(agp_disable,bool,false)
-               DRI_CONF_DESC(en,"Disable AGP vertex dispatch")
-               DRI_CONF_OPT_END
-        DRI_CONF_NO_RAST(false)
+               SIS_AGP_DISABLE(false)
+               DRI_CONF_NO_RAST(false)
        DRI_CONF_SECTION_END
 DRI_CONF_END;
-static const GLuint __driNConfigOptions = 2;
+static const GLuint __driNConfigOptions = 3;
 
 extern const struct dri_extension card_extensions[];
 
index a8b4c0e74d597f6f36debc0c9b1366f2a7a0f35a..e2b7e93b807657f41569fc5dba723af589703702 100644 (file)
@@ -40,6 +40,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "teximage.h"
 #include "texobj.h"
 
+#include "xmlpool.h"
+
 #define ALIGN(value, align) (GLubyte *)((long)(value + align - 1) & ~(align - 1))
 
 #define TEXTURE_HW_ALIGNMENT 4
@@ -64,28 +66,44 @@ sisAllocTexImage( sisContextPtr smesa, sisTexObjPtr t, int level,
 
    if (t->format == 0) {
       t->format = image->_BaseFormat;
-      switch (t->format)
+      switch (image->TexFormat->MesaFormat)
       {
-      case GL_RGBA:
+      case MESA_FORMAT_ARGB8888:
          t->hwformat = TEXEL_ARGB_8888_32;
          break;
-      case GL_INTENSITY:
+      case MESA_FORMAT_ARGB4444:
+         t->hwformat = TEXEL_ARGB_4444_16;
+         break;
+      case MESA_FORMAT_ARGB1555:
+         t->hwformat = TEXEL_ARGB_1555_16;
+         break;
+      case MESA_FORMAT_RGB565:
+         t->hwformat = TEXEL_RGB_565_16;
+         break;
+      case MESA_FORMAT_RGB332:
+         t->hwformat = TEXEL_RGB_332_8;
+         break;
+      case MESA_FORMAT_I8:
          t->hwformat = TEXEL_I8;
          break;
-      case GL_ALPHA:
+      case MESA_FORMAT_A8:
          t->hwformat = TEXEL_A8;
          break;
-      case GL_LUMINANCE:
+      case MESA_FORMAT_L8:
          t->hwformat = TEXEL_L8;
          break;
-      case GL_LUMINANCE_ALPHA:
+      case MESA_FORMAT_AL88:
          t->hwformat = TEXEL_AL88;
          break;
-      case GL_RGB:
-         t->hwformat = TEXEL_ARGB_0888_32;
+      case MESA_FORMAT_YCBCR:
+         t->hwformat = TEXEL_YVU422;   /* Doesn't work?  Extension disabled */
+         break;
+      case MESA_FORMAT_YCBCR_REV:
+         t->hwformat = TEXEL_YUV422;   /* Doesn't work?  Extension disabled */
          break;
       default:
-         sis_fatal_error("Bad texture format.\n");
+         sis_fatal_error("Bad texture format 0x%x.\n",
+                        image->TexFormat->MesaFormat);
       }
    }
    assert(t->format == image->_BaseFormat);
@@ -215,58 +233,123 @@ static const struct gl_texture_format *
 sisChooseTextureFormat( GLcontext *ctx, GLint internalFormat,
                          GLenum format, GLenum type )
 {
-   /* XXX 16-bit internal texture formats? */
+   sisContextPtr smesa = SIS_CONTEXT(ctx);
+
+   const GLboolean do32bpt =
+       (smesa->texture_depth == DRI_CONF_TEXTURE_DEPTH_32);
+   const GLboolean force16bpt =
+       (smesa->texture_depth == DRI_CONF_TEXTURE_DEPTH_FORCE_16);
+
    switch ( internalFormat ) {
+   case 4:
+   case GL_RGBA:
+   case GL_COMPRESSED_RGBA:
+      switch ( type ) {
+      case GL_UNSIGNED_INT_10_10_10_2:
+      case GL_UNSIGNED_INT_2_10_10_10_REV:
+        return do32bpt ? &_mesa_texformat_argb8888 : &_mesa_texformat_argb1555;
+      case GL_UNSIGNED_SHORT_4_4_4_4:
+      case GL_UNSIGNED_SHORT_4_4_4_4_REV:
+        return &_mesa_texformat_argb4444;
+      case GL_UNSIGNED_SHORT_5_5_5_1:
+      case GL_UNSIGNED_SHORT_1_5_5_5_REV:
+        return &_mesa_texformat_argb1555;
+      default:
+         return do32bpt ? &_mesa_texformat_argb8888 : &_mesa_texformat_argb4444;
+      }
+
+   case 3:
+   case GL_RGB:
+   case GL_COMPRESSED_RGB:
+      switch ( type ) {
+      case GL_UNSIGNED_SHORT_4_4_4_4:
+      case GL_UNSIGNED_SHORT_4_4_4_4_REV:
+        return &_mesa_texformat_argb4444;
+      case GL_UNSIGNED_SHORT_5_5_5_1:
+      case GL_UNSIGNED_SHORT_1_5_5_5_REV:
+        return &_mesa_texformat_argb1555;
+      case GL_UNSIGNED_SHORT_5_6_5:
+      case GL_UNSIGNED_SHORT_5_6_5_REV:
+        return &_mesa_texformat_rgb565;
+      default:
+         return do32bpt ? &_mesa_texformat_argb8888 : &_mesa_texformat_rgb565;
+      }
+
+   case GL_RGBA8:
+   case GL_RGBA12:
+   case GL_RGBA16:
+      return !force16bpt ?
+         &_mesa_texformat_argb8888 : &_mesa_texformat_argb4444;
+
+   case GL_RGB10_A2:
+      return !force16bpt ?
+         &_mesa_texformat_argb8888 : &_mesa_texformat_argb1555;
+
+   case GL_RGBA4:
+   case GL_RGBA2:
+      return &_mesa_texformat_argb4444;
+
+   case GL_RGB5_A1:
+      return &_mesa_texformat_argb1555;
+
+   case GL_RGB8:
+   case GL_RGB10:
+   case GL_RGB12:
+   case GL_RGB16:
+      return !force16bpt ? &_mesa_texformat_argb8888 : &_mesa_texformat_rgb565;
+
+   case GL_RGB5:
+   case GL_RGB4:
+      return &_mesa_texformat_rgb565;
+
+   case GL_R3_G3_B2:
+      return &_mesa_texformat_rgb332;
+
    case GL_ALPHA:
-   case GL_ALPHA4:
+   case GL_ALPHA4:             /* FIXME: This could use its own texstore */
    case GL_ALPHA8:
    case GL_ALPHA12:
    case GL_ALPHA16:
+   case GL_COMPRESSED_ALPHA:
       return &_mesa_texformat_a8;
+
    case 1:
    case GL_LUMINANCE:
-   case GL_LUMINANCE4:
+   case GL_LUMINANCE4:         /* FIXME: This could use its own texstore */
    case GL_LUMINANCE8:
    case GL_LUMINANCE12:
    case GL_LUMINANCE16:
+   case GL_COMPRESSED_LUMINANCE:
       return &_mesa_texformat_l8;
+
    case 2:
    case GL_LUMINANCE_ALPHA:
-   case GL_LUMINANCE4_ALPHA4:
-   case GL_LUMINANCE6_ALPHA2:
+   case GL_LUMINANCE4_ALPHA4:  /* FIXME: This could use its own texstore */
+   case GL_LUMINANCE6_ALPHA2:  /* FIXME: This could use its own texstore */
    case GL_LUMINANCE8_ALPHA8:
-   case GL_LUMINANCE12_ALPHA4:
+   case GL_LUMINANCE12_ALPHA4: /* FIXME: This could use its own texstore */
    case GL_LUMINANCE12_ALPHA12:
    case GL_LUMINANCE16_ALPHA16:
+   case GL_COMPRESSED_LUMINANCE_ALPHA:
       return &_mesa_texformat_al88;
+
    case GL_INTENSITY:
    case GL_INTENSITY4:
    case GL_INTENSITY8:
    case GL_INTENSITY12:
    case GL_INTENSITY16:
+   case GL_COMPRESSED_INTENSITY:
       return &_mesa_texformat_i8;
-   case GL_R3_G3_B2:
-   case GL_RGB4:
-   case GL_RGB5:
-   case 3:
-   case GL_RGB:
-   case GL_RGB8:
-   case GL_RGB10:
-   case GL_RGB12:
-   case GL_RGB16:
-      return &_mesa_texformat_argb8888 /*_mesa_texformat_rgb888*/; /* XXX */
-   case GL_RGBA2:
-   case GL_RGBA4:
-   case GL_RGB5_A1:
-   case 4:
-   case GL_RGBA:
-   case GL_RGBA8:
-   case GL_RGB10_A2:
-   case GL_RGBA12:
-   case GL_RGBA16:
-      return &_mesa_texformat_argb8888;
+
+   case GL_YCBCR_MESA:
+      if (type == GL_UNSIGNED_SHORT_8_8_APPLE ||
+          type == GL_UNSIGNED_BYTE)
+         return &_mesa_texformat_ycbcr;
+      else
+         return &_mesa_texformat_ycbcr_rev;
+
    default:
-      _mesa_problem(ctx, "unexpected format in tdfxDDChooseTextureFormat: %d",
+      _mesa_problem(ctx, "unexpected format in sisDDChooseTextureFormat: %d",
          internalFormat);
       return NULL;
    }