[intel-gem] Once mapped, leave buffers mapped.

Mapping and unmapping buffers is expensive, and having the map around isn't
harmful (other than consuming address space). So, once mapped, just leave
buffers mapped in case they get re-used.
This commit is contained in:
Keith Packard
2008-05-26 17:51:38 -07:00
committed by Eric Anholt
parent 924eaa2f95
commit d8395f9d9e
+6 -17
View File
@@ -107,7 +107,7 @@ typedef struct _dri_bo_gem {
dri_bo bo;
int refcount;
unsigned int map_count;
GLboolean mapped;
uint32_t gem_handle;
const char *name;
@@ -412,7 +412,8 @@ dri_gem_bo_unreference(dri_bo *bo)
struct dri_gem_bo_bucket *bucket;
int ret;
assert(bo_gem->map_count == 0);
if (bo_gem->mapped)
munmap (bo_gem->virtual, bo->size);
if (bo_gem->relocs != NULL) {
int i;
@@ -474,7 +475,7 @@ dri_gem_bo_map(dri_bo *bo, GLboolean write_enable)
/* Allow recursive mapping. Mesa may recursively map buffers with
* nested display loops.
*/
if (bo_gem->map_count++ == 0) {
if (!bo_gem->mapped) {
assert(bo->virtual == NULL);
@@ -496,6 +497,7 @@ dri_gem_bo_map(dri_bo *bo, GLboolean write_enable)
bo_gem->virtual = (void *)(uintptr_t)mmap_arg.addr_ptr;
}
bo->virtual = bo_gem->virtual;
bo_gem->mapped = GL_TRUE;
DBG("bo_map: %d (%s) -> %p\n", bo_gem->gem_handle, bo_gem->name, bo_gem->virtual);
}
@@ -519,25 +521,12 @@ dri_gem_bo_map(dri_bo *bo, GLboolean write_enable)
static int
dri_gem_bo_unmap(dri_bo *bo)
{
dri_bufmgr_gem *bufmgr_gem;
dri_bo_gem *bo_gem = (dri_bo_gem *)bo;
if (bo == NULL)
return 0;
assert(bo_gem->map_count != 0);
if (--bo_gem->map_count != 0)
return 0;
bufmgr_gem = (dri_bufmgr_gem *)bo->bufmgr;
assert(bo->virtual != NULL);
DBG("bo_unmap: %d (%s)\n", bo_gem->gem_handle, bo_gem->name);
munmap(bo_gem->virtual, bo->size);
bo_gem->virtual = NULL;
bo->virtual = NULL;
assert(bo_gem->mapped);
return 0;
}