rsx: Robustness fixes

- Track last working state and reset to it if RSX starts to desync
-- This is especially useful when running vulkan since the renderer will easily outpace the rest of the system when merely recording draw commands
- Ignore empty sets
-- Mark empty/invalid IB sets as having 0 element counts.
This commit is contained in:
kd-11 2018-01-01 11:43:06 +03:00
parent 198e9dce1d
commit ee009ec99c
6 changed files with 46 additions and 10 deletions

View file

@ -62,6 +62,7 @@ namespace rsx
void semaphore_acquire(thread* rsx, u32 _reg, u32 arg)
{
rsx->sync_point_request = true;
const u32 addr = get_address(method_registers.semaphore_offset_406e(), method_registers.semaphore_context_dma_406e());
if (vm::ps3::read32(addr) == arg) return;
@ -109,6 +110,7 @@ namespace rsx
void semaphore_release(thread* rsx, u32 _reg, u32 arg)
{
rsx->sync_point_request = true;
const u32 addr = get_address(method_registers.semaphore_offset_406e(), method_registers.semaphore_context_dma_406e());
if (addr >> 28 == 0x4)