Mesa (master): gallium: split transfer_inline_write into buffer and texture callbacks

Marek Olšák mareko at kemper.freedesktop.org
Sat Jul 23 11:34:01 UTC 2016


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

Author: Marek Olšák <marek.olsak at amd.com>
Date:   Sat Jul 16 21:19:48 2016 +0200

gallium: split transfer_inline_write into buffer and texture callbacks

to reduce the call indirections with u_resource_vtbl.

The worst call tree you could get was:
  - u_transfer_inline_write_vtbl
    - u_default_transfer_inline_write
      - u_transfer_map_vtbl
        - driver_transfer_map
      - u_transfer_unmap_vtbl
        - driver_transfer_unmap

That's 6 indirect calls. Some drivers only had 5. The goal is to have
1 indirect call for drivers that care. The resource type can be determined
statically at most call sites.

The new interface is:
  pipe_context::buffer_subdata(ctx, resource, usage, offset, size, data)
  pipe_context::texture_subdata(ctx, resource, level, usage, box, data,
                                stride, layer_stride)

v2: fix whitespace, correct ilo's behavior

Reviewed-by: Nicolai Hähnle <nicolai.haehnle at amd.com>
Acked-by: Roland Scheidegger <sroland at vmware.com>

---

 src/gallium/auxiliary/postprocess/pp_mlaa.c        |  14 +--
 src/gallium/auxiliary/util/u_inlines.h             |  28 +-----
 src/gallium/auxiliary/util/u_transfer.c            | 112 ++++++++++-----------
 src/gallium/auxiliary/util/u_transfer.h            |  39 +++----
 src/gallium/docs/source/context.rst                |   5 +-
 src/gallium/drivers/ddebug/dd_context.c            |  30 ++++--
 src/gallium/drivers/freedreno/freedreno_resource.c |   4 +-
 src/gallium/drivers/i915/i915_resource.c           |   3 +-
 src/gallium/drivers/i915/i915_resource.h           |   6 ++
 src/gallium/drivers/i915/i915_resource_buffer.c    |  19 ++--
 src/gallium/drivers/i915/i915_resource_texture.c   |   3 +-
 src/gallium/drivers/ilo/ilo_transfer.c             |  36 ++-----
 src/gallium/drivers/llvmpipe/lp_texture.c          |   3 +-
 src/gallium/drivers/noop/noop_pipe.c               |  26 +++--
 src/gallium/drivers/nouveau/nouveau_buffer.c       |   1 -
 src/gallium/drivers/nouveau/nv30/nv30_miptree.c    |   1 -
 src/gallium/drivers/nouveau/nv30/nv30_resource.c   |   3 +-
 src/gallium/drivers/nouveau/nv50/nv50_miptree.c    |   1 -
 src/gallium/drivers/nouveau/nv50/nv50_resource.c   |   3 +-
 src/gallium/drivers/nouveau/nvc0/nvc0_miptree.c    |   1 -
 src/gallium/drivers/nouveau/nvc0/nvc0_resource.c   |   3 +-
 src/gallium/drivers/r300/r300_resource.c           |   3 +-
 src/gallium/drivers/r300/r300_screen_buffer.c      |   1 -
 src/gallium/drivers/r300/r300_texture.c            |   1 -
 src/gallium/drivers/r600/evergreen_compute.c       |  13 ---
 src/gallium/drivers/radeon/r600_buffer_common.c    |   1 -
 src/gallium/drivers/radeon/r600_pipe_common.c      |   5 +-
 src/gallium/drivers/radeon/r600_texture.c          |   1 -
 src/gallium/drivers/rbug/rbug_context.c            |  52 ++++++----
 src/gallium/drivers/softpipe/sp_texture.c          |   3 +-
 src/gallium/drivers/svga/svga_resource.c           |   3 +-
 src/gallium/drivers/svga/svga_resource_buffer.c    |   1 -
 src/gallium/drivers/svga/svga_resource_texture.c   |   1 -
 src/gallium/drivers/swr/swr_context.cpp            |   3 +-
 src/gallium/drivers/trace/tr_context.c             |  67 +++++++++---
 src/gallium/drivers/vc4/vc4_resource.c             |   4 +-
 src/gallium/drivers/virgl/virgl_buffer.c           |   1 -
 src/gallium/drivers/virgl/virgl_resource.c         |  14 ++-
 src/gallium/drivers/virgl/virgl_texture.c          |   1 -
 src/gallium/include/pipe/p_context.h               |  27 +++--
 .../state_trackers/clover/core/resource.cpp        |  10 +-
 src/gallium/state_trackers/nine/buffer9.h          |   8 +-
 src/gallium/state_trackers/nine/nine_state.c       |  11 +-
 src/gallium/state_trackers/nine/surface9.c         |   4 +-
 src/gallium/state_trackers/nine/volume9.c          |   4 +-
 src/gallium/state_trackers/omx/vid_enc.c           |  12 +--
 src/gallium/state_trackers/va/image.c              |   8 +-
 src/gallium/state_trackers/vdpau/bitmap.c          |   6 +-
 src/gallium/state_trackers/vdpau/output.c          |  20 ++--
 src/gallium/state_trackers/vdpau/surface.c         |  10 +-
 src/gallium/tests/graw/fs-test.c                   |  16 +--
 src/gallium/tests/graw/graw_util.h                 |  16 +--
 src/gallium/tests/graw/gs-test.c                   |  45 +++------
 src/gallium/tests/graw/quad-sample.c               |  16 +--
 src/gallium/tests/graw/vs-test.c                   |  28 ++----
 src/mesa/state_tracker/st_cb_bufferobjects.c       |   9 +-
 src/mesa/state_tracker/st_cb_texture.c             |   6 +-
 57 files changed, 383 insertions(+), 389 deletions(-)

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



More information about the mesa-commit mailing list