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

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


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

Author: Marek Olšák <marek.olsak at amd.com>
Date:   Sat Dec 26 12:01:10 2020 -0500

gallium: add take_ownership param into set_constant_buffer to eliminate atomics

We often do this:
    pipe->set_constant_buffer(pipe, shader, slot, &cb);
    pipe_resource_reference(&cb->buffer, NULL);

That results in atomic increment in set_constant_buffer followed by
atomic decrement after set_constant_buffer. This new interface
eliminates those atomics.

For the case above, this should be used instead:
    pipe->set_constant_buffer(pipe, shader, slot, true, &cb);
    cb->buffer = NULL; // if cb is not a local variable, else do nothing

AMD Zen benefits from this. The perf improvement is ~3% for Viewperf13/Catia.

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

---

 docs/gallium/context.rst                          |  2 ++
 src/gallium/auxiliary/cso_cache/cso_context.c     |  6 +++---
 src/gallium/auxiliary/driver_ddebug/dd_context.c  |  3 ++-
 src/gallium/auxiliary/driver_noop/noop_state.c    |  1 +
 src/gallium/auxiliary/driver_rbug/rbug_context.c  |  4 ++--
 src/gallium/auxiliary/driver_trace/tr_context.c   |  4 +++-
 src/gallium/auxiliary/hud/hud_context.c           | 10 ++++-----
 src/gallium/auxiliary/postprocess/pp_mlaa.c       |  4 ++--
 src/gallium/auxiliary/postprocess/pp_run.c        |  4 ++--
 src/gallium/auxiliary/util/u_blitter.c            |  6 +++---
 src/gallium/auxiliary/util/u_compute.c            |  4 ++--
 src/gallium/auxiliary/util/u_inlines.h            | 14 ++++++++----
 src/gallium/auxiliary/util/u_threaded_context.c   | 13 ++++++------
 src/gallium/auxiliary/vl/vl_bicubic_filter.c      |  2 +-
 src/gallium/auxiliary/vl/vl_compositor_cs.c       |  2 +-
 src/gallium/drivers/d3d12/d3d12_context.cpp       | 11 ++++++++--
 src/gallium/drivers/etnaviv/etnaviv_state.c       |  4 ++--
 src/gallium/drivers/freedreno/freedreno_blitter.c |  2 +-
 src/gallium/drivers/freedreno/freedreno_state.c   |  3 ++-
 src/gallium/drivers/i915/i915_state.c             |  8 ++++++-
 src/gallium/drivers/iris/iris_state.c             | 10 +++++++--
 src/gallium/drivers/lima/lima_state.c             |  1 +
 src/gallium/drivers/llvmpipe/lp_setup.c           |  4 ++--
 src/gallium/drivers/llvmpipe/lp_state_cs.c        |  4 ++--
 src/gallium/drivers/llvmpipe/lp_state_fs.c        |  4 +++-
 src/gallium/drivers/nouveau/nv30/nv30_state.c     | 15 +++++++++++--
 src/gallium/drivers/nouveau/nv50/nv50_state.c     |  9 +++++++-
 src/gallium/drivers/nouveau/nvc0/nvc0_state.c     |  9 +++++++-
 src/gallium/drivers/panfrost/pan_compute.c        |  2 +-
 src/gallium/drivers/panfrost/pan_context.c        |  4 ++--
 src/gallium/drivers/r300/r300_state.c             |  1 +
 src/gallium/drivers/r600/evergreen_compute.c      |  2 +-
 src/gallium/drivers/r600/evergreen_state.c        | 13 ++++++------
 src/gallium/drivers/r600/r600_pipe.c              |  4 ++--
 src/gallium/drivers/r600/r600_query.c             |  7 ++----
 src/gallium/drivers/r600/r600_state_common.c      | 22 ++++++++++++-------
 src/gallium/drivers/radeonsi/gfx10_query.c        |  2 +-
 src/gallium/drivers/radeonsi/si_compute_blit.c    | 15 ++++++-------
 src/gallium/drivers/radeonsi/si_descriptors.c     | 19 +++++++++++------
 src/gallium/drivers/radeonsi/si_pipe.c            |  2 +-
 src/gallium/drivers/radeonsi/si_query.c           |  2 +-
 src/gallium/drivers/radeonsi/si_state.c           |  3 +--
 src/gallium/drivers/softpipe/sp_state_shader.c    |  8 ++++++-
 src/gallium/drivers/svga/svga_pipe_constants.c    |  8 ++++++-
 src/gallium/drivers/svga/svga_state_ts.c          |  2 +-
 src/gallium/drivers/swr/swr_state.cpp             |  4 ++--
 src/gallium/drivers/tegra/tegra_context.c         |  4 ++--
 src/gallium/drivers/v3d/v3dx_state.c              |  3 ++-
 src/gallium/drivers/vc4/vc4_blit.c                |  6 +++---
 src/gallium/drivers/vc4/vc4_state.c               |  6 ++----
 src/gallium/drivers/virgl/virgl_context.c         |  8 ++++++-
 src/gallium/drivers/zink/zink_context.c           |  8 ++++++-
 src/gallium/frontends/lavapipe/lvp_execute.c      |  8 +++----
 src/gallium/frontends/nine/nine_state.c           | 26 +++++++++++------------
 src/gallium/frontends/omx/vid_enc_common.c        |  4 ++--
 src/gallium/include/pipe/p_context.h              | 10 +++++++++
 src/gallium/tests/graw/fs-test.c                  |  4 ++--
 src/mesa/state_tracker/st_atom_constbuf.c         |  9 ++++----
 src/mesa/state_tracker/st_pbo.c                   |  2 +-
 59 files changed, 240 insertions(+), 141 deletions(-)

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


More information about the mesa-commit mailing list