From 05f461c3c5c61853f43d837fa36513d878165595 Mon Sep 17 00:00:00 2001 From: Flyinghead Date: Sun, 19 May 2019 19:45:05 +0200 Subject: [PATCH] Use FB_R_SOF2 only to detect direct FB writes Fixes flashing video in Virtua Fighter 3tb --- core/hw/pvr/Renderer_if.cpp | 12 ++++-------- core/hw/pvr/Renderer_if.h | 6 ++---- core/hw/pvr/pvr_mem.cpp | 8 ++------ 3 files changed, 8 insertions(+), 18 deletions(-) diff --git a/core/hw/pvr/Renderer_if.cpp b/core/hw/pvr/Renderer_if.cpp index 71c954e34..199d8ae5c 100644 --- a/core/hw/pvr/Renderer_if.cpp +++ b/core/hw/pvr/Renderer_if.cpp @@ -88,10 +88,8 @@ cResetEvent rs, re; int max_idx,max_mvo,max_op,max_pt,max_tr,max_vtx,max_modt, ovrn; static bool render_called = false; -u32 fb1_watch_addr_start; -u32 fb1_watch_addr_end; -u32 fb2_watch_addr_start; -u32 fb2_watch_addr_end; +u32 fb_watch_addr_start; +u32 fb_watch_addr_end; bool fb_dirty; TA_context* _pvrrc; @@ -558,10 +556,8 @@ void rend_vblank() void check_framebuffer_write() { u32 fb_size = (FB_R_SIZE.fb_y_size + 1) * (FB_R_SIZE.fb_x_size + FB_R_SIZE.fb_modulus) * 4; - fb1_watch_addr_start = FB_R_SOF1 & VRAM_MASK; - fb1_watch_addr_end = fb1_watch_addr_start + fb_size; - fb2_watch_addr_start = FB_R_SOF2 & VRAM_MASK; - fb2_watch_addr_end = fb2_watch_addr_start + fb_size; + fb_watch_addr_start = FB_R_SOF2 & VRAM_MASK; + fb_watch_addr_end = fb_watch_addr_start + fb_size; } void rend_cancel_emu_wait() diff --git a/core/hw/pvr/Renderer_if.h b/core/hw/pvr/Renderer_if.h index 8bd991835..af7f63019 100644 --- a/core/hw/pvr/Renderer_if.h +++ b/core/hw/pvr/Renderer_if.h @@ -61,10 +61,8 @@ Renderer* rend_GL4(); Renderer* rend_norend(); Renderer* rend_softrend(); -extern u32 fb1_watch_addr_start; -extern u32 fb1_watch_addr_end; -extern u32 fb2_watch_addr_start; -extern u32 fb2_watch_addr_end; +extern u32 fb_watch_addr_start; +extern u32 fb_watch_addr_end; extern bool fb_dirty; void check_framebuffer_write(); diff --git a/core/hw/pvr/pvr_mem.cpp b/core/hw/pvr/pvr_mem.cpp index c9af98a90..9378590a9 100644 --- a/core/hw/pvr/pvr_mem.cpp +++ b/core/hw/pvr/pvr_mem.cpp @@ -233,9 +233,7 @@ void DYNACALL pvr_write_area1_8(u32 addr,u8 data) void DYNACALL pvr_write_area1_16(u32 addr,u16 data) { u32 vaddr = addr & VRAM_MASK; - if (!fb_dirty - && ((vaddr >= fb1_watch_addr_start && vaddr < fb1_watch_addr_end) - || (vaddr >= fb2_watch_addr_start && vaddr < fb2_watch_addr_end))) + if (!fb_dirty && vaddr >= fb_watch_addr_start && vaddr < fb_watch_addr_end) { fb_dirty = true; } @@ -244,9 +242,7 @@ void DYNACALL pvr_write_area1_16(u32 addr,u16 data) void DYNACALL pvr_write_area1_32(u32 addr,u32 data) { u32 vaddr = addr & VRAM_MASK; - if (!fb_dirty - && ((vaddr >= fb1_watch_addr_start && vaddr < fb1_watch_addr_end) - || (vaddr >= fb2_watch_addr_start && vaddr < fb2_watch_addr_end))) + if (!fb_dirty && vaddr >= fb_watch_addr_start && vaddr < fb_watch_addr_end) { fb_dirty = true; }