diff options
author | Thomas Hellstrom <[email protected]> | 2019-04-10 13:54:30 +0200 |
---|---|---|
committer | Thomas Hellstrom <[email protected]> | 2019-06-20 09:30:22 +0200 |
commit | 8c01e5ed5f2b9e97541444591219c6035da8c046 (patch) | |
tree | 17189ffc33f2f41b5f9fff9853b21c8c20e15bc6 | |
parent | 3b828c4e68bf4addd3b70cd6df92b80e9a40a7a7 (diff) |
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 <[email protected]>
Reviewed-by: Brian Paul <[email protected]>
-rw-r--r-- | src/gallium/auxiliary/util/u_upload_mgr.c | 14 | ||||
-rw-r--r-- | 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. */ |