From: Bruno Jiménez Date: Wed, 18 Jun 2014 15:01:58 +0000 (+0200) Subject: r600g/compute: Map only against intermediate buffers X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=257d697fb92c617161a2a90607c4cde6f7b9034a;p=mesa.git 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 --- diff --git a/src/gallium/drivers/r600/evergreen_compute.c b/src/gallium/drivers/r600/evergreen_compute.c index 8657071e4c6..c0dd0f34914 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;