X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=pcsx_rearmed.git;a=blobdiff_plain;f=plugins%2Fgpulib%2Fgpu.c;h=70847abea074a82d1145c5e2434cf482d3c07ab6;hp=aefd53b60acbbcc10fe16596ce96370172c7d7be;hb=aafcb4ddc257478d613611adcae7cb13fd716577;hpb=1e07f71d8e8645f9060fcb2ed13f4cb4e0267982 diff --git a/plugins/gpulib/gpu.c b/plugins/gpulib/gpu.c index aefd53b6..70847abe 100644 --- a/plugins/gpulib/gpu.c +++ b/plugins/gpulib/gpu.c @@ -333,6 +333,7 @@ static noinline int do_cmd_list_skip(uint32_t *data, int count, int *last_cmd) int cmd = 0, pos = 0, len, dummy; int skip = 1; + // XXX: polylines are not properly handled while (pos < count && skip) { uint32_t *list = data + pos; cmd = list[0] >> 24; @@ -581,6 +582,7 @@ long GPUfreeze(uint32_t type, struct GPUFreeze *freeze) memcpy(gpu.regs, freeze->ulControl, sizeof(gpu.regs)); memcpy(gpu.ex_regs, freeze->ulControl + 0xe0, sizeof(gpu.ex_regs)); gpu.status.reg = freeze->ulStatus; + gpu.cmd_len = 0; for (i = 8; i > 0; i--) { gpu.regs[i] ^= 1; // avoid reg change detection GPUwriteStatus((i << 24) | (gpu.regs[i] ^ 1)); @@ -599,7 +601,16 @@ void GPUupdateLace(void) flush_cmd_buffer(); renderer_flush_queues(); - if (gpu.status.blanking || !gpu.state.fb_dirty) + if (gpu.status.blanking) { + if (!gpu.state.blanked) { + vout_blank(); + gpu.state.blanked = 1; + gpu.state.fb_dirty = 1; + } + return; + } + + if (!gpu.state.fb_dirty) return; if (gpu.frameskip.set) { @@ -613,6 +624,7 @@ void GPUupdateLace(void) vout_update(); gpu.state.fb_dirty = 0; + gpu.state.blanked = 0; } void GPUvBlank(int is_vblank, int lcf)