[PATCH xf86-video-ati 1/2] dri2: Update front buffer pixmap and name before exchanging buffers
Ville Syrjälä
syrjala at sci.fi
Thu May 5 07:30:23 PDT 2011
On Thu, May 05, 2011 at 12:28:20PM +0200, Michel Dänzer wrote:
> On Mit, 2011-05-04 at 23:51 +0300, Ville Syrjala wrote:
> > Buffer exchange assumes that the front buffer pixmap and name
> > information is accurate. That may not be the case eg. if the window
> > has been (un)redirected since the buffer was created.
> >
> > Signed-off-by: Ville Syrjala <syrjala at sci.fi>
> > ---
> > src/radeon_dri2.c | 45 ++++++++++++++++++++++++++++++++++++++++-----
> > 1 files changed, 40 insertions(+), 5 deletions(-)
> >
> > diff --git a/src/radeon_dri2.c b/src/radeon_dri2.c
> > index e618cc5..5d1a382 100644
> > --- a/src/radeon_dri2.c
> > +++ b/src/radeon_dri2.c
> > @@ -626,12 +626,42 @@ radeon_dri2_schedule_flip(ScrnInfoPtr scrn, ClientPtr client,
> > }
> >
> > static Bool
> > -can_exchange(ScrnInfoPtr pScrn,
> > +update_front(DrawablePtr draw, DRI2BufferPtr front)
> > +{
> > + int r;
> > + PixmapPtr pixmap;
> > + struct dri2_buffer_priv *priv = front->driverPrivate;
> > + struct radeon_exa_pixmap_priv *driver_priv;
> > +
> > + if (draw->type == DRAWABLE_PIXMAP)
> > + pixmap = (PixmapPtr)draw;
> > + else
> > + pixmap = (*draw->pScreen->GetWindowPixmap)((WindowPtr)draw);
> > +
> > + pixmap->refcnt++;
> > +
> > + exaMoveInPixmap(pixmap);
> > + driver_priv = exaGetPixmapDriverPrivate(pixmap);
> > + r = radeon_gem_get_kernel_name(driver_priv->bo, &front->name);
> > + if (r) {
> > + (*draw->pScreen->DestroyPixmap)(pixmap);
> > + return FALSE;
> > + }
> > + (*draw->pScreen->DestroyPixmap)(priv->pixmap);
> > + front->pitch = pixmap->devKind;
> > + front->cpp = pixmap->drawable.bitsPerPixel / 8;
> > + priv->pixmap = pixmap;
> > +
> > + return TRUE;
> > +}
>
> Maybe at least some of this could be short-circuited if it's still the
> same pixmap.
Yeah, I had the same thought. There's one catch though; Even if it's the
same pixmap, the bo may have been exchanged, and so the buffer name may
need to be updated anyway.
--
Ville Syrjälä
syrjala at sci.fi
http://www.sci.fi/~syrjala/
More information about the xorg-devel
mailing list