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

Author: Alyssa Rosenzweig <[email protected]>
Date:   Fri Oct 28 22:40:58 2022 -0400

etnaviv: Advertise PIPE_CAP_BUFFER_MAP_PERSISTENT_COHERENT

This CAP only concerns mapping of buffers, not textures. For buffers,
etnaviv does not seem to use any staging resources. In neither case does
etnaviv use explicit syncs or flushes, so persistent/coherent mapping
should come as the implicit default and the cap should be almost free.

Signed-off-by: Alyssa Rosenzweig <[email protected]>
Reviewed-by: Emma Anholt <[email protected]>
Reviewed-by: Christian Gmeiner <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19392>

---

 docs/features.txt                              | 2 +-
 src/gallium/drivers/etnaviv/etnaviv_screen.c   | 1 +
 src/gallium/drivers/etnaviv/etnaviv_transfer.c | 1 +
 3 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/docs/features.txt b/docs/features.txt
index dac663f585a..af9dfc55464 100644
--- a/docs/features.txt
+++ b/docs/features.txt
@@ -195,7 +195,7 @@ GL 4.3, GLSL 4.30 -- all DONE: freedreno/a6xx, i965/gen8+, 
nvc0, r600, radeonsi,
 GL 4.4, GLSL 4.40 -- all DONE: i965/gen8+, nvc0, r600, radeonsi, llvmpipe, zink
 
   GL_MAX_VERTEX_ATTRIB_STRIDE                           DONE (all drivers)
-  GL_ARB_buffer_storage                                 DONE (freedreno, i965, 
nv50, v3d, vc4, lima, panfrost, asahi, d3d12, softpipe)
+  GL_ARB_buffer_storage                                 DONE (freedreno, i965, 
nv50, v3d, vc4, lima, panfrost, asahi, d3d12, softpipe, etnaviv)
   GL_ARB_clear_texture                                  DONE (i965, nv50, 
softpipe, virgl)
   GL_ARB_enhanced_layouts                               DONE (freedreno/a3xx+, 
i965, nv50, softpipe, virgl)
   - compile-time constant expressions                   DONE
diff --git a/src/gallium/drivers/etnaviv/etnaviv_screen.c 
b/src/gallium/drivers/etnaviv/etnaviv_screen.c
index c9684a58b2e..e8774189135 100644
--- a/src/gallium/drivers/etnaviv/etnaviv_screen.c
+++ b/src/gallium/drivers/etnaviv/etnaviv_screen.c
@@ -159,6 +159,7 @@ etna_screen_get_param(struct pipe_screen *pscreen, enum 
pipe_cap param)
    case PIPE_CAP_MIXED_FRAMEBUFFER_SIZES:
    case PIPE_CAP_STRING_MARKER:
    case PIPE_CAP_FRONTEND_NOOP:
+   case PIPE_CAP_BUFFER_MAP_PERSISTENT_COHERENT:
       return 1;
    case PIPE_CAP_NATIVE_FENCE_FD:
       return screen->drm_version >= ETNA_DRM_VERSION_FENCE_FD;
diff --git a/src/gallium/drivers/etnaviv/etnaviv_transfer.c 
b/src/gallium/drivers/etnaviv/etnaviv_transfer.c
index 0560211b598..1a13d415c24 100644
--- a/src/gallium/drivers/etnaviv/etnaviv_transfer.c
+++ b/src/gallium/drivers/etnaviv/etnaviv_transfer.c
@@ -222,6 +222,7 @@ etna_transfer_map(struct pipe_context *pctx, struct 
pipe_resource *prsc,
     */
    if ((usage & PIPE_MAP_DISCARD_RANGE) &&
        !(usage & PIPE_MAP_UNSYNCHRONIZED) &&
+       !(prsc->flags & PIPE_RESOURCE_FLAG_MAP_PERSISTENT) &&
        prsc->last_level == 0 &&
        prsc->width0 == box->width &&
        prsc->height0 == box->height &&

Reply via email to