S3 ViRGE: Buffer flips no longer trigger recalctimings
This commit is contained in:
@@ -835,6 +835,7 @@ s3_virge_recalctimings(svga_t *svga)
|
|||||||
|
|
||||||
/* Also make sure vertical blanking starts on display end. */
|
/* Also make sure vertical blanking starts on display end. */
|
||||||
svga->vblankstart = svga->dispend;
|
svga->vblankstart = svga->dispend;
|
||||||
|
video_force_resize_set_monitor(1, svga->monitor_index);
|
||||||
} else {
|
} else {
|
||||||
svga->hblankstart = (((svga->crtc[0x5d] & 0x04) >> 2) << 8) + svga->crtc[2];
|
svga->hblankstart = (((svga->crtc[0x5d] & 0x04) >> 2) << 8) + svga->crtc[2];
|
||||||
|
|
||||||
@@ -959,6 +960,27 @@ s3_virge_recalctimings(svga_t *svga)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
s3_virge_update_buffer(virge_t *virge)
|
||||||
|
{
|
||||||
|
svga_t *svga = &virge->svga;
|
||||||
|
|
||||||
|
if ((svga->crtc[0x67] & 0xc) != 0xc)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (virge->streams.buffer_ctrl & 1)
|
||||||
|
svga->ma_latch = virge->streams.pri_fb1 >> 2;
|
||||||
|
else
|
||||||
|
svga->ma_latch = virge->streams.pri_fb0 >> 2;
|
||||||
|
|
||||||
|
if (virge->streams.buffer_ctrl & 2)
|
||||||
|
svga->overlay.addr = virge->streams.sec_fb1;
|
||||||
|
else
|
||||||
|
svga->overlay.addr = virge->streams.sec_fb0;
|
||||||
|
|
||||||
|
svga->rowoffset = virge->streams.pri_stride >> 3;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
s3_virge_updatemapping(virge_t *virge)
|
s3_virge_updatemapping(virge_t *virge)
|
||||||
{
|
{
|
||||||
@@ -1976,37 +1998,36 @@ s3_virge_mmio_write_l(uint32_t addr, uint32_t val, void *priv)
|
|||||||
break;
|
break;
|
||||||
case 0x81c0:
|
case 0x81c0:
|
||||||
virge->streams.pri_fb0 = val & 0x7fffff;
|
virge->streams.pri_fb0 = val & 0x7fffff;
|
||||||
svga_recalctimings(svga);
|
s3_virge_update_buffer(virge);
|
||||||
svga->fullchange = changeframecount;
|
svga->fullchange = changeframecount;
|
||||||
break;
|
break;
|
||||||
case 0x81c4:
|
case 0x81c4:
|
||||||
virge->streams.pri_fb1 = val & 0x7fffff;
|
virge->streams.pri_fb1 = val & 0x7fffff;
|
||||||
svga_recalctimings(svga);
|
s3_virge_update_buffer(virge);
|
||||||
svga->fullchange = changeframecount;
|
svga->fullchange = changeframecount;
|
||||||
break;
|
break;
|
||||||
case 0x81c8:
|
case 0x81c8:
|
||||||
virge->streams.pri_stride = val & 0xfff;
|
virge->streams.pri_stride = val & 0xfff;
|
||||||
svga_recalctimings(svga);
|
s3_virge_update_buffer(virge);
|
||||||
svga->fullchange = changeframecount;
|
svga->fullchange = changeframecount;
|
||||||
break;
|
break;
|
||||||
case 0x81cc:
|
case 0x81cc:
|
||||||
virge->streams.buffer_ctrl = val;
|
virge->streams.buffer_ctrl = val;
|
||||||
svga_recalctimings(svga);
|
s3_virge_update_buffer(virge);
|
||||||
svga->fullchange = changeframecount;
|
svga->fullchange = changeframecount;
|
||||||
break;
|
break;
|
||||||
case 0x81d0:
|
case 0x81d0:
|
||||||
virge->streams.sec_fb0 = val;
|
virge->streams.sec_fb0 = val;
|
||||||
svga_recalctimings(svga);
|
s3_virge_update_buffer(virge);
|
||||||
svga->fullchange = changeframecount;
|
svga->fullchange = changeframecount;
|
||||||
break;
|
break;
|
||||||
case 0x81d4:
|
case 0x81d4:
|
||||||
virge->streams.sec_fb1 = val;
|
virge->streams.sec_fb1 = val;
|
||||||
svga_recalctimings(svga);
|
s3_virge_update_buffer(virge);
|
||||||
svga->fullchange = changeframecount;
|
svga->fullchange = changeframecount;
|
||||||
break;
|
break;
|
||||||
case 0x81d8:
|
case 0x81d8:
|
||||||
virge->streams.sec_stride = val;
|
virge->streams.sec_stride = val;
|
||||||
svga_recalctimings(svga);
|
|
||||||
svga->fullchange = changeframecount;
|
svga->fullchange = changeframecount;
|
||||||
break;
|
break;
|
||||||
case 0x81dc:
|
case 0x81dc:
|
||||||
|
Reference in New Issue
Block a user