frontend: force full recompile on drc setting change
authornotaz <notasas@gmail.com>
Fri, 19 Nov 2021 21:36:28 +0000 (23:36 +0200)
committernotaz <notasas@gmail.com>
Fri, 19 Nov 2021 21:49:50 +0000 (23:49 +0200)
Libretro port should do the same, but here it outdated and nobody cared
updating it here.

frontend/main.c
frontend/menu.c
frontend/menu.h
libpcsxcore/new_dynarec/emu_if.c

index 4631618..3ec252f 100644 (file)
@@ -634,7 +634,7 @@ int main(int argc, char *argv[])
        }
 
        if (ready_to_go) {
-               menu_prepare_emu();
+               menu_prepare_emu(0);
 
                // If a state has been specified, then load that
                if (loadst) {
index 0dbaa40..f3049d9 100644 (file)
@@ -1556,6 +1556,7 @@ static const char h_cfg_psxclk[]  = "Over/under-clock the PSX, default is " DEFA
 static const char h_cfg_nosmc[]   = "Will cause crashes when loading, break memcards";
 static const char h_cfg_gteunn[]  = "May cause graphical glitches";
 static const char h_cfg_gteflgs[] = "Will cause graphical glitches";
+static const char h_cfg_gtestll[] = "Some games will run too fast";
 
 static menu_entry e_menu_speed_hacks[] =
 {
@@ -2329,8 +2330,11 @@ static void menu_leave_emu(void);
 
 void menu_loop(void)
 {
+       int cycle_multiplier_old = cycle_multiplier;
+       int ndrc_hacks_old = new_dynarec_hacks;
        static int warned_about_bios = 0;
        static int sel = 0;
+       int ndrc_changed;
 
        menu_leave_emu();
 
@@ -2365,7 +2369,9 @@ void menu_loop(void)
 
        in_set_config_int(0, IN_CFG_BLOCKING, 0);
 
-       menu_prepare_emu();
+       ndrc_changed = cycle_multiplier_old != cycle_multiplier
+               || ndrc_hacks_old != new_dynarec_hacks;
+       menu_prepare_emu(ndrc_changed);
 }
 
 static int qsort_strcmp(const void *p1, const void *p2)
@@ -2617,7 +2623,7 @@ static void menu_leave_emu(void)
                cpu_clock = plat_target_cpu_clock_get();
 }
 
-void menu_prepare_emu(void)
+void menu_prepare_emu(int ndrc_config_changed)
 {
        R3000Acpu *prev_cpu = psxCpu;
 
@@ -2634,6 +2640,8 @@ void menu_prepare_emu(void)
                // note that this does not really reset, just clears drc caches
                psxCpu->Reset();
        }
+       else if (ndrc_config_changed)
+               new_dynarec_clear_full();
 
        // core doesn't care about Config.Cdda changes,
        // so handle them manually here
index 81cd1ba..9defc1e 100644 (file)
@@ -1,5 +1,5 @@
 void menu_init(void);
-void menu_prepare_emu(void);
+void menu_prepare_emu(int ndrc_config_changed);
 void menu_loop(void);
 void menu_finish(void);
 
index 60f005f..f660e7f 100644 (file)
@@ -184,7 +184,8 @@ void new_dyna_freeze(void *f, int mode)
                if (bytes != size)
                        return;
 
-               new_dynarec_load_blocks(addrs, size);
+               if (psxCpu != &psxInt)
+                       new_dynarec_load_blocks(addrs, size);
        }
 
        //printf("drc: %d block info entries %s\n", size/8, mode ? "saved" : "loaded");