Mesa (main): zink: make map_count useful for dedicated image allocations
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Tue Aug 17 19:59:56 UTC 2021
Module: Mesa
Branch: main
Commit: daff597940a7114f7c30d50723d2f3f1dc40579b
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=daff597940a7114f7c30d50723d2f3f1dc40579b
Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date: Thu Jul 29 13:34:43 2021 -0400
zink: make map_count useful for dedicated image allocations
Reviewed-by: Dave Airlie <airlied at redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12410>
---
src/gallium/drivers/zink/zink_resource.c | 9 +++++++--
src/gallium/drivers/zink/zink_resource.h | 1 +
2 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/src/gallium/drivers/zink/zink_resource.c b/src/gallium/drivers/zink/zink_resource.c
index ead20b3f1de..8436f07c2a9 100644
--- a/src/gallium/drivers/zink/zink_resource.c
+++ b/src/gallium/drivers/zink/zink_resource.c
@@ -1058,11 +1058,14 @@ map_resource(struct zink_screen *screen, struct zink_resource *res)
static void
unmap_resource(struct zink_screen *screen, struct zink_resource *res)
{
- res->obj->map = NULL;
if (!res->obj->dedicated)
zink_bo_unmap(screen, res->obj->bo);
- else
+ else {
+ if (!p_atomic_dec_zero(&res->obj->map_count))
+ return;
vkUnmapMemory(screen->dev, res->obj->mem);
+ }
+ res->obj->map = NULL;
}
static void *
@@ -1323,6 +1326,8 @@ zink_transfer_map(struct pipe_context *pctx,
}
if (sizeof(void*) == 4)
trans->base.b.usage |= ZINK_MAP_TEMPORARY;
+ if (res->obj->dedicated)
+ p_atomic_inc(&res->obj->map_count);
}
if ((usage & PIPE_MAP_PERSISTENT) && !(usage & PIPE_MAP_COHERENT))
res->obj->persistent_maps++;
diff --git a/src/gallium/drivers/zink/zink_resource.h b/src/gallium/drivers/zink/zink_resource.h
index 2a80db2d47e..ceed23ea5e8 100644
--- a/src/gallium/drivers/zink/zink_resource.h
+++ b/src/gallium/drivers/zink/zink_resource.h
@@ -61,6 +61,7 @@ struct zink_resource_object {
struct zink_batch_usage *reads;
struct zink_batch_usage *writes;
void *map;
+ unsigned map_count;
struct util_dynarray tmp;
More information about the mesa-commit
mailing list