From a893aba1caa387f5c0045664f43c762ec38755cb Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Fri, 23 Feb 2024 14:27:26 +0600 Subject: [PATCH] S3 ViRGE: Respect blend control compose modes on pre-GX2 ViRGE Fixes video overlay staying on-screen on Linux. --- src/video/vid_s3_virge.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/video/vid_s3_virge.c b/src/video/vid_s3_virge.c index be6382ec9..9277be24a 100644 --- a/src/video/vid_s3_virge.c +++ b/src/video/vid_s3_virge.c @@ -918,6 +918,10 @@ s3_virge_recalctimings(svga_t *svga) svga->overlay.v_acc = virge->streams.dda_vert_accumulator; svga->rowoffset = virge->streams.pri_stride >> 3; + if (virge->chip <= S3_VIRGEDX && svga->overlay.ena) { + svga->overlay.ena = (((virge->streams.blend_ctrl >> 24) & 7) == 0b000) || (((virge->streams.blend_ctrl >> 24) & 7) == 0b101); + } + switch ((virge->streams.pri_ctrl >> 24) & 0x7) { case 0: /*RGB-8 (CLUT)*/ svga->render = svga_render_8bpp_highres; @@ -1963,6 +1967,7 @@ s3_virge_mmio_write_l(uint32_t addr, uint32_t val, void *priv) break; case 0x81a0: virge->streams.blend_ctrl = val; + svga_recalctimings(svga); break; case 0x81c0: virge->streams.pri_fb0 = val & 0x7fffff;