static int vout_width, vout_height;
static int vout_doffs_old, vout_fb_dirty;
static bool vout_can_dupe;
+static bool duping_enable;
static int samples_sent, samples_to_send;
static int plugins_opened;
#ifndef DRC_DISABLE
{ "rearmed_drc", "Dynamic recompiler; enabled|disabled" },
#endif
-#ifdef __ARM_NEON__
+#if defined(__ARM_NEON__) || defined(NEON_PC)
{ "neon_interlace_enable", "Enable interlacing mode(s); disabled|enabled" },
{ "neon_enhancement_enable", "Enhanced resolution (slow); disabled|enabled" },
{ "neon_enhancement_no_main", "Enhanced resolution speed hack; disabled|enabled" },
#endif
+ { "pcsx_rearmed_duping_enable", "Frame duping; on|off" },
{ NULL, NULL },
};
in_type1 = PSE_PAD_TYPE_ANALOGPAD;
}
-#ifdef __ARM_NEON__
+#if defined(__ARM_NEON__) || defined(NEON_PC)
var.value = "NULL";
var.key = "neon_interlace_enable";
pl_rearmed_cbs.gpu_neon.enhancement_no_main = 1;
}
#endif
+
+ var.value = "NULL";
+ var.key = "pcsx_rearmed_duping_enable";
+
+ if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) || var.value)
+ {
+ if (strcmp(var.value, "off") == 0)
+ duping_enable = false;
+ else if (strcmp(var.value, "on") == 0)
+ duping_enable = true;
+ }
+
#ifndef DRC_DISABLE
var.value = NULL;
var.key = "rearmed_drc";
samples_to_send += is_pal_mode ? 44100 / 50 : 44100 / 60;
- video_cb((vout_fb_dirty || !vout_can_dupe) ? vout_buf : NULL,
+ video_cb((vout_fb_dirty || !vout_can_dupe || !duping_enable) ? vout_buf : NULL,
vout_width, vout_height, vout_width * 2);
vout_fb_dirty = 0;
}
#define find_any_bios(...) false
#endif
+static void check_system_specs(void)
+{
+ unsigned level = 6;
+ environ_cb(RETRO_ENVIRONMENT_SET_PERFORMANCE_LEVEL, &level);
+}
+
void retro_init(void)
{
const char *bios[] = { "scph1001", "scph5501", "scph7001" };
exit(1);
}
+#if defined(_POSIX_C_SOURCE) && (_POSIX_C_SOURCE >= 200112L)
+ posix_memalign(&vout_buf, 16, VOUT_MAX_WIDTH * VOUT_MAX_HEIGHT * 2);
+#else
vout_buf = malloc(VOUT_MAX_WIDTH * VOUT_MAX_HEIGHT * 2);
+#endif
if (environ_cb(RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY, &dir) && dir)
{
SaveFuncs.close = save_close;
update_variables(false);
+ check_system_specs();
}
void retro_deinit(void)