diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/mesa/main/get.c | 12 | ||||
| -rw-r--r-- | src/mesa/main/get_gen.py | 5 | ||||
| -rw-r--r-- | src/mesa/main/texcompress.c | 31 | ||||
| -rw-r--r-- | src/mesa/main/texcompress.h | 2 | ||||
| -rw-r--r-- | src/mesa/main/teximage.c | 2 | 
5 files changed, 31 insertions, 21 deletions
| diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c index 9684ccb8a4..2e2da7d933 100644 --- a/src/mesa/main/get.c +++ b/src/mesa/main/get.c @@ -1068,13 +1068,13 @@ _mesa_GetBooleanv( GLenum pname, GLboolean *params )           break;        case GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB:           CHECK_EXT1(ARB_texture_compression, "GetBooleanv"); -         params[0] = INT_TO_BOOLEAN(_mesa_get_compressed_formats(ctx, NULL)); +         params[0] = INT_TO_BOOLEAN(_mesa_get_compressed_formats(ctx, NULL, GL_FALSE));           break;        case GL_COMPRESSED_TEXTURE_FORMATS_ARB:           CHECK_EXT1(ARB_texture_compression, "GetBooleanv");           {           GLint formats[100]; -         GLuint i, n = _mesa_get_compressed_formats(ctx, formats); +         GLuint i, n = _mesa_get_compressed_formats(ctx, formats, GL_FALSE);           ASSERT(n <= 100);           for (i = 0; i < n; i++)              params[i] = ENUM_TO_INT(formats[i]); @@ -2886,13 +2886,13 @@ _mesa_GetFloatv( GLenum pname, GLfloat *params )           break;        case GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB:           CHECK_EXT1(ARB_texture_compression, "GetFloatv"); -         params[0] = (GLfloat)(_mesa_get_compressed_formats(ctx, NULL)); +         params[0] = (GLfloat)(_mesa_get_compressed_formats(ctx, NULL, GL_FALSE));           break;        case GL_COMPRESSED_TEXTURE_FORMATS_ARB:           CHECK_EXT1(ARB_texture_compression, "GetFloatv");           {           GLint formats[100]; -         GLuint i, n = _mesa_get_compressed_formats(ctx, formats); +         GLuint i, n = _mesa_get_compressed_formats(ctx, formats, GL_FALSE);           ASSERT(n <= 100);           for (i = 0; i < n; i++)              params[i] = ENUM_TO_INT(formats[i]); @@ -4704,13 +4704,13 @@ _mesa_GetIntegerv( GLenum pname, GLint *params )           break;        case GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB:           CHECK_EXT1(ARB_texture_compression, "GetIntegerv"); -         params[0] = _mesa_get_compressed_formats(ctx, NULL); +         params[0] = _mesa_get_compressed_formats(ctx, NULL, GL_FALSE);           break;        case GL_COMPRESSED_TEXTURE_FORMATS_ARB:           CHECK_EXT1(ARB_texture_compression, "GetIntegerv");           {           GLint formats[100]; -         GLuint i, n = _mesa_get_compressed_formats(ctx, formats); +         GLuint i, n = _mesa_get_compressed_formats(ctx, formats, GL_FALSE);           ASSERT(n <= 100);           for (i = 0; i < n; i++)              params[i] = ENUM_TO_INT(formats[i]); diff --git a/src/mesa/main/get_gen.py b/src/mesa/main/get_gen.py index 63aed5ab25..78d5066355 100644 --- a/src/mesa/main/get_gen.py +++ b/src/mesa/main/get_gen.py @@ -516,11 +516,12 @@ StateVars = [  	( "GL_TEXTURE_COMPRESSION_HINT_ARB", GLint,  	  ["ctx->Hint.TextureCompression"], "", ["ARB_texture_compression"] ),  	( "GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB", GLint, -	  ["_mesa_get_compressed_formats(ctx, NULL)"], "", ["ARB_texture_compression"] ), +	  ["_mesa_get_compressed_formats(ctx, NULL, GL_FALSE)"], +	  "", ["ARB_texture_compression"] ),  	( "GL_COMPRESSED_TEXTURE_FORMATS_ARB", GLenum,  	  [],  	  """GLint formats[100]; -         GLuint i, n = _mesa_get_compressed_formats(ctx, formats); +         GLuint i, n = _mesa_get_compressed_formats(ctx, formats, GL_FALSE);           ASSERT(n <= 100);           for (i = 0; i < n; i++)              params[i] = ENUM_TO_INT(formats[i]);""", diff --git a/src/mesa/main/texcompress.c b/src/mesa/main/texcompress.c index 0a92c92683..2516339e11 100644 --- a/src/mesa/main/texcompress.c +++ b/src/mesa/main/texcompress.c @@ -1,8 +1,8 @@  /*   * Mesa 3-D graphics library - * Version:  6.1 + * Version:  6.5.1   * - * Copyright (C) 1999-2004  Brian Paul   All Rights Reserved. + * Copyright (C) 1999-2006  Brian Paul   All Rights Reserved.   *   * Permission is hereby granted, free of charge, to any person obtaining a   * copy of this software and associated documentation files (the "Software"), @@ -38,16 +38,21 @@  #include "texformat.h"  #include "texstore.h" +  /** - * Get the list of supported internal compression formats. + * Return list of (and count of) all specific texture compression + * formats that are supported.   * - * \param ctx GL context. - * \param formats the resulting format list (may be NULL). + * \param ctx  the GL context + * \param formats  the resulting format list (may be NULL). + * \param all  if true return all formats, even those with  some kind + *             of restrictions/limitations (See GL_ARB_texture_compression + *             spec for more info).   *   * \return number of formats.   */  GLuint -_mesa_get_compressed_formats( GLcontext *ctx, GLint *formats ) +_mesa_get_compressed_formats(GLcontext *ctx, GLint *formats, GLboolean all)  {     GLuint n = 0;     if (ctx->Extensions.ARB_texture_compression) { @@ -63,16 +68,20 @@ _mesa_get_compressed_formats( GLcontext *ctx, GLint *formats )        if (ctx->Extensions.EXT_texture_compression_s3tc) {           if (formats) {              formats[n++] = GL_COMPRESSED_RGB_S3TC_DXT1_EXT; -            /* Skip this one because it has a restriction (all transparent -             * pixels become black).  See the texture compressions spec for -             * a detailed explanation.  This is what NVIDIA does. -            formats[n++] = GL_COMPRESSED_RGBA_S3TC_DXT1_EXT; -            */ +            /* This format has some restrictions/limitations and so should +             * not be returned via the GL_COMPRESSED_TEXTURE_FORMATS query. +             * Specifically, all transparent pixels become black.  NVIDIA +             * omits this format too. +             */ +            if (all) +               formats[n++] = GL_COMPRESSED_RGBA_S3TC_DXT1_EXT;              formats[n++] = GL_COMPRESSED_RGBA_S3TC_DXT3_EXT;              formats[n++] = GL_COMPRESSED_RGBA_S3TC_DXT5_EXT;           }           else {              n += 3; +            if (all) +               n += 1;           }        }        if (ctx->Extensions.S3_s3tc) { diff --git a/src/mesa/main/texcompress.h b/src/mesa/main/texcompress.h index 5b5e64e15d..44f3338222 100644 --- a/src/mesa/main/texcompress.h +++ b/src/mesa/main/texcompress.h @@ -30,7 +30,7 @@  #if _HAVE_FULL_GL  extern GLuint -_mesa_get_compressed_formats( GLcontext *ctx, GLint *formats ); +_mesa_get_compressed_formats(GLcontext *ctx, GLint *formats, GLboolean all);  extern GLuint  _mesa_compressed_texture_size( GLcontext *ctx, diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c index f993e21958..91a96e871b 100644 --- a/src/mesa/main/teximage.c +++ b/src/mesa/main/teximage.c @@ -536,7 +536,7 @@ is_compressed_format(GLcontext *ctx, GLenum internalFormat)     GLint supported[100]; /* 100 should be plenty */     GLuint i, n; -   n = _mesa_get_compressed_formats(ctx, supported); +   n = _mesa_get_compressed_formats(ctx, supported, GL_TRUE);     ASSERT(n < 100);     for (i = 0; i < n; i++) {        if ((GLint) internalFormat == supported[i]) { | 
