(libretro) Sanitise core options

This commit is contained in:
jdgleaver 2021-12-17 18:04:22 +00:00 committed by flyinghead
parent f64b3618f2
commit 833eccb6c4
2 changed files with 600 additions and 465 deletions

View File

@ -109,6 +109,15 @@ static bool allow_service_buttons = false;
static bool libretro_supports_bitmasks = false;
static bool categoriesSupported = false;
static bool platformIsDreamcast = true;
static bool platformIsArcade = false;
static bool threadedRenderingEnabled = true;
static bool oitEnabled = false;
#if defined(HAVE_TEXUPSCALE)
static bool textureUpscaleEnabled = false;
#endif
static bool vmuScreenSettingsShown = true;
static bool lightgunSettingsShown = true;
u32 kcode[4] = {0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF};
u8 rt[4];
@ -173,6 +182,7 @@ static std::vector<std::string> disk_labels;
static bool disc_tray_open = false;
void UpdateInputState();
static bool set_variable_visibility(void);
void retro_set_video_refresh(retro_video_refresh_t cb)
{
@ -215,7 +225,20 @@ void retro_set_environment(retro_environment_t cb)
{
environ_cb = cb;
libretro_set_core_options(environ_cb, &categoriesSupported);
// An annoyance: retro_set_environment() can be called
// multiple times, and depending upon the current frontend
// state various environment callbacks may be disabled.
// This means the reported 'categories_supported' status
// may change on subsequent iterations. We therefore have
// to record whether 'categories_supported' is true on any
// iteration, and latch the result
bool optionCategoriesSupported = false;
libretro_set_core_options(environ_cb, &optionCategoriesSupported);
categoriesSupported |= optionCategoriesSupported;
struct retro_core_options_update_display_callback update_display_cb;
update_display_cb.callback = set_variable_visibility;
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_UPDATE_DISPLAY_CALLBACK, &update_display_cb);
static const struct retro_controller_description ports_default[] =
{
@ -289,126 +312,222 @@ void retro_deinit()
}
os_UninstallFaultHandler();
libretro_supports_bitmasks = false;
categoriesSupported = false;
platformIsDreamcast = true;
platformIsArcade = false;
threadedRenderingEnabled = true;
oitEnabled = false;
#if defined(HAVE_TEXUPSCALE)
textureUpscaleEnabled = false;
#endif
vmuScreenSettingsShown = true;
lightgunSettingsShown = true;
LogManager::Shutdown();
retro_audio_deinit();
}
static void set_variable_visibility()
static bool set_variable_visibility(void)
{
struct retro_core_option_display option_display;
struct retro_variable var;
bool updated = false;
// Show/hide NAOMI/Atomiswave options
option_display.visible = ((settings.platform.system == DC_PLATFORM_NAOMI) ||
(settings.platform.system == DC_PLATFORM_ATOMISWAVE));
bool platformWasDreamcast = platformIsDreamcast;
bool platformWasArcade = platformIsArcade;
option_display.key = CORE_OPTION_NAME "_allow_service_buttons";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
option_display.key = CORE_OPTION_NAME "_enable_naomi_15khz_dipswitch";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
platformIsDreamcast = (settings.platform.system == DC_PLATFORM_DREAMCAST);
platformIsArcade = (settings.platform.system == DC_PLATFORM_NAOMI) ||
(settings.platform.system == DC_PLATFORM_ATOMISWAVE);
// Show/hide Dreamcast options
option_display.visible = (settings.platform.system == DC_PLATFORM_DREAMCAST);
// Show/hide platform-dependent options
if (first_run || (platformIsDreamcast != platformWasDreamcast) || (platformIsArcade != platformWasArcade))
{
// Show/hide NAOMI/Atomiswave options
option_display.visible = platformIsArcade;
option_display.key = CORE_OPTION_NAME "_allow_service_buttons";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
option_display.key = CORE_OPTION_NAME "_boot_to_bios";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
option_display.key = CORE_OPTION_NAME "_hle_bios";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
option_display.key = CORE_OPTION_NAME "_gdrom_fast_loading";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
option_display.key = CORE_OPTION_NAME "_cable_type";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
option_display.key = CORE_OPTION_NAME "_broadcast";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
option_display.key = CORE_OPTION_NAME "_language";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
option_display.key = CORE_OPTION_NAME "_force_wince";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
option_display.key = CORE_OPTION_NAME "_enable_purupuru";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
option_display.key = CORE_OPTION_NAME "_per_content_vmus";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
// Show/hide Dreamcast options
option_display.visible = platformIsDreamcast;
option_display.key = CORE_OPTION_NAME "_boot_to_bios";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
option_display.key = CORE_OPTION_NAME "_hle_bios";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
option_display.key = CORE_OPTION_NAME "_gdrom_fast_loading";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
option_display.key = CORE_OPTION_NAME "_cable_type";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
option_display.key = CORE_OPTION_NAME "_broadcast";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
option_display.key = CORE_OPTION_NAME "_language";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
option_display.key = CORE_OPTION_NAME "_force_wince";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
option_display.key = CORE_OPTION_NAME "_enable_purupuru";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
option_display.key = CORE_OPTION_NAME "_per_content_vmus";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
/* only show, if categories not supported */
option_display.visible = ((settings.platform.system == DC_PLATFORM_DREAMCAST)
&& (!categoriesSupported));
option_display.key = CORE_OPTION_NAME "_show_vmu_screen_settings";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
vmuScreenSettingsShown = option_display.visible;
for (unsigned i = 0; i < 4; i++)
{
char key[256];
option_display.key = key;
snprintf(key, sizeof(key), "%s%u%s", CORE_OPTION_NAME "_vmu", i + 1, "_screen_display");
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
snprintf(key, sizeof(key), "%s%u%s", CORE_OPTION_NAME "_vmu", i + 1, "_screen_position");
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
snprintf(key, sizeof(key), "%s%u%s", CORE_OPTION_NAME "_vmu", i + 1, "_screen_size_mult");
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
snprintf(key, sizeof(key), "%s%u%s", CORE_OPTION_NAME "_vmu", i + 1, "_pixel_on_color");
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
snprintf(key, sizeof(key), "%s%u%s", CORE_OPTION_NAME "_vmu", i + 1, "_pixel_off_color");
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
snprintf(key, sizeof(key), "%s%u%s", CORE_OPTION_NAME "_vmu", i + 1, "_screen_opacity");
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
}
// Show/hide manual option visibility toggles
// > Only show if categories are not supported
option_display.visible = platformIsDreamcast && !categoriesSupported;
option_display.key = CORE_OPTION_NAME "_show_vmu_screen_settings";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
updated = true;
}
// Show/hide additional manual option visibility toggles
// > Only show if categories are not supported
if (first_run)
{
option_display.visible = !categoriesSupported;
option_display.key = CORE_OPTION_NAME "_show_lightgun_settings";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
updated = true;
}
// Show/hide settings-dependent options
option_display.visible = config::ThreadedRendering;
option_display.key = CORE_OPTION_NAME "_auto_skip_frame";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
// Only for threaded renderer
bool threadedRenderingWasEnabled = threadedRenderingEnabled;
threadedRenderingEnabled = true;
var.key = CORE_OPTION_NAME "_threaded_rendering";
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value && !strcmp(var.value, "disabled"))
threadedRenderingEnabled = false;
if (first_run || (threadedRenderingEnabled != threadedRenderingWasEnabled))
{
option_display.visible = threadedRenderingEnabled;
option_display.key = CORE_OPTION_NAME "_auto_skip_frame";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
updated = true;
}
#if defined(HAVE_OIT) || defined(HAVE_VULKAN)
// Only for per-pixel renderers
option_display.visible = config::RendererType == RenderType::OpenGL_OIT || config::RendererType == RenderType::Vulkan_OIT;
option_display.key = CORE_OPTION_NAME "_oit_abuffer_size";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
bool oitWasEnabled = oitEnabled;
oitEnabled = false;
var.key = CORE_OPTION_NAME "_alpha_sorting";
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value && !strcmp(var.value, "per-pixel (accurate)"))
oitEnabled = true;
if (first_run || (oitEnabled != oitWasEnabled))
{
option_display.visible = oitEnabled;
option_display.key = CORE_OPTION_NAME "_oit_abuffer_size";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
updated = true;
}
#endif
#if defined(HAVE_TEXUPSCALE)
// Only if texture upscaling is enabled
option_display.visible = config::TextureUpscale > 1;
option_display.key = CORE_OPTION_NAME "_texupscale_max_filtered_texture_size";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
bool textureUpscaleWasEnabled = textureUpscaleEnabled;
textureUpscaleEnabled = false;
var.key = CORE_OPTION_NAME "_texupscale";
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value && strcmp(var.value, "off"))
textureUpscaleEnabled = true;
if (first_run || (textureUpscaleEnabled != textureUpscaleWasEnabled))
{
option_display.visible = textureUpscaleEnabled;
option_display.key = CORE_OPTION_NAME "_texupscale_max_filtered_texture_size";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
updated = true;
}
#endif
// If categories are supported, no further action is required
if (categoriesSupported)
return updated;
// Show/hide VMU screen options
if (settings.platform.system == DC_PLATFORM_DREAMCAST)
bool vmuScreenSettingsWereShown = vmuScreenSettingsShown;
if (platformIsDreamcast)
{
option_display.visible = true;
vmuScreenSettingsShown = true;
var.key = CORE_OPTION_NAME "_show_vmu_screen_settings";
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var)
&& var.value
&& !categoriesSupported)
if (!strcmp(var.value, "disabled"))
option_display.visible = false;
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value && !strcmp(var.value, "disabled"))
vmuScreenSettingsShown = false;
}
else
option_display.visible = false;
vmuScreenSettingsShown = false;
for (int i = 0; i < 4; i++)
if (first_run || (vmuScreenSettingsShown != vmuScreenSettingsWereShown))
{
char key[256];
option_display.key = key;
option_display.visible = vmuScreenSettingsShown;
snprintf(key, sizeof(key), "%s%u%s", CORE_OPTION_NAME "_vmu", i + 1, "_screen_display");
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
snprintf(key, sizeof(key), "%s%u%s", CORE_OPTION_NAME "_vmu", i + 1, "_screen_position");
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
snprintf(key, sizeof(key), "%s%u%s", CORE_OPTION_NAME "_vmu", i + 1, "_screen_size_mult");
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
snprintf(key, sizeof(key), "%s%u%s", CORE_OPTION_NAME "_vmu", i + 1, "_pixel_on_color");
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
snprintf(key, sizeof(key), "%s%u%s", CORE_OPTION_NAME "_vmu", i + 1, "_pixel_off_color");
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
snprintf(key, sizeof(key), "%s%u%s", CORE_OPTION_NAME "_vmu", i + 1, "_screen_opacity");
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
for (unsigned i = 0; i < 4; i++)
{
char key[256];
option_display.key = key;
snprintf(key, sizeof(key), "%s%u%s", CORE_OPTION_NAME "_vmu", i + 1, "_screen_display");
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
snprintf(key, sizeof(key), "%s%u%s", CORE_OPTION_NAME "_vmu", i + 1, "_screen_position");
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
snprintf(key, sizeof(key), "%s%u%s", CORE_OPTION_NAME "_vmu", i + 1, "_screen_size_mult");
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
snprintf(key, sizeof(key), "%s%u%s", CORE_OPTION_NAME "_vmu", i + 1, "_pixel_on_color");
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
snprintf(key, sizeof(key), "%s%u%s", CORE_OPTION_NAME "_vmu", i + 1, "_pixel_off_color");
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
snprintf(key, sizeof(key), "%s%u%s", CORE_OPTION_NAME "_vmu", i + 1, "_screen_opacity");
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
}
updated = true;
}
/* only show, if categories not supported */
option_display.visible = !categoriesSupported;
option_display.key = CORE_OPTION_NAME "_show_lightgun_settings";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
// Show/hide light gun options
option_display.visible = true;
bool lightgunSettingsWereShown = lightgunSettingsShown;
lightgunSettingsShown = true;
var.key = CORE_OPTION_NAME "_show_lightgun_settings";
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var)
&& var.value
&& !categoriesSupported)
if (!strcmp(var.value, "disabled"))
option_display.visible = false;
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value && !strcmp(var.value, "disabled"))
lightgunSettingsShown = false;
for (int i = 0; i < 4; i++)
if (first_run || (lightgunSettingsShown != lightgunSettingsWereShown))
{
char key[256];
option_display.key = key;
option_display.visible = lightgunSettingsShown;
snprintf(key, sizeof(key), "%s%u%s", CORE_OPTION_NAME "_lightgun", i + 1, "_crosshair");
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
for (unsigned i = 0; i < 4; i++)
{
char key[256];
option_display.key = key;
snprintf(key, sizeof(key), "%s%u%s", CORE_OPTION_NAME "_lightgun", i + 1, "_crosshair");
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
}
updated = true;
}
return updated;
}
static void setFramebufferSize()
@ -853,10 +972,7 @@ void retro_run()
// On the first call, we start the emulator thread
if (first_run)
{
dc_resume();
first_run = false;
}
// Render
is_dupe = true;
@ -898,6 +1014,8 @@ void retro_run()
if (!config::ThreadedRendering)
is_dupe = true;
first_run = false;
}
static bool loadGame(const char *path)
@ -1588,8 +1706,6 @@ bool retro_load_game(const struct retro_game_info *game)
}
}
}
// System may have changed - have to update hidden core options
set_variable_visibility();
if (game->path[0] == '\0')
{
@ -1715,6 +1831,9 @@ bool retro_load_game(const struct retro_game_info *game)
if (devices_need_refresh)
refresh_devices(true);
// System may have changed - have to update hidden core options
set_variable_visibility();
return true;
}

