From bb5ee1adea838b99d60e18523c3632eb02fb04d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= Date: Tue, 29 May 2018 21:33:14 +0300 Subject: [PATCH] sna/video/sprite: Make NV12 take the GPU scaling fallback MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Even unscaled NV12 needs the plane scaler on SKL+, so when unscaled NV12 setplane fails we should still take the GPU scaling fallback path. Signed-off-by: Ville Syrjälä Reviewed-by: Chris Wilson Signed-off-by: Chris Wilson --- src/sna/sna_video_sprite.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/sna/sna_video_sprite.c b/src/sna/sna_video_sprite.c index f6d6f0b4..0f52f032 100644 --- a/src/sna/sna_video_sprite.c +++ b/src/sna/sna_video_sprite.c @@ -415,6 +415,15 @@ sna_video_sprite_show(struct sna *sna, return true; } +static bool need_scaling(const struct sna_video_frame *frame, + const BoxRec *dst) +{ + /* SKL+ need the plane scaler even for unscaled NV12 */ + return frame->id == FOURCC_NV12 || + frame->src.x2 - frame->src.x1 != dst->x2 - dst->x1 || + frame->src.y2 - frame->src.y1 != dst->y2 - dst->y1; +} + static int sna_video_sprite_put_image(ddPutImage_ARGS) { struct sna_video *video = port->devPriv.ptr; @@ -562,8 +571,7 @@ off: } if (!hw_scaling && sna->render.video && - !((frame.src.x2 - frame.src.x1) == (dst.x2 - dst.x1) && - (frame.src.y2 - frame.src.y1) == (dst.y2 - dst.y1))) { + need_scaling(&frame, &dst)) { ScreenPtr screen = to_screen_from_sna(sna); PixmapPtr scaled; RegionRec r;