Mesa (gallium-0.2): mesa: Fix GenerateMipmapEXT(GL_TEXTURE_CUBE_MAP_ARB).

Alan Hourihane alanh at kemper.freedesktop.org
Tue Dec 9 08:18:07 PST 2008


Module: Mesa
Branch: gallium-0.2
Commit: f849d364c22e702e3dda664fa65601d4cf2b55a5
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=f849d364c22e702e3dda664fa65601d4cf2b55a5

Author: Eric Anholt <eric at anholt.net>
Date:   Sat Dec  6 21:14:56 2008 -0800

mesa: Fix GenerateMipmapEXT(GL_TEXTURE_CUBE_MAP_ARB).

The ctx->Driver.GenerateMipmap() hook only expects cubemap face enums, not
CUBE_MAP_ARB, so walk all faces when we encounter that.  Fixes oglconform
fbo.c segfault with both swrast and i965 drivers.

---

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

diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c
index 4c92d1f..876d691 100644
--- a/src/mesa/main/fbobject.c
+++ b/src/mesa/main/fbobject.c
@@ -1574,9 +1574,17 @@ _mesa_GenerateMipmapEXT(GLenum target)
    texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit];
    texObj = _mesa_select_tex_object(ctx, texUnit, target);
 
-   /* XXX this might not handle cube maps correctly */
    _mesa_lock_texture(ctx, texObj);
-   ctx->Driver.GenerateMipmap(ctx, target, texObj);
+   if (target == GL_TEXTURE_CUBE_MAP) {
+      int face;
+
+      for (face = 0; face < 6; face++)
+	 ctx->Driver.GenerateMipmap(ctx,
+				    GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB + face,
+				    texObj);
+   } else {
+      ctx->Driver.GenerateMipmap(ctx, target, texObj);
+   }
    _mesa_unlock_texture(ctx, texObj);
 }
 



More information about the mesa-commit mailing list