diff options
Diffstat (limited to 'src/common')
| -rw-r--r-- | src/common/CMakeLists.txt | 66 | ||||
| -rw-r--r-- | src/common/logging/filter.cpp | 4 | ||||
| -rw-r--r-- | src/common/logging/types.h | 4 | ||||
| -rw-r--r-- | src/common/scm_rev.cpp.in | 2 | ||||
| -rw-r--r-- | src/common/settings.cpp | 4 | ||||
| -rw-r--r-- | src/common/settings.h | 11 | ||||
| -rw-r--r-- | src/common/thread_worker.h | 3 |
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 | ||
| 5 | set(VIDEO_CORE "${CMAKE_SOURCE_DIR}/src/video_core") | ||
| 6 | if (DEFINED ENV{AZURECIREPO}) | 1 | if (DEFINED ENV{AZURECIREPO}) |
| 7 | set(BUILD_REPOSITORY $ENV{AZURECIREPO}) | 2 | set(BUILD_REPOSITORY $ENV{AZURECIREPO}) |
| 8 | endif() | 3 | endif() |
| @@ -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 | ||
| 232 | create_target_directory_groups(common) | 170 | create_target_directory_groups(common) |
| 233 | 171 | ||
| 234 | target_link_libraries(common PUBLIC ${Boost_LIBRARIES} fmt::fmt microprofile) | 172 | target_link_libraries(common PUBLIC ${Boost_LIBRARIES} fmt::fmt microprofile Threads::Threads) |
| 235 | target_link_libraries(common PRIVATE lz4::lz4 xbyak) | 173 | target_link_libraries(common PRIVATE lz4::lz4 xbyak) |
| 236 | if (MSVC) | 174 | if (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 | ||
| 19 | namespace Common { | 18 | namespace Common { |
| 20 | 19 | ||
| @@ -28,7 +27,6 @@ const char g_build_version[] = BUILD_VERSION; | |||
| 28 | const char g_build_id[] = BUILD_ID; | 27 | const char g_build_id[] = BUILD_ID; |
| 29 | const char g_title_bar_format_idle[] = TITLE_BAR_FORMAT_IDLE; | 28 | const char g_title_bar_format_idle[] = TITLE_BAR_FORMAT_IDLE; |
| 30 | const char g_title_bar_format_running[] = TITLE_BAR_FORMAT_RUNNING; | 29 | const char g_title_bar_format_running[] = TITLE_BAR_FORMAT_RUNNING; |
| 31 | const 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 | ||
| 27 | enum class ShaderBackend : u32 { | ||
| 28 | GLSL = 0, | ||
| 29 | GLASM = 1, | ||
| 30 | SPIRV = 2, | ||
| 31 | }; | ||
| 32 | |||
| 27 | enum class GPUAccuracy : u32 { | 33 | enum 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 | { |