[Mesa-dev] [PATCH 00/22] Add support for GL_EXT_semaphore v2

Andres Rodriguez andresx7 at gmail.com
Fri Dec 22 00:41:35 UTC 2017


Sorry for the long time to get this v2 out, past month has been
a bit hectic.

This incorporates the feedback I received from mareko and nha on
the previous iteration.

Some of the notable changes:
  - Merged fences and semaphores at the gallium level
  - Fixed latency due to delayed flushing
  - Moved the flush from gallium into the radeonsi pipe
  - Added tests (on piglit mailing list)
  - Some fixups for bugs found with the tests are at the end of the series

Thanks for taking the time to review.

Kind Regards,
Andres

Andres Rodriguez (22):
  gallium: add type parameter to create_fence_fd
  gallium: rename pipe fences to semaphores
  gallium: documentation updates for fence->semaphore rename
  gallium: introduce PIPE_CAP_SEMAPHORE_SIGNAL
  gallium: introduce PIPE_FD_TYPE_SYNCOBJ
  gallium: add semaphore_server_signal()
  u_threaded_context: add support for semaphore_server_signal
  mesa/st: introduce EXT_semaphore and EXT_semaphore_fd v2
  mesa: add support for semaphore object creation/import/delete v2
  mesa/st: add support for semaphore object create/import/delete
  mesa: add semaphore parameter stub v2
  mesa: add support for semaphore object signal/wait v2
  mesa/st: add support for semaphore object signal/wait v2
  mesa: implement buffer/texture barriers for semaphore signal/wait v2
  winsys/amdgpu: add support for syncobj signaling v2
  radeonsi: add support for importing PIPE_FD_TYPE_SYNCOBJ semaphores
  radeonsi: implement semaphore_server_signal
  radeonsi: fix semaphore_server_sync() holding up extra work
  radeonsi: advertise support for GL_EXT_semaphore
  mesa: fix error codes for importing memory/semaphore FDs
  mesa: fix glGet for ext_external_objects parameters
  mesa: check for invalid index on UUID glGet queries

 src/gallium/auxiliary/pipebuffer/pb_buffer.h       |   6 +-
 .../auxiliary/pipebuffer/pb_buffer_fenced.c        |  20 +-
 .../auxiliary/pipebuffer/pb_buffer_fenced.h        |  14 +-
 .../auxiliary/pipebuffer/pb_buffer_malloc.c        |   2 +-
 src/gallium/auxiliary/pipebuffer/pb_bufmgr_cache.c |   2 +-
 src/gallium/auxiliary/pipebuffer/pb_bufmgr_debug.c |   2 +-
 src/gallium/auxiliary/pipebuffer/pb_bufmgr_mm.c    |   2 +-
 .../auxiliary/pipebuffer/pb_bufmgr_ondemand.c      |   2 +-
 src/gallium/auxiliary/pipebuffer/pb_bufmgr_pool.c  |   2 +-
 src/gallium/auxiliary/pipebuffer/pb_bufmgr_slab.c  |   2 +-
 src/gallium/auxiliary/pipebuffer/pb_validate.c     |   2 +-
 src/gallium/auxiliary/pipebuffer/pb_validate.h     |   4 +-
 src/gallium/auxiliary/util/u_tests.c               |  55 ++---
 src/gallium/auxiliary/util/u_threaded_context.c    |  57 ++++--
 src/gallium/auxiliary/util/u_threaded_context.h    |  10 +-
 .../auxiliary/util/u_threaded_context_calls.h      |   3 +-
 src/gallium/docs/source/context.rst                |  65 ++++--
 src/gallium/docs/source/screen.rst                 |   2 +
 src/gallium/drivers/ddebug/dd_draw.c               |  24 +--
 src/gallium/drivers/ddebug/dd_pipe.h               |   6 +-
 src/gallium/drivers/ddebug/dd_screen.c             |  18 +-
 src/gallium/drivers/etnaviv/etnaviv_context.c      |   8 +-
 src/gallium/drivers/etnaviv/etnaviv_fence.c        |  40 ++--
 src/gallium/drivers/etnaviv/etnaviv_fence.h        |  15 +-
 src/gallium/drivers/etnaviv/etnaviv_screen.c       |   3 +-
 src/gallium/drivers/freedreno/freedreno_batch.c    |   4 +-
 src/gallium/drivers/freedreno/freedreno_batch.h    |   2 +-
 src/gallium/drivers/freedreno/freedreno_context.c  |  16 +-
 src/gallium/drivers/freedreno/freedreno_fence.c    |  42 ++--
 src/gallium/drivers/freedreno/freedreno_fence.h    |  28 +--
 src/gallium/drivers/freedreno/freedreno_gmem.c     |   2 +-
 src/gallium/drivers/freedreno/freedreno_screen.c   |   9 +-
 src/gallium/drivers/i915/i915_batch.h              |   2 +-
 src/gallium/drivers/i915/i915_flush.c              |   4 +-
 src/gallium/drivers/i915/i915_screen.c             |  21 +-
 src/gallium/drivers/i915/i915_winsys.h             |  16 +-
 src/gallium/drivers/llvmpipe/lp_context.c          |   2 +-
 src/gallium/drivers/llvmpipe/lp_fence.h            |   2 +-
 src/gallium/drivers/llvmpipe/lp_flush.c            |   8 +-
 src/gallium/drivers/llvmpipe/lp_flush.h            |   4 +-
 src/gallium/drivers/llvmpipe/lp_query.c            |   2 +-
 src/gallium/drivers/llvmpipe/lp_scene.c            |   4 +-
 src/gallium/drivers/llvmpipe/lp_screen.c           |  19 +-
 src/gallium/drivers/llvmpipe/lp_setup.c            |  12 +-
 src/gallium/drivers/llvmpipe/lp_setup.h            |   4 +-
 src/gallium/drivers/noop/noop_pipe.c               |  16 +-
 src/gallium/drivers/nouveau/nouveau_fence.h        |   2 +-
 src/gallium/drivers/nouveau/nouveau_screen.c       |  12 +-
 src/gallium/drivers/nouveau/nv30/nv30_context.c    |   2 +-
 src/gallium/drivers/nouveau/nv30/nv30_screen.c     |   3 +-
 src/gallium/drivers/nouveau/nv50/nv50_context.c    |   2 +-
 src/gallium/drivers/nouveau/nv50/nv50_screen.c     |   3 +-
 src/gallium/drivers/nouveau/nvc0/nvc0_context.c    |   2 +-
 src/gallium/drivers/nouveau/nvc0/nvc0_screen.c     |   3 +-
 src/gallium/drivers/r300/r300_context.c            |   2 +-
 src/gallium/drivers/r300/r300_context.h            |   2 +-
 src/gallium/drivers/r300/r300_flush.c              |   8 +-
 src/gallium/drivers/r300/r300_query.c              |   2 +-
 src/gallium/drivers/r300/r300_screen.c             |  19 +-
 src/gallium/drivers/r600/r600_hw_context.c         |   4 +-
 src/gallium/drivers/r600/r600_pipe.c               |   3 +-
 src/gallium/drivers/r600/r600_pipe.h               |   2 +-
 src/gallium/drivers/r600/r600_pipe_common.c        |  62 +++---
 src/gallium/drivers/r600/r600_pipe_common.h        |   6 +-
 src/gallium/drivers/r600/r600_query.c              |   6 +-
 src/gallium/drivers/r600/radeon_vce.c              |   2 +-
 src/gallium/drivers/radeon/r600_pipe_common.c      |  10 +-
 src/gallium/drivers/radeon/r600_pipe_common.h      |   6 +-
 src/gallium/drivers/radeon/r600_query.c            |   6 +-
 src/gallium/drivers/radeon/radeon_vce.c            |   2 +-
 src/gallium/drivers/radeon/radeon_vcn_enc.c        |   2 +-
 src/gallium/drivers/radeon/radeon_winsys.h         |  30 ++-
 src/gallium/drivers/radeonsi/si_fence.c            | 181 +++++++++++------
 src/gallium/drivers/radeonsi/si_get.c              |   5 +-
 src/gallium/drivers/radeonsi/si_hw_context.c       |   6 +-
 src/gallium/drivers/radeonsi/si_pipe.c             |   3 +-
 src/gallium/drivers/radeonsi/si_pipe.h             |   4 +-
 src/gallium/drivers/rbug/rbug_context.c            |   2 +-
 src/gallium/drivers/rbug/rbug_screen.c             |  18 +-
 src/gallium/drivers/softpipe/sp_fence.c            |  14 +-
 src/gallium/drivers/softpipe/sp_flush.c            |  10 +-
 src/gallium/drivers/softpipe/sp_flush.h            |   6 +-
 src/gallium/drivers/softpipe/sp_screen.c           |   3 +-
 src/gallium/drivers/svga/svga_context.c            |  16 +-
 src/gallium/drivers/svga/svga_context.h            |   2 +-
 src/gallium/drivers/svga/svga_pipe_flush.c         |  28 +--
 src/gallium/drivers/svga/svga_pipe_query.c         |  16 +-
 src/gallium/drivers/svga/svga_resource_texture.c   |   8 +-
 src/gallium/drivers/svga/svga_screen.c             |  29 +--
 src/gallium/drivers/svga/svga_screen_cache.c       |   6 +-
 src/gallium/drivers/svga/svga_screen_cache.h       |   4 +-
 src/gallium/drivers/svga/svga_winsys.h             |  26 +--
 src/gallium/drivers/swr/swr_context.cpp            |   4 +-
 src/gallium/drivers/swr/swr_draw.cpp               |  12 +-
 src/gallium/drivers/swr/swr_fence.cpp              |  22 +-
 src/gallium/drivers/swr/swr_fence.h                |  20 +-
 src/gallium/drivers/swr/swr_fence_work.cpp         |  10 +-
 src/gallium/drivers/swr/swr_fence_work.h           |   8 +-
 src/gallium/drivers/swr/swr_query.cpp              |  10 +-
 src/gallium/drivers/swr/swr_query.h                |   2 +-
 src/gallium/drivers/swr/swr_screen.cpp             |  11 +-
 src/gallium/drivers/swr/swr_screen.h               |   2 +-
 src/gallium/drivers/swr/swr_state.cpp              |   2 +-
 src/gallium/drivers/trace/tr_context.c             |   2 +-
 src/gallium/drivers/trace/tr_screen.c              |  24 +--
 src/gallium/drivers/vc4/vc4_context.c              |   6 +-
 src/gallium/drivers/vc4/vc4_fence.c                |  14 +-
 src/gallium/drivers/vc4/vc4_screen.c               |   3 +-
 src/gallium/drivers/vc5/vc5_context.c              |   6 +-
 src/gallium/drivers/vc5/vc5_fence.c                |  14 +-
 src/gallium/drivers/vc5/vc5_screen.c               |   2 +-
 src/gallium/drivers/virgl/virgl_context.c          |   2 +-
 src/gallium/drivers/virgl/virgl_screen.c           |  19 +-
 src/gallium/drivers/virgl/virgl_winsys.h           |  12 +-
 src/gallium/include/pipe/p_context.h               |  49 +++--
 src/gallium/include/pipe/p_defines.h               |  11 +-
 src/gallium/include/pipe/p_screen.h                |  40 ++--
 src/gallium/include/pipe/p_video_codec.h           |   2 +-
 src/gallium/include/state_tracker/opencl_interop.h |   2 +-
 src/gallium/include/state_tracker/st_api.h         |   4 +-
 src/gallium/state_trackers/clover/api/interop.cpp  |   2 +-
 src/gallium/state_trackers/clover/core/event.cpp   |  10 +-
 src/gallium/state_trackers/clover/core/event.hpp   |   8 +-
 src/gallium/state_trackers/clover/core/queue.cpp   |   4 +-
 src/gallium/state_trackers/dri/dri2.c              |   6 +-
 src/gallium/state_trackers/dri/dri_drawable.c      |  22 +-
 src/gallium/state_trackers/dri/dri_drawable.h      |   2 +-
 src/gallium/state_trackers/dri/dri_helpers.c       |  20 +-
 src/gallium/state_trackers/glx/xlib/xm_api.c       |   6 +-
 src/gallium/state_trackers/nine/swapchain9.c       |  38 ++--
 src/gallium/state_trackers/nine/swapchain9.h       |   2 +-
 src/gallium/state_trackers/vdpau/output.c          |   2 +-
 src/gallium/state_trackers/vdpau/presentation.c    |  10 +-
 src/gallium/state_trackers/vdpau/vdpau_private.h   |   2 +-
 src/gallium/state_trackers/wgl/stw_context.c       |   2 +-
 src/gallium/state_trackers/xa/xa_context.c         |  10 +-
 src/gallium/state_trackers/xa/xa_priv.h            |   4 +-
 src/gallium/state_trackers/xvmc/surface.c          |   4 +-
 src/gallium/state_trackers/xvmc/xvmc_private.h     |   4 +-
 src/gallium/tools/trace/dump_state.py              |   4 +-
 src/gallium/winsys/amdgpu/drm/amdgpu_bo.c          |  12 +-
 src/gallium/winsys/amdgpu/drm/amdgpu_bo.h          |   2 +-
 src/gallium/winsys/amdgpu/drm/amdgpu_cs.c          | 149 ++++++++++----
 src/gallium/winsys/amdgpu/drm/amdgpu_cs.h          |  20 +-
 src/gallium/winsys/i915/drm/i915_drm_batchbuffer.c |   4 +-
 src/gallium/winsys/i915/drm/i915_drm_fence.c       |  20 +-
 src/gallium/winsys/i915/drm/i915_drm_winsys.h      |   2 +-
 src/gallium/winsys/radeon/drm/radeon_drm_cs.c      |  42 ++--
 src/gallium/winsys/radeon/drm/radeon_drm_cs.h      |   4 +-
 .../winsys/svga/drm/pb_buffer_simple_fenced.c      |  20 +-
 src/gallium/winsys/svga/drm/vmw_buffer.c           |   2 +-
 src/gallium/winsys/svga/drm/vmw_context.c          |   8 +-
 src/gallium/winsys/svga/drm/vmw_fence.c            |  60 +++---
 src/gallium/winsys/svga/drm/vmw_fence.h            |  18 +-
 src/gallium/winsys/svga/drm/vmw_screen.h           |   4 +-
 src/gallium/winsys/svga/drm/vmw_screen_ioctl.c     |   6 +-
 src/gallium/winsys/svga/drm/vmw_screen_svga.c      |  40 ++--
 src/gallium/winsys/virgl/drm/virgl_drm_winsys.c    |  14 +-
 src/gallium/winsys/virgl/drm/virgl_drm_winsys.h    |   4 +-
 .../winsys/virgl/vtest/virgl_vtest_winsys.c        |  14 +-
 .../winsys/virgl/vtest/virgl_vtest_winsys.h        |   4 +-
 src/mesa/Makefile.sources                          |   2 +
 src/mesa/drivers/dri/i915/intel_syncobj.c          |   6 +-
 src/mesa/drivers/dri/i965/brw_sync.c               |  10 +-
 src/mesa/main/dd.h                                 |  58 ++++++
 src/mesa/main/extensions_table.h                   |   2 +
 src/mesa/main/externalobjects.c                    | 223 ++++++++++++++++++++-
 src/mesa/main/externalobjects.h                    |  31 ++-
 src/mesa/main/get.c                                |   7 +
 src/mesa/main/get_hash_params.py                   |   5 +
 src/mesa/main/mtypes.h                             |  10 +
 src/mesa/main/shared.c                             |  17 ++
 src/mesa/meson.build                               |   2 +
 src/mesa/state_tracker/st_cb_flush.c               |   8 +-
 src/mesa/state_tracker/st_cb_flush.h               |   4 +-
 src/mesa/state_tracker/st_cb_semaphoreobjects.c    | 129 ++++++++++++
 src/mesa/state_tracker/st_cb_semaphoreobjects.h    |  25 +++
 src/mesa/state_tracker/st_cb_syncobj.c             |  26 +--
 src/mesa/state_tracker/st_context.c                |   2 +
 src/mesa/state_tracker/st_extensions.c             |   4 +-
 src/mesa/state_tracker/st_manager.c                |   8 +-
 181 files changed, 1718 insertions(+), 962 deletions(-)
 create mode 100644 src/mesa/state_tracker/st_cb_semaphoreobjects.c
 create mode 100644 src/mesa/state_tracker/st_cb_semaphoreobjects.h

-- 
2.9.3



More information about the mesa-dev mailing list