radeonsi: don't map buffers that VK made unmappable
Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15098>
This commit is contained in:
parent
ad9b5ac0a1
commit
790362c10e
|
@ -409,7 +409,8 @@ static void *si_buffer_transfer_map(struct pipe_context *ctx, struct pipe_resour
|
||||||
|
|
||||||
/* Check if mapping this buffer would cause waiting for the GPU.
|
/* Check if mapping this buffer would cause waiting for the GPU.
|
||||||
*/
|
*/
|
||||||
if (buf->flags & RADEON_FLAG_SPARSE || force_discard_range ||
|
if (buf->flags & (RADEON_FLAG_SPARSE | RADEON_FLAG_NO_CPU_ACCESS) ||
|
||||||
|
force_discard_range ||
|
||||||
si_cs_is_buffer_referenced(sctx, buf->buf, RADEON_USAGE_READWRITE) ||
|
si_cs_is_buffer_referenced(sctx, buf->buf, RADEON_USAGE_READWRITE) ||
|
||||||
!sctx->ws->buffer_wait(sctx->ws, buf->buf, 0, RADEON_USAGE_READWRITE)) {
|
!sctx->ws->buffer_wait(sctx->ws, buf->buf, 0, RADEON_USAGE_READWRITE)) {
|
||||||
/* Do a wait-free write-only transfer using a temporary buffer. */
|
/* Do a wait-free write-only transfer using a temporary buffer. */
|
||||||
|
@ -445,7 +446,7 @@ static void *si_buffer_transfer_map(struct pipe_context *ctx, struct pipe_resour
|
||||||
/* Use a staging buffer in cached GTT for reads. */
|
/* Use a staging buffer in cached GTT for reads. */
|
||||||
else if (((usage & PIPE_MAP_READ) && !(usage & PIPE_MAP_PERSISTENT) &&
|
else if (((usage & PIPE_MAP_READ) && !(usage & PIPE_MAP_PERSISTENT) &&
|
||||||
(buf->domains & RADEON_DOMAIN_VRAM || buf->flags & RADEON_FLAG_GTT_WC)) ||
|
(buf->domains & RADEON_DOMAIN_VRAM || buf->flags & RADEON_FLAG_GTT_WC)) ||
|
||||||
(buf->flags & RADEON_FLAG_SPARSE)) {
|
(buf->flags & (RADEON_FLAG_SPARSE | RADEON_FLAG_NO_CPU_ACCESS))) {
|
||||||
struct si_resource *staging;
|
struct si_resource *staging;
|
||||||
|
|
||||||
assert(!(usage & (TC_TRANSFER_MAP_THREADED_UNSYNC | PIPE_MAP_THREAD_SAFE)));
|
assert(!(usage & (TC_TRANSFER_MAP_THREADED_UNSYNC | PIPE_MAP_THREAD_SAFE)));
|
||||||
|
@ -705,6 +706,9 @@ struct pipe_resource *si_buffer_from_winsys_buffer(struct pipe_screen *screen,
|
||||||
res->domains = domains;
|
res->domains = domains;
|
||||||
res->flags = flags;
|
res->flags = flags;
|
||||||
|
|
||||||
|
if (res->flags & RADEON_FLAG_NO_CPU_ACCESS)
|
||||||
|
res->b.b.flags |= PIPE_RESOURCE_FLAG_UNMAPPABLE;
|
||||||
|
|
||||||
util_range_add((struct pipe_resource *)templ, &res->valid_buffer_range, 0, templ->width0);
|
util_range_add((struct pipe_resource *)templ, &res->valid_buffer_range, 0, templ->width0);
|
||||||
util_range_add((struct pipe_resource *)templ, &res->b.valid_buffer_range, 0, templ->width0);
|
util_range_add((struct pipe_resource *)templ, &res->b.valid_buffer_range, 0, templ->width0);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue