gpu_neon: make use of unai's lineskip mode
[pcsx_rearmed.git] / frontend / menu.c
index e720de6..d3e16a4 100644 (file)
@@ -13,6 +13,9 @@
 #include <errno.h>
 #include <dlfcn.h>
 #include <zlib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
 
 #include "main.h"
 #include "menu.h"
@@ -34,6 +37,8 @@
 #include "../plugins/dfinput/main.h"
 #include "revision.h"
 
+#define REARMED_BIRTHDAY_TIME 1293306830       /* 25 Dec 2010 */
+
 #define array_size(x) (sizeof(x) / sizeof(x[0]))
 
 typedef enum
@@ -124,10 +129,30 @@ void emu_make_path(char *buff, const char *end, int size)
                printf("Warning: path truncated: %s\n", buff);
 }
 
-static int emu_check_save_file(int slot)
+static int emu_check_save_file(int slot, int *time)
 {
-       int ret = emu_check_state(slot);
-       return ret == 0 ? 1 : 0;
+       char fname[MAXPATHLEN];
+       struct stat status;
+       int ret;
+       
+       ret = emu_check_state(slot);
+       if (ret != 0 || time == NULL)
+               return ret == 0 ? 1 : 0;
+
+       ret = get_state_filename(fname, sizeof(fname), slot);
+       if (ret != 0)
+               return 1;
+
+       ret = stat(fname, &status);
+       if (ret != 0)
+               return 1;
+
+       if (status.st_mtime < REARMED_BIRTHDAY_TIME)
+               return 1; // probably bad rtc like on some Caanoos
+
+       *time = status.st_mtime;
+
+       return 1;
 }
 
 static int emu_save_load_game(int load, int unused)
@@ -255,9 +280,10 @@ static const struct {
        CE_INTVAL(in_type_sel1),
        CE_INTVAL(in_type_sel2),
        CE_INTVAL(analog_deadzone),
-       CE_INTVAL_V(frameskip, 2),
+       CE_INTVAL_V(frameskip, 3),
        CE_INTVAL_P(gpu_peops.iUseDither),
        CE_INTVAL_P(gpu_peops.dwActFixes),
+       CE_INTVAL_P(gpu_unai.lineskip),
        CE_INTVAL_P(gpu_unai.abe_hack),
        CE_INTVAL_P(gpu_unai.no_light),
        CE_INTVAL_P(gpu_unai.no_blend),
@@ -1166,6 +1192,7 @@ static int menu_loop_gfx_options(int id, int keys)
 
 static menu_entry e_menu_plugin_gpu_unai[] =
 {
+       mee_onoff     ("Skip every 2nd line",        0, pl_rearmed_cbs.gpu_unai.lineskip, 1),
        mee_onoff     ("Abe's Odyssey hack",         0, pl_rearmed_cbs.gpu_unai.abe_hack, 1),
        mee_onoff     ("Disable lighting",           0, pl_rearmed_cbs.gpu_unai.no_light, 1),
        mee_onoff     ("Disable blending",           0, pl_rearmed_cbs.gpu_unai.no_blend, 1),
@@ -1348,7 +1375,7 @@ static int mh_restore_defaults(int id, int keys)
 }
 
 static const char *men_region[]       = { "Auto", "NTSC", "PAL", NULL };
-static const char *men_frameskip[]    = { "Auto", "Off", "1", NULL };
+static const char *men_frameskip[]    = { "Auto", "Off", "1", "2", "3", NULL };
 /*
 static const char *men_confirm_save[] = { "OFF", "writes", "loads", "both", NULL };
 static const char h_confirm_save[]    = "Ask for confirmation when overwriting save,\n"