mirror of
https://github.com/wheremyfoodat/Panda3DS.git
synced 2025-06-18 08:45:22 +12:00
Switch to using shaderMode
This commit is contained in:
parent
0cf5687e64
commit
fb3d595ebe
8 changed files with 58 additions and 14 deletions
|
@ -60,9 +60,18 @@ void EmulatorConfig::load() {
|
|||
rendererType = RendererType::OpenGL;
|
||||
}
|
||||
|
||||
auto shaderModeName = toml::find_or<std::string>(gpu, "ShaderMode", Renderer::shaderModeToString(defaultShaderMode));
|
||||
auto configShaderMode = Renderer::shaderModeFromString(shaderModeName);
|
||||
|
||||
if (configShaderMode.has_value()) {
|
||||
shaderMode = configShaderMode.value();
|
||||
} else {
|
||||
Helpers::warn("Invalid shader mode specified: %s\n", shaderModeName.c_str());
|
||||
shaderMode = defaultShaderMode;
|
||||
}
|
||||
|
||||
shaderJitEnabled = toml::find_or<toml::boolean>(gpu, "EnableShaderJIT", shaderJitDefault);
|
||||
vsyncEnabled = toml::find_or<toml::boolean>(gpu, "EnableVSync", true);
|
||||
useUbershaders = toml::find_or<toml::boolean>(gpu, "UseUbershaders", ubershaderDefault);
|
||||
accurateShaderMul = toml::find_or<toml::boolean>(gpu, "AccurateShaderMultiplication", false);
|
||||
|
||||
forceShadergenForLights = toml::find_or<toml::boolean>(gpu, "ForceShadergenForLighting", true);
|
||||
|
@ -132,7 +141,7 @@ void EmulatorConfig::save() {
|
|||
data["GPU"]["Renderer"] = std::string(Renderer::typeToString(rendererType));
|
||||
data["GPU"]["EnableVSync"] = vsyncEnabled;
|
||||
data["GPU"]["AccurateShaderMultiplication"] = accurateShaderMul;
|
||||
data["GPU"]["UseUbershaders"] = useUbershaders;
|
||||
data["GPU"]["ShaderMode"] = std::string(Renderer::shaderModeToString(shaderMode));
|
||||
data["GPU"]["ForceShadergenForLighting"] = forceShadergenForLights;
|
||||
data["GPU"]["ShadergenLightThreshold"] = lightShadergenThreshold;
|
||||
|
||||
|
|
|
@ -117,7 +117,7 @@ void GPU::reset() {
|
|||
externalRegs[Framebuffer1Config] = static_cast<u32>(PICA::ColorFmt::RGB8);
|
||||
externalRegs[Framebuffer1Select] = 0;
|
||||
|
||||
renderer->setUbershaderSetting(config.useUbershaders);
|
||||
renderer->setShaderMode(config.shaderMode);
|
||||
renderer->reset();
|
||||
}
|
||||
|
||||
|
|
|
@ -414,7 +414,7 @@ void RendererGL::drawVertices(PICA::PrimType primType, std::span<const Vertex> v
|
|||
OpenGL::Triangle,
|
||||
};
|
||||
|
||||
bool usingUbershader = enableUbershader;
|
||||
bool usingUbershader = shaderMode == ShaderMode::Ubershader;
|
||||
if (usingUbershader) {
|
||||
const bool lightsEnabled = (regs[InternalRegs::LightingEnable] & 1) != 0;
|
||||
const uint lightCount = (regs[InternalRegs::LightNumber] & 0x7) + 1;
|
||||
|
|
|
@ -150,7 +150,7 @@ static void configInit() {
|
|||
static const retro_variable values[] = {
|
||||
{"panda3ds_use_shader_jit", "Enable shader JIT; enabled|disabled"},
|
||||
{"panda3ds_accurate_shader_mul", "Enable accurate shader multiplication; disabled|enabled"},
|
||||
{"panda3ds_use_ubershader", EmulatorConfig::ubershaderDefault ? "Use ubershaders (No stutter, maybe slower); enabled|disabled"
|
||||
{"panda3ds_use_ubershader", defaultShaderMode == ShaderMode::Ubershader ? "Use ubershaders (No stutter, maybe slower); enabled|disabled"
|
||||
: "Use ubershaders (No stutter, maybe slower); disabled|enabled"},
|
||||
{"panda3ds_use_vsync", "Enable VSync; enabled|disabled"},
|
||||
{"panda3ds_dsp_emulation", "DSP emulation; Null|HLE|LLE"},
|
||||
|
@ -180,7 +180,7 @@ 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.shaderMode = FetchVariableBool("panda3ds_use_ubershader", EmulatorConfig::defaultShaderMode == ShaderMode::Ubershader) ? ShaderMode::Ubershader : ShaderMode::Specialized;
|
||||
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;
|
||||
|
|
|
@ -36,4 +36,30 @@ const char* Renderer::typeToString(RendererType rendererType) {
|
|||
case RendererType::Software: return "software";
|
||||
default: return "Invalid";
|
||||
}
|
||||
}
|
||||
|
||||
std::optional<ShaderMode> Renderer::shaderModeFromString(std::string inString) {
|
||||
// Transform to lower-case to make the setting case-insensitive
|
||||
std::transform(inString.begin(), inString.end(), inString.begin(), [](unsigned char c) { return std::tolower(c); });
|
||||
|
||||
static const std::unordered_map<std::string, ShaderMode> map = {
|
||||
{"specialized", ShaderMode::Specialized}, {"special", ShaderMode::Specialized},
|
||||
{"ubershader", ShaderMode::Ubershader}, {"uber", ShaderMode::Ubershader},
|
||||
{"hybrid", ShaderMode::Hybrid}, {"threaded", ShaderMode::Hybrid}, {"i hate opengl context creation", ShaderMode::Hybrid},
|
||||
};
|
||||
|
||||
if (auto search = map.find(inString); search != map.end()) {
|
||||
return search->second;
|
||||
}
|
||||
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
const char* Renderer::shaderModeToString(ShaderMode shaderMode) {
|
||||
switch (shaderMode) {
|
||||
case ShaderMode::Specialized: return "specialized";
|
||||
case ShaderMode::Ubershader: return "ubershader";
|
||||
case ShaderMode::Hybrid: return "hybrid";
|
||||
default: return "Invalid";
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue