diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/common/wall_clock.cpp | 4 | ||||
-rw-r--r-- | src/core/hle/service/time/time_zone_content_manager.cpp | 17 | ||||
-rw-r--r-- | src/core/hle/service/time/time_zone_content_manager.h | 2 | ||||
-rw-r--r-- | src/video_core/renderer_vulkan/vk_blit_screen.cpp | 4 | ||||
-rw-r--r-- | src/video_core/renderer_vulkan/vk_descriptor_pool.cpp | 2 | ||||
-rw-r--r-- | src/video_core/renderer_vulkan/vk_fsr.cpp | 2 | ||||
-rw-r--r-- | src/video_core/renderer_vulkan/vk_turbo_mode.cpp | 2 | ||||
-rw-r--r-- | src/video_core/vulkan_common/vulkan_device.cpp | 8 |
8 files changed, 26 insertions, 15 deletions
diff --git a/src/common/wall_clock.cpp b/src/common/wall_clock.cpp index dc0dcbd68..71e15ab4c 100644 --- a/src/common/wall_clock.cpp +++ b/src/common/wall_clock.cpp @@ -56,12 +56,12 @@ std::unique_ptr<WallClock> CreateOptimalClock() { #ifdef ARCHITECTURE_x86_64 const auto& caps = GetCPUCaps(); - if (caps.invariant_tsc && caps.tsc_frequency >= WallClock::GPUTickFreq) { + if (caps.invariant_tsc && caps.tsc_frequency >= std::nano::den) { return std::make_unique<X64::NativeClock>(caps.tsc_frequency); } else { // Fallback to StandardWallClock if the hardware TSC // - Is not invariant - // - Is not more precise than GPUTickFreq + // - Is not more precise than 1 GHz (1ns resolution) return std::make_unique<StandardWallClock>(); } #else diff --git a/src/core/hle/service/time/time_zone_content_manager.cpp b/src/core/hle/service/time/time_zone_content_manager.cpp index 5d60be67a..3b6047ad0 100644 --- a/src/core/hle/service/time/time_zone_content_manager.cpp +++ b/src/core/hle/service/time/time_zone_content_manager.cpp @@ -3,6 +3,7 @@ #include <chrono> #include <sstream> +#include <utility> #include "common/logging/log.h" #include "common/settings.h" @@ -46,14 +47,14 @@ static FileSys::VirtualDir GetTimeZoneBinary(Core::System& system) { return FileSys::ExtractRomFS(romfs); } -static std::vector<std::string> BuildLocationNameCache(Core::System& system) { - const FileSys::VirtualDir extracted_romfs{GetTimeZoneBinary(system)}; - if (!extracted_romfs) { +static std::vector<std::string> BuildLocationNameCache( + const FileSys::VirtualDir& time_zone_binary) { + if (!time_zone_binary) { LOG_ERROR(Service_Time, "Failed to extract RomFS for {:016X}!", time_zone_binary_titleid); return {}; } - const FileSys::VirtualFile binary_list{extracted_romfs->GetFile("binaryList.txt")}; + const FileSys::VirtualFile binary_list{time_zone_binary->GetFile("binaryList.txt")}; if (!binary_list) { LOG_ERROR(Service_Time, "{:016X} has no file binaryList.txt!", time_zone_binary_titleid); return {}; @@ -73,7 +74,8 @@ static std::vector<std::string> BuildLocationNameCache(Core::System& system) { } TimeZoneContentManager::TimeZoneContentManager(Core::System& system_) - : system{system_}, location_name_cache{BuildLocationNameCache(system)} {} + : system{system_}, time_zone_binary{GetTimeZoneBinary(system)}, + location_name_cache{BuildLocationNameCache(time_zone_binary)} {} void TimeZoneContentManager::Initialize(TimeManager& time_manager) { const auto timezone_setting = Settings::GetTimeZoneString(); @@ -111,13 +113,12 @@ Result TimeZoneContentManager::GetTimeZoneInfoFile(const std::string& location_n return ERROR_TIME_NOT_FOUND; } - const FileSys::VirtualDir extracted_romfs{GetTimeZoneBinary(system)}; - if (!extracted_romfs) { + if (!time_zone_binary) { LOG_ERROR(Service_Time, "Failed to extract RomFS for {:016X}!", time_zone_binary_titleid); return ERROR_TIME_NOT_FOUND; } - const FileSys::VirtualDir zoneinfo_dir{extracted_romfs->GetSubdirectory("zoneinfo")}; + const FileSys::VirtualDir zoneinfo_dir{time_zone_binary->GetSubdirectory("zoneinfo")}; if (!zoneinfo_dir) { LOG_ERROR(Service_Time, "{:016X} has no directory zoneinfo!", time_zone_binary_titleid); return ERROR_TIME_NOT_FOUND; diff --git a/src/core/hle/service/time/time_zone_content_manager.h b/src/core/hle/service/time/time_zone_content_manager.h index 3d94b6428..a6f9698bc 100644 --- a/src/core/hle/service/time/time_zone_content_manager.h +++ b/src/core/hle/service/time/time_zone_content_manager.h @@ -6,6 +6,7 @@ #include <string> #include <vector> +#include "core/file_sys/vfs_types.h" #include "core/hle/service/time/time_zone_manager.h" namespace Core { @@ -41,6 +42,7 @@ private: Core::System& system; TimeZoneManager time_zone_manager; + const FileSys::VirtualDir time_zone_binary; const std::vector<std::string> location_name_cache; }; diff --git a/src/video_core/renderer_vulkan/vk_blit_screen.cpp b/src/video_core/renderer_vulkan/vk_blit_screen.cpp index ad3b29f0e..31928bb94 100644 --- a/src/video_core/renderer_vulkan/vk_blit_screen.cpp +++ b/src/video_core/renderer_vulkan/vk_blit_screen.cpp @@ -566,7 +566,7 @@ void BlitScreen::CreateDescriptorPool() { const VkDescriptorPoolCreateInfo ci{ .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO, .pNext = nullptr, - .flags = VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, + .flags = 0, .maxSets = static_cast<u32>(image_count), .poolSizeCount = static_cast<u32>(pool_sizes.size()), .pPoolSizes = pool_sizes.data(), @@ -576,7 +576,7 @@ void BlitScreen::CreateDescriptorPool() { const VkDescriptorPoolCreateInfo ci_aa{ .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO, .pNext = nullptr, - .flags = VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, + .flags = 0, .maxSets = static_cast<u32>(image_count), .poolSizeCount = static_cast<u32>(pool_sizes_aa.size()), .pPoolSizes = pool_sizes_aa.data(), diff --git a/src/video_core/renderer_vulkan/vk_descriptor_pool.cpp b/src/video_core/renderer_vulkan/vk_descriptor_pool.cpp index b5ae6443c..6048a301f 100644 --- a/src/video_core/renderer_vulkan/vk_descriptor_pool.cpp +++ b/src/video_core/renderer_vulkan/vk_descriptor_pool.cpp @@ -77,7 +77,7 @@ static void AllocatePool(const Device& device, DescriptorBank& bank) { bank.pools.push_back(device.GetLogical().CreateDescriptorPool({ .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO, .pNext = nullptr, - .flags = VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, + .flags = 0, .maxSets = sets_per_pool, .poolSizeCount = static_cast<u32>(pool_cursor), .pPoolSizes = std::data(pool_sizes), diff --git a/src/video_core/renderer_vulkan/vk_fsr.cpp b/src/video_core/renderer_vulkan/vk_fsr.cpp index 9bcdca2fb..ce8f3f3c2 100644 --- a/src/video_core/renderer_vulkan/vk_fsr.cpp +++ b/src/video_core/renderer_vulkan/vk_fsr.cpp @@ -150,7 +150,7 @@ void FSR::CreateDescriptorPool() { const VkDescriptorPoolCreateInfo ci{ .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO, .pNext = nullptr, - .flags = VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, + .flags = 0, .maxSets = static_cast<u32>(image_count * 2), .poolSizeCount = static_cast<u32>(pool_sizes.size()), .pPoolSizes = pool_sizes.data(), diff --git a/src/video_core/renderer_vulkan/vk_turbo_mode.cpp b/src/video_core/renderer_vulkan/vk_turbo_mode.cpp index 460d8d59d..04a51f2d1 100644 --- a/src/video_core/renderer_vulkan/vk_turbo_mode.cpp +++ b/src/video_core/renderer_vulkan/vk_turbo_mode.cpp @@ -62,7 +62,7 @@ void TurboMode::Run(std::stop_token stop_token) { auto descriptor_pool = dld.CreateDescriptorPool(VkDescriptorPoolCreateInfo{ .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO, .pNext = nullptr, - .flags = VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, + .flags = 0, .maxSets = 1, .poolSizeCount = 1, .pPoolSizes = &pool_size, diff --git a/src/video_core/vulkan_common/vulkan_device.cpp b/src/video_core/vulkan_common/vulkan_device.cpp index 9c6fbb918..78918f996 100644 --- a/src/video_core/vulkan_common/vulkan_device.cpp +++ b/src/video_core/vulkan_common/vulkan_device.cpp @@ -554,6 +554,14 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR } sets_per_pool = 64; + if (extensions.extended_dynamic_state3 && is_amd_driver && + !features.shader_float16_int8.shaderFloat16 && + properties.properties.driverVersion >= VK_MAKE_API_VERSION(0, 2, 0, 258)) { + LOG_WARNING(Render_Vulkan, "AMD GCN4 has broken extendedDynamicState3ColorBlendEquation"); + features.extended_dynamic_state3.extendedDynamicState3ColorBlendEnable = false; + features.extended_dynamic_state3.extendedDynamicState3ColorBlendEquation = false; + dynamic_state3_blending = false; + } if (is_amd_driver) { // AMD drivers need a higher amount of Sets per Pool in certain circumstances like in XC2. sets_per_pool = 96; |