[PATCH xserver] modesetting: always set a hardware cursor when requested to load one.
Hans de Goede
hdegoede at redhat.com
Fri Sep 23 08:20:50 UTC 2016
Hi All,
On 09/16/2016 06:52 PM, Michael Thayer wrote:
> When the X server asks us to load a hardware cursor, that request is always
> followed up by a request to show it if we report success, or to hide it if
> we report failure. Therefore it makes no sense to suppress the request if
> the cursor is not currently visible.
Ok, I've just spend the last half hour tracing (using grep) all callers of
load_cursor_argb_check and you're right, either the cursor is already
visible (XRecolorCursor does this), or it will get shown directly after
the drmmode_load_cursor_argb_check() call.
So this patch is:
Reviewed-by: Hans de Goede <hdegoede at redhat.com>
Regards,
Hans
>
> Signed-off-by: Michael Thayer <michael.thayer at oracle.com>
> ---
> Tested that both hardware and software cursors still work after applying the
> patch.
>
> hw/xfree86/drivers/modesetting/drmmode_display.c | 11 +----------
> hw/xfree86/drivers/modesetting/drmmode_display.h | 2 --
> 2 files changed, 1 insertion(+), 12 deletions(-)
>
> diff --git a/hw/xfree86/drivers/modesetting/drmmode_display.c b/hw/xfree86/drivers/modesetting/drmmode_display.c
> index 41810d9..7d171a3 100644
> --- a/hw/xfree86/drivers/modesetting/drmmode_display.c
> +++ b/hw/xfree86/drivers/modesetting/drmmode_display.c
> @@ -813,14 +813,7 @@ drmmode_load_cursor_argb_check(xf86CrtcPtr crtc, CARD32 *image)
> for (i = 0; i < ms->cursor_width * ms->cursor_height; i++)
> ptr[i] = image[i]; // cpu_to_le32(image[i]);
>
> - if (drmmode_crtc->cursor_up || !drmmode_crtc->first_cursor_load_done) {
> - Bool ret = drmmode_set_cursor(crtc);
> - if (!drmmode_crtc->cursor_up)
> - drmmode_hide_cursor(crtc);
> - drmmode_crtc->first_cursor_load_done = TRUE;
> - return ret;
> - }
> - return TRUE;
> + return drmmode_set_cursor(crtc);
> }
>
> static void
> @@ -830,7 +823,6 @@ drmmode_hide_cursor(xf86CrtcPtr crtc)
> drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private;
> drmmode_ptr drmmode = drmmode_crtc->drmmode;
>
> - drmmode_crtc->cursor_up = FALSE;
> drmModeSetCursor(drmmode->fd, drmmode_crtc->mode_crtc->crtc_id, 0,
> ms->cursor_width, ms->cursor_height);
> }
> @@ -839,7 +831,6 @@ static void
> drmmode_show_cursor(xf86CrtcPtr crtc)
> {
> drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private;
> - drmmode_crtc->cursor_up = TRUE;
> drmmode_set_cursor(crtc);
> }
>
> diff --git a/hw/xfree86/drivers/modesetting/drmmode_display.h b/hw/xfree86/drivers/modesetting/drmmode_display.h
> index 50976b8..bd82968 100644
> --- a/hw/xfree86/drivers/modesetting/drmmode_display.h
> +++ b/hw/xfree86/drivers/modesetting/drmmode_display.h
> @@ -91,9 +91,7 @@ typedef struct {
> uint32_t vblank_pipe;
> int dpms_mode;
> struct dumb_bo *cursor_bo;
> - Bool cursor_up;
> Bool set_cursor2_failed;
> - Bool first_cursor_load_done;
> uint16_t lut_r[256], lut_g[256], lut_b[256];
>
> drmmode_bo rotate_bo;
>
More information about the xorg-devel
mailing list