From a893aba1caa387f5c0045664f43c762ec38755cb Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Fri, 23 Feb 2024 14:27:26 +0600 Subject: [PATCH 1/4] 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; From 45dff17d58c578791e0578486a5705cd3e2bed03 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Fri, 23 Feb 2024 16:25:50 +0600 Subject: [PATCH 2/4] S3 ViRGE/GX2: Fix screen overlay staying on Windows XP --- src/video/vid_s3_virge.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/video/vid_s3_virge.c b/src/video/vid_s3_virge.c index 9277be24a..398284d99 100644 --- a/src/video/vid_s3_virge.c +++ b/src/video/vid_s3_virge.c @@ -920,6 +920,10 @@ s3_virge_recalctimings(svga_t *svga) 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); + } else if (virge->chip == S3_VIRGEGX2 && svga->overlay.ena) { + /* 0x20 = Secondary Stream enabled */ + /* 0x2000 = Primary Stream enabled */ + svga->overlay.ena = !!(virge->streams.blend_ctrl & 0x20) && (svga->crtc[0x67] & 0xC); } switch ((virge->streams.pri_ctrl >> 24) & 0x7) { From 181ffbcffb5da1a80ebf4f83662028e39ba31145 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Fri, 23 Feb 2024 20:47:27 +0600 Subject: [PATCH 3/4] S3 ViRGE: a bit of cleanup --- src/video/vid_s3_virge.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/video/vid_s3_virge.c b/src/video/vid_s3_virge.c index 398284d99..52184d88b 100644 --- a/src/video/vid_s3_virge.c +++ b/src/video/vid_s3_virge.c @@ -893,6 +893,7 @@ s3_virge_recalctimings(svga_t *svga) } } svga->vram_display_mask = (!(svga->crtc[0x31] & 0x08) && (svga->crtc[0x32] & 0x40)) ? 0x3ffff : virge->vram_mask; + svga->overlay.ena = 0; s3_virge_log("VGA mode\n"); } else /*Streams mode*/ { @@ -923,7 +924,7 @@ s3_virge_recalctimings(svga_t *svga) } else if (virge->chip == S3_VIRGEGX2 && svga->overlay.ena) { /* 0x20 = Secondary Stream enabled */ /* 0x2000 = Primary Stream enabled */ - svga->overlay.ena = !!(virge->streams.blend_ctrl & 0x20) && (svga->crtc[0x67] & 0xC); + svga->overlay.ena = !!(virge->streams.blend_ctrl & 0x20); } switch ((virge->streams.pri_ctrl >> 24) & 0x7) { From c57dfed4e7595102a83a6cacab3868544610ccb6 Mon Sep 17 00:00:00 2001 From: cartifanwlr Date: Fri, 23 Feb 2024 18:41:41 +0300 Subject: [PATCH 4/4] Fix the internal name of the S3 Trio64V+ VLB --- src/video/vid_s3.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/video/vid_s3.c b/src/video/vid_s3.c index 46ed8eba0..c526ecf62 100644 --- a/src/video/vid_s3.c +++ b/src/video/vid_s3.c @@ -11084,8 +11084,7 @@ const device_t s3_phoenix_trio64_pci_device = { const device_t s3_stb_powergraph_64_video_vlb_device = { .name = "S3 Trio64V+ (STB PowerGraph 64 Video) VLB", - .name = "S3 Trio64V+ PCI (Phoenix)", - .internal_name = "px_trio64vplus_pci", + .internal_name = "stb_trio64vplus_vlb", .flags = DEVICE_VLB, .local = S3_STB_POWERGRAPH_64_VIDEO, .init = s3_init,