Hi Daniel, Nice catch. I'll fix it. Regards, Qiang ________________________________________ From: Daniel Martin <consume.noise@xxxxxxxxx> Sent: Monday, August 22, 2016 2:30:04 PM To: Yu, Qiang Cc: xorg-devel; Michel Dänzer; emil.l.velikov at gmail.com; amd-gfx at lists.freedesktop.org Subject: Re: [PATCH v3 xserver 4/4] modesetting: add DRI2 page flip support Hi, On 22 August 2016 at 05:53, Qiang Yu <Qiang.Yu at amd.com> wrote: > Signed-off-by: Qiang Yu <Qiang.Yu at amd.com> > --- > hw/xfree86/drivers/modesetting/dri2.c | 237 ++++++++++++++++++++++- > hw/xfree86/drivers/modesetting/driver.h | 5 +- > hw/xfree86/drivers/modesetting/drmmode_display.h | 3 + > hw/xfree86/drivers/modesetting/pageflip.c | 7 +- > hw/xfree86/drivers/modesetting/present.c | 20 +- > 5 files changed, 257 insertions(+), 15 deletions(-) > > diff --git a/hw/xfree86/drivers/modesetting/dri2.c b/hw/xfree86/drivers/modesetting/dri2.c > index 83cb3e0..125c413 100644 > --- a/hw/xfree86/drivers/modesetting/dri2.c > +++ b/hw/xfree86/drivers/modesetting/dri2.c ... > +static void > +ms_dri2_exchange_buffers(DrawablePtr draw, DRI2BufferPtr front, > + DRI2BufferPtr back) > +{ > + ms_dri2_buffer_private_ptr front_priv = front->driverPrivate; > + ms_dri2_buffer_private_ptr back_priv = back->driverPrivate; > + ScreenPtr screen = draw->pScreen; > + ScrnInfoPtr scrn = xf86ScreenToScrn(screen); > + modesettingPtr ms = modesettingPTR(scrn); > + msPixmapPrivPtr front_pix = msGetPixmapPriv(&ms->drmmode, front_priv->pixmap); > + msPixmapPrivPtr back_pix = msGetPixmapPriv(&ms->drmmode, back_priv->pixmap); > + msPixmapPrivRec tmp_pix; > + RegionRec region; > + int tmp; > + > + /* Swap BO names so DRI works */ > + tmp = front->name; > + front->name = back->name; > + back->name = tmp; > + > + /* Swap pixmap privates */ > + tmp_pix = *front_pix; > + *front_pix = *back_pix; > + *back_pix = tmp_pix; > + > + glamor_egl_exchange_buffers(front_priv->pixmap, back_priv->pixmap); > + > + /* Post damage on the front buffer so that listeners, such > + * as DisplayLink know take a copy and shove it over the USB. > + */ > + region.extents.x1 = region.extents.y1 = 0; > + region.extents.x2 = front_priv->pixmap->drawable.width; > + region.extents.y2 = front_priv->pixmap->drawable.width; this looks like a copy'n'paste mistake. > + region.data = NULL; > + DamageRegionAppend(&front_priv->pixmap->drawable, ®ion); > + DamageRegionProcessPending(&front_priv->pixmap->drawable); > +} > + > static void > ms_dri2_frame_event_handler(uint64_t msc, > uint64_t usec, Cheers, Daniel Martin