[PATCH xserver 3/6] modesetting: add DRI2 page flip support

Michel Dänzer michel at daenzer.net
Thu Aug 18 08:12:41 UTC 2016


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


More information about the xorg-devel mailing list