Mesa (master): r600g/compute: Map only against intermediate buffers

Tom Stellard tstellar at kemper.freedesktop.org
Fri Jun 20 17:49:54 UTC 2014


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

Author: Bruno Jiménez <brunojimen at gmail.com>
Date:   Wed Jun 18 17:01:58 2014 +0200

r600g/compute: Map only against intermediate buffers

With this we can assure that mapped buffers will never change
its position when relocating the pool.

This patch should finally solve the mapping bug.

v2: Use the new is_item_in_pool util function,
    as suggested by Tom Stellard

Reviewed-by: Tom Stellard <thomas.stellard at amd.com>

---

 src/gallium/drivers/r600/evergreen_compute.c |   10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)

diff --git a/src/gallium/drivers/r600/evergreen_compute.c b/src/gallium/drivers/r600/evergreen_compute.c
index 8657071..c0dd0f3 100644
--- a/src/gallium/drivers/r600/evergreen_compute.c
+++ b/src/gallium/drivers/r600/evergreen_compute.c
@@ -970,14 +970,12 @@ void *r600_compute_global_transfer_map(
 	struct pipe_resource *dst;
 	unsigned offset = box->x;
 
-	if (buffer->chunk->real_buffer) {
-		dst = (struct pipe_resource*)buffer->chunk->real_buffer;
-	}
-	else {
-		dst = (struct pipe_resource*)buffer->chunk->pool->bo;
-		offset += (buffer->chunk->start_in_dw * 4);
+	if (is_item_in_pool(buffer->chunk)) {
+		compute_memory_demote_item(pool, buffer->chunk, ctx_);
 	}
 
+	dst = (struct pipe_resource*)buffer->chunk->real_buffer;
+
 	if (usage & PIPE_TRANSFER_READ)
 		buffer->chunk->status |= ITEM_MAPPED_FOR_READING;
 




More information about the mesa-commit mailing list