]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
Allow immediate blitter in cycle exact modes
authorToni Wilen <twilen@winuae.net>
Sun, 26 Apr 2026 11:52:02 +0000 (14:52 +0300)
committerToni Wilen <twilen@winuae.net>
Sun, 26 Apr 2026 11:52:02 +0000 (14:52 +0300)
blitter.cpp
main.cpp
od-win32/win32gui.cpp

index dd8adee516ac67f1d97ef714df7ac05646c45355..9b5b40aa9240c47568c00f44e9cd2c873317ea7d 100644 (file)
@@ -454,7 +454,7 @@ static void blitter_end(void)
 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();
@@ -1716,7 +1716,7 @@ static bool is_done(void)
 
 void generate_blitter(void)
 {
-       if (!blitter_cycle_exact) {
+       if (!blitter_cycle_exact || immediate_blits) {
                return;
        }
 
@@ -2103,6 +2103,9 @@ void do_blitter(int copper, uaecptr pc)
 
        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();
index ad262a625268bb6ba52b1a2e23f6e2b9397b8829..fc73b2d94c01de1aff4b1d312785c41fd6eec9ec 100644 (file)
--- a/main.cpp
+++ b/main.cpp
@@ -364,12 +364,6 @@ void fixup_cpu (struct uae_prefs *p)
                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;
index 0ae7d15f29e10ba54eabf5c40017b89e3f50f24b..109575b00597012f0d00bcaa716f13136429958e 100644 (file)
@@ -8202,7 +8202,6 @@ static void enable_for_chipsetdlg (HWND hDlg)
        } 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);