mesa/intel: map/unmap texture objects around mipmap generation function.
authorDave Airlie <airlied@redhat.com>
Fri, 9 May 2008 03:02:41 +0000 (13:02 +1000)
committerDave Airlie <airlied@panoply-rh.(none)>
Fri, 9 May 2008 03:02:41 +0000 (13:02 +1000)
This at least stops the compiz brain explosion we were seeing, I do wonder
though if we should somehow be calling intel_generate_mipmap somehow.

src/mesa/drivers/dri/intel/intel_tex.c
src/mesa/main/fbobject.c

index 329af0d1b0471c487c77f31b6a7e007d2aec94b1..1fa9da61bd80f74becde44fe8a092012d42911d9 100644 (file)
@@ -198,6 +198,21 @@ intel_generate_mipmap(GLcontext *ctx, GLenum target,
    }
 }
 
+void intelMapTexture(GLcontext *ctx, struct gl_texture_object *texObj)
+{
+   struct intel_texture_object *intelObj = intel_texture_object(texObj);  
+   struct intel_context *intel = intel_context(ctx);
+
+   intel_tex_map_images(intel, intelObj);
+}
+
+void intelUnmapTexture(GLcontext *ctx, struct gl_texture_object *texObj)
+{
+   struct intel_texture_object *intelObj = intel_texture_object(texObj);  
+   struct intel_context *intel = intel_context(ctx);
+
+   intel_tex_unmap_images(intel, intelObj);
+}
 
 void
 intelInitTextureFuncs(struct dd_function_table *functions)
@@ -233,6 +248,9 @@ intelInitTextureFuncs(struct dd_function_table *functions)
    functions->UpdateTexturePalette = 0;
    functions->IsTextureResident = intelIsTextureResident;
 
+   functions->MapTexture = intelMapTexture;
+   functions->UnmapTexture = intelUnmapTexture;
+
 #if DO_DEBUG && !defined(__ia64__)
    if (INTEL_DEBUG & DEBUG_BUFMGR)
       functions->TextureMemCpy = timed_memcpy;
index 9b60c73294014a14efb74efe1487f87fc80e7c8c..b015ca6c5e6dfbcb01a23af8ba848c64d80569e7 100644 (file)
@@ -1542,10 +1542,16 @@ _mesa_GenerateMipmapEXT(GLenum target)
    texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit];
    texObj = _mesa_select_tex_object(ctx, texUnit, target);
 
+   if (ctx->Driver.MapTexture)
+      ctx->Driver.MapTexture(ctx, texObj);
+
    /* XXX this might not handle cube maps correctly */
    _mesa_lock_texture(ctx, texObj);
    _mesa_generate_mipmap(ctx, target, texUnit, texObj);
    _mesa_unlock_texture(ctx, texObj);
+
+   if (ctx->Driver.UnmapTexture)
+      ctx->Driver.UnmapTexture(ctx, texObj);
 }