diff options
Diffstat (limited to 'src/video_core')
| -rw-r--r-- | src/video_core/gpu.cpp | 9 | ||||
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp | 8 | ||||
| -rw-r--r-- | src/video_core/vulkan_common/vulkan_device.cpp | 14 |
3 files changed, 19 insertions, 12 deletions
diff --git a/src/video_core/gpu.cpp b/src/video_core/gpu.cpp index d97620ce91..36d726c929 100644 --- a/src/video_core/gpu.cpp +++ b/src/video_core/gpu.cpp @@ -13,6 +13,7 @@ #include "common/assert.h" #include "common/settings.h" +#include "common/settings_enums.h" #include "core/core.h" #include "core/core_timing.h" #include "core/frontend/emu_window.h" @@ -200,12 +201,10 @@ struct GPU::Impl { [[nodiscard]] u64 GetTicks() const { u64 gpu_tick = system.CoreTiming().GetGPUTicks(); + Settings::GpuOverclock overclock = Settings::values.fast_gpu_time.GetValue(); - if (Settings::values.use_fast_gpu_time.GetValue()) { - gpu_tick /= (u64) (128 - * std::pow(2, - static_cast<u32>( - Settings::values.fast_gpu_time.GetValue()))); + if (overclock != Settings::GpuOverclock::Normal) { + gpu_tick /= 256 * u64(overclock); } return gpu_tick; diff --git a/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp b/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp index 94916417b6..f0d20b137d 100644 --- a/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp +++ b/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp @@ -744,8 +744,8 @@ void GraphicsPipeline::MakePipeline(VkRenderPass render_pass) { .pNext = nullptr, .flags = 0, .rasterizationSamples = MaxwellToVK::MsaaMode(key.state.msaa_mode), - .sampleShadingEnable = Settings::values.sample_shading.GetValue() ? VK_TRUE : VK_FALSE, - .minSampleShading = static_cast<float>(Settings::values.sample_shading_fraction.GetValue()) / 100.0f, + .sampleShadingEnable = Settings::values.sample_shading.GetValue() > 0 ? VK_TRUE : VK_FALSE, + .minSampleShading = f32(Settings::values.sample_shading.GetValue()) / 100.0f, .pSampleMask = nullptr, .alphaToCoverageEnable = key.state.alpha_to_coverage_enabled != 0 ? VK_TRUE : VK_FALSE, .alphaToOneEnable = key.state.alpha_to_one_enabled != 0 ? VK_TRUE : VK_FALSE, @@ -763,8 +763,8 @@ void GraphicsPipeline::MakePipeline(VkRenderPass render_pass) { .stencilTestEnable = dynamic.stencil_enable, .front = GetStencilFaceState(dynamic.front), .back = GetStencilFaceState(dynamic.back), - .minDepthBounds = static_cast<f32>(key.state.depth_bounds_min), - .maxDepthBounds = static_cast<f32>(key.state.depth_bounds_max), + .minDepthBounds = f32(key.state.depth_bounds_min), + .maxDepthBounds = f32(key.state.depth_bounds_max), }; if (dynamic.depth_bounds_enable && !device.IsDepthBoundsSupported()) { LOG_WARNING(Render_Vulkan, "Depth bounds is enabled but not supported"); diff --git a/src/video_core/vulkan_common/vulkan_device.cpp b/src/video_core/vulkan_common/vulkan_device.cpp index 524b93dfdf..3fc56d35d6 100644 --- a/src/video_core/vulkan_common/vulkan_device.cpp +++ b/src/video_core/vulkan_common/vulkan_device.cpp @@ -17,6 +17,7 @@ #include "common/literals.h" #include <ranges> #include "common/settings.h" +#include "common/settings_enums.h" #include "video_core/vulkan_common/nsight_aftermath_tracker.h" #include "video_core/vulkan_common/vma.h" #include "video_core/vulkan_common/vulkan_device.h" @@ -418,12 +419,15 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR const VkDriverId driver_id = properties.driver.driverID; const auto device_id = properties.properties.deviceID; + const bool is_radv = driver_id == VK_DRIVER_ID_MESA_RADV; const bool is_amd_driver = driver_id == VK_DRIVER_ID_AMD_PROPRIETARY || driver_id == VK_DRIVER_ID_AMD_OPEN_SOURCE; const bool is_amd = is_amd_driver || is_radv; + const bool is_intel_windows = driver_id == VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS; const bool is_intel_anv = driver_id == VK_DRIVER_ID_INTEL_OPEN_SOURCE_MESA; + const bool is_nvidia = driver_id == VK_DRIVER_ID_NVIDIA_PROPRIETARY; const bool is_mvk = driver_id == VK_DRIVER_ID_MOLTENVK; const bool is_qualcomm = driver_id == VK_DRIVER_ID_QUALCOMM_PROPRIETARY; @@ -483,6 +487,8 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR is_non_gpu = properties.properties.deviceType == VK_PHYSICAL_DEVICE_TYPE_OTHER || properties.properties.deviceType == VK_PHYSICAL_DEVICE_TYPE_CPU; + const bool is_intel_igpu = is_integrated && (is_intel_anv || is_intel_windows); + supports_d24_depth = IsFormatSupported(VK_FORMAT_D24_UNORM_S8_UINT, VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT, FormatType::Optimal); @@ -662,16 +668,18 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR dynamic_state3_enables = false; } + const auto dyna_state = u32(Settings::values.dyna_state.GetValue()); + // Mesa Intel drivers on UHD 620 have broken EDS causing extreme flickering - unknown if it affects other iGPUs // ALSO affects ALL versions of UHD drivers on Windows 10+, seems to cause even worse issues like straight up crashing // So... Yeah, UHD drivers fucking suck -- maybe one day we can work past this, maybe; some driver hacking? // And then we can rest in peace by doing `< VK_MAKE_API_VERSION(26, 0, 0)` for our beloved mesa drivers... one day - if ((is_mvk || (is_integrated && is_intel_anv) || (is_integrated && is_intel_windows)) && Settings::values.dyna_state.GetValue() != 0) { + if ((is_mvk || is_intel_igpu) && dyna_state != 0) { LOG_WARNING(Render_Vulkan, "Driver has broken dynamic state, forcing to 0 to prevent graphical issues"); - Settings::values.dyna_state.SetValue(0); + Settings::values.dyna_state.SetValue(Settings::ExtendedDynamicState::Disabled); } - switch (Settings::values.dyna_state.GetValue()) { + switch (dyna_state) { case 0: RemoveExtensionFeature(extensions.extended_dynamic_state, features.extended_dynamic_state, VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME); [[fallthrough]]; |
