cursor handling and updates inside DRM
Tiago Vignatti
vignatti at c3sl.ufpr.br
Thu Jul 10 00:05:57 PDT 2008
Hi,
The current DRM kernel modesetting tree is already taking care to update
the cursor registers and paint it to the screen. Very cool [0].
What I've done today is a shortcut between the kernel input layer and
DRM to update the cursor directly on screen without the X server be
notified always. Of course, a lot of issues raised up together. So let's
try to delegates the tasks again.
userspace app (X server):
- starts all this mechanism telling which is the device responsible for
the cursor (input ddx drv)
- responsible for loading new cursor images and push to the DRM (video
ddx drv)
kernel input layer (evdev driver):
- notify and send its relative coordinates events to DRM
DRM:
- transform relative motion into absolute
- takes care the cursor limits
- responsible for the acceleration computation
- responsible for the input transformation as well?
- touch the gfx registers.
Seems that a reasonable amount of code in ddx input drv (mainly
ReadInput) and dix (mainly GetPointerEvents) would be "swallowed" by the
DRM. The "event generation stage" of the server would deal with the
event itself + xkb + Xi things (which eventually could be done in a
dedicated thread) and will let to DRM the responsibility of paint the
cursor on screen.
The communication between kernel input drv can be directly, calling a
DRM function; the DRM and userspace can communicate basically using
ioctls. Complains?
This would only works with DRM supporting OSes. What about the others?
Thank you,
[0] Not so much. Seems this method to update the cursor is sending _a
lot of_ ioctls and sometimes doing cursor jumps. But I have to double
check to see if the problem is for sure with context switches.
--
Tiago Vignatti
C3SL - Centro de Computação Científica e Software Livre
www.c3sl.ufpr.br
More information about the xorg
mailing list