diff --git a/src/core/gpu_backend.cpp b/src/core/gpu_backend.cpp index dc841bdde..a8b17818a 100644 --- a/src/core/gpu_backend.cpp +++ b/src/core/gpu_backend.cpp @@ -2,7 +2,6 @@ // SPDX-License-Identifier: CC-BY-NC-ND-4.0 #include "gpu_backend.h" -#include "settings.h" #include "util/state_wrapper.h" @@ -18,9 +17,9 @@ GPUBackend::GPUBackend() = default; GPUBackend::~GPUBackend() = default; -bool GPUBackend::Initialize(bool force_thread) +bool GPUBackend::Initialize(bool use_thread) { - if (force_thread || g_settings.gpu_use_thread) + if (use_thread) StartGPUThread(); return true; @@ -32,13 +31,13 @@ void GPUBackend::Reset() DrawingAreaChanged(GPUDrawingArea{0, 0, 0, 0}, GSVector4i::zero()); } -void GPUBackend::UpdateSettings() +void GPUBackend::SetThreadEnabled(bool use_thread) { Sync(true); - if (m_use_gpu_thread != g_settings.gpu_use_thread) + if (m_use_gpu_thread != use_thread) { - if (!g_settings.gpu_use_thread) + if (!use_thread) StopGPUThread(); else StartGPUThread(); diff --git a/src/core/gpu_backend.h b/src/core/gpu_backend.h index 4cf123f06..ea25a36a1 100644 --- a/src/core/gpu_backend.h +++ b/src/core/gpu_backend.h @@ -26,11 +26,12 @@ public: ALWAYS_INLINE const Threading::Thread* GetThread() const { return m_use_gpu_thread ? &m_gpu_thread : nullptr; } - virtual bool Initialize(bool force_thread); - virtual void UpdateSettings(); + virtual bool Initialize(bool use_thread); virtual void Reset(); virtual void Shutdown(); + void SetThreadEnabled(bool use_thread); + GPUBackendFillVRAMCommand* NewFillVRAMCommand(); GPUBackendUpdateVRAMCommand* NewUpdateVRAMCommand(u32 num_words); GPUBackendCopyVRAMCommand* NewCopyVRAMCommand(); diff --git a/src/core/gpu_sw.cpp b/src/core/gpu_sw.cpp index c8119c3a2..db87f2944 100644 --- a/src/core/gpu_sw.cpp +++ b/src/core/gpu_sw.cpp @@ -2,6 +2,7 @@ // SPDX-License-Identifier: CC-BY-NC-ND-4.0 #include "gpu_sw.h" +#include "settings.h" #include "system.h" #include "util/gpu_device.h" @@ -36,7 +37,7 @@ bool GPU_SW::IsHardwareRenderer() const bool GPU_SW::Initialize() { - if (!GPU::Initialize() || !m_backend.Initialize(false)) + if (!GPU::Initialize() || !m_backend.Initialize(g_settings.gpu_use_thread)) return false; static constexpr const std::array formats_for_16bit = {GPUTexture::Format::RGB565, GPUTexture::Format::RGBA5551, @@ -82,7 +83,8 @@ void GPU_SW::Reset(bool clear_vram) void GPU_SW::UpdateSettings(const Settings& old_settings) { GPU::UpdateSettings(old_settings); - m_backend.UpdateSettings(); + if (g_settings.gpu_use_thread != old_settings.gpu_use_thread) + m_backend.SetThreadEnabled(g_settings.gpu_use_thread); } GPUTexture* GPU_SW::GetDisplayTexture(u32 width, u32 height, GPUTexture::Format format) diff --git a/src/core/gpu_sw_backend.cpp b/src/core/gpu_sw_backend.cpp index 57e5e5196..0ab2e68e8 100644 --- a/src/core/gpu_sw_backend.cpp +++ b/src/core/gpu_sw_backend.cpp @@ -14,9 +14,9 @@ GPU_SW_Backend::GPU_SW_Backend() = default; GPU_SW_Backend::~GPU_SW_Backend() = default; -bool GPU_SW_Backend::Initialize(bool force_thread) +bool GPU_SW_Backend::Initialize(bool use_thread) { - return GPUBackend::Initialize(force_thread); + return GPUBackend::Initialize(use_thread); } void GPU_SW_Backend::Reset() diff --git a/src/core/gpu_sw_backend.h b/src/core/gpu_sw_backend.h index 6c51c008b..7f2c492ca 100644 --- a/src/core/gpu_sw_backend.h +++ b/src/core/gpu_sw_backend.h @@ -14,7 +14,7 @@ public: GPU_SW_Backend(); ~GPU_SW_Backend() override; - bool Initialize(bool force_thread) override; + bool Initialize(bool use_thread) override; void Reset() override; protected: diff --git a/src/core/gpu_sw_rasterizer.h b/src/core/gpu_sw_rasterizer.h index 3861d9945..cdc6e9d5e 100644 --- a/src/core/gpu_sw_rasterizer.h +++ b/src/core/gpu_sw_rasterizer.h @@ -9,7 +9,6 @@ #include "common/intrin.h" #include "common/types.h" -#include #include namespace GPU_SW_Rasterizer { @@ -76,7 +75,7 @@ ALWAYS_INLINE static DrawTriangleFunction GetDrawTriangleFunction(bool shading_e } // Have to define the symbols globally, because clang won't include them otherwise. -#if defined(CPU_ARCH_SSE) && defined(_MSC_VER) +#if defined(CPU_ARCH_SSE) && 0 #define ALTERNATIVE_RASTERIZER_LIST() DECLARE_ALTERNATIVE_RASTERIZER(AVX2) #else #define ALTERNATIVE_RASTERIZER_LIST() @@ -87,5 +86,3 @@ ALTERNATIVE_RASTERIZER_LIST() #undef DECLARE_ALTERNATIVE_RASTERIZER } // namespace GPU_SW_Rasterizer - -// static u32 s_bad_counter = 0;