From c50ffc4cb89b67ae59208eb72cdb664c846ba987 Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Fri, 9 May 2008 13:02:41 +1000 Subject: [PATCH] mesa/intel: map/unmap texture objects around mipmap generation function. 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 | 18 ++++++++++++++++++ src/mesa/main/fbobject.c | 6 ++++++ 2 files changed, 24 insertions(+) diff --git a/src/mesa/drivers/dri/intel/intel_tex.c b/src/mesa/drivers/dri/intel/intel_tex.c index 329af0d..1fa9da6 100644 --- a/src/mesa/drivers/dri/intel/intel_tex.c +++ b/src/mesa/drivers/dri/intel/intel_tex.c @@ -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; diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c index 9b60c73..b015ca6 100644 --- a/src/mesa/main/fbobject.c +++ b/src/mesa/main/fbobject.c @@ -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); } -- 2.7.4