Mesa (master): mesa: Don' t override S3TC internalFormat if data is pre-compressed.

Kenneth Graunke kwg at kemper.freedesktop.org
Thu Sep 20 21:50:43 UTC 2012


Module: Mesa
Branch: master
Commit: 328961d95586931a17fe81ba816d362e8389c105
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=328961d95586931a17fe81ba816d362e8389c105

Author: Kenneth Graunke <kenneth at whitecape.org>
Date:   Wed Sep 19 12:01:14 2012 -0700

mesa: Don't override S3TC internalFormat if data is pre-compressed.

Commit 42723d88d intended to override an S3TC internalFormat to a
generic compressed format when the application requested online
compression of uncompressed data.  Unfortunately, it also broke
pre-compressed textures when libtxc_dxtn isn't installed but the
extensions are forced on.

Both glCompressedTexImage2D() and glTexImage2D() call teximage(), which
calls _mesa_choose_texture_format(), hitting this override code.  If we
have actual S3TC source data, we can't treat it as any other format, and
need to avoid the override.

Since glCompressedTexImage2D() passes in a format of GL_NONE (which is
illegal for glTexImage), we can use that to detect the pre-compressed
case and avoid the overrides.

Fixes a regression since 42723d88d370a7599398cc1c2349aeb951ba1c57.

NOTE: This is a candidate for the 9.0 branch.

Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>
Reviewed-and-tested-by: Jordan Justen <jordan.l.justen at intel.com>

---

 src/mesa/main/teximage.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c
index 83e79a5..08af668 100644
--- a/src/mesa/main/teximage.c
+++ b/src/mesa/main/teximage.c
@@ -2746,7 +2746,7 @@ _mesa_choose_texture_format(struct gl_context *ctx,
    /* If the application requested compression to an S3TC format but we don't
     * have the DTXn library, force a generic compressed format instead.
     */
-   if (internalFormat != format) {
+   if (internalFormat != format && format != GL_NONE) {
       const GLenum before = internalFormat;
 
       switch (internalFormat) {




More information about the mesa-commit mailing list