Ben Skeggs
2009-May-04 07:04 UTC
[PATCH 1/2] xv: only use bicubic filtering when scaling >=2x
--- src/nv30_xv_tex.c | 7 +++++-- src/nv40_xv_tex.c | 8 ++++++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/nv30_xv_tex.c b/src/nv30_xv_tex.c index 617e63b..f4bc1da 100644 --- a/src/nv30_xv_tex.c +++ b/src/nv30_xv_tex.c @@ -258,7 +258,7 @@ NV30PutTextureImage(ScrnInfoPtr pScrn, struct nouveau_bo *src, int src_offset, struct nouveau_channel *chan = pNv->chan; struct nouveau_grobj *rankine = pNv->Nv3D; struct nouveau_bo *bo = nouveau_pixmap_bo(ppix); - Bool redirected = FALSE; + Bool redirected = FALSE, bicubic = pPriv->bicubic; float X1, X2, Y1, Y2; BoxPtr pbox; int nbox; @@ -342,7 +342,10 @@ NV30PutTextureImage(ScrnInfoPtr pScrn, struct nouveau_bo *src, int src_offset, BEGIN_RING(chan, rankine, NV34TCL_TX_ENABLE(3), 1); OUT_RING (chan, 0x0); - if (!NV30_LoadFragProg(pScrn, pPriv->bicubic ? + if (drw_w / 2 < src_w || drw_h / 2 < src_h) + bicubic = FALSE; + + if (!NV30_LoadFragProg(pScrn, bicubic ? &nv30_fp_yv12_bicubic : &nv30_fp_yv12_bilinear)) { MARK_UNDO(chan); diff --git a/src/nv40_xv_tex.c b/src/nv40_xv_tex.c index 3a5d439..a46f1e3 100644 --- a/src/nv40_xv_tex.c +++ b/src/nv40_xv_tex.c @@ -262,7 +262,7 @@ NV40PutTextureImage(ScrnInfoPtr pScrn, struct nouveau_channel *chan = pNv->chan; struct nouveau_grobj *curie = pNv->Nv3D; struct nouveau_bo *bo = nouveau_pixmap_bo(ppix); - Bool redirected = FALSE; + Bool redirected = FALSE, bicubic = pPriv->bicubic; float X1, X2, Y1, Y2; BoxPtr pbox; int nbox; @@ -322,7 +322,11 @@ NV40PutTextureImage(ScrnInfoPtr pScrn, } NV40_LoadVtxProg(pScrn, &nv40_vp_video); - if (!NV40_LoadFragProg(pScrn, pPriv->bicubic ? + + if (drw_w / 2 < src_w || drw_h / 2 < src_h) + bicubic = FALSE; + + if (!NV40_LoadFragProg(pScrn, bicubic ? &nv40_fp_yv12_bicubic : &nv30_fp_yv12_bilinear)) { MARK_UNDO(chan); -- 1.7.0.1 --=-qqXAqmwS2+3WML2GfFEt--