[PATCH] mi: sprite: SaveUnderCursor2

Hans de Goede hdegoede at redhat.com
Wed Mar 10 09:47:43 UTC 2021


Hi,

On 3/9/21 5:34 PM, Madhurkiran Harikrishnan wrote:
> From: Hyun Kwon <hyun.kwon at xilinx.com>
> 
> There is cursor bleeding for the devices which try to acclerate the
> Desktop environment using low powered ARM Mali GPUs. The area under
> the cusrsor is not updated for every swap call within the armsoc,
> resulting in the block artifact.
> 
> Expose miDCSaveUnderCursor2 API, so that other graphics layer like
> armsoc can inoke and save the area under the cursor before actually
> perfroming a swap between the backbuffer and the frontbuffer.

Thank you for the updated version with this nice commit message.

So it seems that this is another approach to fixing the same issue
which I fixed in the modesetting driver with this commit:

https://cgit.freedesktop.org/xorg/xserver/commit/?id=0aaac8d783e78c040a70a55ba8d67809abd7e625

Interesting...

If this works reliable for you, so that you don't need to disable
page-flipping then this seems like a good idea to me.

Regards,

Hans



> 
> Signed-off-by: Hyun Kwon <hyun.kwon at xilinx.com>
> Signed-off-by: Madhurkiran Harikrishnan <madhurkiran.harikrishnan at xilinx.com>
> ---
>  mi/mipointer.h |  2 ++
>  mi/misprite.c  | 17 +++++++++++++++++
>  2 files changed, 19 insertions(+)
> 
> diff --git a/mi/mipointer.h b/mi/mipointer.h
> index 7ce6409..107b24f 100644
> --- a/mi/mipointer.h
> +++ b/mi/mipointer.h
> @@ -127,4 +127,6 @@ extern _X_EXPORT DevPrivateKeyRec miPointerScreenKeyRec;
>  
>  #define miPointerScreenKey (&miPointerScreenKeyRec)
>  
> +extern _X_EXPORT void miDCSaveUnderCursor2(ScreenPtr pScreen);
> +
>  #endif                          /* MIPOINTER_H */
> diff --git a/mi/misprite.c b/mi/misprite.c
> index add2c55..46ce9f0 100644
> --- a/mi/misprite.c
> +++ b/mi/misprite.c
> @@ -955,3 +955,20 @@ miSpriteComputeSaved(DeviceIntPtr pDev, ScreenPtr pScreen)
>      pCursorInfo->saved.x2 = pCursorInfo->saved.x1 + w + wpad * 2;
>      pCursorInfo->saved.y2 = pCursorInfo->saved.y1 + h + hpad * 2;
>  }
> +
> +void
> +miDCSaveUnderCursor2(ScreenPtr pScreen)
> +{
> +	DeviceIntPtr pDev;
> +	miCursorInfoPtr pCursorInfo;
> +
> +	for (pDev = inputInfo.devices; pDev; pDev = pDev->next) {
> +		if (DevHasCursor(pDev)) {
> +			pCursorInfo = GetSprite(pDev);
> +			if (pCursorInfo && pCursorInfo->isUp
> +			    && pCursorInfo->pScreen == pScreen) {
> +				miSpriteSaveUnderCursor(pDev, pScreen);
> +			}
> +		}
> +	}
> +}
> 



More information about the xorg-devel mailing list