diff options
-rw-r--r-- | src/video_core/shader/async_shaders.cpp | 14 | ||||
-rw-r--r-- | src/video_core/shader_notify.cpp | 6 |
2 files changed, 13 insertions, 7 deletions
diff --git a/src/video_core/shader/async_shaders.cpp b/src/video_core/shader/async_shaders.cpp index 64fad46e7..b7f66d7ee 100644 --- a/src/video_core/shader/async_shaders.cpp +++ b/src/video_core/shader/async_shaders.cpp @@ -3,13 +3,19 @@ // Refer to the license.txt file included. #include <chrono> +#include <condition_variable> +#include <mutex> +#include <thread> +#include <vector> #include "video_core/engines/maxwell_3d.h" #include "video_core/renderer_base.h" #include "video_core/renderer_opengl/gl_shader_cache.h" #include "video_core/shader/async_shaders.h" namespace VideoCommon::Shader { + AsyncShaders::AsyncShaders(Core::Frontend::EmuWindow& emu_window) : emu_window(emu_window) {} + AsyncShaders::~AsyncShaders() { KillWorkers(); } @@ -64,7 +70,7 @@ bool AsyncShaders::HasWorkQueued() { } bool AsyncShaders::HasCompletedWork() { - std::shared_lock lock(completed_mutex); + std::shared_lock lock{completed_mutex}; return !finished_work.empty(); } @@ -90,7 +96,7 @@ bool AsyncShaders::IsShaderAsync(const Tegra::GPU& gpu) const { std::vector<AsyncShaders::Result> AsyncShaders::GetCompletedWork() { std::vector<AsyncShaders::Result> results; { - std::unique_lock lock(completed_mutex); + std::unique_lock lock{completed_mutex}; results.assign(std::make_move_iterator(finished_work.begin()), std::make_move_iterator(finished_work.end())); finished_work.clear(); @@ -124,8 +130,8 @@ void AsyncShaders::QueueOpenGLShader(const OpenGL::Device& device, void AsyncShaders::ShaderCompilerThread(Core::Frontend::GraphicsContext* context) { using namespace std::chrono_literals; while (!is_thread_exiting.load(std::memory_order_relaxed)) { - std::unique_lock<std::mutex> lock(queue_mutex); - cv.wait(lock, [&] { return HasWorkQueued() || is_thread_exiting; }); + std::unique_lock lock{queue_mutex}; + cv.wait(lock, [this] { return HasWorkQueued() || is_thread_exiting; }); if (is_thread_exiting) { return; } diff --git a/src/video_core/shader_notify.cpp b/src/video_core/shader_notify.cpp index 46fd0baae..c3c71657d 100644 --- a/src/video_core/shader_notify.cpp +++ b/src/video_core/shader_notify.cpp @@ -25,17 +25,17 @@ std::size_t ShaderNotify::GetShadersBuilding() { } std::size_t ShaderNotify::GetShadersBuildingAccurate() { - std::shared_lock lock(mutex); + std::shared_lock lock{mutex}; return accurate_count; } void ShaderNotify::MarkShaderComplete() { - std::unique_lock lock(mutex); + std::unique_lock lock{mutex}; accurate_count--; } void ShaderNotify::MarkSharderBuilding() { - std::unique_lock lock(mutex); + std::unique_lock lock{mutex}; accurate_count++; } |