From b6a616194391be7b689ffc95ee8bd84153edeef1 Mon Sep 17 00:00:00 2001 From: AITUS95 <48457684+AITUS95@users.noreply.github.com> Date: Fri, 9 Jan 2026 12:58:22 +0100 Subject: [PATCH 1/4] Refactor dirty line calculation for rendering --- src/video/vid_voodoo_render.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/video/vid_voodoo_render.c b/src/video/vid_voodoo_render.c index 19dedfa7a..1c0edf775 100644 --- a/src/video/vid_voodoo_render.c +++ b/src/video/vid_voodoo_render.c @@ -1389,10 +1389,9 @@ skip_pixel: voodoo->texel_count[odd_even] += state->texel_count; voodoo->fbiPixelsIn += state->pixel_count; - if (voodoo->params.draw_offset == voodoo->params.front_offset) { - int dirty_idx = SLI_ENABLED ? (real_y >> 1) : real_y; - if (dirty_idx < 2048) - voodoo->dirty_line[dirty_idx] = 1; + if (voodoo->params.draw_offset == voodoo->params.front_offset && !SLI_ENABLED) { + if (real_y < 2048) + voodoo->dirty_line[real_y] = 1; } next_line: From 43c419ecdb94b37887dce7c7031e573a08304e6e Mon Sep 17 00:00:00 2001 From: AITUS95 <48457684+AITUS95@users.noreply.github.com> Date: Fri, 9 Jan 2026 13:00:11 +0100 Subject: [PATCH 2/4] Enhance VGA pass-through handling in vid_voodoo.c Added logic to handle VGA pass-through state changes and mark lines dirty for refresh. --- src/video/vid_voodoo.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/video/vid_voodoo.c b/src/video/vid_voodoo.c index 960b913a9..6920ece5c 100644 --- a/src/video/vid_voodoo.c +++ b/src/video/vid_voodoo.c @@ -516,6 +516,7 @@ voodoo_writel(uint32_t addr, uint32_t val, void *priv) break; case SST_fbiInit0: if (voodoo->initEnable & 0x01) { + int old_vga_pass = voodoo->fbiInit0 & FBIINIT0_VGA_PASS; voodoo->fbiInit0 = val; thread_wait_mutex(voodoo->force_blit_mutex); voodoo->can_blit = (voodoo->fbiInit0 & FBIINIT0_VGA_PASS) ? 1 : 0; @@ -523,6 +524,10 @@ voodoo_writel(uint32_t addr, uint32_t val, void *priv) voodoo->force_blit_count = 0; thread_release_mutex(voodoo->force_blit_mutex); + /* When VGA pass-through becomes active, mark all lines dirty to force full refresh */ + if (!old_vga_pass && (val & FBIINIT0_VGA_PASS)) + memset(voodoo->dirty_line, 1, sizeof(voodoo->dirty_line)); + if (voodoo->set->nr_cards == 2) svga_set_override(voodoo->svga, (voodoo->set->voodoos[0]->fbiInit0 | voodoo->set->voodoos[1]->fbiInit0) & 1); else From fe4bce275897a7950a11882feb66da2f31ca6fe1 Mon Sep 17 00:00:00 2001 From: AITUS95 <48457684+AITUS95@users.noreply.github.com> Date: Fri, 9 Jan 2026 13:02:43 +0100 Subject: [PATCH 3/4] Implement dirty line marking in vid_voodoo_blitter Added dirty line marking for single buffer mode. --- src/video/vid_voodoo_blitter.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/video/vid_voodoo_blitter.c b/src/video/vid_voodoo_blitter.c index d4b316dc5..619e18b74 100644 --- a/src/video/vid_voodoo_blitter.c +++ b/src/video/vid_voodoo_blitter.c @@ -506,6 +506,9 @@ voodoo_fastfill(voodoo_t *voodoo, voodoo_params_t *params) for (int x = params->clipLeft; x < params->clipRight; x++) cbuf[x] = col; } + /* Mark line dirty for single buffer mode */ + if (params->draw_offset == params->front_offset && y < 2048) + voodoo->dirty_line[y] = 1; } } } @@ -535,4 +538,5 @@ voodoo_fastfill(voodoo_t *voodoo, voodoo_params_t *params) } } } + } From ae857e6ef727d82e002bee6f561d0dcbffc3bba6 Mon Sep 17 00:00:00 2001 From: AITUS95 <48457684+AITUS95@users.noreply.github.com> Date: Fri, 9 Jan 2026 13:23:08 +0100 Subject: [PATCH 4/4] Remove unnecessary blank line --- src/video/vid_voodoo_blitter.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/video/vid_voodoo_blitter.c b/src/video/vid_voodoo_blitter.c index 619e18b74..87127a949 100644 --- a/src/video/vid_voodoo_blitter.c +++ b/src/video/vid_voodoo_blitter.c @@ -538,5 +538,4 @@ voodoo_fastfill(voodoo_t *voodoo, voodoo_params_t *params) } } } - }