mirror of
https://github.com/wheremyfoodat/Panda3DS.git
synced 2025-04-07 22:55:40 +12:00
Add setting for ubershaders
This commit is contained in:
parent
a4ec770587
commit
aad7bb817e
6 changed files with 15 additions and 1 deletions
|
@ -13,8 +13,11 @@ struct EmulatorConfig {
|
||||||
static constexpr bool shaderJitDefault = false;
|
static constexpr bool shaderJitDefault = false;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static constexpr bool ubershaderDefault = true;
|
||||||
|
|
||||||
bool shaderJitEnabled = shaderJitDefault;
|
bool shaderJitEnabled = shaderJitDefault;
|
||||||
bool discordRpcEnabled = false;
|
bool discordRpcEnabled = false;
|
||||||
|
bool useUbershaders = ubershaderDefault;
|
||||||
bool accurateShaderMul = false;
|
bool accurateShaderMul = false;
|
||||||
RendererType rendererType = RendererType::OpenGL;
|
RendererType rendererType = RendererType::OpenGL;
|
||||||
Audio::DSPCore::Type dspType = Audio::DSPCore::Type::Null;
|
Audio::DSPCore::Type dspType = Audio::DSPCore::Type::Null;
|
||||||
|
|
|
@ -74,6 +74,8 @@ class Renderer {
|
||||||
virtual std::string getUbershader() { return ""; }
|
virtual std::string getUbershader() { return ""; }
|
||||||
virtual void setUbershader(const std::string& shader) {}
|
virtual void setUbershader(const std::string& shader) {}
|
||||||
|
|
||||||
|
virtual void setUbershaderSetting(bool value) {}
|
||||||
|
|
||||||
// Functions for initializing the graphics context for the Qt frontend, where we don't have the convenience of SDL_Window
|
// Functions for initializing the graphics context for the Qt frontend, where we don't have the convenience of SDL_Window
|
||||||
#ifdef PANDA3DS_FRONTEND_QT
|
#ifdef PANDA3DS_FRONTEND_QT
|
||||||
virtual void initGraphicsContext(GL::Context* context) { Helpers::panic("Tried to initialize incompatible renderer with GL context"); }
|
virtual void initGraphicsContext(GL::Context* context) { Helpers::panic("Tried to initialize incompatible renderer with GL context"); }
|
||||||
|
|
|
@ -30,6 +30,7 @@ class RendererGL final : public Renderer {
|
||||||
|
|
||||||
OpenGL::VertexArray vao;
|
OpenGL::VertexArray vao;
|
||||||
OpenGL::VertexBuffer vbo;
|
OpenGL::VertexBuffer vbo;
|
||||||
|
bool usingUbershader = true;
|
||||||
|
|
||||||
// Data
|
// Data
|
||||||
struct {
|
struct {
|
||||||
|
@ -56,7 +57,6 @@ class RendererGL final : public Renderer {
|
||||||
SurfaceCache<DepthBuffer, 16, true> depthBufferCache;
|
SurfaceCache<DepthBuffer, 16, true> depthBufferCache;
|
||||||
SurfaceCache<ColourBuffer, 16, true> colourBufferCache;
|
SurfaceCache<ColourBuffer, 16, true> colourBufferCache;
|
||||||
SurfaceCache<Texture, 256, true> textureCache;
|
SurfaceCache<Texture, 256, true> textureCache;
|
||||||
bool usingUbershader = false;
|
|
||||||
|
|
||||||
// Dummy VAO/VBO for blitting the final output
|
// Dummy VAO/VBO for blitting the final output
|
||||||
OpenGL::VertexArray dummyVAO;
|
OpenGL::VertexArray dummyVAO;
|
||||||
|
@ -107,6 +107,8 @@ class RendererGL final : public Renderer {
|
||||||
virtual std::string getUbershader() override;
|
virtual std::string getUbershader() override;
|
||||||
virtual void setUbershader(const std::string& shader) override;
|
virtual void setUbershader(const std::string& shader) override;
|
||||||
|
|
||||||
|
virtual void setUbershaderSetting(bool value) override { usingUbershader = value; }
|
||||||
|
|
||||||
std::optional<ColourBuffer> getColourBuffer(u32 addr, PICA::ColorFmt format, u32 width, u32 height, bool createIfnotFound = true);
|
std::optional<ColourBuffer> getColourBuffer(u32 addr, PICA::ColorFmt format, u32 width, u32 height, bool createIfnotFound = true);
|
||||||
|
|
||||||
// Note: The caller is responsible for deleting the currently bound FBO before calling this
|
// Note: The caller is responsible for deleting the currently bound FBO before calling this
|
||||||
|
|
|
@ -62,6 +62,7 @@ void EmulatorConfig::load() {
|
||||||
|
|
||||||
shaderJitEnabled = toml::find_or<toml::boolean>(gpu, "EnableShaderJIT", shaderJitDefault);
|
shaderJitEnabled = toml::find_or<toml::boolean>(gpu, "EnableShaderJIT", shaderJitDefault);
|
||||||
vsyncEnabled = toml::find_or<toml::boolean>(gpu, "EnableVSync", true);
|
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);
|
accurateShaderMul = toml::find_or<toml::boolean>(gpu, "AccurateShaderMultiplication", false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -123,10 +124,13 @@ void EmulatorConfig::save() {
|
||||||
data["General"]["EnableDiscordRPC"] = discordRpcEnabled;
|
data["General"]["EnableDiscordRPC"] = discordRpcEnabled;
|
||||||
data["General"]["UsePortableBuild"] = usePortableBuild;
|
data["General"]["UsePortableBuild"] = usePortableBuild;
|
||||||
data["General"]["DefaultRomPath"] = defaultRomPath.string();
|
data["General"]["DefaultRomPath"] = defaultRomPath.string();
|
||||||
|
|
||||||
data["GPU"]["EnableShaderJIT"] = shaderJitEnabled;
|
data["GPU"]["EnableShaderJIT"] = shaderJitEnabled;
|
||||||
data["GPU"]["Renderer"] = std::string(Renderer::typeToString(rendererType));
|
data["GPU"]["Renderer"] = std::string(Renderer::typeToString(rendererType));
|
||||||
data["GPU"]["EnableVSync"] = vsyncEnabled;
|
data["GPU"]["EnableVSync"] = vsyncEnabled;
|
||||||
data["GPU"]["AccurateShaderMultiplication"] = accurateShaderMul;
|
data["GPU"]["AccurateShaderMultiplication"] = accurateShaderMul;
|
||||||
|
data["GPU"]["UseUbershaders"] = useUbershaders;
|
||||||
|
|
||||||
data["Audio"]["DSPEmulation"] = std::string(Audio::DSPCore::typeToString(dspType));
|
data["Audio"]["DSPEmulation"] = std::string(Audio::DSPCore::typeToString(dspType));
|
||||||
data["Audio"]["EnableAudio"] = audioEnabled;
|
data["Audio"]["EnableAudio"] = audioEnabled;
|
||||||
|
|
||||||
|
|
|
@ -110,6 +110,7 @@ void GPU::reset() {
|
||||||
externalRegs[Framebuffer1Config] = static_cast<u32>(PICA::ColorFmt::RGB8);
|
externalRegs[Framebuffer1Config] = static_cast<u32>(PICA::ColorFmt::RGB8);
|
||||||
externalRegs[Framebuffer1Select] = 0;
|
externalRegs[Framebuffer1Select] = 0;
|
||||||
|
|
||||||
|
renderer->setUbershaderSetting(config.useUbershaders);
|
||||||
renderer->reset();
|
renderer->reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -147,6 +147,7 @@ static void configInit() {
|
||||||
static const retro_variable values[] = {
|
static const retro_variable values[] = {
|
||||||
{"panda3ds_use_shader_jit", "Enable shader JIT; enabled|disabled"},
|
{"panda3ds_use_shader_jit", "Enable shader JIT; enabled|disabled"},
|
||||||
{"panda3ds_accurate_shader_mul", "Enable accurate shader multiplication; disabled|enabled"},
|
{"panda3ds_accurate_shader_mul", "Enable accurate shader multiplication; disabled|enabled"},
|
||||||
|
{"panda3ds_use_ubershader", "Use ubershaders (No stutter, maybe slower); enabled|disabled"},
|
||||||
{"panda3ds_use_vsync", "Enable VSync; enabled|disabled"},
|
{"panda3ds_use_vsync", "Enable VSync; enabled|disabled"},
|
||||||
{"panda3ds_dsp_emulation", "DSP emulation; Null|HLE|LLE"},
|
{"panda3ds_dsp_emulation", "DSP emulation; Null|HLE|LLE"},
|
||||||
{"panda3ds_use_audio", "Enable audio; disabled|enabled"},
|
{"panda3ds_use_audio", "Enable audio; disabled|enabled"},
|
||||||
|
@ -173,6 +174,7 @@ static void configUpdate() {
|
||||||
config.sdCardInserted = FetchVariableBool("panda3ds_use_virtual_sd", true);
|
config.sdCardInserted = FetchVariableBool("panda3ds_use_virtual_sd", true);
|
||||||
config.sdWriteProtected = FetchVariableBool("panda3ds_write_protect_virtual_sd", false);
|
config.sdWriteProtected = FetchVariableBool("panda3ds_write_protect_virtual_sd", false);
|
||||||
config.accurateShaderMul = FetchVariableBool("panda3ds_accurate_shader_mul", false);
|
config.accurateShaderMul = FetchVariableBool("panda3ds_accurate_shader_mul", false);
|
||||||
|
config.useUbershaders = FetchVariableBool("panda3ds_use_ubershader", true);
|
||||||
config.discordRpcEnabled = false;
|
config.discordRpcEnabled = false;
|
||||||
|
|
||||||
config.save();
|
config.save();
|
||||||
|
|
Loading…
Add table
Reference in a new issue