Mesa (master): r600g: assume DISCARD_WHOLE_RESOURCE is always used with WRITE

Marek Olšák mareko at kemper.freedesktop.org
Fri May 11 15:42:10 UTC 2012


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

Author: Marek Olšák <maraeo at gmail.com>
Date:   Fri May 11 17:34:26 2012 +0200

r600g: assume DISCARD_WHOLE_RESOURCE is always used with WRITE

---

 src/gallium/drivers/r600/r600_buffer.c |   11 +++++------
 1 files changed, 5 insertions(+), 6 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_buffer.c b/src/gallium/drivers/r600/r600_buffer.c
index 0ca6ff1..857d860 100644
--- a/src/gallium/drivers/r600/r600_buffer.c
+++ b/src/gallium/drivers/r600/r600_buffer.c
@@ -86,14 +86,13 @@ static void *r600_buffer_transfer_map(struct pipe_context *pipe,
 	struct r600_context *rctx = (struct r600_context*)pipe;
 	uint8_t *data;
 
-	if (transfer->usage & PIPE_TRANSFER_DISCARD_WHOLE_RESOURCE) {
-		/* When mapping for read, we only need to check if the GPU is writing to it. */
-		enum radeon_bo_usage rusage = transfer->usage & PIPE_TRANSFER_WRITE ?
-			RADEON_USAGE_READWRITE : RADEON_USAGE_WRITE;
+	if (transfer->usage & PIPE_TRANSFER_DISCARD_WHOLE_RESOURCE &&
+	    !(transfer->usage & PIPE_TRANSFER_UNSYNCHRONIZED)) {
+		assert(transfer->usage & PIPE_TRANSFER_WRITE);
 
 		/* Check if mapping this buffer would cause waiting for the GPU. */
-		if (rctx->ws->cs_is_buffer_referenced(rctx->cs, rbuffer->cs_buf, rusage) ||
-		    rctx->ws->buffer_is_busy(rbuffer->buf, rusage)) {
+		if (rctx->ws->cs_is_buffer_referenced(rctx->cs, rbuffer->cs_buf, RADEON_USAGE_READWRITE) ||
+		    rctx->ws->buffer_is_busy(rbuffer->buf, RADEON_USAGE_READWRITE)) {
 			unsigned i;
 
 			/* Discard the buffer. */




More information about the mesa-commit mailing list