Maarten Maathuis
2011-Feb-07 18:37 UTC
[Nouveau] [PATCH] exa: Flush (S)IFC to the frontbuffer immediately.
- NV50+: This avoids high latency while typing with core fonts for example. Signed-off-by: Maarten Maathuis <madman2003 at gmail.com> --- src/nv04_exa.c | 4 ++++ src/nv50_exa.c | 4 ++++ src/nvc0_exa.c | 4 ++++ 3 files changed, 12 insertions(+), 0 deletions(-) diff --git a/src/nv04_exa.c b/src/nv04_exa.c index 267c7b5..2603bd4 100644 --- a/src/nv04_exa.c +++ b/src/nv04_exa.c @@ -340,6 +340,7 @@ NV04EXAUploadIFC(ScrnInfoPtr pScrn, const char *src, int src_pitch, PixmapPtr pDst, int x, int y, int w, int h, int cpp) { NVPtr pNv = NVPTR(pScrn); + ScreenPtr pScreen = pDst->drawable.pScreen; struct nouveau_channel *chan = pNv->chan; struct nouveau_grobj *clip = pNv->NvClipRectangle; struct nouveau_grobj *ifc = pNv->NvImageFromCpu; @@ -413,6 +414,9 @@ NV04EXAUploadIFC(ScrnInfoPtr pScrn, const char *src, int src_pitch, } chan->flush_notify = NULL; + + if (pDst == pScreen->GetScreenPixmap(pScreen)) + FIRE_RING(chan); return TRUE; } diff --git a/src/nv50_exa.c b/src/nv50_exa.c index e8ff5aa..85baa68 100644 --- a/src/nv50_exa.c +++ b/src/nv50_exa.c @@ -372,6 +372,7 @@ NV50EXAUploadSIFC(const char *src, int src_pitch, PixmapPtr pdpix, int x, int y, int w, int h, int cpp) { NV50EXA_LOCALS(pdpix); + ScreenPtr pScreen = pdpix->drawable.pScreen; int line_dwords = (w * cpp + 3) / 4; uint32_t sifc_fmt; @@ -428,6 +429,9 @@ NV50EXAUploadSIFC(const char *src, int src_pitch, } chan->flush_notify = NULL; + + if (pdpix == pScreen->GetScreenPixmap(pScreen)) + FIRE_RING(chan); return TRUE; } diff --git a/src/nvc0_exa.c b/src/nvc0_exa.c index 45647ce..85cb5d2 100644 --- a/src/nvc0_exa.c +++ b/src/nvc0_exa.c @@ -550,6 +550,7 @@ NVC0EXAUploadSIFC(const char *src, int src_pitch, PixmapPtr pdpix, int x, int y, int w, int h, int cpp) { NVC0EXA_LOCALS(pdpix); + ScreenPtr pScreen = pdpix->drawable.pScreen; int line_dwords = (w * cpp + 3) / 4; uint32_t sifc_fmt; @@ -608,6 +609,9 @@ NVC0EXAUploadSIFC(const char *src, int src_pitch, } chan->flush_notify = NULL; + + if (pdpix == pScreen->GetScreenPixmap(pScreen)) + FIRE_RING(chan); return TRUE; } -- 1.7.4.rc3
Maarten Maathuis
2011-Feb-07 18:38 UTC
[Nouveau] [PATCH] exa: Flush (S)IFC to the frontbuffer immediately.
The reason for NV50+ is obvious, but i'm not sure NV04-NV4X should be included for consistency or not. On Mon, Feb 7, 2011 at 7:37 PM, Maarten Maathuis <madman2003 at gmail.com> wrote:> - NV50+: This avoids high latency while typing with core fonts for example. > > Signed-off-by: Maarten Maathuis <madman2003 at gmail.com> > --- > ?src/nv04_exa.c | ? ?4 ++++ > ?src/nv50_exa.c | ? ?4 ++++ > ?src/nvc0_exa.c | ? ?4 ++++ > ?3 files changed, 12 insertions(+), 0 deletions(-) > > diff --git a/src/nv04_exa.c b/src/nv04_exa.c > index 267c7b5..2603bd4 100644 > --- a/src/nv04_exa.c > +++ b/src/nv04_exa.c > @@ -340,6 +340,7 @@ NV04EXAUploadIFC(ScrnInfoPtr pScrn, const char *src, int src_pitch, > ? ? ? ? ? ? ? ? PixmapPtr pDst, int x, int y, int w, int h, int cpp) > ?{ > ? ? ? ?NVPtr pNv = NVPTR(pScrn); > + ? ? ? ScreenPtr pScreen = pDst->drawable.pScreen; > ? ? ? ?struct nouveau_channel *chan = pNv->chan; > ? ? ? ?struct nouveau_grobj *clip = pNv->NvClipRectangle; > ? ? ? ?struct nouveau_grobj *ifc = pNv->NvImageFromCpu; > @@ -413,6 +414,9 @@ NV04EXAUploadIFC(ScrnInfoPtr pScrn, const char *src, int src_pitch, > ? ? ? ?} > > ? ? ? ?chan->flush_notify = NULL; > + > + ? ? ? if (pDst == pScreen->GetScreenPixmap(pScreen)) > + ? ? ? ? ? ? ? FIRE_RING(chan); > ? ? ? ?return TRUE; > ?} > > diff --git a/src/nv50_exa.c b/src/nv50_exa.c > index e8ff5aa..85baa68 100644 > --- a/src/nv50_exa.c > +++ b/src/nv50_exa.c > @@ -372,6 +372,7 @@ NV50EXAUploadSIFC(const char *src, int src_pitch, > ? ? ? ? ? ? ? ? ?PixmapPtr pdpix, int x, int y, int w, int h, int cpp) > ?{ > ? ? ? ?NV50EXA_LOCALS(pdpix); > + ? ? ? ScreenPtr pScreen = pdpix->drawable.pScreen; > ? ? ? ?int line_dwords = (w * cpp + 3) / 4; > ? ? ? ?uint32_t sifc_fmt; > > @@ -428,6 +429,9 @@ NV50EXAUploadSIFC(const char *src, int src_pitch, > ? ? ? ?} > > ? ? ? ?chan->flush_notify = NULL; > + > + ? ? ? if (pdpix == pScreen->GetScreenPixmap(pScreen)) > + ? ? ? ? ? ? ? FIRE_RING(chan); > ? ? ? ?return TRUE; > ?} > > diff --git a/src/nvc0_exa.c b/src/nvc0_exa.c > index 45647ce..85cb5d2 100644 > --- a/src/nvc0_exa.c > +++ b/src/nvc0_exa.c > @@ -550,6 +550,7 @@ NVC0EXAUploadSIFC(const char *src, int src_pitch, > ? ? ? ? ? ? ? ? ?PixmapPtr pdpix, int x, int y, int w, int h, int cpp) > ?{ > ? ? ? ?NVC0EXA_LOCALS(pdpix); > + ? ? ? ScreenPtr pScreen = pdpix->drawable.pScreen; > ? ? ? ?int line_dwords = (w * cpp + 3) / 4; > ? ? ? ?uint32_t sifc_fmt; > > @@ -608,6 +609,9 @@ NVC0EXAUploadSIFC(const char *src, int src_pitch, > ? ? ? ?} > > ? ? ? ?chan->flush_notify = NULL; > + > + ? ? ? if (pdpix == pScreen->GetScreenPixmap(pScreen)) > + ? ? ? ? ? ? ? FIRE_RING(chan); > ? ? ? ?return TRUE; > ?} > > -- > 1.7.4.rc3 > >-- Far away from the primal instinct, the song seems to fade away, the river get wider between your thoughts and the things we do and say.