diff options
author | Autechre | 2020-10-23 05:06:26 +0200 |
---|---|---|
committer | GitHub | 2020-10-23 05:06:26 +0200 |
commit | accedc82b01fe5834a805a9872405d51de1d5c06 (patch) | |
tree | 8e489b86af71d3b081c125d5eb234b0fd6b68f17 /plugins/gpulib/gpu.c | |
parent | e592293a48af1d63b6973135fcd2677e5e04e17e (diff) | |
parent | c765eb86debdc06fe304511bc2edbb6f3e3d7813 (diff) | |
download | pcsx_rearmed-accedc82b01fe5834a805a9872405d51de1d5c06.tar.gz pcsx_rearmed-accedc82b01fe5834a805a9872405d51de1d5c06.tar.bz2 pcsx_rearmed-accedc82b01fe5834a805a9872405d51de1d5c06.zip |
Merge pull request #462 from justinweiss/threaded-rendering
Add a threaded renderer
Diffstat (limited to 'plugins/gpulib/gpu.c')
-rw-r--r-- | plugins/gpulib/gpu.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/plugins/gpulib/gpu.c b/plugins/gpulib/gpu.c index 007da65..ed37b71 100644 --- a/plugins/gpulib/gpu.c +++ b/plugins/gpulib/gpu.c @@ -40,6 +40,8 @@ static void finish_vram_transfer(int is_read); static noinline void do_cmd_reset(void) { + renderer_sync(); + if (unlikely(gpu.cmd_len > 0)) do_cmd_buffer(gpu.cmd_buffer, gpu.cmd_len); gpu.cmd_len = 0; @@ -52,7 +54,6 @@ static noinline void do_cmd_reset(void) static noinline void do_reset(void) { unsigned int i; - do_cmd_reset(); memset(gpu.regs, 0, sizeof(gpu.regs)); @@ -370,6 +371,8 @@ static int do_vram_io(uint32_t *data, int count, int is_read) int l; count *= 2; // operate in 16bpp pixels + renderer_sync(); + if (gpu.dma.offset) { l = w - gpu.dma.offset; if (count < l) @@ -714,12 +717,15 @@ long GPUfreeze(uint32_t type, struct GPUFreeze *freeze) case 1: // save if (gpu.cmd_len > 0) flush_cmd_buffer(); + + renderer_sync(); memcpy(freeze->psxVRam, gpu.vram, 1024 * 512 * 2); memcpy(freeze->ulControl, gpu.regs, sizeof(gpu.regs)); memcpy(freeze->ulControl + 0xe0, gpu.ex_regs, sizeof(gpu.ex_regs)); freeze->ulStatus = gpu.status.reg; break; case 0: // load + renderer_sync(); memcpy(gpu.vram, freeze->psxVRam, 1024 * 512 * 2); memcpy(gpu.regs, freeze->ulControl, sizeof(gpu.regs)); memcpy(gpu.ex_regs, freeze->ulControl + 0xe0, sizeof(gpu.ex_regs)); @@ -752,6 +758,8 @@ void GPUupdateLace(void) return; } + renderer_notify_update_lace(0); + if (!gpu.state.fb_dirty) return; @@ -767,6 +775,7 @@ void GPUupdateLace(void) vout_update(); gpu.state.fb_dirty = 0; gpu.state.blanked = 0; + renderer_notify_update_lace(1); } void GPUvBlank(int is_vblank, int lcf) |