From 257d697fb92c617161a2a90607c4cde6f7b9034a Mon Sep 17 00:00:00 2001 From: =?utf8?q?Bruno=20Jim=C3=A9nez?= Date: Wed, 18 Jun 2014 17:01:58 +0200 Subject: [PATCH] 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 --- 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; -- 2.7.4