summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/mesa/main/teximage.c29
-rw-r--r--src/mesa/main/teximage.h11
-rw-r--r--src/mesa/main/texstore.c16
3 files changed, 44 insertions, 12 deletions
diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c
index 62153dca418..b5d2d266b00 100644
--- a/src/mesa/main/teximage.c
+++ b/src/mesa/main/teximage.c
@@ -51,6 +51,29 @@
#include "mtypes.h"
+/**
+ * We allocate texture memory on 512-byte boundaries so we can use MMX/SSE
+ * elsewhere.
+ */
+void *
+_mesa_alloc_texmemory(GLsizei bytes)
+{
+ return _mesa_align_malloc(bytes, 512);
+}
+
+
+/**
+ * Free texture memory allocated with _mesa_alloc_texmemory()
+ */
+void
+_mesa_free_texmemory(void *m)
+{
+ _mesa_align_free(m);
+}
+
+
+
+
#if 0
static void PrintTexture(GLcontext *ctx, const struct gl_texture_image *img)
{
@@ -572,17 +595,19 @@ _mesa_new_texture_image( GLcontext *ctx )
/**
* Free texture image data.
+ * This function is a fallback called via ctx->Driver.FreeTexImageData().
*
* \param teximage texture image.
*
* Free the texture image data if it's not marked as client data.
*/
void
-_mesa_free_texture_image_data( GLcontext *ctx, struct gl_texture_image *texImage )
+_mesa_free_texture_image_data(GLcontext *ctx,
+ struct gl_texture_image *texImage)
{
if (texImage->Data && !texImage->IsClientData) {
/* free the old texture data */
- _mesa_free(texImage->Data);
+ _mesa_free_texmemory(texImage->Data);
}
texImage->Data = NULL;
diff --git a/src/mesa/main/teximage.h b/src/mesa/main/teximage.h
index 5fb696a9503..45c851e5c88 100644
--- a/src/mesa/main/teximage.h
+++ b/src/mesa/main/teximage.h
@@ -5,9 +5,9 @@
/*
* Mesa 3-D graphics library
- * Version: 6.1
+ * Version: 6.3
*
- * Copyright (C) 1999-2004 Brian Paul All Rights Reserved.
+ * Copyright (C) 1999-2005 Brian Paul All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@@ -35,6 +35,13 @@
#include "mtypes.h"
+extern void *
+_mesa_alloc_texmemory(GLsizei bytes);
+
+extern void
+_mesa_free_texmemory(void *m);
+
+
/** \name Internal functions */
/*@{*/
diff --git a/src/mesa/main/texstore.c b/src/mesa/main/texstore.c
index 8af23ae07c2..a2bd8989694 100644
--- a/src/mesa/main/texstore.c
+++ b/src/mesa/main/texstore.c
@@ -2207,7 +2207,7 @@ _mesa_store_teximage1d(GLcontext *ctx, GLenum target, GLint level,
sizeInBytes = texImage->CompressedSize;
else
sizeInBytes = postConvWidth * texImage->TexFormat->TexelBytes;
- texImage->Data = _mesa_malloc(sizeInBytes);
+ texImage->Data = _mesa_alloc_texmemory(sizeInBytes);
if (!texImage->Data) {
_mesa_error(ctx, GL_OUT_OF_MEMORY, "glTexImage1D");
return;
@@ -2295,7 +2295,7 @@ _mesa_store_teximage2d(GLcontext *ctx, GLenum target, GLint level,
sizeInBytes = texImage->CompressedSize;
else
sizeInBytes = postConvWidth * postConvHeight * texelBytes;
- texImage->Data = _mesa_malloc(sizeInBytes);
+ texImage->Data = _mesa_alloc_texmemory(sizeInBytes);
if (!texImage->Data) {
_mesa_error(ctx, GL_OUT_OF_MEMORY, "glTexImage2D");
return;
@@ -2375,7 +2375,7 @@ _mesa_store_teximage3d(GLcontext *ctx, GLenum target, GLint level,
sizeInBytes = texImage->CompressedSize;
else
sizeInBytes = width * height * depth * texelBytes;
- texImage->Data = _mesa_malloc(sizeInBytes);
+ texImage->Data = _mesa_alloc_texmemory(sizeInBytes);
if (!texImage->Data) {
_mesa_error(ctx, GL_OUT_OF_MEMORY, "glTexImage3D");
return;
@@ -2633,7 +2633,7 @@ _mesa_store_compressed_teximage2d(GLcontext *ctx, GLenum target, GLint level,
texImage->FetchTexelf = texImage->TexFormat->FetchTexel2Df;
/* allocate storage */
- texImage->Data = _mesa_malloc(imageSize);
+ texImage->Data = _mesa_alloc_texmemory(imageSize);
if (!texImage->Data) {
_mesa_error(ctx, GL_OUT_OF_MEMORY, "glCompressedTexImage2DARB");
return;
@@ -3674,7 +3674,7 @@ _mesa_generate_mipmap(GLcontext *ctx, GLenum target,
/* Free old image data */
if (dstImage->Data)
- _mesa_free(dstImage->Data);
+ ctx->Driver.FreeTexImageData(ctx, dstImage);
/* initialize new image */
_mesa_init_teximage_fields(ctx, target, dstImage, dstWidth, dstHeight,
@@ -3692,7 +3692,7 @@ _mesa_generate_mipmap(GLcontext *ctx, GLenum target,
*/
if (dstImage->IsCompressed) {
ASSERT(dstImage->CompressedSize > 0); /* set by init_teximage_fields*/
- dstImage->Data = _mesa_malloc(dstImage->CompressedSize);
+ dstImage->Data = _mesa_alloc_texmemory(dstImage->CompressedSize);
if (!dstImage->Data) {
_mesa_error(ctx, GL_OUT_OF_MEMORY, "generating mipmaps");
return;
@@ -3704,8 +3704,8 @@ _mesa_generate_mipmap(GLcontext *ctx, GLenum target,
else {
bytesPerTexel = srcImage->TexFormat->TexelBytes;
ASSERT(dstWidth * dstHeight * dstDepth * bytesPerTexel > 0);
- dstImage->Data = _mesa_malloc(dstWidth * dstHeight * dstDepth
- * bytesPerTexel);
+ dstImage->Data = _mesa_alloc_texmemory(dstWidth * dstHeight
+ * dstDepth * bytesPerTexel);
if (!dstImage->Data) {
_mesa_error(ctx, GL_OUT_OF_MEMORY, "generating mipmaps");
return;