From 981e55d5300f2bfb7e062d3c8807b9d7c37fd49d Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Thu, 11 Feb 2021 14:59:08 -0500 Subject: [PATCH] gallium: add pipe_screen::num_contexts for skipping mutex locking in util_range MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Reviewed-by: Zoltán Böszörményi Reviewed-by: Pierre-Eric Pelloux-Prayer Part-of: --- src/gallium/auxiliary/util/u_range.h | 5 ++++- src/gallium/include/pipe/p_screen.h | 6 ++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/gallium/auxiliary/util/u_range.h b/src/gallium/auxiliary/util/u_range.h index 9a158a4..90dc80b 100644 --- a/src/gallium/auxiliary/util/u_range.h +++ b/src/gallium/auxiliary/util/u_range.h @@ -36,6 +36,8 @@ #include "os/os_thread.h" #include "pipe/p_state.h" +#include "pipe/p_screen.h" +#include "util/u_atomic.h" #include "util/u_math.h" #include "util/simple_mtx.h" @@ -61,7 +63,8 @@ util_range_add(struct pipe_resource *resource, struct util_range *range, unsigned start, unsigned end) { if (start < range->start || end > range->end) { - if (resource->flags & PIPE_RESOURCE_FLAG_SINGLE_THREAD_USE) { + if (resource->flags & PIPE_RESOURCE_FLAG_SINGLE_THREAD_USE || + p_atomic_read(&resource->screen->num_contexts) == 1) { range->start = MIN2(start, range->start); range->end = MAX2(end, range->end); } else { diff --git a/src/gallium/include/pipe/p_screen.h b/src/gallium/include/pipe/p_screen.h index 78dae78..ae0e083 100644 --- a/src/gallium/include/pipe/p_screen.h +++ b/src/gallium/include/pipe/p_screen.h @@ -68,6 +68,12 @@ struct u_transfer_helper; * context. */ struct pipe_screen { + /** + * Atomically incremented by drivers to track the number of contexts. + * If it's 0, it can be assumed that contexts are not tracked. + * Used by some places to skip locking if num_contexts == 1. + */ + unsigned num_contexts; /** * For drivers using u_transfer_helper: -- 2.7.4