> -----Original Message----- > From: amd-gfx [mailto:amd-gfx-bounces at lists.freedesktop.org] On Behalf > Of Michel Dänzer > Sent: Thursday, October 06, 2016 5:58 AM > To: amd-gfx at lists.freedesktop.org > Subject: [PATCH xf86-video-ati] Rotate and reflect cursor hotspot position for > drmModeSetCursor2 > > From: Michel Dänzer <michel.daenzer at amd.com> > > We were always passing the hotspot position in the X screen coordinate > space, but drmModeSetCursor2 needs it in the CRTC coordinate space. The > wrong hotspot position would cause the kernel driver to adjust the > HW cursor position incorrectly when the hotspot position changed. > > (Ported from amdgpu commit d42773eb45baff5933730e26878a0b45fcf07b65) > > Signed-off-by: Michel Dänzer <michel.daenzer at amd.com> Reviewed-by: Alex Deucher <alexander.deucher at amd.com> > --- > src/drmmode_display.c | 32 +++++++++++++++++++++++++++++++- > 1 file changed, 31 insertions(+), 1 deletion(-) > > diff --git a/src/drmmode_display.c b/src/drmmode_display.c > index 1b1b3e6..3888e5c 100644 > --- a/src/drmmode_display.c > +++ b/src/drmmode_display.c > @@ -1047,12 +1047,42 @@ drmmode_show_cursor (xf86CrtcPtr crtc) > if (use_set_cursor2) { > xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(crtc- > >scrn); > CursorPtr cursor = xf86_config->cursor; > + int xhot = cursor->bits->xhot; > + int yhot = cursor->bits->yhot; > int ret; > > + if (crtc->rotation != RR_Rotate_0 && > + crtc->rotation != (RR_Rotate_180 | RR_Reflect_X | > + RR_Reflect_Y)) { > + int t; > + > + /* Reflect & rotate hotspot position */ > + if (crtc->rotation & RR_Reflect_X) > + xhot = info->cursor_w - xhot - 1; > + if (crtc->rotation & RR_Reflect_Y) > + yhot = info->cursor_h - yhot - 1; > + > + switch (crtc->rotation & 0xf) { > + case RR_Rotate_90: > + t = xhot; > + xhot = yhot; > + yhot = info->cursor_w - t - 1; > + break; > + case RR_Rotate_180: > + xhot = info->cursor_w - xhot - 1; > + yhot = info->cursor_h - yhot - 1; > + break; > + case RR_Rotate_270: > + t = xhot; > + xhot = info->cursor_h - yhot - 1; > + yhot = t; > + } > + } > + > ret = > drmModeSetCursor2(drmmode->fd, drmmode_crtc- > >mode_crtc->crtc_id, > handle, info->cursor_w, info->cursor_h, > - cursor->bits->xhot, cursor->bits->yhot); > + xhot, yhot); > if (ret == -EINVAL) > use_set_cursor2 = FALSE; > else > -- > 2.9.3 > > _______________________________________________ > amd-gfx mailing list > amd-gfx at lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/amd-gfx