[Mesa-dev] [PATCH] st/xorg: flush after loading the cursor

Michel Dänzer michel at daenzer.net
Tue May 3 07:41:32 PDT 2011


On Die, 2011-05-03 at 11:45 +0200, Marcin Slusarz wrote: 
> On Tue, May 03, 2011 at 09:40:55AM +0200, Michel Dänzer wrote:
> > On Mon, 2011-05-02 at 21:26 +0200, Marcin Slusarz wrote: 
> > > On Mon, May 02, 2011 at 08:57:25AM +0200, Michel Dänzer wrote:
> > > > On Mon, 2011-05-02 at 00:01 +0200, Marcin Slusarz wrote: 
> > > > > We need cursor data to land in destination buffer before drmModeSetCursor.
> > > > > It fixes "cursor lag" at least on nv50.
> > > > > ---
> > > > >  src/gallium/state_trackers/xorg/xorg_crtc.c |    1 +
> > > > >  1 files changed, 1 insertions(+), 0 deletions(-)
> > > > > 
> > > > > diff --git a/src/gallium/state_trackers/xorg/xorg_crtc.c b/src/gallium/state_trackers/xorg/xorg_crtc.c
> > > > > index b8d9474..e8ca631 100644
> > > > > --- a/src/gallium/state_trackers/xorg/xorg_crtc.c
> > > > > +++ b/src/gallium/state_trackers/xorg/xorg_crtc.c
> > > > > @@ -247,6 +247,7 @@ crtc_load_cursor_argb_ga3d(xf86CrtcPtr crtc, CARD32 * image)
> > > > >  		   64, 64, (void*)image, 64 * 4, 0, 0);
> > > > >      ms->ctx->transfer_unmap(ms->ctx, transfer);
> > > > >      ms->ctx->transfer_destroy(ms->ctx, transfer);
> > > > > +    ms->ctx->flush(ms->ctx, NULL);
> > > > >  
> > > > >      if (crtc->cursor_shown)
> > > > >  	drmModeSetCursor(ms->fd, crtcp->drm_crtc->crtc_id,
> > > > 
> > > > To guarantee that the data lands before drmModeSetCursor, you'd have to
> > > > take a fence from the flush and finish that as well.
> > > > 
> > > 
> > > Thanks!
> > > 
> > > Updated patch below.
> > 
> > Actually, it looks like an incremental patch against the previous
> > version. A real updated patch would be better.
> 
> Yes. I forgot to join them. Sorry.
> 
> > 
> > > +    ctx->transfer_unmap(ctx, transfer);
> > > +    ctx->transfer_destroy(ctx, transfer);
> > > +    ctx->flush(ctx, &fence);
> > > +
> > > +    if (fence) {
> > > +	screen->fence_finish(screen, fence, PIPE_TIMEOUT_INFINITE);
> > > +	screen->fence_reference(screen, &fence, NULL);
> > > +    }
> > 
> > This looks good.
> 
> Thanks.
> 
> New patch below.

Pushed, thanks.


-- 
Earthling Michel Dänzer           |                http://www.vmware.com
Libre software enthusiast         |          Debian, X and DRI developer


More information about the mesa-dev mailing list