Mesa (master): gallium: add take_ownership param into set_vertex_buffers to eliminate atomics

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Jan 28 00:13:26 UTC 2021


Module: Mesa
Branch: master
Commit: 27dcb466293f2ab3f80a141fd0b8c14617a8e37f
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=27dcb466293f2ab3f80a141fd0b8c14617a8e37f

Author: Marek Olšák <marek.olsak at amd.com>
Date:   Sat Dec 26 17:29:45 2020 -0500

gallium: add take_ownership param into set_vertex_buffers to eliminate atomics

There are a few places (mainly u_threaded_context) that do:
   set_vertex_buffers(...);
   for (i = 0; i < count; i++)
      pipe_resource_reference(&buffers[i].resource.buffer, NULL);

set_vertex_buffers increments the reference counts while the loop
decrements them.

This commit eliminates those reference count changes by adding a parameter
into set_vertex_buffers that tells the callee to accept all buffers
without incrementing the reference counts.

AMD Zen benefits from this because it has slow atomics if they come from
different CCXs.

Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer at amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8298>

---

 src/gallium/auxiliary/cso_cache/cso_context.c     |  6 +--
 src/gallium/auxiliary/draw/draw_context.c         |  2 +-
 src/gallium/auxiliary/driver_ddebug/dd_context.c  |  4 +-
 src/gallium/auxiliary/driver_noop/noop_state.c    |  1 +
 src/gallium/auxiliary/driver_rbug/rbug_context.c  |  3 +-
 src/gallium/auxiliary/driver_trace/tr_context.c   |  5 ++-
 src/gallium/auxiliary/hud/hud_context.c           |  2 +-
 src/gallium/auxiliary/postprocess/pp_run.c        |  2 +-
 src/gallium/auxiliary/util/u_blitter.c            | 10 ++---
 src/gallium/auxiliary/util/u_draw_quad.c          |  2 +-
 src/gallium/auxiliary/util/u_helpers.c            | 11 +++--
 src/gallium/auxiliary/util/u_helpers.h            |  6 ++-
 src/gallium/auxiliary/util/u_threaded_context.c   | 31 +++++++------
 src/gallium/auxiliary/util/u_vbuf.c               |  6 +--
 src/gallium/auxiliary/vl/vl_bicubic_filter.c      |  2 +-
 src/gallium/auxiliary/vl/vl_compositor_gfx.c      |  2 +-
 src/gallium/auxiliary/vl/vl_deint_filter.c        |  2 +-
 src/gallium/auxiliary/vl/vl_matrix_filter.c       |  2 +-
 src/gallium/auxiliary/vl/vl_median_filter.c       |  2 +-
 src/gallium/auxiliary/vl/vl_mpeg12_decoder.c      |  6 +--
 src/gallium/drivers/d3d12/d3d12_context.cpp       |  4 +-
 src/gallium/drivers/etnaviv/etnaviv_state.c       |  5 ++-
 src/gallium/drivers/freedreno/freedreno_blitter.c |  2 +-
 src/gallium/drivers/freedreno/freedreno_state.c   |  4 +-
 src/gallium/drivers/i915/i915_state.c             |  4 +-
 src/gallium/drivers/iris/iris_state.c             |  8 +++-
 src/gallium/drivers/lima/lima_state.c             |  6 ++-
 src/gallium/drivers/llvmpipe/lp_state_vertex.c    |  4 +-
 src/gallium/drivers/nouveau/nv30/nv30_state.c     |  4 +-
 src/gallium/drivers/nouveau/nv50/nv50_state.c     |  4 +-
 src/gallium/drivers/nouveau/nvc0/nvc0_state.c     |  4 +-
 src/gallium/drivers/panfrost/pan_context.c        |  4 +-
 src/gallium/drivers/r300/r300_context.c           |  2 +-
 src/gallium/drivers/r300/r300_state.c             |  8 ++--
 src/gallium/drivers/r600/r600_pipe_common.c       |  2 +-
 src/gallium/drivers/r600/r600_state_common.c      |  9 +++-
 src/gallium/drivers/radeonsi/si_state.c           | 55 ++++++++++++++++-------
 src/gallium/drivers/softpipe/sp_state_vertex.c    |  4 +-
 src/gallium/drivers/svga/svga_pipe_vertex.c       |  4 +-
 src/gallium/drivers/swr/swr_state.cpp             |  4 +-
 src/gallium/drivers/tegra/tegra_context.c         |  4 +-
 src/gallium/drivers/v3d/v3dx_state.c              |  4 +-
 src/gallium/drivers/vc4/vc4_state.c               |  4 +-
 src/gallium/drivers/virgl/virgl_context.c         |  4 +-
 src/gallium/drivers/zink/zink_context.c           |  3 +-
 src/gallium/frontends/lavapipe/lvp_execute.c      |  4 +-
 src/gallium/frontends/nine/nine_state.c           | 18 ++++----
 src/gallium/include/pipe/p_context.h              | 12 +++++
 src/gallium/tests/graw/fs-fragcoord.c             |  2 +-
 src/gallium/tests/graw/fs-frontface.c             |  2 +-
 src/gallium/tests/graw/fs-test.c                  |  2 +-
 src/gallium/tests/graw/fs-write-z.c               |  2 +-
 src/gallium/tests/graw/gs-test.c                  |  2 +-
 src/gallium/tests/graw/occlusion-query.c          |  2 +-
 src/gallium/tests/graw/quad-sample.c              |  2 +-
 src/gallium/tests/graw/quad-tex.c                 |  2 +-
 src/gallium/tests/graw/shader-leak.c              |  2 +-
 src/gallium/tests/graw/tex-srgb.c                 |  2 +-
 src/gallium/tests/graw/tex-swizzle.c              |  2 +-
 src/gallium/tests/graw/tri-gs.c                   |  2 +-
 src/gallium/tests/graw/tri-instanced.c            |  2 +-
 src/gallium/tests/graw/tri-large.c                |  2 +-
 src/gallium/tests/graw/tri.c                      |  2 +-
 src/gallium/tests/graw/vs-test.c                  |  2 +-
 64 files changed, 215 insertions(+), 118 deletions(-)

Diff:   http://cgit.freedesktop.org/mesa/mesa/diff/?id=27dcb466293f2ab3f80a141fd0b8c14617a8e37f


More information about the mesa-commit mailing list