static void blitter_done_all(bool all)
{
blt_info.blit_main = 0;
- blt_info.blit_queued = blitter_cycle_exact ? BLITTER_MAX_PIPELINED_CYCLES : 0;
+ blt_info.blit_queued = blitter_cycle_exact && !immediate_blits ? BLITTER_MAX_PIPELINED_CYCLES : 0;
blt_info.finishcycle_dmacon = get_cycles();
blt_info.finishcycle_copper = get_cycles() + 1 * CYCLE_UNIT;
blitter_interrupt();
void generate_blitter(void)
{
- if (!blitter_cycle_exact) {
+ if (!blitter_cycle_exact || immediate_blits) {
return;
}
if (blitter_cycle_exact) {
if (immediate_blits) {
+ blitter_delayed_update = 0;
+ blt_info.blit_pending = 0;
+ blt_info.blit_queued = 0;
blt_info.blitzero = 1;
if (dmaen(DMA_BLITTER)) {
blitter_doit();
p->m68k_speed = 0;
#endif
-#if 0
- if (p->immediate_blits && p->blitter_cycle_exact) {
- error_log (_T("Cycle-exact and immediate blitter can't be enabled simultaneously.\n"));
- p->immediate_blits = false;
- }
-#endif
if (p->immediate_blits && p->waiting_blits) {
error_log (_T("Immediate blitter and waiting blits can't be enabled simultaneously.\n"));
p->waiting_blits = 0;
} else {
ew(hDlg, IDC_BLITWAIT, TRUE);
}
- ew(hDlg, IDC_BLITIMM, !workprefs.cpu_cycle_exact);
ew(hDlg, IDC_GENLOCKMODE, genlock ? TRUE : FALSE);
ew(hDlg, IDC_GENLOCKMIX, genlock ? TRUE : FALSE);