View File

@ -69,37 +69,96 @@ extern "C" {
struct retro_core_option_v2_category option_cats_us[] = {
{
"system",
"System",
"Configure region, language, BIOS and base hardware settings."
},
{
"video",
"Video",
"Change visual buffers & effects, display parameters, framerate/-skip and rendering/texture settings."
"Configure resolution, order-independent transparency and visual effect settings."
},
{
"input",
"Input",
"Change controller & light gun settings."
},
{
"vmu",
"Visual Memory",
"Change settings related to the Visual Memory Units/Systems (VMU)."
"performance",
"Performance",
"Configure threaded rendering, integer division optimisations and frame skip settings."
},
{
"hacks",
"Emulation Hacks",
"Change different emulation hacks."
"Configure widescreen overrides, GD-ROM loading speed and texture replacement settings."
},
{
"input",
"Input",
"Configure gamepad and light gun settings."
},
{
"vmu",
"Visual Memory Unit",
"Configure per-game VMU save files and on-screen VMU visibility settings."
},
{ NULL, NULL, NULL },
};
struct retro_core_option_v2_definition option_defs_us[] = {
{
CORE_OPTION_NAME "_region",
"Region",
NULL,
"",
NULL,
"system",
{
{ "Japan", NULL },
{ "USA", NULL },
{ "Europe", NULL },
{ "Default", NULL },
{ NULL, NULL },
},
"Default",
},
{
CORE_OPTION_NAME "_language",
"Language",
NULL,
"Changes the language used by the BIOS and by any games that contain multiple languages.",
NULL,
"system",
{
{ "Japanese", NULL },
{ "English", NULL },
{ "German", NULL },
{ "French", NULL },
{ "Spanish", NULL },
{ "Italian", NULL },
{ "Default", NULL },
{ NULL, NULL },
},
"Default",
},
{
CORE_OPTION_NAME "_hle_bios",
"HLE BIOS",
NULL,
"Force use of high-level emulation BIOS.",
NULL,
"system",
{
{ "disabled", NULL },
{ "enabled", NULL },
{ NULL, NULL},
},
"disabled",
},
{
CORE_OPTION_NAME "_boot_to_bios",
"Boot to BIOS (Restart Required)",
NULL,
"Boot directly into the Dreamcast BIOS menu.",
NULL,
NULL,
"system",
{
{ "disabled", NULL },
{ "enabled", NULL },
@ -108,37 +167,51 @@ struct retro_core_option_v2_definition option_defs_us[] = {
"disabled",
},
{
CORE_OPTION_NAME "_hle_bios",
"HLE BIOS",
NULL,
"Force use of high-level emulation BIOS.",
CORE_OPTION_NAME "_enable_dsp",
"Enable DSP",
NULL,
"Enable emulation of the Dreamcast's audio DSP (digital signal processor). Improves the accuracy of generated sound, but increases performance requirements.",
NULL,
"system",
{
{ "disabled", NULL },
{ "disabled", NULL },
{ "enabled", NULL },
{ NULL, NULL},
{ NULL, NULL },
},
#ifdef LOW_END
"disabled",
#else
"enabled",
#endif
},
{
CORE_OPTION_NAME "_force_wince",
"Force Windows CE Mode",
NULL,
"Enable full MMU (Memory Management Unit) emulation and other settings for Windows CE games.",
NULL,
"system",
{
{ "disabled", NULL },
{ "enabled", NULL },
{ NULL, NULL },
},
"disabled",
},
#if defined(HAVE_OIT) || defined(HAVE_VULKAN)
{
CORE_OPTION_NAME "_oit_abuffer_size",
"Accumulation Pixel Buffer Size (Restart Required)",
CORE_OPTION_NAME "_allow_service_buttons",
"Allow NAOMI Service Buttons",
NULL,
"Higher values might be required for higher resolutions to output correctly.",
"Enables SERVICE button for NAOMI, to enter cabinet settings.",
NULL,
"video",
"system",
{
{ "512MB", NULL },
{ "1GB", NULL },
{ "2GB", NULL },
{ "4GB", NULL },
{ "disabled", NULL },
{ "enabled", NULL },
{ NULL, NULL },
},
"512MB",
"disabled",
},
#endif
{
CORE_OPTION_NAME "_internal_resolution",
"Internal Resolution (Restart Required)",
@ -182,6 +255,38 @@ struct retro_core_option_v2_definition option_defs_us[] = {
"640x480",
#endif
},
{
CORE_OPTION_NAME "_cable_type",
"Cable Type",
NULL,
"The output signal type. 'TV (Composite)' is the most widely supported.",
NULL,
"video",
{
{ "VGA", NULL },
{ "TV (RGB)", NULL },
{ "TV (Composite)", NULL },
{ NULL, NULL },
},
"TV (Composite)",
},
{
CORE_OPTION_NAME "_broadcast",
"Broadcast Standard",
NULL,
"",
NULL,
"video",
{
{ "NTSC", NULL },
{ "PAL", "PAL (World)" },
{ "PAL_N", "PAL-N (Argentina, Paraguay, Uruguay)" },
{ "PAL_M", "PAL-M (Brazil)" },
{ "Default", NULL },
{ NULL, NULL },
},
"NTSC",
},
{
CORE_OPTION_NAME "_screen_rotation",
"Screen Orientation",
@ -202,7 +307,7 @@ struct retro_core_option_v2_definition option_defs_us[] = {
NULL,
"",
NULL,
NULL,
"video",
{
{ "per-strip (fast, least accurate)", "Per-Strip (fast, least accurate)" },
{ "per-triangle (normal)", "Per-Triangle (normal)" },
@ -217,23 +322,37 @@ struct retro_core_option_v2_definition option_defs_us[] = {
"per-triangle (normal)",
#endif
},
#if defined(HAVE_OIT) || defined(HAVE_VULKAN)
{
CORE_OPTION_NAME "_gdrom_fast_loading",
"GD-ROM Fast Loading (inaccurate)",
CORE_OPTION_NAME "_oit_abuffer_size",
"Accumulation Pixel Buffer Size (Restart Required)",
NULL,
"Speeds up GD-ROM loading.",
"Higher values might be required for higher resolutions to output correctly.",
NULL,
"video",
{
{ "512MB", NULL },
{ "1GB", NULL },
{ "2GB", NULL },
{ "4GB", NULL },
{ NULL, NULL },
},
"512MB",
},
#endif
{/* TODO: needs explanation */
CORE_OPTION_NAME "_enable_rttb",
"Enable RTT (Render To Texture) Buffer",
NULL,
"",
NULL,
"video",
{
{ "disabled", NULL },
{ "enabled", NULL },
{ NULL, NULL },
},
#ifdef LOW_END
"enabled",
#else
"disabled",
#endif
},
{/* TODO: needs explanation */
CORE_OPTION_NAME "_mipmapping",
@ -271,19 +390,36 @@ struct retro_core_option_v2_definition option_defs_us[] = {
NULL,
"video",
{
{ "disabled", NULL },
{ "disabled", NULL },
{ "enabled", NULL },
{ NULL, NULL },
},
"enabled",
},
{
CORE_OPTION_NAME "_widescreen_hack",
"Widescreen Hack",
CORE_OPTION_NAME "_anisotropic_filtering",
"Anisotropic Filtering",
NULL,
"Draw geometry outside of the normal 4:3 aspect ratio. May produce graphical glitches in the revealed areas.",
"Enhance the quality of textures on surfaces that are at oblique viewing angles with respect to the camera.",
NULL,
"hacks",
"video",
{
{ "off", "disabled" },
{ "2", NULL },
{ "4", NULL },
{ "8", NULL },
{ "16", NULL },
{ NULL, NULL },
},
"4",
},
{
CORE_OPTION_NAME "_delay_frame_swapping",
"Delay Frame Swapping",
NULL,
"Useful to avoid flashing screens or glitchy videos. Not recommended on slow platforms.",
NULL,
"video",
{
{ "disabled", NULL },
{ "enabled", NULL },
@ -291,6 +427,119 @@ struct retro_core_option_v2_definition option_defs_us[] = {
},
"disabled",
},
{
CORE_OPTION_NAME "_pvr2_filtering",
"PowerVR2 Post-processing Filter",
NULL,
"Post-process the rendered image to simulate effects specific to the PowerVR2 GPU and analog video signals.",
NULL,
"video",
{
{ "disabled", NULL },
{ "enabled", NULL },
{ NULL, NULL },
},
"disabled",
},
#ifdef HAVE_TEXUPSCALE
{
CORE_OPTION_NAME "_texupscale",
"Texture Upscaling (xBRZ)",
NULL,
"Enhance hand-drawn 2D pixel art graphics. Should only be used with 2D pixelated games.",
NULL,
"video",
{
{ "off", "disabled" },
{ "2x", NULL },
{ "4x", NULL },
{ "6x", NULL },
{ NULL, NULL },
},
"off",
},
{/* TODO: needs clarification */
CORE_OPTION_NAME "_texupscale_max_filtered_texture_size",
"Texture Upscaling Max. Filtered Size",
NULL,
"",
NULL,
"video",
{
{ "256", NULL },
{ "512", NULL },
{ "1024", NULL },
{ NULL, NULL },
},
"256",
},
#endif
{
CORE_OPTION_NAME "_threaded_rendering",
"Threaded Rendering",
NULL,
"Runs the GPU and CPU on different threads. Highly recommended.",
NULL,
"performance",
{
{ "disabled", NULL },
{ "enabled", NULL },
{ NULL, NULL },
},
"enabled",
},
{
CORE_OPTION_NAME "_div_matching",
"DIV Matching",
NULL,
"Optimize integer division",
NULL,
"performance",
{
{ "auto", "Auto" },
{ "disabled", NULL },
{ NULL, NULL },
},
"auto",
},
{
CORE_OPTION_NAME "_auto_skip_frame",
"Auto Skip Frame",
NULL,
"Automatically skip frames when the emulator is running slow. Note: This setting only applies when 'Threaded Rendering' is enabled.",
NULL,
"performance",
{
{ "disabled", NULL },
{ "some", "Normal" },
{ "more", "Maximum" },
{ NULL, NULL },
},
#ifdef LOW_END
"some",
#else
"disabled",
#endif
},
{
CORE_OPTION_NAME "_frame_skipping",
"Frame Skipping",
NULL,
"Sets the number of frames to skip between each displayed frame.",
NULL,
"performance",
{
{ "disabled", NULL },
{ "1", NULL },
{ "2", NULL },
{ "3", NULL },
{ "4", NULL },
{ "5", NULL },
{ "6", NULL },
{ NULL, NULL },
},
"disabled",
},
{
CORE_OPTION_NAME "_widescreen_cheats",
"Widescreen Cheats (Restart Required)",
@ -306,93 +555,58 @@ struct retro_core_option_v2_definition option_defs_us[] = {
"disabled",
},
{
CORE_OPTION_NAME "_cable_type",
"Cable Type",
CORE_OPTION_NAME "_widescreen_hack",
"Widescreen Hack",
NULL,
"The output signal type. 'TV (Composite)' is the most widely supported.",
"Draw geometry outside of the normal 4:3 aspect ratio. May produce graphical glitches in the revealed areas.",
NULL,
"video",
"hacks",
{
{ "VGA", NULL },
{ "TV (RGB)", NULL },
{ "TV (Composite)", NULL },
{ NULL, NULL },
},
"TV (Composite)",
},
{
CORE_OPTION_NAME "_broadcast",
"Broadcast Standard",
NULL,
"",
NULL,
"video",
{
{ "NTSC", NULL },
{ "PAL", "PAL (World)" },
{ "PAL_N", "PAL-N (Argentina, Paraguay, Uruguay)" },
{ "PAL_M", "PAL-M (Brazil)" },
{ "Default", NULL },
{ NULL, NULL },
},
"NTSC",
},
{
CORE_OPTION_NAME "_region",
"Region",
NULL,
"",
NULL,
NULL,
{
{ "Japan", NULL },
{ "USA", NULL },
{ "Europe", NULL },
{ "Default", NULL },
{ NULL, NULL },
},
"Default",
},
{
CORE_OPTION_NAME "_language",
"Language",
NULL,
"Changes the language used by the BIOS and by any games that contain multiple languages.",
NULL,
NULL,
{
{ "Japanese", NULL },
{ "English", NULL },
{ "German", NULL },
{ "French", NULL },
{ "Spanish", NULL },
{ "Italian", NULL },
{ "Default", NULL },
{ NULL, NULL },
},
"Default",
},
{
CORE_OPTION_NAME "_div_matching",
"DIV Matching",
NULL,
"Optimize integer division",
NULL,
NULL,
{
{ "auto", "Auto" },
{ "disabled", NULL },
{ "enabled", NULL },
{ NULL, NULL },
},
"auto",
"disabled",
},
{
CORE_OPTION_NAME "_force_wince",
"Force Windows CE Mode",
CORE_OPTION_NAME "_gdrom_fast_loading",
"GD-ROM Fast Loading (inaccurate)",
NULL,
"Enable full MMU (Memory Management Unit) emulation and other settings for Windows CE games.",
"Speeds up GD-ROM loading.",
NULL,
"hacks",
{
{ "disabled", NULL },
{ "enabled", NULL },
{ NULL, NULL },
},
#ifdef LOW_END
"enabled",
#else
"disabled",
#endif
},
{
CORE_OPTION_NAME "_custom_textures",
"Load Custom Textures",
NULL,
"",
NULL,
"hacks",
{
{ "disabled", NULL },
{ "enabled", NULL },
{ NULL, NULL },
},
"disabled",
},
{/* TODO: probably needs explanation */
CORE_OPTION_NAME "_dump_textures",
"Dump Textures",
NULL,
"",
NULL,
"hacks",
{
{ "disabled", NULL },
{ "enabled", NULL },
@ -452,168 +666,6 @@ struct retro_core_option_v2_definition option_defs_us[] = {
},
"disabled",
},
{
CORE_OPTION_NAME "_enable_dsp",
"Enable DSP",
NULL,
"Enable emulation of the Dreamcast's audio DSP (digital signal processor). Improves the accuracy of generated sound, but increases performance requirements.",
NULL,
NULL,
{
{ "disabled", NULL },
{ "enabled", NULL },
{ NULL, NULL },
},
#ifdef LOW_END
"disabled",
#else
"enabled",
#endif
},
{
CORE_OPTION_NAME "_anisotropic_filtering",
"Anisotropic Filtering",
NULL,
"Enhance the quality of textures on surfaces that are at oblique viewing angles with respect to the camera.",
NULL,
"video",
{
{ "off", "disabled" },
{ "2", NULL },
{ "4", NULL },
{ "8", NULL },
{ "16", NULL },
{ NULL, NULL },
},
"4",
},
{
CORE_OPTION_NAME "_pvr2_filtering",
"PowerVR2 Post-processing Filter",
NULL,
"Post-process the rendered image to simulate effects specific to the PowerVR2 GPU and analog video signals.",
NULL,
"video",
{
{ "disabled", NULL },
{ "enabled", NULL },
{ NULL, NULL },
},
"disabled",
},
#ifdef HAVE_TEXUPSCALE
{
CORE_OPTION_NAME "_texupscale",
"Texture Upscaling (xBRZ)",
NULL,
"Enhance hand-drawn 2D pixel art graphics. Should only be used with 2D pixelated games.",
NULL,
"video",
{
{ "off", "disabled" },
{ "2x", NULL },
{ "4x", NULL },
{ "6x", NULL },
{ NULL, NULL },
},
"off",
},
{/* TODO: needs clarification */
CORE_OPTION_NAME "_texupscale_max_filtered_texture_size",
"Texture Upscaling Max. Filtered Size",
NULL,
"",
NULL,
"video",
{
{ "256", NULL },
{ "512", NULL },
{ "1024", NULL },
{ NULL, NULL },
},
"256",
},
#endif
{/* TODO: needs explanation */
CORE_OPTION_NAME "_enable_rttb",
"Enable RTT (Render To Texture) Buffer",
NULL,
"",
NULL,
"video",
{
{ "disabled", NULL },
{ "enabled", NULL },
{ NULL, NULL },
},
"disabled",
},
{
CORE_OPTION_NAME "_threaded_rendering",
"Threaded Rendering",
NULL,
"Runs the GPU and CPU on different threads. Highly recommended.",
NULL,
NULL,
{
{ "disabled", NULL },
{ "enabled", NULL },
{ NULL, NULL },
},
"enabled",
},
{
CORE_OPTION_NAME "_delay_frame_swapping",
"Delay Frame Swapping",
NULL,
"Useful to avoid flashing screens or glitchy videos. Not recommended on slow platforms.",
NULL,
"video",
{
{ "disabled", NULL },
{ "enabled", NULL },
{ NULL, NULL },
},
"disabled",
},
{
CORE_OPTION_NAME "_auto_skip_frame",
"Auto Skip Frame",
NULL,
"Automatically skip frames when the emulator is running slow. Note: This setting only applies when 'Threaded Rendering' is enabled.",
NULL,
"video",
{
{ "disabled", NULL },
{ "some", "Normal" },
{ "more", "Maximum" },
{ NULL, NULL },
},
#ifdef LOW_END
"some",
#else
"disabled",
#endif
},
{
CORE_OPTION_NAME "_frame_skipping",
"Frame Skipping",
NULL,
"Sets the number of frames to skip between each displayed frame.",
NULL,
"video",
{
{ "disabled", NULL },
{ "1", NULL },
{ "2", NULL },
{ "3", NULL },
{ "4", NULL },
{ "5", NULL },
{ "6", NULL },
{ NULL, NULL },
},
"disabled",
},
{
CORE_OPTION_NAME "_enable_purupuru",
"Purupuru Pack/Vibration Pack",
@ -629,44 +681,84 @@ struct retro_core_option_v2_definition option_defs_us[] = {
"enabled",
},
{
CORE_OPTION_NAME "_allow_service_buttons",
"Allow NAOMI Service Buttons",
CORE_OPTION_NAME "_show_lightgun_settings",
"Show Light Gun Settings",
NULL,
"Enables SERVICE button for NAOMI, to enter cabinet settings.",
"Enable configuration of light gun crosshair display options. NOTE: Quick Menu may need to be toggled for this setting to take effect.",
NULL,
"input",
{
{ "enabled", NULL },
{ "disabled", NULL },
{ NULL, NULL},
},
"disabled"
},
{
CORE_OPTION_NAME "_lightgun1_crosshair",
"Gun Crosshair 1 Display",
NULL,
"",
NULL,
"input",
{
{ "disabled", NULL },
{ "enabled", NULL },
{ NULL, NULL },
{ "White", NULL },
{ "Red", NULL },
{ "Green", NULL },
{ "Blue", NULL },
{ NULL, NULL },
},
"disabled",
},
{
CORE_OPTION_NAME "_custom_textures",
"Load Custom Textures",
CORE_OPTION_NAME "_lightgun2_crosshair",
"Gun Crosshair 2 Display",
NULL,
"",
NULL,
"video",
"input",
{
{ "disabled", NULL },
{ "enabled", NULL },
{ NULL, NULL },
{ "White", NULL },
{ "Red", NULL },
{ "Green", NULL },
{ "Blue", NULL },
{ NULL, NULL },
},
"disabled",
},
{/* TODO: probably needs explanation */
CORE_OPTION_NAME "_dump_textures",
"Dump Textures",
{
CORE_OPTION_NAME "_lightgun3_crosshair",
"Gun Crosshair 3 Display",
NULL,
"",
NULL,
"video",
"input",
{
{ "disabled", NULL },
{ "enabled", NULL },
{ NULL, NULL },
{ "White", NULL },
{ "Red", NULL },
{ "Green", NULL },
{ "Blue", NULL },
{ NULL, NULL },
},
"disabled",
},
{
CORE_OPTION_NAME "_lightgun4_crosshair",
"Gun Crosshair 4 Display",
NULL,
"",
NULL,
"input",
{
{ "disabled", NULL },
{ "White", NULL },
{ "Red", NULL },
{ "Green", NULL },
{ "Blue", NULL },
{ NULL, NULL },
},
"disabled",
},
@ -689,7 +781,7 @@ struct retro_core_option_v2_definition option_defs_us[] = {
CORE_OPTION_NAME "_show_vmu_screen_settings",
"Show Visual Memory Unit/System (VMU) Display Settings",
"Show VMU Display Settings",
"Enable configuration of emulated VMU LCD screen visibility, size, position and color. NOTE: Quick Menu must be toggled for this setting to take effect.",
"Enable configuration of emulated VMU LCD screen visibility, size, position and color. NOTE: Quick Menu may need to be toggled for this setting to take effect.",
NULL,
"vmu",
{
@ -1303,88 +1395,6 @@ struct retro_core_option_v2_definition option_defs_us[] = {
},
"100%",
},
{
CORE_OPTION_NAME "_show_lightgun_settings",
"Show Light Gun Settings",
NULL,
"Enable configuration of light gun crosshair display options. NOTE: Quick Menu must be toggled for this setting to take effect.",
NULL,
"input",
{
{ "enabled", NULL },
{ "disabled", NULL },
{ NULL, NULL},
},
"disabled"
},
{
CORE_OPTION_NAME "_lightgun1_crosshair",
"Gun Crosshair 1 Display",
NULL,
"",
NULL,
"input",
{
{ "disabled", NULL },
{ "White", NULL },
{ "Red", NULL },
{ "Green", NULL },
{ "Blue", NULL },
{ NULL, NULL },
},
"disabled",
},
{
CORE_OPTION_NAME "_lightgun2_crosshair",
"Gun Crosshair 2 Display",
NULL,
"",
NULL,
"input",
{
{ "disabled", NULL },
{ "White", NULL },
{ "Red", NULL },
{ "Green", NULL },
{ "Blue", NULL },
{ NULL, NULL },
},
"disabled",
},
{
CORE_OPTION_NAME "_lightgun3_crosshair",
"Gun Crosshair 3 Display",
NULL,
"",
NULL,
"input",
{
{ "disabled", NULL },
{ "White", NULL },
{ "Red", NULL },
{ "Green", NULL },
{ "Blue", NULL },
{ NULL, NULL },
},
"disabled",
},
{
CORE_OPTION_NAME "_lightgun4_crosshair",
"Gun Crosshair 4 Display",
NULL,
"",
NULL,
"input",
{
{ "disabled", NULL },
{ "White", NULL },
{ "Red", NULL },
{ "Green", NULL },
{ "Blue", NULL },
{ NULL, NULL },
},
"disabled",
},
{ NULL, NULL, NULL, NULL, NULL, NULL, {{0}}, NULL },
};
@ -1611,6 +1621,12 @@ static INLINE void libretro_set_core_options(retro_environment_t environ_cb,
values_buf[i] = NULL;
/* Skip options that are irrelevant when using the
* old style core options interface */
if (!strcmp(key, CORE_OPTION_NAME "_show_vmu_screen_settings") ||
!strcmp(key, CORE_OPTION_NAME "_show_lightgun_settings"))
continue;
if (desc)
{
size_t num_values = 0;