[Mesa-dev] [PATCHv2 0/9] drisw/glx: use XShm if possible

Marc-André Lureau marcandre.lureau at gmail.com
Mon Jun 15 06:34:06 PDT 2015


Hi,

XPutImage/XGetImage requires to copy the images around, and the
request may be split over several chunks. Using XShm should improve
performance.

In particular, the performances are bad when using gnome-shell with
Spice and playing video. Chunking the update confuses the video
detection heuristic: unfortunately it's not easy to change it without
breaking further other cases. Making one big request per video frames
solves most of the issues.

Changes since v1, after Adam Jackson review:
 - fix a wrong ximage != NULL condition
 - add XSync() after XPutImageShm to ensure server is done with it
 - add getImageShm()

Marc-André Lureau (9):
  dri: add putImageShm and getImageShm to swrastLoader
  drisw: use putImageShm if available
  drisw: use shared memory when possible
  drisw/glx: use XShm if possible
  gallium: move winsys_handle to its own header
  gallium: rename DRM_API_HANDLE_TYPE* WINSYS_HANDLE_TYPE*
  drisw: learn to query shmid handle type
  drisw: use getImageShm() if available
  drisw/glx: implement getImageShm

 include/GL/internal/dri_interface.h               |  18 +-
 src/gallium/auxiliary/vl/vl_winsys_dri.c          |   2 +-
 src/gallium/drivers/freedreno/freedreno_screen.c  |  12 +-
 src/gallium/drivers/nouveau/nouveau_screen.c      |  12 +-
 src/gallium/drivers/vc4/vc4_screen.c              |  10 +-
 src/gallium/include/state_tracker/drisw_api.h     |   4 +
 src/gallium/include/state_tracker/drm_driver.h    |  32 +---
 src/gallium/include/state_tracker/sw_winsys.h     |   3 +-
 src/gallium/include/state_tracker/winsys_handle.h |  42 +++++
 src/gallium/state_trackers/dri/dri2.c             |  20 +--
 src/gallium/state_trackers/dri/drisw.c            |  60 ++++++-
 src/gallium/state_trackers/nine/swapchain9.c      |   2 +-
 src/gallium/state_trackers/xa/xa_tracker.c        |   6 +-
 src/gallium/winsys/i915/drm/i915_drm_buffer.c     |  10 +-
 src/gallium/winsys/intel/drm/intel_drm_winsys.c   |  10 +-
 src/gallium/winsys/radeon/drm/radeon_drm_bo.c     |  14 +-
 src/gallium/winsys/svga/drm/vmw_screen_dri.c      |  14 +-
 src/gallium/winsys/svga/drm/vmw_screen_ioctl.c    |   6 +-
 src/gallium/winsys/sw/dri/dri_sw_winsys.c         |  82 +++++++--
 src/gallium/winsys/sw/kms-dri/kms_dri_sw_winsys.c |  12 +-
 src/glx/drisw_glx.c                               | 192 +++++++++++++++++++---
 src/glx/drisw_priv.h                              |   3 +
 22 files changed, 421 insertions(+), 145 deletions(-)
 create mode 100644 src/gallium/include/state_tracker/winsys_handle.h

-- 
2.4.2



More information about the mesa-dev mailing list