Browse Source

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@amd.com>
tags/10.3-branchpoint
Bruno Jiménez 11 years ago
parent
commit
257d697fb9
1 changed files with 4 additions and 6 deletions
  1. 4
    6
      src/gallium/drivers/r600/evergreen_compute.c

+ 4
- 6
src/gallium/drivers/r600/evergreen_compute.c View File

@@ -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;


Loading…
Cancel
Save