r600g/compute: Avoid problems when promoting items mapped for reading

Acording to the OpenCL spec, it is possible to have a buffer mapped
for reading and at read from it using commands or buffers.

With this we can keep the mapping (that exists against the
temporary item) and read with a kernel (from the item we have
just added to the pool) without problems.

Reviewed-by: Tom Stellard <thomas.stellard@amd.com>
This commit is contained in:
Bruno Jiménez 2014-06-18 17:01:56 +02:00 committed by Tom Stellard
parent 3da1b17555
commit 0b8c29915b
1 changed files with 8 additions and 4 deletions

View File

@ -375,10 +375,14 @@ int compute_memory_promote_item(struct compute_memory_pool *pool,
dst, 0, item->start_in_dw * 4, 0 ,0,
src, 0, &box);
pool->screen->b.b.resource_destroy(
screen, src);
item->real_buffer = NULL;
/* We check if the item is mapped for reading.
* In this case, we need to keep the temporary buffer 'alive'
* because it is possible to keep a map active for reading
* while a kernel (that reads from it) executes */
if (!(item->status & ITEM_MAPPED_FOR_READING)) {
pool->screen->b.b.resource_destroy(screen, src);
item->real_buffer = NULL;
}
return 0;
}