HostInterface: Add function to switch between sw/hw rendering

This commit is contained in:
Connor McLaughlin
2020-01-24 14:51:53 +10:00
parent f2231d6669
commit 4a3478b360
11 changed files with 43 additions and 39 deletions

View File

@ -36,8 +36,8 @@ System::System(HostInterface* host_interface) : m_host_interface(host_interface)
m_spu = std::make_unique<SPU>();
m_mdec = std::make_unique<MDEC>();
m_sio = std::make_unique<SIO>();
m_region = host_interface->GetSettings().region;
m_cpu_execution_mode = host_interface->GetSettings().cpu_execution_mode;
m_region = host_interface->m_settings.region;
m_cpu_execution_mode = host_interface->m_settings.cpu_execution_mode;
}
System::~System() = default;
@ -45,13 +45,13 @@ System::~System() = default;
std::unique_ptr<System> System::Create(HostInterface* host_interface)
{
std::unique_ptr<System> system(new System(host_interface));
if (!system->CreateGPU())
if (!system->CreateGPU(host_interface->m_settings.gpu_renderer))
return {};
return system;
}
bool System::RecreateGPU()
bool System::RecreateGPU(GPURenderer renderer)
{
// save current state
std::unique_ptr<ByteStream> state_stream = ByteStream_CreateGrowableMemoryStream();
@ -62,7 +62,7 @@ bool System::RecreateGPU()
// create new renderer
m_gpu.reset();
if (!CreateGPU())
if (!CreateGPU(renderer))
{
Panic("Failed to recreate GPU");
return false;
@ -193,9 +193,9 @@ void System::InitializeComponents()
m_mdec->Initialize(this, m_dma.get());
}
bool System::CreateGPU()
bool System::CreateGPU(GPURenderer renderer)
{
switch (m_host_interface->GetSettings().gpu_renderer)
switch (renderer)
{
case GPURenderer::HardwareOpenGL:
m_gpu = m_host_interface->GetDisplay()->GetRenderAPI() == HostDisplay::RenderAPI::OpenGLES ?
@ -220,7 +220,6 @@ bool System::CreateGPU()
{
Log_ErrorPrintf("Failed to initialize GPU, falling back to software");
m_gpu.reset();
m_host_interface->GetSettings().gpu_renderer = GPURenderer::Software;
m_gpu = GPU::CreateSoftwareRenderer();
if (!m_gpu->Initialize(m_host_interface->GetDisplay(), this, m_dma.get(), m_interrupt_controller.get(),
m_timers.get()))