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:
parent
3da1b17555
commit
0b8c29915b
|
@ -375,10 +375,14 @@ int compute_memory_promote_item(struct compute_memory_pool *pool,
|
||||||
dst, 0, item->start_in_dw * 4, 0 ,0,
|
dst, 0, item->start_in_dw * 4, 0 ,0,
|
||||||
src, 0, &box);
|
src, 0, &box);
|
||||||
|
|
||||||
pool->screen->b.b.resource_destroy(
|
/* We check if the item is mapped for reading.
|
||||||
screen, src);
|
* In this case, we need to keep the temporary buffer 'alive'
|
||||||
|
* because it is possible to keep a map active for reading
|
||||||
item->real_buffer = NULL;
|
* 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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue