diff --git a/src/sna/sna_video_sprite.c b/src/sna/sna_video_sprite.c index 69bfdfd2..44898a74 100644 --- a/src/sna/sna_video_sprite.c +++ b/src/sna/sna_video_sprite.c @@ -47,7 +47,9 @@ #define DRM_FORMAT_YUYV fourcc_code('Y', 'U', 'Y', 'V') /* [31:0] Cr0:Y1:Cb0:Y0 8:8:8:8 little endian */ #define DRM_FORMAT_UYVY fourcc_code('U', 'Y', 'V', 'Y') /* [31:0] Y1:Cr0:Y0:Cb0 8:8:8:8 little endian */ -#define has_hw_scaling(sna) ((sna)->kgem.gen < 071) +#define has_hw_scaling(sna, video) ((sna)->kgem.gen < 071 || \ + ((sna)->kgem.gen >= 0110 && (video)->AlwaysOnTop)) + #define LOCAL_IOCTL_MODE_SETPLANE DRM_IOWR(0xB7, struct local_mode_set_plane) struct local_mode_set_plane { @@ -153,7 +155,7 @@ static int sna_video_sprite_best_size(ddQueryBestSize_ARGS) struct sna_video *video = port->devPriv.ptr; struct sna *sna = video->sna; - if (!has_hw_scaling(sna) && !sna->render.video) { + if (!has_hw_scaling(sna, video) && !sna->render.video) { *p_w = vid_w; *p_h = vid_h; } else { @@ -524,7 +526,7 @@ off: cache_bo = true; } - if (!has_hw_scaling(sna) && sna->render.video && + if (!has_hw_scaling(sna, video) && sna->render.video && !((frame.src.x2 - frame.src.x1) == (dst.x2 - dst.x1) && (frame.src.y2 - frame.src.y1) == (dst.y2 - dst.y1))) { ScreenPtr screen = to_screen_from_sna(sna);