summaryrefslogtreecommitdiff
path: root/src/mesa/drivers/dri/common/texmem.c
diff options
context:
space:
mode:
authorKeith Whitwell <keith@tungstengraphics.com>2004-01-16 13:41:18 +0000
committerKeith Whitwell <keith@tungstengraphics.com>2004-01-16 13:41:18 +0000
commit4a53f7bc74fbbd84a3d0a28fc3316cdf5e826121 (patch)
tree82c002b0bf793dd70fe1bad95b57f0e1acb31371 /src/mesa/drivers/dri/common/texmem.c
parent48e89df25bb3f54a719f4c11fb51254206fc71a6 (diff)
Respect the 'in_use' field in the global LRU as a marker for
kernel-reserved memory regions.
Diffstat (limited to 'src/mesa/drivers/dri/common/texmem.c')
-rw-r--r--src/mesa/drivers/dri/common/texmem.c17
1 files changed, 6 insertions, 11 deletions
diff --git a/src/mesa/drivers/dri/common/texmem.c b/src/mesa/drivers/dri/common/texmem.c
index 4ed05219db..53e87b9593 100644
--- a/src/mesa/drivers/dri/common/texmem.c
+++ b/src/mesa/drivers/dri/common/texmem.c
@@ -246,7 +246,6 @@ void driUpdateTextureLRU( driTextureObject * t )
for (i = start ; i <= end ; i++) {
- list[i].in_use = 1;
list[i].age = heap->local_age;
/* remove_from_list(i)
@@ -374,7 +373,7 @@ void driDestroyTextureObject( driTextureObject * t )
* \param heap Heap whose state is to be updated
* \param offset Byte offset in the heap that has been stolen
* \param size Size, in bytes, of the stolen block
- * \param in_use Non-zero if the block is in-use by another context
+ * \param in_use Non-zero if the block is pinned/reserved by the kernel
*/
static void driTexturesGone( driTexHeap * heap, int offset, int size,
@@ -396,19 +395,13 @@ static void driTexturesGone( driTexHeap * heap, int offset, int size,
driSwapOutTextureObject( t );
}
else {
- if ( in_use &&
- offset == t->memBlock->ofs && size == t->memBlock->size ) {
- /* Matching placeholder already exists */
- return;
- } else {
- driDestroyTextureObject( t );
- }
+ driDestroyTextureObject( t );
}
}
}
- if ( in_use ) {
+ {
t = (driTextureObject *) CALLOC( heap->texture_object_size );
if ( t == NULL ) return;
@@ -420,6 +413,8 @@ static void driTexturesGone( driTexHeap * heap, int offset, int size,
return;
}
t->heap = heap;
+ if (in_use)
+ t->bound = 99;
insert_at_head( & heap->texture_objects, t );
}
}
@@ -673,7 +668,7 @@ driCreateTextureHeap( unsigned heap_id, void * context, unsigned size,
heap->destroy_texture_object = destroy_tex_obj;
/* Force global heap init */
- if (heap->global_age == 0)
+ if (heap->global_age[0] == 0)
heap->local_age = ~0;
else
heap->local_age = 0;