From: Marek Olšák <[email protected]>

---
 src/gallium/auxiliary/util/u_threaded_context.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/src/gallium/auxiliary/util/u_threaded_context.c 
b/src/gallium/auxiliary/util/u_threaded_context.c
index 3038fc6..a97f016 100644
--- a/src/gallium/auxiliary/util/u_threaded_context.c
+++ b/src/gallium/auxiliary/util/u_threaded_context.c
@@ -195,22 +195,27 @@ _tc_sync(struct threaded_context *tc, const char *info, 
const char *func)
 
    tc_debug_check(tc);
 }
 
 #define tc_sync(tc) _tc_sync(tc, "", __func__)
 #define tc_sync_msg(tc, info) _tc_sync(tc, info, __func__)
 
 static void
 tc_set_resource_reference(struct pipe_resource **dst, struct pipe_resource 
*src)
 {
-   *dst = NULL;
-   pipe_resource_reference(dst, src);
+   /* Unexpectedly, pipe_resource_reference is a bottleneck here, taking 3.7%
+    * of CPU time in a state-heavy microbenchmark. The problem here is that
+    * pipe_resource_reference isn't inlined here.
+    */
+   *dst = src;
+   if (src)
+      p_atomic_inc(&src->reference.count);
 }
 
 void
 threaded_resource_init(struct pipe_resource *res)
 {
    struct threaded_resource *tres = threaded_resource(res);
 
    tres->latest = &tres->b;
    util_range_init(&tres->valid_buffer_range);
    tres->base_valid_buffer_range = &tres->valid_buffer_range;
-- 
2.7.4

_______________________________________________
mesa-dev mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to