From 85089127cf678163b2405abbdec41f7a44d470f2 Mon Sep 17 00:00:00 2001 From: TC1995 Date: Wed, 18 Nov 2020 13:33:10 +0100 Subject: [PATCH 1/2] Fixed busy status on the S3 family of chips using the fifo. --- src/video/vid_s3.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/video/vid_s3.c b/src/video/vid_s3.c index 85aaf22d9..704d193ae 100644 --- a/src/video/vid_s3.c +++ b/src/video/vid_s3.c @@ -2664,7 +2664,7 @@ s3_accel_in(uint16_t port, void *p) wake_fifo_thread(s3); temp = 0; if ((s3->chip >= S3_86C928) && s3_enable_fifo(s3)) { - if (!FIFO_EMPTY || s3->busy || s3->force_busy) + if (!FIFO_EMPTY || s3->force_busy) temp |= 0x02; /*Hardware busy*/ else temp |= 0x04; /*FIFO empty*/ From 9a2517c4153b7a1214899605225660a175af9470 Mon Sep 17 00:00:00 2001 From: TC1995 Date: Wed, 18 Nov 2020 21:59:19 +0100 Subject: [PATCH 2/2] Ported the latest fixes from PCem about the Voodoo Banshee and 1/2. --- src/video/vid_voodoo.c | 2 ++ src/video/vid_voodoo_banshee.c | 6 ++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/video/vid_voodoo.c b/src/video/vid_voodoo.c index 74dd5723b..d9929324a 100644 --- a/src/video/vid_voodoo.c +++ b/src/video/vid_voodoo.c @@ -139,7 +139,9 @@ void voodoo_recalc(voodoo_t *voodoo) if (voodoo->fbiInit1 & (1 << 24)) voodoo->block_width += 32; voodoo->row_width = voodoo->block_width * 32 * 2; + voodoo->params.row_width = voodoo->row_width; voodoo->aux_row_width = voodoo->row_width; + voodoo->params.aux_row_width = voodoo->aux_row_width; } diff --git a/src/video/vid_voodoo_banshee.c b/src/video/vid_voodoo_banshee.c index 1a94aaf2d..dcfdf8841 100644 --- a/src/video/vid_voodoo_banshee.c +++ b/src/video/vid_voodoo_banshee.c @@ -1673,10 +1673,11 @@ void banshee_hwcursor_draw(svga_t *svga, int displine) { \ int c; \ int wp = 0; \ + uint32_t base_addr = buf ? src_addr2 : src_addr; \ \ for (c = 0; c < voodoo->overlay.overlay_bytes; c += 2) \ { \ - uint16_t data = *(uint16_t *)&src[(c & 127) + (c >> 7)*128*32]; \ + uint16_t data = *(uint16_t *)&svga->vram[(base_addr + (c & 127) + (c >> 7)*128*32) & svga->vram_mask]; \ int r = data & 0x1f; \ int g = (data >> 5) & 0x3f; \ int b = data >> 11; \ @@ -1972,7 +1973,8 @@ static void banshee_overlay_draw(svga_t *svga, int displine) !(banshee->vidProcCfg & VIDPROCCFG_H_SCALE_ENABLE) && !(banshee->vidProcCfg & VIDPROCCFG_FILTER_MODE_DITHER_4X4) && !(banshee->vidProcCfg & VIDPROCCFG_FILTER_MODE_DITHER_2X2)); else - skip_filtering = ((banshee->vidProcCfg & VIDPROCCFG_FILTER_MODE_MASK) != VIDPROCCFG_FILTER_MODE_BILINEAR); + skip_filtering = ((banshee->vidProcCfg & VIDPROCCFG_FILTER_MODE_MASK) != VIDPROCCFG_FILTER_MODE_BILINEAR && + !(banshee->vidProcCfg & VIDPROCCFG_H_SCALE_ENABLE)); if (skip_filtering) {