Module: Mesa
Branch: main
Commit: 9ab9df39417af23bf07967fb66eaf8f9e6c8dab3
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=9ab9df39417af23bf07967fb66eaf8f9e6c8dab3

Author: Lucas Stach <l.st...@pengutronix.de>
Date:   Mon Oct 16 20:03:39 2023 +0200

etnaviv: track resource sharing

Track if resources are shared outside of the screen, which means
changes to the resource must be visible to the external observers
after a flush and the resource might be manipulated by other
agents than the contexts from the screen.

Signed-off-by: Lucas Stach <l.st...@pengutronix.de>
Reviewed-by: Christian Gmeiner <cgmei...@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25756>

---

 src/gallium/drivers/etnaviv/etnaviv_resource.c | 2 ++
 src/gallium/drivers/etnaviv/etnaviv_resource.h | 2 ++
 2 files changed, 4 insertions(+)

diff --git a/src/gallium/drivers/etnaviv/etnaviv_resource.c 
b/src/gallium/drivers/etnaviv/etnaviv_resource.c
index aab21d95d95..87fdf8a4a90 100644
--- a/src/gallium/drivers/etnaviv/etnaviv_resource.c
+++ b/src/gallium/drivers/etnaviv/etnaviv_resource.c
@@ -678,6 +678,7 @@ etna_resource_from_handle(struct pipe_screen *pscreen,
    rsc->layout = modifier_to_layout(modifier);
    rsc->modifier = modifier;
 
+   rsc->shared = true;
    if (usage & PIPE_HANDLE_USAGE_EXPLICIT_FLUSH)
       rsc->explicit_flush = true;
 
@@ -780,6 +781,7 @@ etna_resource_get_handle(struct pipe_screen *pscreen,
    }
    handle->modifier = etna_resource_modifier(rsc);
 
+   rsc->shared = true;
    if (!(usage & PIPE_HANDLE_USAGE_EXPLICIT_FLUSH))
       rsc->explicit_flush = false;
 
diff --git a/src/gallium/drivers/etnaviv/etnaviv_resource.h 
b/src/gallium/drivers/etnaviv/etnaviv_resource.h
index 1c480a8666f..df1b1c42032 100644
--- a/src/gallium/drivers/etnaviv/etnaviv_resource.h
+++ b/src/gallium/drivers/etnaviv/etnaviv_resource.h
@@ -209,6 +209,8 @@ struct etna_resource {
    struct pipe_resource *render;
    /* frontend flushes resource via an explicit call to flush_resource */
    bool explicit_flush;
+   /* resource is shared outside of the screen */
+   bool shared;
 };
 
 /* returns TRUE if a is newer than b */

Reply via email to