On 17/08/16 07:29 PM, Qiang Yu wrote:
>
> +static void
> +ms_dri2_flip_free(struct ms_crtc_pageflip *flip)
> +{
> + struct ms_flipdata *flipdata = flip->flipdata;
> +
> + free(flip);
> + if (--flipdata->flip_count > 0)
> + return;
> + free(flipdata);
> +}
> +
> +static void
> +ms_dri2_flip_abort(void *data)
> +{
> + struct ms_crtc_pageflip *flip = data;
> + struct ms_flipdata *flipdata = flip->flipdata;
> +
> + if (flipdata->flip_count == 1)
> + free(flipdata->event);
This should be moved to ms_dri2_flip_free, or flipdata->event will be
leaked for successful flips?
> +static Bool
> +can_exchange(ScrnInfoPtr scrn, DrawablePtr draw,
> + DRI2BufferPtr front, DRI2BufferPtr back)
> +{
[...]
> + if (!update_front(draw, front))
> + return FALSE;
I know you just copied this from -ati/amdgpu, but: I don't think
can_exchange should call update_front, or the front buffer may be
updated even though the flip later fails.
> + /* Post damage on the front buffer so that listeners, such
> + * as DisplayLink know take a copy and shove it over the USB.
> + * also for sw cursors.
> + */
SW cursors cannot work correctly with page flipping. For that reason,
xf86-video-ati/amdgpu disable page flipping while there's an SW cursor.
--
Earthling Michel Dänzer | http://www.amd.com
Libre software enthusiast | Mesa and X developer
_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: https://lists.x.org/mailman/listinfo/xorg-devel