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