From 251ff5ee495039b5f023cbba9191d4e8323da44c Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Thu, 25 Jul 2024 00:19:07 +0300 Subject: [PATCH] Add shader acceleration setting --- include/config.hpp | 6 ++++-- src/config.cpp | 2 ++ src/libretro_core.cpp | 6 +++++- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/include/config.hpp b/include/config.hpp index 52be1af7..46d2fec8 100644 --- a/include/config.hpp +++ b/include/config.hpp @@ -20,11 +20,13 @@ struct EmulatorConfig { #else static constexpr bool ubershaderDefault = true; #endif - + static constexpr bool accelerateShadersDefault = false; + bool shaderJitEnabled = shaderJitDefault; - bool discordRpcEnabled = false; bool useUbershaders = ubershaderDefault; + bool accelerateShaders = accelerateShadersDefault; bool accurateShaderMul = false; + bool discordRpcEnabled = false; // Toggles whether to force shadergen when there's more than N lights active and we're using the ubershader, for better performance bool forceShadergenForLights = true; diff --git a/src/config.cpp b/src/config.cpp index dae5a0ab..b774d064 100644 --- a/src/config.cpp +++ b/src/config.cpp @@ -64,6 +64,7 @@ void EmulatorConfig::load() { vsyncEnabled = toml::find_or(gpu, "EnableVSync", true); useUbershaders = toml::find_or(gpu, "UseUbershaders", ubershaderDefault); accurateShaderMul = toml::find_or(gpu, "AccurateShaderMultiplication", false); + accelerateShaders = toml::find_or(gpu, "AccelerateShaders", accelerateShadersDefault); forceShadergenForLights = toml::find_or(gpu, "ForceShadergenForLighting", true); lightShadergenThreshold = toml::find_or(gpu, "ShadergenLightThreshold", 1); @@ -135,6 +136,7 @@ void EmulatorConfig::save() { data["GPU"]["UseUbershaders"] = useUbershaders; data["GPU"]["ForceShadergenForLighting"] = forceShadergenForLights; data["GPU"]["ShadergenLightThreshold"] = lightShadergenThreshold; + data["GPU"]["AccelerateShaders"] = accelerateShaders; data["Audio"]["DSPEmulation"] = std::string(Audio::DSPCore::typeToString(dspType)); data["Audio"]["EnableAudio"] = audioEnabled; diff --git a/src/libretro_core.cpp b/src/libretro_core.cpp index 3e0436b8..fa9f6d14 100644 --- a/src/libretro_core.cpp +++ b/src/libretro_core.cpp @@ -148,6 +148,8 @@ static bool FetchVariableBool(std::string key, bool def) { static void configInit() { static const retro_variable values[] = { {"panda3ds_use_shader_jit", "Enable shader JIT; enabled|disabled"}, + {"panda3ds_accelerate_shaders", + EmulatorConfig::accelerateShadersDefault ? "Run 3DS shaders on the GPU; enabled|disabled" : "Run 3DS shaders on the GPU; disabled|enabled"}, {"panda3ds_accurate_shader_mul", "Enable accurate shader multiplication; disabled|enabled"}, {"panda3ds_use_ubershader", EmulatorConfig::ubershaderDefault ? "Use ubershaders (No stutter, maybe slower); enabled|disabled" : "Use ubershaders (No stutter, maybe slower); disabled|enabled"}, @@ -179,7 +181,9 @@ static void configUpdate() { config.sdCardInserted = FetchVariableBool("panda3ds_use_virtual_sd", true); config.sdWriteProtected = FetchVariableBool("panda3ds_write_protect_virtual_sd", false); config.accurateShaderMul = FetchVariableBool("panda3ds_accurate_shader_mul", false); - config.useUbershaders = FetchVariableBool("panda3ds_use_ubershader", true); + config.useUbershaders = FetchVariableBool("panda3ds_use_ubershader", EmulatorConfig::ubershaderDefault); + config.accelerateShaders = FetchVariableBool("panda3ds_accelerate_shaders", EmulatorConfig::accelerateShadersDefault); + config.forceShadergenForLights = FetchVariableBool("panda3ds_ubershader_lighting_override", true); config.lightShadergenThreshold = std::clamp(std::stoi(FetchVariable("panda3ds_ubershader_lighting_override_threshold", "1")), 1, 8); config.discordRpcEnabled = false;