start_vram_transfer(data[pos + 1], data[pos + 2], cmd == 0xc0);
pos += len;
}
-
- if (cmd == -1)
+ else if (cmd == -1)
break;
}
+ if (gpu.frameskip.active)
+ renderer_sync_ecmds(gpu.ex_regs);
gpu.state.fb_dirty |= vram_dirty;
return count - pos;
gpu.regs[i] ^= 1; // avoid reg change detection
GPUwriteStatus((i << 24) | (gpu.regs[i] ^ 1));
}
+ renderer_sync_ecmds(gpu.ex_regs);
break;
}
void do_cmd_list(uint32_t *list, int count);
int renderer_init(void);
+void renderer_sync_ecmds(uint32_t * ecmds);
void renderer_invalidate_caches(int x, int y, int w, int h);
void renderer_flush_queues(void);
}
}
+void renderer_sync_ecmds(uint32_t *ecmds)
+{
+ cmdTexturePage((unsigned char *)&ecmds[1]);
+ cmdTextureWindow((unsigned char *)&ecmds[2]);
+ cmdDrawAreaStart((unsigned char *)&ecmds[3]);
+ cmdDrawAreaEnd((unsigned char *)&ecmds[4]);
+ cmdDrawOffset((unsigned char *)&ecmds[5]);
+ cmdSTP((unsigned char *)&ecmds[6]);
+}
+
void renderer_invalidate_caches(int x, int y, int w, int h)
{
}
return;
if (gpu.frameskip.enabled) {
- if (!gpu.frameskip.frame_ready && gpu.frameskip.skipped_blits < 6) {
+ if (!gpu.frameskip.frame_ready && gpu.frameskip.skipped_blits < 9) {
gpu.frameskip.skipped_blits++;
return;
}