[PATCH xserver 0/3] Allow PRIME output master "hardware" cursors

Alex Goins agoins at nvidia.com
Wed Nov 8 04:15:05 UTC 2017


First two changes are prep, third change is for functionality.

Change 7b634067 added HW cursor support for PRIME by removing the
pixmap_dirty_list check from xf86CursorSetCursor() and making the requisite
cursor functions set/check the cursor both on master and slave.

Naturally, the slave driving an actual hardware cursor is preferable to the
master compositing a cursor into the shared pixmap, but there are certain
situations where the slave cannot drive a hardware cursor (certain DRM drivers,
or when used with a transform). In these cases the master may still be capable
of compositing a cursor, and that would be preferable to using the server's
software cursor (due to the fact that it's unsynchronzied by OpenGL rendering to
the root window, it can cause corruption with certain compositors).

The PRIME HW cursor change works by checking both master and slave HW cursor
capabilities, and setting the cursor on both. For masters such as modesetting,
the master cursor capabilities check will pass but the cursor set will be a
NOOP, effectively driving a hardware cursor only on the slave while still
passing the check. However, if two different drivers with different sets of
capabilities are used, HW cursor ends up only being used if the intersection of
capabilities are supported. For example, if the master can drive a cursor with a
transform, and the slave can't, checking capabilities on both means we
unnecessarily fall back to SW cursor.

To alleviate this issue while still prioritizing HW cursor on the slave, these
changes restructure the HW cursor code such that the slave aspects of these
functions are tried first, falling back to the master if they fail.

SlaveHWCursor, a flag for querying if the hardware cursor is being driven by
slaves, is added to xf86CursorScreenRec, resulting in an ABI break.

Alex Goins (3):
  ramdac: Fix formatting in xf86CheckHWCursor()
  ramdac: Add xf86CursorPriv.h to ABI
  ramdac: Handle master and slave cursors independently

 hw/xfree86/ramdac/Makefile.am      |   4 +-
 hw/xfree86/ramdac/xf86CursorPriv.h |   3 +
 hw/xfree86/ramdac/xf86HWCurs.c     | 122 +++++++++++++++++++++++++++----------
 hw/xfree86/sdksyms.sh              |   1 +
 4 files changed, 95 insertions(+), 35 deletions(-)

-- 
2.7.4



More information about the xorg-devel mailing list