Vulkan renderer setting was reset to off when starting a game

This commit is contained in:
Flyinghead 2021-03-03 09:40:52 +01:00
parent 60ae4bcfc1
commit ca107953fe
7 changed files with 35 additions and 37 deletions

View File

@ -23,8 +23,6 @@
#include "cfg.h" #include "cfg.h"
#include "hw/maple/maple_cfg.h" #include "hw/maple/maple_cfg.h"
extern int renderer_changed;
namespace config { namespace config {
class BaseOption { class BaseOption {
@ -113,7 +111,7 @@ public:
} }
virtual void reset() override { virtual void reset() override {
value = defaultValue; set(defaultValue);
overridden = false; overridden = false;
} }
@ -316,25 +314,35 @@ public:
bool isOpenGL() const { bool isOpenGL() const {
return value == RenderType::OpenGL || value == RenderType::OpenGL_OIT; return value == RenderType::OpenGL || value == RenderType::OpenGL_OIT;
} }
void set(RenderType v)
{
newValue = v;
}
RenderType& operator=(const RenderType& v) { set(v); return value; } RenderType& operator=(const RenderType& v) { set(v); return value; }
virtual void load() override { virtual void load() override {
RenderType current = value; RenderType current = value;
Option<RenderType>::load(); Option<RenderType>::load();
if (current != value) { newValue = value;
::renderer_changed = (int)value; value = current;
value = current;
}
} }
virtual void reset() override { virtual void reset() override {
RenderType current = value; RenderType current = value;
Option<RenderType>::reset(); Option<RenderType>::reset();
if (current != value) { newValue = value;
::renderer_changed = (int)value; value = current;
value = current;
}
} }
bool pendingChange() {
return newValue != value;
}
void commit() {
value = newValue;
}
private:
RenderType newValue = RenderType();
}; };
extern RendererOption RendererType; extern RendererOption RendererType;
extern Option<bool> UseMipmaps; extern Option<bool> UseMipmaps;

View File

@ -405,8 +405,7 @@ int reicast_init(int argc, char* argv[])
config::Settings::instance().load(false); config::Settings::instance().load(false);
} }
// Force the renderer type now since we're not switching // Force the renderer type now since we're not switching
if (renderer_changed != -1) config::RendererType.commit();
config::RendererType = (RenderType)renderer_changed;
os_CreateWindow(); os_CreateWindow();
os_SetupInput(); os_SetupInput();

View File

@ -1613,7 +1613,7 @@ static void gui_display_settings()
if (vulkan != !config::RendererType.isOpenGL()) if (vulkan != !config::RendererType.isOpenGL())
pvr_rend = !vulkan ? RenderType::OpenGL pvr_rend = !vulkan ? RenderType::OpenGL
: config::RendererType == RenderType::OpenGL_OIT ? RenderType::Vulkan_OIT : RenderType::Vulkan; : config::RendererType == RenderType::OpenGL_OIT ? RenderType::Vulkan_OIT : RenderType::Vulkan;
renderer_changed = (int)pvr_rend; config::RendererType = pvr_rend;
} }
void gui_display_notification(const char *msg, int duration) void gui_display_notification(const char *msg, int duration)

View File

@ -26,8 +26,8 @@
#include "cfg/option.h" #include "cfg/option.h"
bool mainui_enabled; bool mainui_enabled;
int renderer_changed = -1; // Signals the renderer thread to switch renderer
u32 MainFrameCount; u32 MainFrameCount;
static bool forceReinit;
void UpdateInputState(); void UpdateInputState();
@ -69,7 +69,6 @@ void mainui_term()
void mainui_loop() void mainui_loop()
{ {
mainui_enabled = true; mainui_enabled = true;
renderer_changed = (int)(RenderType)config::RendererType;
mainui_init(); mainui_init();
while (mainui_enabled) while (mainui_enabled)
@ -84,21 +83,16 @@ void mainui_loop()
#endif #endif
} }
if (renderer_changed != (int)(RenderType)config::RendererType) if (config::RendererType.pendingChange() || forceReinit)
{ {
bool openGl = config::RendererType.isOpenGL();
mainui_term(); mainui_term();
if (renderer_changed == -1 config::RendererType.commit();
|| config::RendererType.isOpenGL() != ((RenderType)renderer_changed == RenderType::OpenGL || (RenderType)renderer_changed == RenderType::OpenGL_OIT)) if (openGl != config::RendererType.isOpenGL() || forceReinit)
{
// Switch between vulkan and opengl (or full reinit) // Switch between vulkan and opengl (or full reinit)
SwitchRenderApi(renderer_changed == -1 ? config::RendererType : (RenderType)renderer_changed); SwitchRenderApi();
}
else
{
config::RendererType = (RenderType)renderer_changed;
}
renderer_changed = (int)(RenderType)config::RendererType;
mainui_init(); mainui_init();
forceReinit = false;
} }
} }
@ -112,5 +106,5 @@ void mainui_stop()
void mainui_reinit() void mainui_reinit()
{ {
renderer_changed = -1; forceReinit = true;
} }

View File

@ -20,7 +20,6 @@
#include "types.h" #include "types.h"
extern bool mainui_enabled; // Signals the UI thread to exit extern bool mainui_enabled; // Signals the UI thread to exit
extern int renderer_changed; // Signals the UI thread to switch renderer when different from settings.pvr.rend
extern u32 MainFrameCount; extern u32 MainFrameCount;
bool mainui_rend_frame(); bool mainui_rend_frame();

View File

@ -26,6 +26,11 @@
extern VulkanContext theVulkanContext; extern VulkanContext theVulkanContext;
#endif #endif
void InitRenderApi(); void InitRenderApi();
void SwitchRenderApi(RenderType newApi);
void TermRenderApi(); void TermRenderApi();
static inline void SwitchRenderApi()
{
TermRenderApi();
InitRenderApi();
}

View File

@ -42,13 +42,6 @@ void InitRenderApi()
exit(1); exit(1);
} }
void SwitchRenderApi(RenderType newApi)
{
TermRenderApi();
config::RendererType = newApi;
InitRenderApi();
}
void TermRenderApi() void TermRenderApi()
{ {
#ifdef USE_VULKAN #ifdef USE_VULKAN