Mesa (master): zink: do not use extra staging resource unless needed
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Fri Feb 12 11:33:08 UTC 2021
Module: Mesa
Branch: master
Commit: 708327472b95dae7bf2ce0585637e22c653fb344
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=708327472b95dae7bf2ce0585637e22c653fb344
Author: Erik Faye-Lund <erik.faye-lund at collabora.com>
Date: Wed Feb 3 17:22:29 2021 +0100
zink: do not use extra staging resource unless needed
The reason we check for staging-resources here is really because they
are the only images guaranteed to be host-visible.
But on UMA architectures, it's quite likely to have memory that is
*both* host-visible *and* device-local, so let's see what we found
instead.
Reviewed-By: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8858>
---
src/gallium/drivers/zink/zink_resource.c | 9 ++++++++-
src/gallium/drivers/zink/zink_resource.h | 1 +
2 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/src/gallium/drivers/zink/zink_resource.c b/src/gallium/drivers/zink/zink_resource.c
index a72445bd4e9..867e1ae49ab 100644
--- a/src/gallium/drivers/zink/zink_resource.c
+++ b/src/gallium/drivers/zink/zink_resource.c
@@ -298,6 +298,13 @@ resource_create(struct pipe_screen *pscreen,
mai.allocationSize = reqs.size;
mai.memoryTypeIndex = get_memory_type_index(screen, &reqs, flags);
+ if (templ->target != PIPE_BUFFER) {
+ VkMemoryType mem_type =
+ screen->info.mem_props.memoryTypes[mai.memoryTypeIndex];
+ res->host_visible = mem_type.propertyFlags &
+ VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;
+ }
+
VkExportMemoryAllocateInfo emai = {};
if (templ->bind & PIPE_BIND_SHARED) {
emai.sType = VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO;
@@ -589,7 +596,7 @@ zink_transfer_map(struct pipe_context *pctx,
trans->base.layer_stride = 0;
ptr = ((uint8_t *)ptr) + box->x;
} else {
- if (res->optimal_tiling || (res->base.usage != PIPE_USAGE_STAGING)) {
+ if (res->optimal_tiling || !res->host_visible) {
enum pipe_format format = pres->format;
if (usage & PIPE_MAP_DEPTH_ONLY)
format = util_format_get_depth_only(pres->format);
diff --git a/src/gallium/drivers/zink/zink_resource.h b/src/gallium/drivers/zink/zink_resource.h
index ab90ccb44c6..d113f801b3d 100644
--- a/src/gallium/drivers/zink/zink_resource.h
+++ b/src/gallium/drivers/zink/zink_resource.h
@@ -52,6 +52,7 @@ struct zink_resource {
VkImageLayout layout;
VkImageAspectFlags aspect;
bool optimal_tiling;
+ bool host_visible;
};
};
VkDeviceMemory mem;
More information about the mesa-commit
mailing list