Fixed Voodoo3 issue found with Diablo II game (#349).

If front and back buffer addresses are identical, 'video_changed' flag must be set.
This commit is contained in:
Volker Ruppert 2024-09-11 16:29:40 +02:00
parent f5e3dd9dce
commit bfebb17b9d

View File

@ -2471,7 +2471,6 @@ Bit32u lfb_w(Bit32u offset, Bit32u data, Bit32u mem_mask)
{ {
Bit16u *dest, *depth; Bit16u *dest, *depth;
Bit32u destmax, depthmax; Bit32u destmax, depthmax;
Bit32u forcefront=0;
int sr[2], sg[2], sb[2], sa[2], sw[2]; int sr[2], sg[2], sb[2], sa[2], sw[2];
int x, y, scry, mask; int x, y, scry, mask;
@ -2679,7 +2678,7 @@ Bit32u lfb_w(Bit32u offset, Bit32u data, Bit32u mem_mask)
mask &= ~(0xf0 + LFB_DEPTH_PRESENT_MSW); mask &= ~(0xf0 + LFB_DEPTH_PRESENT_MSW);
/* select the target buffer */ /* select the target buffer */
destbuf = (v->type >= VOODOO_BANSHEE) ? (!forcefront) : LFBMODE_WRITE_BUFFER_SELECT(v->reg[lfbMode].u); destbuf = (v->type >= VOODOO_BANSHEE) ? 1 : LFBMODE_WRITE_BUFFER_SELECT(v->reg[lfbMode].u);
switch (destbuf) switch (destbuf)
{ {
case 0: /* front buffer */ case 0: /* front buffer */
@ -2691,6 +2690,8 @@ Bit32u lfb_w(Bit32u offset, Bit32u data, Bit32u mem_mask)
case 1: /* back buffer */ case 1: /* back buffer */
dest = (Bit16u *)(v->fbi.ram + v->fbi.rgboffs[v->fbi.backbuf]); dest = (Bit16u *)(v->fbi.ram + v->fbi.rgboffs[v->fbi.backbuf]);
destmax = (v->fbi.mask + 1 - v->fbi.rgboffs[v->fbi.backbuf]) / 2; destmax = (v->fbi.mask + 1 - v->fbi.rgboffs[v->fbi.backbuf]) / 2;
if (v->fbi.rgboffs[v->fbi.frontbuf] == v->fbi.rgboffs[v->fbi.backbuf])
v->fbi.video_changed = 1;
break; break;
default: /* reserved */ default: /* reserved */