From f1cab802b8e78906413f219ad354f5d5500b4d3f Mon Sep 17 00:00:00 2001
From: Brian Paul <brianp@vmware.com>
Date: Fri, 2 Oct 2009 08:54:55 -0600
Subject: mesa: added _mesa_meta_check_generate_mipmap_fallback()

---
 src/mesa/drivers/common/meta.c | 27 ++++++++++++++++++++++++---
 src/mesa/drivers/common/meta.h |  4 ++++
 2 files changed, 28 insertions(+), 3 deletions(-)

(limited to 'src/mesa')

diff --git a/src/mesa/drivers/common/meta.c b/src/mesa/drivers/common/meta.c
index a152087a3aa..20d47dc38b0 100644
--- a/src/mesa/drivers/common/meta.c
+++ b/src/mesa/drivers/common/meta.c
@@ -1948,6 +1948,29 @@ _mesa_meta_Bitmap(GLcontext *ctx,
 }
 
 
+/**
+ * Check if the call to _mesa_meta_GenerateMipmap() will require a
+ * software fallback.  The fallback path will require that the texture
+ * images are mapped.
+ */
+GLboolean
+_mesa_meta_check_generate_mipmap_fallback(GLcontext *ctx, GLenum target,
+                                          struct gl_texture_object *texObj)
+{
+   struct gl_texture_image *baseImage =
+      _mesa_select_tex_image(ctx, texObj, target, texObj->BaseLevel);
+
+   /* check for fallbacks */
+   if (!ctx->Extensions.EXT_framebuffer_object ||
+       target == GL_TEXTURE_3D ||
+       !baseImage ||
+       baseImage->IsCompressed) {
+      return GL_TRUE;
+   }
+   return GL_FALSE;
+}
+
+
 /**
  * Called via ctx->Driver.GenerateMipmap()
  * Note: texture borders and 3D texture support not yet complete.
@@ -1976,9 +1999,7 @@ _mesa_meta_GenerateMipmap(GLcontext *ctx, GLenum target,
    GLuint dstLevel;
    GLuint border = 0;
 
-   /* check for fallbacks */
-   if (!ctx->Extensions.EXT_framebuffer_object ||
-       target == GL_TEXTURE_3D) {
+   if (_mesa_meta_check_generate_mipmap_fallback(ctx, target, texObj)) {
       _mesa_generate_mipmap(ctx, target, texObj);
       return;
    }
diff --git a/src/mesa/drivers/common/meta.h b/src/mesa/drivers/common/meta.h
index 7f659528dc0..6225b941893 100644
--- a/src/mesa/drivers/common/meta.h
+++ b/src/mesa/drivers/common/meta.h
@@ -60,6 +60,10 @@ _mesa_meta_Bitmap(GLcontext *ctx,
                   const struct gl_pixelstore_attrib *unpack,
                   const GLubyte *bitmap);
 
+extern GLboolean
+_mesa_meta_check_generate_mipmap_fallback(GLcontext *ctx, GLenum target,
+                                          struct gl_texture_object *texObj);
+
 extern void
 _mesa_meta_GenerateMipmap(GLcontext *ctx, GLenum target,
                           struct gl_texture_object *texObj);
-- 
cgit v1.2.3