i965: relAddr local var (to make debug/test a little easier)
[mesa.git] / src / mesa / drivers / dri / intel / intel_tex.c
index f016b6b4dc4aa9df74e54817b0b7805baf484ae6..ae0994b183a75c4620dc89d0cc6d79cd52ffa640 100644 (file)
@@ -1,6 +1,7 @@
 #include "swrast/swrast.h"
-#include "texobj.h"
-#include "mipmap.h"
+#include "main/texobj.h"
+#include "main/teximage.h"
+#include "main/mipmap.h"
 #include "intel_context.h"
 #include "intel_mipmap_tree.h"
 #include "intel_tex.h"
@@ -71,7 +72,7 @@ intelFreeTextureImageData(GLcontext * ctx, struct gl_texture_image *texImage)
    }
 
    if (texImage->Data) {
-      free(texImage->Data);
+      _mesa_free_texmemory(texImage->Data);
       texImage->Data = NULL;
    }
 }
@@ -92,7 +93,7 @@ intelFreeTextureImageData(GLcontext * ctx, struct gl_texture_image *texImage)
 static void *
 do_memcpy(void *dest, const void *src, size_t n)
 {
-   if ((((unsigned) src) & 63) || (((unsigned) dest) & 63)) {
+   if ((((unsigned long) src) & 63) || (((unsigned long) dest) & 63)) {
       return __memcpy(dest, src, n);
    }
    else
@@ -100,7 +101,7 @@ do_memcpy(void *dest, const void *src, size_t n)
 }
 
 
-#if DO_DEBUG
+#if DO_DEBUG && !defined(__ia64__)
 
 #ifndef __x86_64__
 static unsigned
@@ -171,14 +172,14 @@ timed_memcpy(void *dest, const void *src, size_t n)
  */
 void
 intel_generate_mipmap(GLcontext *ctx, GLenum target,
-                      const struct gl_texture_unit *texUnit,
                       struct gl_texture_object *texObj)
 {
+   struct intel_context *intel = intel_context(ctx);
    struct intel_texture_object *intelObj = intel_texture_object(texObj);
    GLuint nr_faces = (intelObj->base.Target == GL_TEXTURE_CUBE_MAP) ? 6 : 1;
    int face, i;
 
-   _mesa_generate_mipmap(ctx, target, texUnit, texObj);
+   _mesa_generate_mipmap(ctx, target, texObj);
 
    /* Update the level information in our private data in the new images, since
     * it didn't get set as part of a normal TexImage path.
@@ -193,10 +194,23 @@ intel_generate_mipmap(GLcontext *ctx, GLenum target,
 
         intelImage->level = i;
         intelImage->face = face;
+        /* Unreference the miptree to signal that the new Data is a bare
+         * pointer from mesa.
+         */
+        intel_miptree_release(intel, &intelImage->mt);
       }
    }
 }
 
+static void intelGenerateMipmap(GLcontext *ctx, GLenum target, struct gl_texture_object *texObj)
+{
+   struct intel_context *intel = intel_context(ctx);
+   struct intel_texture_object *intelObj = intel_texture_object(texObj);
+
+   intel_tex_map_level_images(intel, intelObj, texObj->BaseLevel);
+   intel_generate_mipmap(ctx, target, texObj);
+   intel_tex_unmap_level_images(intel, intelObj, texObj->BaseLevel);
+}
 
 void
 intelInitTextureFuncs(struct dd_function_table *functions)
@@ -208,21 +222,16 @@ intelInitTextureFuncs(struct dd_function_table *functions)
    functions->TexSubImage1D = intelTexSubImage1D;
    functions->TexSubImage2D = intelTexSubImage2D;
    functions->TexSubImage3D = intelTexSubImage3D;
-#ifdef I915
    functions->CopyTexImage1D = intelCopyTexImage1D;
    functions->CopyTexImage2D = intelCopyTexImage2D;
    functions->CopyTexSubImage1D = intelCopyTexSubImage1D;
    functions->CopyTexSubImage2D = intelCopyTexSubImage2D;
-#else
-   functions->CopyTexImage1D = _swrast_copy_teximage1d;
-   functions->CopyTexImage2D = _swrast_copy_teximage2d;
-   functions->CopyTexSubImage1D = _swrast_copy_texsubimage1d;
-   functions->CopyTexSubImage2D = _swrast_copy_texsubimage2d;
-#endif
    functions->GetTexImage = intelGetTexImage;
+   functions->GenerateMipmap = intelGenerateMipmap;
 
    /* compressed texture functions */
    functions->CompressedTexImage2D = intelCompressedTexImage2D;
+   functions->CompressedTexSubImage2D = intelCompressedTexSubImage2D;
    functions->GetCompressedTexImage = intelGetCompressedTexImage;
 
    functions->NewTextureObject = intelNewTextureObject;
@@ -232,7 +241,7 @@ intelInitTextureFuncs(struct dd_function_table *functions)
    functions->UpdateTexturePalette = 0;
    functions->IsTextureResident = intelIsTextureResident;
 
-#if DO_DEBUG
+#if DO_DEBUG && !defined(__ia64__)
    if (INTEL_DEBUG & DEBUG_BUFMGR)
       functions->TextureMemCpy = timed_memcpy;
    else