diff options
author | Maarten Maathuis <madman2003@gmail.com> | 2011-02-07 19:37:47 +0100 |
---|---|---|
committer | Ben Skeggs <bskeggs@redhat.com> | 2011-02-09 14:31:05 +1000 |
commit | 02c50db307a4e4eeb87f7db5d401bc53cce3b21f (patch) | |
tree | 350bf86a33b782495e5ea8cd6cefb903b36a0def | |
parent | e4fb9fd2f790ed66e4be61ca00d55522525619f4 (diff) | |
download | xorg-driver-xf86-video-nouveau-02c50db307a4e4eeb87f7db5d401bc53cce3b21f.tar.gz |
exa: Flush (S)IFC to the frontbuffer immediately.
This avoids high latency while typing with core fonts for example.
Signed-off-by: Maarten Maathuis <madman2003@gmail.com>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
-rw-r--r-- | src/nv04_exa.c | 4 | ||||
-rw-r--r-- | src/nv50_exa.c | 4 | ||||
-rw-r--r-- | 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; } |