mirror of
https://github.com/X11Libre/xf86-video-amdgpu.git
synced 2026-03-24 01:24:31 +00:00
Factor out HW cursor checking code into drmmode_can_use_hw_cursor
And add a check for RandR 1.4 multihead. (Ported from radeon commit 3de480e83c0a1824838d662d6d67c9fe85277298) Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
@@ -566,6 +566,33 @@ amdgpu_screen_damage_report(DamagePtr damage, RegionPtr region, void *closure)
|
||||
damage->damage.data = NULL;
|
||||
}
|
||||
|
||||
static Bool
|
||||
drmmode_can_use_hw_cursor(xf86CrtcPtr crtc)
|
||||
{
|
||||
AMDGPUInfoPtr info = AMDGPUPTR(crtc->scrn);
|
||||
|
||||
/* Check for Option "SWcursor" */
|
||||
if (xf86ReturnOptValBool(info->Options, OPTION_SW_CURSOR, FALSE))
|
||||
return FALSE;
|
||||
|
||||
/* Fall back to SW cursor if the CRTC is transformed */
|
||||
if (crtc->transformPresent)
|
||||
return FALSE;
|
||||
|
||||
/* Xorg doesn't correctly handle cursor position transform in the
|
||||
* rotation case
|
||||
*/
|
||||
if (crtc->driverIsPerformingTransform &&
|
||||
(crtc->rotation & 0xf) != RR_Rotate_0)
|
||||
return FALSE;
|
||||
|
||||
/* HW cursor not supported yet with RandR 1.4 multihead */
|
||||
if (!xorg_list_is_empty(&crtc->scrn->pScreen->pixmap_dirty_list))
|
||||
return FALSE;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
#if XF86_CRTC_VERSION >= 4
|
||||
|
||||
static Bool
|
||||
@@ -772,7 +799,7 @@ drmmode_set_mode_major(xf86CrtcPtr crtc, DisplayModePtr mode,
|
||||
}
|
||||
}
|
||||
|
||||
if (!xf86ReturnOptValBool(info->Options, OPTION_SW_CURSOR, FALSE))
|
||||
if (drmmode_can_use_hw_cursor(crtc))
|
||||
xf86_reload_cursors(pScreen);
|
||||
|
||||
done:
|
||||
@@ -901,15 +928,7 @@ static void drmmode_load_cursor_argb(xf86CrtcPtr crtc, CARD32 * image)
|
||||
|
||||
static Bool drmmode_load_cursor_argb_check(xf86CrtcPtr crtc, CARD32 * image)
|
||||
{
|
||||
/* Fall back to SW cursor if the CRTC is transformed */
|
||||
if (crtc->transformPresent)
|
||||
return FALSE;
|
||||
|
||||
/* Xorg doesn't correctly handle cursor position transform in the
|
||||
* rotation case
|
||||
*/
|
||||
if (crtc->driverIsPerformingTransform &&
|
||||
(crtc->rotation & 0xf) != RR_Rotate_0)
|
||||
if (!drmmode_can_use_hw_cursor(crtc))
|
||||
return FALSE;
|
||||
|
||||
drmmode_load_cursor_argb(crtc, image);
|
||||
|
||||
Reference in New Issue
Block a user