lightrec: implement clock cache clear on cycle_multiplier change
[pcsx_rearmed.git] / libpcsxcore / lightrec / plugin.c
index 27fdc47..0b8e618 100644 (file)
@@ -1,4 +1,3 @@
-#include <lightrec.h>
 #include <errno.h>
 #include <stdbool.h>
 #include <stdio.h>
@@ -10,6 +9,8 @@
 #include <sys/mman.h>
 #endif
 
+#include "lightrec.h"
+#include "internals.h"
 #include "../cdrom.h"
 #include "../gpu.h"
 #include "../gte.h"
@@ -601,11 +602,19 @@ static void lightrec_plugin_notify(enum R3000Anote note, void *data)
 
 static void lightrec_plugin_apply_config()
 {
+       static u32 cycles_per_op_old;
        u32 cycle_mult = Config.cycle_multiplier_override && Config.cycle_multiplier == CYCLE_MULT_DEFAULT
                ? Config.cycle_multiplier_override : Config.cycle_multiplier;
-       assert(cycle_mult);
+       u32 cycles_per_op = cycle_mult * 1024 / 100;
+       assert(cycles_per_op);
 
-       lightrec_set_cycles_per_opcode(lightrec_state, cycle_mult * 1024 / 100);
+       if (cycles_per_op_old && cycles_per_op_old != cycles_per_op) {
+               SysPrintf("lightrec: reinit block cache for cycles_per_op %.2f\n",
+                       cycles_per_op / 1024.f);
+               lightrec_plugin_clear_block_caches(lightrec_state);
+       }
+       cycles_per_op_old = cycles_per_op;
+       lightrec_set_cycles_per_opcode(lightrec_state, cycles_per_op);
 }
 
 static void lightrec_plugin_shutdown(void)