From 8c01e5ed5f2b9e97541444591219c6035da8c046 Mon Sep 17 00:00:00 2001 From: Thomas Hellstrom Date: Wed, 10 Apr 2019 13:54:30 +0200 Subject: [PATCH] gallium/util: Make it possible to disable persistent maps in the upload manager For svga, the use of persistent / coherent maps is typically slightly slower than without them. It's probably a bit case-dependent and possible to tune, but for now, make sure we can disable those. Signed-off-by: Thomas Hellstrom Reviewed-by: Brian Paul --- src/gallium/auxiliary/util/u_upload_mgr.c | 14 ++++++++++++-- src/gallium/auxiliary/util/u_upload_mgr.h | 4 ++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/gallium/auxiliary/util/u_upload_mgr.c b/src/gallium/auxiliary/util/u_upload_mgr.c index c2c0ba957e3..73f6cae0b6d 100644 --- a/src/gallium/auxiliary/util/u_upload_mgr.c +++ b/src/gallium/auxiliary/util/u_upload_mgr.c @@ -106,8 +106,10 @@ u_upload_clone(struct pipe_context *pipe, struct u_upload_mgr *upload) struct u_upload_mgr *result = u_upload_create(pipe, upload->default_size, upload->bind, upload->usage, upload->flags); - if (upload->map_persistent && - upload->map_flags & PIPE_TRANSFER_FLUSH_EXPLICIT) + if (!upload->map_persistent && result->map_persistent) + u_upload_disable_persistent(result); + else if (upload->map_persistent && + upload->map_flags & PIPE_TRANSFER_FLUSH_EXPLICIT) u_upload_enable_flush_explicit(result); return result; @@ -121,6 +123,14 @@ u_upload_enable_flush_explicit(struct u_upload_mgr *upload) upload->map_flags |= PIPE_TRANSFER_FLUSH_EXPLICIT; } +void +u_upload_disable_persistent(struct u_upload_mgr *upload) +{ + upload->map_persistent = FALSE; + upload->map_flags &= ~(PIPE_TRANSFER_COHERENT | PIPE_TRANSFER_PERSISTENT); + upload->map_flags |= PIPE_TRANSFER_FLUSH_EXPLICIT; +} + static void upload_unmap_internal(struct u_upload_mgr *upload, boolean destroying) { diff --git a/src/gallium/auxiliary/util/u_upload_mgr.h b/src/gallium/auxiliary/util/u_upload_mgr.h index 80832016272..6a4a60963fe 100644 --- a/src/gallium/auxiliary/util/u_upload_mgr.h +++ b/src/gallium/auxiliary/util/u_upload_mgr.h @@ -73,6 +73,10 @@ u_upload_clone(struct pipe_context *pipe, struct u_upload_mgr *upload); void u_upload_enable_flush_explicit(struct u_upload_mgr *upload); +/** Whether to avoid persistent mappings where available */ +void +u_upload_disable_persistent(struct u_upload_mgr *upload); + /** * Destroy the upload manager. */ -- 2.30.2