Mesa (master): r600g: Buffer object maps imply a wait.

Henri Verbeet hverbeet at kemper.freedesktop.org
Sun Sep 19 17:43:57 UTC 2010


Module: Mesa
Branch: master
Commit: affd46cc2bb327490fbc6a96f936dccf82d4996d
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=affd46cc2bb327490fbc6a96f936dccf82d4996d

Author: Henri Verbeet <hverbeet at gmail.com>
Date:   Sun Sep 19 19:27:30 2010 +0200

r600g: Buffer object maps imply a wait.

Unless e.g. PB_USAGE_DONTBLOCK or PB_USAGE_UNSYNCHRONIZED would be specified.

---

 src/gallium/drivers/r600/r600.h            |   21 ---------------------
 src/gallium/drivers/r600/r600_query.c      |    1 -
 src/gallium/drivers/r600/r600_texture.c    |    1 -
 src/gallium/drivers/r600/radeon.h          |    1 -
 src/gallium/winsys/r600/drm/radeon_bo_pb.c |   20 +++++++++++++-------
 src/gallium/winsys/r600/drm/radeon_ws_bo.c |   11 -----------
 6 files changed, 13 insertions(+), 42 deletions(-)

diff --git a/src/gallium/drivers/r600/r600.h b/src/gallium/drivers/r600/r600.h
index bce2707..7cbacea 100644
--- a/src/gallium/drivers/r600/r600.h
+++ b/src/gallium/drivers/r600/r600.h
@@ -92,26 +92,6 @@ enum radeon_family {
 
 enum radeon_family r600_get_family(struct radeon *rw);
 
-/*
- * radeon object functions
- */
-#if 0
-struct radeon_bo {
-	unsigned			refcount;
-	unsigned			handle;
-	unsigned			size;
-	unsigned			alignment;
-	unsigned			map_count;
-	void				*data;
-};
-struct radeon_bo *radeon_bo(struct radeon *radeon, unsigned handle,
-			unsigned size, unsigned alignment, void *ptr);
-int radeon_bo_map(struct radeon *radeon, struct radeon_bo *bo);
-void radeon_bo_unmap(struct radeon *radeon, struct radeon_bo *bo);
-struct radeon_bo *radeon_bo_incref(struct radeon *radeon, struct radeon_bo *bo);
-struct radeon_bo *radeon_bo_decref(struct radeon *radeon, struct radeon_bo *bo);
-int radeon_bo_wait(struct radeon *radeon, struct radeon_bo *bo);
-#endif
 /* lowlevel WS bo */
 struct radeon_ws_bo;
 struct radeon_ws_bo *radeon_ws_bo(struct radeon *radeon,
@@ -122,7 +102,6 @@ void *radeon_ws_bo_map(struct radeon *radeon, struct radeon_ws_bo *bo, unsigned
 void radeon_ws_bo_unmap(struct radeon *radeon, struct radeon_ws_bo *bo);
 void radeon_ws_bo_reference(struct radeon *radeon, struct radeon_ws_bo **dst,
 			    struct radeon_ws_bo *src);
-int radeon_ws_bo_wait(struct radeon *radeon, struct radeon_ws_bo *bo);
 
 /* R600/R700 STATES */
 #define R600_GROUP_MAX			16
diff --git a/src/gallium/drivers/r600/r600_query.c b/src/gallium/drivers/r600/r600_query.c
index 12900cc..298cc4e 100644
--- a/src/gallium/drivers/r600/r600_query.c
+++ b/src/gallium/drivers/r600/r600_query.c
@@ -108,7 +108,6 @@ static void r600_query_result(struct pipe_context *ctx, struct r600_query *rquer
 	u32 *results;
 	int i;
 
-	radeon_ws_bo_wait(rscreen->rw, rquery->buffer);
 	results = radeon_ws_bo_map(rscreen->rw, rquery->buffer, 0, r600_context(ctx));
 	for (i = 0; i < rquery->num_results; i += 4) {
 		start = (u64)results[i] | (u64)results[i + 1] << 32;
diff --git a/src/gallium/drivers/r600/r600_texture.c b/src/gallium/drivers/r600/r600_texture.c
index b7a12ed..d41150c 100644
--- a/src/gallium/drivers/r600/r600_texture.c
+++ b/src/gallium/drivers/r600/r600_texture.c
@@ -347,7 +347,6 @@ void* r600_texture_transfer_map(struct pipe_context *ctx,
 	if (!map) {
 		return NULL;
 	}
-	radeon_ws_bo_wait(radeon, bo);
 
 	return map + offset;
 }
diff --git a/src/gallium/drivers/r600/radeon.h b/src/gallium/drivers/r600/radeon.h
index 5f9f21d..5249194 100644
--- a/src/gallium/drivers/r600/radeon.h
+++ b/src/gallium/drivers/r600/radeon.h
@@ -100,7 +100,6 @@ void *radeon_ws_bo_map(struct radeon *radeon, struct radeon_ws_bo *bo, unsigned
 void radeon_ws_bo_unmap(struct radeon *radeon, struct radeon_ws_bo *bo);
 void radeon_ws_bo_reference(struct radeon *radeon, struct radeon_ws_bo **dst,
 			    struct radeon_ws_bo *src);
-int radeon_ws_bo_wait(struct radeon *radeon, struct radeon_ws_bo *bo);
 
 struct radeon_stype_info;
 /*
diff --git a/src/gallium/winsys/r600/drm/radeon_bo_pb.c b/src/gallium/winsys/r600/drm/radeon_bo_pb.c
index 8cf6a78..b8744b0 100644
--- a/src/gallium/winsys/r600/drm/radeon_bo_pb.c
+++ b/src/gallium/winsys/r600/drm/radeon_bo_pb.c
@@ -63,20 +63,26 @@ radeon_bo_pb_map_internal(struct pb_buffer *_buf,
 		}
 	}
 
-	if (buf->bo->data != NULL) {
-		LIST_DELINIT(&buf->maplist);
-		return buf->bo->data;
-	}
-
 	if (flags & PB_USAGE_DONTBLOCK) {
 		uint32_t domain;
 		if (radeon_bo_busy(buf->mgr->radeon, buf->bo, &domain))
 			return NULL;
 	}
 
-	if (radeon_bo_map(buf->mgr->radeon, buf->bo)) {
-		return NULL;
+	if (buf->bo->data != NULL) {
+		if (radeon_bo_wait(buf->mgr->radeon, buf->bo)) {
+			return NULL;
+		}
+	} else {
+		if (radeon_bo_map(buf->mgr->radeon, buf->bo)) {
+			return NULL;
+		}
+		if (radeon_bo_wait(buf->mgr->radeon, buf->bo)) {
+			radeon_bo_unmap(buf->mgr->radeon, buf->bo);
+			return NULL;
+		}
 	}
+
 	LIST_DELINIT(&buf->maplist);
 	return buf->bo->data;
 }
diff --git a/src/gallium/winsys/r600/drm/radeon_ws_bo.c b/src/gallium/winsys/r600/drm/radeon_ws_bo.c
index 8114526..daaf2cb 100644
--- a/src/gallium/winsys/r600/drm/radeon_ws_bo.c
+++ b/src/gallium/winsys/r600/drm/radeon_ws_bo.c
@@ -72,17 +72,6 @@ void radeon_ws_bo_reference(struct radeon *radeon, struct radeon_ws_bo **dst,
 	*dst = src;
 }
 
-int radeon_ws_bo_wait(struct radeon *radeon, struct radeon_ws_bo *pb_bo)
-{
-	/* TODO */
-	struct radeon_bo *bo;
-	bo = radeon_bo_pb_get_bo(pb_bo->pb);
-	if (!bo)
-		return 0;
-	radeon_bo_wait(radeon, bo);
-	return 0;
-}
-
 unsigned radeon_ws_bo_get_handle(struct radeon_ws_bo *pb_bo)
 {
 	struct radeon_bo *bo;




More information about the mesa-commit mailing list