mesa: added _mesa_meta_check_generate_mipmap_fallback()
authorBrian Paul <brianp@vmware.com>
Fri, 2 Oct 2009 14:54:55 +0000 (08:54 -0600)
committerBrian Paul <brianp@vmware.com>
Fri, 2 Oct 2009 15:03:27 +0000 (09:03 -0600)
src/mesa/drivers/common/meta.c
src/mesa/drivers/common/meta.h

index a152087a3aad50447234bfb233b05690316c7a0d..20d47dc38b028781c35a90011ca70e8e654822f9 100644 (file)
@@ -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;
    }
index 7f659528dc00295c2f9c8090868cfc42a8c9d724..6225b9418939adffe6ca62b48688b4b714bf4841 100644 (file)
@@ -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);