Add dirty updating for Voodoo Banshee/3 overlay.
This commit is contained in:
parent
a366d977aa
commit
86a5b13f46
1 changed files with 13 additions and 0 deletions
|
|
@ -1896,6 +1896,17 @@ static void banshee_overlay_draw(svga_t *svga, int displine)
|
||||||
unsigned int y_coeff = (voodoo->overlay.src_y & 0xfffff) >> 4;
|
unsigned int y_coeff = (voodoo->overlay.src_y & 0xfffff) >> 4;
|
||||||
int skip_filtering;
|
int skip_filtering;
|
||||||
|
|
||||||
|
if (svga->render == svga_render_null && !svga->changedvram[src_addr >> 12] && !svga->changedvram[src_addr2 >> 12] &&
|
||||||
|
!svga->fullchange && !voodoo->dirty_line[voodoo->overlay.src_y >> 20])
|
||||||
|
{
|
||||||
|
if (banshee->vidProcCfg & VIDPROCCFG_V_SCALE_ENABLE)
|
||||||
|
voodoo->overlay.src_y += voodoo->overlay.vidOverlayDvdy;
|
||||||
|
else
|
||||||
|
voodoo->overlay.src_y += (1 << 20);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
voodoo->dirty_line[voodoo->overlay.src_y >> 20] = 0;
|
||||||
// pclog("displine=%i addr=%08x %08x %08x %08x\n", displine, svga->overlay_latch.addr, src_addr, voodoo->overlay.vidOverlayDvdy, *(uint32_t *)src);
|
// pclog("displine=%i addr=%08x %08x %08x %08x\n", displine, svga->overlay_latch.addr, src_addr, voodoo->overlay.vidOverlayDvdy, *(uint32_t *)src);
|
||||||
// if (src_addr >= 0x800000)
|
// if (src_addr >= 0x800000)
|
||||||
// fatal("overlay out of range!\n");
|
// fatal("overlay out of range!\n");
|
||||||
|
|
@ -2169,9 +2180,11 @@ static void banshee_overlay_draw(svga_t *svga, int displine)
|
||||||
void banshee_set_overlay_addr(void *p, uint32_t addr)
|
void banshee_set_overlay_addr(void *p, uint32_t addr)
|
||||||
{
|
{
|
||||||
banshee_t *banshee = (banshee_t *)p;
|
banshee_t *banshee = (banshee_t *)p;
|
||||||
|
voodoo_t *voodoo = banshee->voodoo;
|
||||||
|
|
||||||
banshee->svga.overlay.addr = banshee->voodoo->leftOverlayBuf & 0xfffffff;
|
banshee->svga.overlay.addr = banshee->voodoo->leftOverlayBuf & 0xfffffff;
|
||||||
banshee->svga.overlay_latch.addr = banshee->voodoo->leftOverlayBuf & 0xfffffff;
|
banshee->svga.overlay_latch.addr = banshee->voodoo->leftOverlayBuf & 0xfffffff;
|
||||||
|
memset(voodoo->dirty_line, 1, 1024);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void banshee_vsync_callback(svga_t *svga)
|
static void banshee_vsync_callback(svga_t *svga)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue