[Nouveau] [PATCH] exa: Flush (S)IFC to the frontbuffer immediately.

Maarten Maathuis madman2003 at gmail.com
Mon Feb 7 10:38:53 PST 2011


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.


More information about the Nouveau mailing list