mesa: Fix GenerateMipmapEXT(GL_TEXTURE_CUBE_MAP_ARB).
authorEric Anholt <eric@anholt.net>
Sun, 7 Dec 2008 05:14:56 +0000 (21:14 -0800)
committerEric Anholt <eric@anholt.net>
Sun, 7 Dec 2008 06:41:52 +0000 (22:41 -0800)
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

index 4c92d1fb5a8a82fe8cc06cdef386617a41b2e946..876d691c652adf9cecf70644be21e53e8ff30cca 100644 (file)
@@ -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);
 }