summaryrefslogtreecommitdiff
path: root/src/common
diff options
context:
space:
mode:
Diffstat (limited to 'src/common')
-rw-r--r--src/common/CMakeLists.txt66
-rw-r--r--src/common/logging/filter.cpp4
-rw-r--r--src/common/logging/types.h4
-rw-r--r--src/common/scm_rev.cpp.in2
-rw-r--r--src/common/settings.cpp4
-rw-r--r--src/common/settings.h11
-rw-r--r--src/common/thread_worker.h3
7 files changed, 24 insertions, 70 deletions
diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt
index e03fffd8d..57922b51c 100644
--- a/src/common/CMakeLists.txt
+++ b/src/common/CMakeLists.txt
@@ -1,8 +1,3 @@
1# Add a custom command to generate a new shader_cache_version hash when any of the following files change
2# NOTE: This is an approximation of what files affect shader generation, its possible something else
3# could affect the result, but much more unlikely than the following files. Keeping a list of files
4# like this allows for much better caching since it doesn't force the user to recompile binary shaders every update
5set(VIDEO_CORE "${CMAKE_SOURCE_DIR}/src/video_core")
6if (DEFINED ENV{AZURECIREPO}) 1if (DEFINED ENV{AZURECIREPO})
7 set(BUILD_REPOSITORY $ENV{AZURECIREPO}) 2 set(BUILD_REPOSITORY $ENV{AZURECIREPO})
8endif() 3endif()
@@ -30,64 +25,7 @@ add_custom_command(OUTPUT scm_rev.cpp
30 -DGIT_EXECUTABLE=${GIT_EXECUTABLE} 25 -DGIT_EXECUTABLE=${GIT_EXECUTABLE}
31 -P ${CMAKE_SOURCE_DIR}/CMakeModules/GenerateSCMRev.cmake 26 -P ${CMAKE_SOURCE_DIR}/CMakeModules/GenerateSCMRev.cmake
32 DEPENDS 27 DEPENDS
33 # WARNING! It was too much work to try and make a common location for this list, 28 # Check that the scm_rev files haven't changed
34 # so if you need to change it, please update CMakeModules/GenerateSCMRev.cmake as well
35 "${VIDEO_CORE}/renderer_opengl/gl_arb_decompiler.cpp"
36 "${VIDEO_CORE}/renderer_opengl/gl_arb_decompiler.h"
37 "${VIDEO_CORE}/renderer_opengl/gl_shader_cache.cpp"
38 "${VIDEO_CORE}/renderer_opengl/gl_shader_cache.h"
39 "${VIDEO_CORE}/renderer_opengl/gl_shader_decompiler.cpp"
40 "${VIDEO_CORE}/renderer_opengl/gl_shader_decompiler.h"
41 "${VIDEO_CORE}/renderer_opengl/gl_shader_disk_cache.cpp"
42 "${VIDEO_CORE}/renderer_opengl/gl_shader_disk_cache.h"
43 "${VIDEO_CORE}/shader/decode/arithmetic.cpp"
44 "${VIDEO_CORE}/shader/decode/arithmetic_half.cpp"
45 "${VIDEO_CORE}/shader/decode/arithmetic_half_immediate.cpp"
46 "${VIDEO_CORE}/shader/decode/arithmetic_immediate.cpp"
47 "${VIDEO_CORE}/shader/decode/arithmetic_integer.cpp"
48 "${VIDEO_CORE}/shader/decode/arithmetic_integer_immediate.cpp"
49 "${VIDEO_CORE}/shader/decode/bfe.cpp"
50 "${VIDEO_CORE}/shader/decode/bfi.cpp"
51 "${VIDEO_CORE}/shader/decode/conversion.cpp"
52 "${VIDEO_CORE}/shader/decode/ffma.cpp"
53 "${VIDEO_CORE}/shader/decode/float_set.cpp"
54 "${VIDEO_CORE}/shader/decode/float_set_predicate.cpp"
55 "${VIDEO_CORE}/shader/decode/half_set.cpp"
56 "${VIDEO_CORE}/shader/decode/half_set_predicate.cpp"
57 "${VIDEO_CORE}/shader/decode/hfma2.cpp"
58 "${VIDEO_CORE}/shader/decode/image.cpp"
59 "${VIDEO_CORE}/shader/decode/integer_set.cpp"
60 "${VIDEO_CORE}/shader/decode/integer_set_predicate.cpp"
61 "${VIDEO_CORE}/shader/decode/memory.cpp"
62 "${VIDEO_CORE}/shader/decode/texture.cpp"
63 "${VIDEO_CORE}/shader/decode/other.cpp"
64 "${VIDEO_CORE}/shader/decode/predicate_set_predicate.cpp"
65 "${VIDEO_CORE}/shader/decode/predicate_set_register.cpp"
66 "${VIDEO_CORE}/shader/decode/register_set_predicate.cpp"
67 "${VIDEO_CORE}/shader/decode/shift.cpp"
68 "${VIDEO_CORE}/shader/decode/video.cpp"
69 "${VIDEO_CORE}/shader/decode/warp.cpp"
70 "${VIDEO_CORE}/shader/decode/xmad.cpp"
71 "${VIDEO_CORE}/shader/ast.cpp"
72 "${VIDEO_CORE}/shader/ast.h"
73 "${VIDEO_CORE}/shader/compiler_settings.cpp"
74 "${VIDEO_CORE}/shader/compiler_settings.h"
75 "${VIDEO_CORE}/shader/control_flow.cpp"
76 "${VIDEO_CORE}/shader/control_flow.h"
77 "${VIDEO_CORE}/shader/decode.cpp"
78 "${VIDEO_CORE}/shader/expr.cpp"
79 "${VIDEO_CORE}/shader/expr.h"
80 "${VIDEO_CORE}/shader/node.h"
81 "${VIDEO_CORE}/shader/node_helper.cpp"
82 "${VIDEO_CORE}/shader/node_helper.h"
83 "${VIDEO_CORE}/shader/registry.cpp"
84 "${VIDEO_CORE}/shader/registry.h"
85 "${VIDEO_CORE}/shader/shader_ir.cpp"
86 "${VIDEO_CORE}/shader/shader_ir.h"
87 "${VIDEO_CORE}/shader/track.cpp"
88 "${VIDEO_CORE}/shader/transform_feedback.cpp"
89 "${VIDEO_CORE}/shader/transform_feedback.h"
90 # and also check that the scm_rev files haven't changed
91 "${CMAKE_CURRENT_SOURCE_DIR}/scm_rev.cpp.in" 29 "${CMAKE_CURRENT_SOURCE_DIR}/scm_rev.cpp.in"
92 "${CMAKE_CURRENT_SOURCE_DIR}/scm_rev.h" 30 "${CMAKE_CURRENT_SOURCE_DIR}/scm_rev.h"
93 # technically we should regenerate if the git version changed, but its not worth the effort imo 31 # technically we should regenerate if the git version changed, but its not worth the effort imo
@@ -231,7 +169,7 @@ endif()
231 169
232create_target_directory_groups(common) 170create_target_directory_groups(common)
233 171
234target_link_libraries(common PUBLIC ${Boost_LIBRARIES} fmt::fmt microprofile) 172target_link_libraries(common PUBLIC ${Boost_LIBRARIES} fmt::fmt microprofile Threads::Threads)
235target_link_libraries(common PRIVATE lz4::lz4 xbyak) 173target_link_libraries(common PRIVATE lz4::lz4 xbyak)
236if (MSVC) 174if (MSVC)
237 target_link_libraries(common PRIVATE zstd::zstd) 175 target_link_libraries(common PRIVATE zstd::zstd)
diff --git a/src/common/logging/filter.cpp b/src/common/logging/filter.cpp
index 4f2cc29e1..f055f0e11 100644
--- a/src/common/logging/filter.cpp
+++ b/src/common/logging/filter.cpp
@@ -144,6 +144,10 @@ bool ParseFilterRule(Filter& instance, Iterator begin, Iterator end) {
144 SUB(Render, Software) \ 144 SUB(Render, Software) \
145 SUB(Render, OpenGL) \ 145 SUB(Render, OpenGL) \
146 SUB(Render, Vulkan) \ 146 SUB(Render, Vulkan) \
147 CLS(Shader) \
148 SUB(Shader, SPIRV) \
149 SUB(Shader, GLASM) \
150 SUB(Shader, GLSL) \
147 CLS(Audio) \ 151 CLS(Audio) \
148 SUB(Audio, DSP) \ 152 SUB(Audio, DSP) \
149 SUB(Audio, Sink) \ 153 SUB(Audio, Sink) \
diff --git a/src/common/logging/types.h b/src/common/logging/types.h
index 88b0e9c01..7ad0334fc 100644
--- a/src/common/logging/types.h
+++ b/src/common/logging/types.h
@@ -114,6 +114,10 @@ enum class Class : u8 {
114 Render_Software, ///< Software renderer backend 114 Render_Software, ///< Software renderer backend
115 Render_OpenGL, ///< OpenGL backend 115 Render_OpenGL, ///< OpenGL backend
116 Render_Vulkan, ///< Vulkan backend 116 Render_Vulkan, ///< Vulkan backend
117 Shader, ///< Shader recompiler
118 Shader_SPIRV, ///< Shader SPIR-V code generation
119 Shader_GLASM, ///< Shader GLASM code generation
120 Shader_GLSL, ///< Shader GLSL code generation
117 Audio, ///< Audio emulation 121 Audio, ///< Audio emulation
118 Audio_DSP, ///< The HLE implementation of the DSP 122 Audio_DSP, ///< The HLE implementation of the DSP
119 Audio_Sink, ///< Emulator audio output backend 123 Audio_Sink, ///< Emulator audio output backend
diff --git a/src/common/scm_rev.cpp.in b/src/common/scm_rev.cpp.in
index 5f126f324..cc88994c6 100644
--- a/src/common/scm_rev.cpp.in
+++ b/src/common/scm_rev.cpp.in
@@ -14,7 +14,6 @@
14#define BUILD_ID "@BUILD_ID@" 14#define BUILD_ID "@BUILD_ID@"
15#define TITLE_BAR_FORMAT_IDLE "@TITLE_BAR_FORMAT_IDLE@" 15#define TITLE_BAR_FORMAT_IDLE "@TITLE_BAR_FORMAT_IDLE@"
16#define TITLE_BAR_FORMAT_RUNNING "@TITLE_BAR_FORMAT_RUNNING@" 16#define TITLE_BAR_FORMAT_RUNNING "@TITLE_BAR_FORMAT_RUNNING@"
17#define SHADER_CACHE_VERSION "@SHADER_CACHE_VERSION@"
18 17
19namespace Common { 18namespace Common {
20 19
@@ -28,7 +27,6 @@ const char g_build_version[] = BUILD_VERSION;
28const char g_build_id[] = BUILD_ID; 27const char g_build_id[] = BUILD_ID;
29const char g_title_bar_format_idle[] = TITLE_BAR_FORMAT_IDLE; 28const char g_title_bar_format_idle[] = TITLE_BAR_FORMAT_IDLE;
30const char g_title_bar_format_running[] = TITLE_BAR_FORMAT_RUNNING; 29const char g_title_bar_format_running[] = TITLE_BAR_FORMAT_RUNNING;
31const char g_shader_cache_version[] = SHADER_CACHE_VERSION;
32 30
33} // namespace 31} // namespace
34 32
diff --git a/src/common/settings.cpp b/src/common/settings.cpp
index bf5514386..66268ea0f 100644
--- a/src/common/settings.cpp
+++ b/src/common/settings.cpp
@@ -57,7 +57,7 @@ void LogSettings() {
57 log_setting("Renderer_UseNvdecEmulation", values.use_nvdec_emulation.GetValue()); 57 log_setting("Renderer_UseNvdecEmulation", values.use_nvdec_emulation.GetValue());
58 log_setting("Renderer_AccelerateASTC", values.accelerate_astc.GetValue()); 58 log_setting("Renderer_AccelerateASTC", values.accelerate_astc.GetValue());
59 log_setting("Renderer_UseVsync", values.use_vsync.GetValue()); 59 log_setting("Renderer_UseVsync", values.use_vsync.GetValue());
60 log_setting("Renderer_UseAssemblyShaders", values.use_assembly_shaders.GetValue()); 60 log_setting("Renderer_ShaderBackend", values.shader_backend.GetValue());
61 log_setting("Renderer_UseAsynchronousShaders", values.use_asynchronous_shaders.GetValue()); 61 log_setting("Renderer_UseAsynchronousShaders", values.use_asynchronous_shaders.GetValue());
62 log_setting("Renderer_UseGarbageCollection", values.use_caches_gc.GetValue()); 62 log_setting("Renderer_UseGarbageCollection", values.use_caches_gc.GetValue());
63 log_setting("Renderer_AnisotropicFilteringLevel", values.max_anisotropy.GetValue()); 63 log_setting("Renderer_AnisotropicFilteringLevel", values.max_anisotropy.GetValue());
@@ -140,7 +140,7 @@ void RestoreGlobalState(bool is_powered_on) {
140 values.use_nvdec_emulation.SetGlobal(true); 140 values.use_nvdec_emulation.SetGlobal(true);
141 values.accelerate_astc.SetGlobal(true); 141 values.accelerate_astc.SetGlobal(true);
142 values.use_vsync.SetGlobal(true); 142 values.use_vsync.SetGlobal(true);
143 values.use_assembly_shaders.SetGlobal(true); 143 values.shader_backend.SetGlobal(true);
144 values.use_asynchronous_shaders.SetGlobal(true); 144 values.use_asynchronous_shaders.SetGlobal(true);
145 values.use_fast_gpu_time.SetGlobal(true); 145 values.use_fast_gpu_time.SetGlobal(true);
146 values.use_caches_gc.SetGlobal(true); 146 values.use_caches_gc.SetGlobal(true);
diff --git a/src/common/settings.h b/src/common/settings.h
index 8ad320aed..df1762d1b 100644
--- a/src/common/settings.h
+++ b/src/common/settings.h
@@ -24,6 +24,12 @@ enum class RendererBackend : u32 {
24 Vulkan = 1, 24 Vulkan = 1,
25}; 25};
26 26
27enum class ShaderBackend : u32 {
28 GLSL = 0,
29 GLASM = 1,
30 SPIRV = 2,
31};
32
27enum class GPUAccuracy : u32 { 33enum class GPUAccuracy : u32 {
28 Normal = 0, 34 Normal = 0,
29 High = 1, 35 High = 1,
@@ -308,6 +314,9 @@ struct Values {
308 // Renderer 314 // Renderer
309 Setting<RendererBackend> renderer_backend{RendererBackend::OpenGL, "backend"}; 315 Setting<RendererBackend> renderer_backend{RendererBackend::OpenGL, "backend"};
310 BasicSetting<bool> renderer_debug{false, "debug"}; 316 BasicSetting<bool> renderer_debug{false, "debug"};
317 BasicSetting<bool> enable_nsight_aftermath{false, "nsight_aftermath"};
318 BasicSetting<bool> disable_shader_loop_safety_checks{false,
319 "disable_shader_loop_safety_checks"};
311 Setting<int> vulkan_device{0, "vulkan_device"}; 320 Setting<int> vulkan_device{0, "vulkan_device"};
312 321
313 Setting<u16> resolution_factor{1, "resolution_factor"}; 322 Setting<u16> resolution_factor{1, "resolution_factor"};
@@ -332,7 +341,7 @@ struct Values {
332 Setting<bool> use_vsync{true, "use_vsync"}; 341 Setting<bool> use_vsync{true, "use_vsync"};
333 BasicSetting<u16> fps_cap{1000, "fps_cap"}; 342 BasicSetting<u16> fps_cap{1000, "fps_cap"};
334 BasicSetting<bool> disable_fps_limit{false, "disable_fps_limit"}; 343 BasicSetting<bool> disable_fps_limit{false, "disable_fps_limit"};
335 Setting<bool> use_assembly_shaders{false, "use_assembly_shaders"}; 344 Setting<ShaderBackend> shader_backend{ShaderBackend::GLASM, "shader_backend"};
336 Setting<bool> use_asynchronous_shaders{false, "use_asynchronous_shaders"}; 345 Setting<bool> use_asynchronous_shaders{false, "use_asynchronous_shaders"};
337 Setting<bool> use_fast_gpu_time{true, "use_fast_gpu_time"}; 346 Setting<bool> use_fast_gpu_time{true, "use_fast_gpu_time"};
338 Setting<bool> use_caches_gc{false, "use_caches_gc"}; 347 Setting<bool> use_caches_gc{false, "use_caches_gc"};
diff --git a/src/common/thread_worker.h b/src/common/thread_worker.h
index 8272985ff..cd0017726 100644
--- a/src/common/thread_worker.h
+++ b/src/common/thread_worker.h
@@ -5,6 +5,7 @@
5#pragma once 5#pragma once
6 6
7#include <atomic> 7#include <atomic>
8#include <condition_variable>
8#include <functional> 9#include <functional>
9#include <mutex> 10#include <mutex>
10#include <stop_token> 11#include <stop_token>
@@ -39,7 +40,7 @@ public:
39 const auto lambda = [this, func](std::stop_token stop_token) { 40 const auto lambda = [this, func](std::stop_token stop_token) {
40 Common::SetCurrentThreadName(thread_name.c_str()); 41 Common::SetCurrentThreadName(thread_name.c_str());
41 { 42 {
42 std::conditional_t<with_state, StateType, int> state{func()}; 43 [[maybe_unused]] std::conditional_t<with_state, StateType, int> state{func()};
43 while (!stop_token.stop_requested()) { 44 while (!stop_token.stop_requested()) {
44 Task task; 45 Task task;
45 { 46 {