mesa: add _mesa_total_texture_memory() debug function

This function can be called in gdb to find out how much memory is used
by all texture objects.
This commit is contained in:
Brian Paul 2012-04-06 15:45:39 -06:00
parent 223654b81d
commit 71d69161ab
2 changed files with 62 additions and 0 deletions

View File

@ -841,6 +841,65 @@ _mesa_get_fallback_texture(struct gl_context *ctx, gl_texture_index tex)
}
/**
* Compute the size of the given texture object, in bytes.
*/
static GLuint
texture_size(const struct gl_texture_object *texObj)
{
const GLuint numFaces = texObj->Target == GL_TEXTURE_CUBE_MAP ? 6 : 1;
GLuint face, level, size = 0;
for (face = 0; face < numFaces; face++) {
for (level = 0; level < MAX_TEXTURE_LEVELS; level++) {
const struct gl_texture_image *img = texObj->Image[face][level];
if (img) {
GLuint sz = _mesa_format_image_size(img->TexFormat, img->Width,
img->Height, img->Depth);
size += sz;
}
}
}
return size;
}
/**
* Callback called from _mesa_HashWalk()
*/
static void
count_tex_size(GLuint key, void *data, void *userData)
{
const struct gl_texture_object *texObj =
(const struct gl_texture_object *) data;
GLuint *total = (GLuint *) userData;
*total = *total + texture_size(texObj);
}
/**
* Compute total size (in bytes) of all textures for the given context.
* For debugging purposes.
*/
GLuint
_mesa_total_texture_memory(struct gl_context *ctx)
{
GLuint tgt, total = 0;
_mesa_HashWalk(ctx->Shared->TexObjects, count_tex_size, &total);
/* plus, the default texture objects */
for (tgt = 0; tgt < NUM_TEXTURE_TARGETS; tgt++) {
total += texture_size(ctx->Shared->DefaultTex[tgt]);
}
return total;
}
/*@}*/

View File

@ -112,6 +112,9 @@ _mesa_dirty_texobj(struct gl_context *ctx, struct gl_texture_object *texObj,
extern struct gl_texture_object *
_mesa_get_fallback_texture(struct gl_context *ctx, gl_texture_index tex);
extern GLuint
_mesa_total_texture_memory(struct gl_context *ctx);
extern void
_mesa_unlock_context_textures( struct gl_context *ctx );