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
_______________________________________________
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: https://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to