zink: allow direct memory mapping for any COHERENT+CACHED buffer
some drivers may provide this in heaps that get used by non-staging resources, so avoid extra copies in that case Reviewed-by: Dave Airlie <airlied@redhat.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19281>
This commit is contained in:

committed by
Marge Bot

parent
71ee1dd597
commit
a3552048c7
@@ -30,6 +30,7 @@
|
|||||||
#include "zink_batch.h"
|
#include "zink_batch.h"
|
||||||
|
|
||||||
#define VK_VIS_VRAM (VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT | VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT)
|
#define VK_VIS_VRAM (VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT | VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT)
|
||||||
|
#define VK_STAGING_RAM (VK_MEMORY_PROPERTY_HOST_COHERENT_BIT | VK_MEMORY_PROPERTY_HOST_CACHED_BIT)
|
||||||
#define VK_LAZY_VRAM (VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT | VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT)
|
#define VK_LAZY_VRAM (VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT | VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT)
|
||||||
|
|
||||||
|
|
||||||
|
@@ -1853,7 +1853,9 @@ zink_buffer_map(struct pipe_context *pctx,
|
|||||||
goto success;
|
goto success;
|
||||||
usage |= PIPE_MAP_UNSYNCHRONIZED;
|
usage |= PIPE_MAP_UNSYNCHRONIZED;
|
||||||
} else if (!(usage & PIPE_MAP_UNSYNCHRONIZED) &&
|
} else if (!(usage & PIPE_MAP_UNSYNCHRONIZED) &&
|
||||||
(((usage & PIPE_MAP_READ) && !(usage & PIPE_MAP_PERSISTENT) && res->base.b.usage != PIPE_USAGE_STAGING) || !res->obj->host_visible)) {
|
(((usage & PIPE_MAP_READ) && !(usage & PIPE_MAP_PERSISTENT) &&
|
||||||
|
((res->obj->bo->base.placement & VK_STAGING_RAM) != VK_STAGING_RAM)) ||
|
||||||
|
!res->obj->host_visible)) {
|
||||||
assert(!(usage & (TC_TRANSFER_MAP_THREADED_UNSYNC | PIPE_MAP_THREAD_SAFE)));
|
assert(!(usage & (TC_TRANSFER_MAP_THREADED_UNSYNC | PIPE_MAP_THREAD_SAFE)));
|
||||||
if (!res->obj->host_visible || !(usage & PIPE_MAP_ONCE)) {
|
if (!res->obj->host_visible || !(usage & PIPE_MAP_ONCE)) {
|
||||||
trans->offset = box->x % screen->info.props.limits.minMemoryMapAlignment;
|
trans->offset = box->x % screen->info.props.limits.minMemoryMapAlignment;
|
||||||
|
Reference in New Issue
Block a user