Reviewed-by: Timothy Arceri <[email protected]>

On 13/06/17 02:31, Marek Olšák wrote:
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;

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

Reply via email to