[PATCH 1/2] xv: only use bicubic filtering when scaling >=2x
Ben Skeggs
skeggsb at beleth.localdomain
Mon May 4 00:04:34 PDT 2009
---
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--
More information about the Nouveau
mailing list