Mesa (master): r600g: delay mapping until first map request. (v2)
Dave Airlie
airlied at kemper.freedesktop.org
Thu May 12 23:29:20 UTC 2011
Module: Mesa
Branch: master
Commit: 5e15497452cf3e4d2fc76fdc6ed8113d0891b467
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=5e15497452cf3e4d2fc76fdc6ed8113d0891b467
Author: Dave Airlie <airlied at redhat.com>
Date: Wed May 11 13:14:16 2011 +1000
r600g: delay mapping until first map request. (v2)
Currently r600g always maps every bo, this is quite pointless as it wastes
VM and on 32-bit with wine running VM space is quite useful.
So with this patch we don't create the mappings until first use, without
tiling enabled this probably won't make a major difference on its own,
but with tiled staged uploads it should avoid keeping maps for most of the
textures unnecessarily.
v2: add bo data ptr check
Signed-off-by: Dave Airlie <airlied at redhat.com>
---
src/gallium/winsys/r600/drm/r600_priv.h | 3 +++
src/gallium/winsys/r600/drm/radeon_bo.c | 7 +------
2 files changed, 4 insertions(+), 6 deletions(-)
diff --git a/src/gallium/winsys/r600/drm/r600_priv.h b/src/gallium/winsys/r600/drm/r600_priv.h
index f8363f9..2ca122a 100644
--- a/src/gallium/winsys/r600/drm/r600_priv.h
+++ b/src/gallium/winsys/r600/drm/r600_priv.h
@@ -145,6 +145,7 @@ int radeon_bo_get_tiling_flags(struct radeon *radeon,
int radeon_bo_get_name(struct radeon *radeon,
struct radeon_bo *bo,
uint32_t *name);
+int radeon_bo_fixed_map(struct radeon *radeon, struct radeon_bo *bo);
/*
* r600_hw_context.c
@@ -192,6 +193,8 @@ struct r600_bo *r600_bomgr_bo_create(struct r600_bomgr *mgr,
*/
static inline int radeon_bo_map(struct radeon *radeon, struct radeon_bo *bo)
{
+ if (bo->map_count == 0 && !bo->data)
+ return radeon_bo_fixed_map(radeon, bo);
bo->map_count++;
return 0;
}
diff --git a/src/gallium/winsys/r600/drm/radeon_bo.c b/src/gallium/winsys/r600/drm/radeon_bo.c
index 13b1d50..9a534dd 100644
--- a/src/gallium/winsys/r600/drm/radeon_bo.c
+++ b/src/gallium/winsys/r600/drm/radeon_bo.c
@@ -33,7 +33,7 @@
#include "xf86drm.h"
#include "radeon_drm.h"
-static int radeon_bo_fixed_map(struct radeon *radeon, struct radeon_bo *bo)
+int radeon_bo_fixed_map(struct radeon *radeon, struct radeon_bo *bo)
{
struct drm_radeon_gem_mmap args;
void *ptr;
@@ -127,11 +127,6 @@ struct radeon_bo *radeon_bo(struct radeon *radeon, unsigned handle,
return NULL;
}
}
- if (radeon_bo_fixed_map(radeon, bo)) {
- R600_ERR("failed to map bo\n");
- radeon_bo_reference(radeon, &bo, NULL);
- return bo;
- }
if (handle)
util_hash_table_set(radeon->bo_handles, (void *)(uintptr_t)handle, bo);
More information about the mesa-commit
mailing list