From: Marek Olšák Date: Thu, 11 Feb 2021 19:59:08 +0000 (-0500) Subject: gallium: add pipe_screen::num_contexts for skipping mutex locking in util_range X-Git-Tag: upstream/21.2.3~6753 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=981e55d5300f2bfb7e062d3c8807b9d7c37fd49d;p=platform%2Fupstream%2Fmesa.git gallium: add pipe_screen::num_contexts for skipping mutex locking in util_range Reviewed-by: Zoltán Böszörményi Reviewed-by: Pierre-Eric Pelloux-Prayer Part-of: --- 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: