diff options
| author | 2023-11-26 21:08:53 -0500 | |
|---|---|---|
| committer | 2023-11-26 21:08:53 -0500 | |
| commit | 1d11fe00a3000efbf6a0a4bb690e0d544a1b7b4a (patch) | |
| tree | c219aacab776c0a1e3956614b60a01fa2f6164cb /src/common | |
| parent | shader_recompiler: Align SSBO offsets in GlobalMemory functions (diff) | |
| parent | Merge pull request #11535 from GPUCode/upload_cmdbuf (diff) | |
| download | yuzu-1d11fe00a3000efbf6a0a4bb690e0d544a1b7b4a.tar.gz yuzu-1d11fe00a3000efbf6a0a4bb690e0d544a1b7b4a.tar.xz yuzu-1d11fe00a3000efbf6a0a4bb690e0d544a1b7b4a.zip | |
Merge branch 'master' into ssbo-align
Diffstat (limited to '')
| -rw-r--r-- | src/common/arm64/native_clock.cpp | 21 | ||||
| -rw-r--r-- | src/common/page_table.cpp | 30 | ||||
| -rw-r--r-- | src/common/page_table.h | 17 | ||||
| -rw-r--r-- | src/common/settings.cpp | 6 | ||||
| -rw-r--r-- | src/common/settings.h | 46 | ||||
| -rw-r--r-- | src/common/settings_common.h | 1 | ||||
| -rw-r--r-- | src/common/settings_input.cpp | 9 | ||||
| -rw-r--r-- | src/common/settings_input.h | 7 |
8 files changed, 103 insertions, 34 deletions
diff --git a/src/common/arm64/native_clock.cpp b/src/common/arm64/native_clock.cpp index 88fdba527..f437d7187 100644 --- a/src/common/arm64/native_clock.cpp +++ b/src/common/arm64/native_clock.cpp | |||
| @@ -1,6 +1,9 @@ | |||
| 1 | // SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project | 1 | // SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project |
| 2 | // SPDX-License-Identifier: GPL-2.0-or-later | 2 | // SPDX-License-Identifier: GPL-2.0-or-later |
| 3 | 3 | ||
| 4 | #ifdef ANDROID | ||
| 5 | #include <sys/system_properties.h> | ||
| 6 | #endif | ||
| 4 | #include "common/arm64/native_clock.h" | 7 | #include "common/arm64/native_clock.h" |
| 5 | 8 | ||
| 6 | namespace Common::Arm64 { | 9 | namespace Common::Arm64 { |
| @@ -65,7 +68,23 @@ bool NativeClock::IsNative() const { | |||
| 65 | 68 | ||
| 66 | u64 NativeClock::GetHostCNTFRQ() { | 69 | u64 NativeClock::GetHostCNTFRQ() { |
| 67 | u64 cntfrq_el0 = 0; | 70 | u64 cntfrq_el0 = 0; |
| 68 | asm("mrs %[cntfrq_el0], cntfrq_el0" : [cntfrq_el0] "=r"(cntfrq_el0)); | 71 | std::string_view board{""}; |
| 72 | #ifdef ANDROID | ||
| 73 | char buffer[PROP_VALUE_MAX]; | ||
| 74 | int len{__system_property_get("ro.product.board", buffer)}; | ||
| 75 | board = std::string_view(buffer, static_cast<size_t>(len)); | ||
| 76 | #endif | ||
| 77 | if (board == "s5e9925") { // Exynos 2200 | ||
| 78 | cntfrq_el0 = 25600000; | ||
| 79 | } else if (board == "exynos2100") { // Exynos 2100 | ||
| 80 | cntfrq_el0 = 26000000; | ||
| 81 | } else if (board == "exynos9810") { // Exynos 9810 | ||
| 82 | cntfrq_el0 = 26000000; | ||
| 83 | } else if (board == "s5e8825") { // Exynos 1280 | ||
| 84 | cntfrq_el0 = 26000000; | ||
| 85 | } else { | ||
| 86 | asm("mrs %[cntfrq_el0], cntfrq_el0" : [cntfrq_el0] "=r"(cntfrq_el0)); | ||
| 87 | } | ||
| 69 | return cntfrq_el0; | 88 | return cntfrq_el0; |
| 70 | } | 89 | } |
| 71 | 90 | ||
diff --git a/src/common/page_table.cpp b/src/common/page_table.cpp index 4b1690269..166dc3dce 100644 --- a/src/common/page_table.cpp +++ b/src/common/page_table.cpp | |||
| @@ -9,12 +9,12 @@ PageTable::PageTable() = default; | |||
| 9 | 9 | ||
| 10 | PageTable::~PageTable() noexcept = default; | 10 | PageTable::~PageTable() noexcept = default; |
| 11 | 11 | ||
| 12 | bool PageTable::BeginTraversal(TraversalEntry& out_entry, TraversalContext& out_context, | 12 | bool PageTable::BeginTraversal(TraversalEntry* out_entry, TraversalContext* out_context, |
| 13 | u64 address) const { | 13 | Common::ProcessAddress address) const { |
| 14 | // Setup invalid defaults. | 14 | // Setup invalid defaults. |
| 15 | out_entry.phys_addr = 0; | 15 | out_entry->phys_addr = 0; |
| 16 | out_entry.block_size = page_size; | 16 | out_entry->block_size = page_size; |
| 17 | out_context.next_page = 0; | 17 | out_context->next_page = 0; |
| 18 | 18 | ||
| 19 | // Validate that we can read the actual entry. | 19 | // Validate that we can read the actual entry. |
| 20 | const auto page = address / page_size; | 20 | const auto page = address / page_size; |
| @@ -29,20 +29,20 @@ bool PageTable::BeginTraversal(TraversalEntry& out_entry, TraversalContext& out_ | |||
| 29 | } | 29 | } |
| 30 | 30 | ||
| 31 | // Populate the results. | 31 | // Populate the results. |
| 32 | out_entry.phys_addr = phys_addr + address; | 32 | out_entry->phys_addr = phys_addr + GetInteger(address); |
| 33 | out_context.next_page = page + 1; | 33 | out_context->next_page = page + 1; |
| 34 | out_context.next_offset = address + page_size; | 34 | out_context->next_offset = GetInteger(address) + page_size; |
| 35 | 35 | ||
| 36 | return true; | 36 | return true; |
| 37 | } | 37 | } |
| 38 | 38 | ||
| 39 | bool PageTable::ContinueTraversal(TraversalEntry& out_entry, TraversalContext& context) const { | 39 | bool PageTable::ContinueTraversal(TraversalEntry* out_entry, TraversalContext* context) const { |
| 40 | // Setup invalid defaults. | 40 | // Setup invalid defaults. |
| 41 | out_entry.phys_addr = 0; | 41 | out_entry->phys_addr = 0; |
| 42 | out_entry.block_size = page_size; | 42 | out_entry->block_size = page_size; |
| 43 | 43 | ||
| 44 | // Validate that we can read the actual entry. | 44 | // Validate that we can read the actual entry. |
| 45 | const auto page = context.next_page; | 45 | const auto page = context->next_page; |
| 46 | if (page >= backing_addr.size()) { | 46 | if (page >= backing_addr.size()) { |
| 47 | return false; | 47 | return false; |
| 48 | } | 48 | } |
| @@ -54,9 +54,9 @@ bool PageTable::ContinueTraversal(TraversalEntry& out_entry, TraversalContext& c | |||
| 54 | } | 54 | } |
| 55 | 55 | ||
| 56 | // Populate the results. | 56 | // Populate the results. |
| 57 | out_entry.phys_addr = phys_addr + context.next_offset; | 57 | out_entry->phys_addr = phys_addr + context->next_offset; |
| 58 | context.next_page = page + 1; | 58 | context->next_page = page + 1; |
| 59 | context.next_offset += page_size; | 59 | context->next_offset += page_size; |
| 60 | 60 | ||
| 61 | return true; | 61 | return true; |
| 62 | } | 62 | } |
diff --git a/src/common/page_table.h b/src/common/page_table.h index e653d52ad..5340f7d86 100644 --- a/src/common/page_table.h +++ b/src/common/page_table.h | |||
| @@ -6,6 +6,7 @@ | |||
| 6 | #include <atomic> | 6 | #include <atomic> |
| 7 | 7 | ||
| 8 | #include "common/common_types.h" | 8 | #include "common/common_types.h" |
| 9 | #include "common/typed_address.h" | ||
| 9 | #include "common/virtual_buffer.h" | 10 | #include "common/virtual_buffer.h" |
| 10 | 11 | ||
| 11 | namespace Common { | 12 | namespace Common { |
| @@ -100,9 +101,9 @@ struct PageTable { | |||
| 100 | PageTable(PageTable&&) noexcept = default; | 101 | PageTable(PageTable&&) noexcept = default; |
| 101 | PageTable& operator=(PageTable&&) noexcept = default; | 102 | PageTable& operator=(PageTable&&) noexcept = default; |
| 102 | 103 | ||
| 103 | bool BeginTraversal(TraversalEntry& out_entry, TraversalContext& out_context, | 104 | bool BeginTraversal(TraversalEntry* out_entry, TraversalContext* out_context, |
| 104 | u64 address) const; | 105 | Common::ProcessAddress address) const; |
| 105 | bool ContinueTraversal(TraversalEntry& out_entry, TraversalContext& context) const; | 106 | bool ContinueTraversal(TraversalEntry* out_entry, TraversalContext* context) const; |
| 106 | 107 | ||
| 107 | /** | 108 | /** |
| 108 | * Resizes the page table to be able to accommodate enough pages within | 109 | * Resizes the page table to be able to accommodate enough pages within |
| @@ -117,6 +118,16 @@ struct PageTable { | |||
| 117 | return current_address_space_width_in_bits; | 118 | return current_address_space_width_in_bits; |
| 118 | } | 119 | } |
| 119 | 120 | ||
| 121 | bool GetPhysicalAddress(Common::PhysicalAddress* out_phys_addr, | ||
| 122 | Common::ProcessAddress virt_addr) const { | ||
| 123 | if (virt_addr > (1ULL << this->GetAddressSpaceBits())) { | ||
| 124 | return false; | ||
| 125 | } | ||
| 126 | |||
| 127 | *out_phys_addr = backing_addr[virt_addr / page_size] + GetInteger(virt_addr); | ||
| 128 | return true; | ||
| 129 | } | ||
| 130 | |||
| 120 | /** | 131 | /** |
| 121 | * Vector of memory pointers backing each page. An entry can only be non-null if the | 132 | * Vector of memory pointers backing each page. An entry can only be non-null if the |
| 122 | * corresponding attribute element is of type `Memory`. | 133 | * corresponding attribute element is of type `Memory`. |
diff --git a/src/common/settings.cpp b/src/common/settings.cpp index 98b43e49c..a10131eb2 100644 --- a/src/common/settings.cpp +++ b/src/common/settings.cpp | |||
| @@ -203,10 +203,12 @@ const char* TranslateCategory(Category category) { | |||
| 203 | case Category::Ui: | 203 | case Category::Ui: |
| 204 | case Category::UiGeneral: | 204 | case Category::UiGeneral: |
| 205 | return "UI"; | 205 | return "UI"; |
| 206 | case Category::UiAudio: | ||
| 207 | return "UiAudio"; | ||
| 206 | case Category::UiLayout: | 208 | case Category::UiLayout: |
| 207 | return "UiLayout"; | 209 | return "UILayout"; |
| 208 | case Category::UiGameList: | 210 | case Category::UiGameList: |
| 209 | return "UiGameList"; | 211 | return "UIGameList"; |
| 210 | case Category::Screenshots: | 212 | case Category::Screenshots: |
| 211 | return "Screenshots"; | 213 | return "Screenshots"; |
| 212 | case Category::Shortcuts: | 214 | case Category::Shortcuts: |
diff --git a/src/common/settings.h b/src/common/settings.h index 9317075f7..b929fd957 100644 --- a/src/common/settings.h +++ b/src/common/settings.h | |||
| @@ -153,7 +153,7 @@ struct Values { | |||
| 153 | true, | 153 | true, |
| 154 | true}; | 154 | true}; |
| 155 | Setting<bool, false> audio_muted{ | 155 | Setting<bool, false> audio_muted{ |
| 156 | linkage, false, "audio_muted", Category::Audio, Specialization::Default, false, true}; | 156 | linkage, false, "audio_muted", Category::Audio, Specialization::Default, true, true}; |
| 157 | Setting<bool, false> dump_audio_commands{ | 157 | Setting<bool, false> dump_audio_commands{ |
| 158 | linkage, false, "dump_audio_commands", Category::Audio, Specialization::Default, false}; | 158 | linkage, false, "dump_audio_commands", Category::Audio, Specialization::Default, false}; |
| 159 | 159 | ||
| @@ -232,7 +232,11 @@ struct Values { | |||
| 232 | SwitchableSetting<bool> use_asynchronous_gpu_emulation{ | 232 | SwitchableSetting<bool> use_asynchronous_gpu_emulation{ |
| 233 | linkage, true, "use_asynchronous_gpu_emulation", Category::Renderer}; | 233 | linkage, true, "use_asynchronous_gpu_emulation", Category::Renderer}; |
| 234 | SwitchableSetting<AstcDecodeMode, true> accelerate_astc{linkage, | 234 | SwitchableSetting<AstcDecodeMode, true> accelerate_astc{linkage, |
| 235 | #ifdef ANDROID | ||
| 236 | AstcDecodeMode::Cpu, | ||
| 237 | #else | ||
| 235 | AstcDecodeMode::Gpu, | 238 | AstcDecodeMode::Gpu, |
| 239 | #endif | ||
| 236 | AstcDecodeMode::Cpu, | 240 | AstcDecodeMode::Cpu, |
| 237 | AstcDecodeMode::CpuAsynchronous, | 241 | AstcDecodeMode::CpuAsynchronous, |
| 238 | "accelerate_astc", | 242 | "accelerate_astc", |
| @@ -304,7 +308,11 @@ struct Values { | |||
| 304 | linkage, 0, "bg_blue", Category::Renderer, Specialization::Default, true, true}; | 308 | linkage, 0, "bg_blue", Category::Renderer, Specialization::Default, true, true}; |
| 305 | 309 | ||
| 306 | SwitchableSetting<GpuAccuracy, true> gpu_accuracy{linkage, | 310 | SwitchableSetting<GpuAccuracy, true> gpu_accuracy{linkage, |
| 311 | #ifdef ANDROID | ||
| 312 | GpuAccuracy::Normal, | ||
| 313 | #else | ||
| 307 | GpuAccuracy::High, | 314 | GpuAccuracy::High, |
| 315 | #endif | ||
| 308 | GpuAccuracy::Normal, | 316 | GpuAccuracy::Normal, |
| 309 | GpuAccuracy::Extreme, | 317 | GpuAccuracy::Extreme, |
| 310 | "gpu_accuracy", | 318 | "gpu_accuracy", |
| @@ -313,20 +321,38 @@ struct Values { | |||
| 313 | true, | 321 | true, |
| 314 | true}; | 322 | true}; |
| 315 | GpuAccuracy current_gpu_accuracy{GpuAccuracy::High}; | 323 | GpuAccuracy current_gpu_accuracy{GpuAccuracy::High}; |
| 316 | SwitchableSetting<AnisotropyMode, true> max_anisotropy{ | 324 | SwitchableSetting<AnisotropyMode, true> max_anisotropy{linkage, |
| 317 | linkage, AnisotropyMode::Automatic, AnisotropyMode::Automatic, AnisotropyMode::X16, | 325 | #ifdef ANDROID |
| 318 | "max_anisotropy", Category::RendererAdvanced}; | 326 | AnisotropyMode::Default, |
| 327 | #else | ||
| 328 | AnisotropyMode::Automatic, | ||
| 329 | #endif | ||
| 330 | AnisotropyMode::Automatic, | ||
| 331 | AnisotropyMode::X16, | ||
| 332 | "max_anisotropy", | ||
| 333 | Category::RendererAdvanced}; | ||
| 319 | SwitchableSetting<AstcRecompression, true> astc_recompression{linkage, | 334 | SwitchableSetting<AstcRecompression, true> astc_recompression{linkage, |
| 320 | AstcRecompression::Uncompressed, | 335 | AstcRecompression::Uncompressed, |
| 321 | AstcRecompression::Uncompressed, | 336 | AstcRecompression::Uncompressed, |
| 322 | AstcRecompression::Bc3, | 337 | AstcRecompression::Bc3, |
| 323 | "astc_recompression", | 338 | "astc_recompression", |
| 324 | Category::RendererAdvanced}; | 339 | Category::RendererAdvanced}; |
| 325 | SwitchableSetting<bool> async_presentation{linkage, false, "async_presentation", | 340 | SwitchableSetting<bool> async_presentation{linkage, |
| 326 | Category::RendererAdvanced}; | 341 | #ifdef ANDROID |
| 342 | true, | ||
| 343 | #else | ||
| 344 | false, | ||
| 345 | #endif | ||
| 346 | "async_presentation", Category::RendererAdvanced}; | ||
| 327 | SwitchableSetting<bool> renderer_force_max_clock{linkage, false, "force_max_clock", | 347 | SwitchableSetting<bool> renderer_force_max_clock{linkage, false, "force_max_clock", |
| 328 | Category::RendererAdvanced}; | 348 | Category::RendererAdvanced}; |
| 329 | SwitchableSetting<bool> use_reactive_flushing{linkage, true, "use_reactive_flushing", | 349 | SwitchableSetting<bool> use_reactive_flushing{linkage, |
| 350 | #ifdef ANDROID | ||
| 351 | false, | ||
| 352 | #else | ||
| 353 | true, | ||
| 354 | #endif | ||
| 355 | "use_reactive_flushing", | ||
| 330 | Category::RendererAdvanced}; | 356 | Category::RendererAdvanced}; |
| 331 | SwitchableSetting<bool> use_asynchronous_shaders{linkage, false, "use_asynchronous_shaders", | 357 | SwitchableSetting<bool> use_asynchronous_shaders{linkage, false, "use_asynchronous_shaders", |
| 332 | Category::RendererAdvanced}; | 358 | Category::RendererAdvanced}; |
| @@ -358,6 +384,8 @@ struct Values { | |||
| 358 | Category::RendererDebug}; | 384 | Category::RendererDebug}; |
| 359 | // TODO: remove this once AMDVLK supports VK_EXT_depth_bias_control | 385 | // TODO: remove this once AMDVLK supports VK_EXT_depth_bias_control |
| 360 | bool renderer_amdvlk_depth_bias_workaround{}; | 386 | bool renderer_amdvlk_depth_bias_workaround{}; |
| 387 | Setting<bool> disable_buffer_reorder{linkage, false, "disable_buffer_reorder", | ||
| 388 | Category::RendererDebug}; | ||
| 361 | 389 | ||
| 362 | // System | 390 | // System |
| 363 | SwitchableSetting<Language, true> language_index{linkage, | 391 | SwitchableSetting<Language, true> language_index{linkage, |
| @@ -390,7 +418,11 @@ struct Values { | |||
| 390 | Setting<s32> current_user{linkage, 0, "current_user", Category::System}; | 418 | Setting<s32> current_user{linkage, 0, "current_user", Category::System}; |
| 391 | 419 | ||
| 392 | SwitchableSetting<ConsoleMode> use_docked_mode{linkage, | 420 | SwitchableSetting<ConsoleMode> use_docked_mode{linkage, |
| 421 | #ifdef ANDROID | ||
| 422 | ConsoleMode::Handheld, | ||
| 423 | #else | ||
| 393 | ConsoleMode::Docked, | 424 | ConsoleMode::Docked, |
| 425 | #endif | ||
| 394 | "use_docked_mode", | 426 | "use_docked_mode", |
| 395 | Category::System, | 427 | Category::System, |
| 396 | Specialization::Radio, | 428 | Specialization::Radio, |
diff --git a/src/common/settings_common.h b/src/common/settings_common.h index 1800ab10d..7943223eb 100644 --- a/src/common/settings_common.h +++ b/src/common/settings_common.h | |||
| @@ -32,6 +32,7 @@ enum class Category : u32 { | |||
| 32 | AddOns, | 32 | AddOns, |
| 33 | Controls, | 33 | Controls, |
| 34 | Ui, | 34 | Ui, |
| 35 | UiAudio, | ||
| 35 | UiGeneral, | 36 | UiGeneral, |
| 36 | UiLayout, | 37 | UiLayout, |
| 37 | UiGameList, | 38 | UiGameList, |
diff --git a/src/common/settings_input.cpp b/src/common/settings_input.cpp index 0a6eea3cf..a6007e7b2 100644 --- a/src/common/settings_input.cpp +++ b/src/common/settings_input.cpp | |||
| @@ -6,10 +6,11 @@ | |||
| 6 | namespace Settings { | 6 | namespace Settings { |
| 7 | namespace NativeButton { | 7 | namespace NativeButton { |
| 8 | const std::array<const char*, NumButtons> mapping = {{ | 8 | const std::array<const char*, NumButtons> mapping = {{ |
| 9 | "button_a", "button_b", "button_x", "button_y", "button_lstick", | 9 | "button_a", "button_b", "button_x", "button_y", "button_lstick", |
| 10 | "button_rstick", "button_l", "button_r", "button_zl", "button_zr", | 10 | "button_rstick", "button_l", "button_r", "button_zl", "button_zr", |
| 11 | "button_plus", "button_minus", "button_dleft", "button_dup", "button_dright", | 11 | "button_plus", "button_minus", "button_dleft", "button_dup", "button_dright", |
| 12 | "button_ddown", "button_sl", "button_sr", "button_home", "button_screenshot", | 12 | "button_ddown", "button_slleft", "button_srleft", "button_home", "button_screenshot", |
| 13 | "button_slright", "button_srright", | ||
| 13 | }}; | 14 | }}; |
| 14 | } | 15 | } |
| 15 | 16 | ||
diff --git a/src/common/settings_input.h b/src/common/settings_input.h index 46f38c703..53a95ef8f 100644 --- a/src/common/settings_input.h +++ b/src/common/settings_input.h | |||
| @@ -29,12 +29,15 @@ enum Values : int { | |||
| 29 | DRight, | 29 | DRight, |
| 30 | DDown, | 30 | DDown, |
| 31 | 31 | ||
| 32 | SL, | 32 | SLLeft, |
| 33 | SR, | 33 | SRLeft, |
| 34 | 34 | ||
| 35 | Home, | 35 | Home, |
| 36 | Screenshot, | 36 | Screenshot, |
| 37 | 37 | ||
| 38 | SLRight, | ||
| 39 | SRRight, | ||
| 40 | |||
| 38 | NumButtons, | 41 | NumButtons, |
| 39 | }; | 42 | }; |
| 40 | 43 | ||