diff --git a/src/Cafe/HW/Latte/Renderer/Vulkan/VulkanPipelineStableCache.cpp b/src/Cafe/HW/Latte/Renderer/Vulkan/VulkanPipelineStableCache.cpp index ddf5e273..739341e6 100644 --- a/src/Cafe/HW/Latte/Renderer/Vulkan/VulkanPipelineStableCache.cpp +++ b/src/Cafe/HW/Latte/Renderer/Vulkan/VulkanPipelineStableCache.cpp @@ -46,8 +46,11 @@ uint32 VulkanPipelineStableCache::BeginLoading(uint64 cacheTitleId) m_numCompilationThreads = std::clamp(cpuCoreCount, 1u, 8u); if (g_renderer->GetVendor() == GfxVendor::Nvidia) { - forceLog_printf("Disable multi-threaded pipeline loading due to an issue with Nvidia drivers"); - m_numCompilationThreads = 1; + if (VulkanRenderer::GetInstance()->GetDriverVersion() < 515.0f) + { + forceLog_printf("Disable multi-threaded pipeline loading due to an issue with Nvidia drivers"); + m_numCompilationThreads = 1; + } } for (uint32 i = 0; i < m_numCompilationThreads; i++) { diff --git a/src/Cafe/HW/Latte/Renderer/Vulkan/VulkanRenderer.cpp b/src/Cafe/HW/Latte/Renderer/Vulkan/VulkanRenderer.cpp index 383c0fd8..2164772e 100644 --- a/src/Cafe/HW/Latte/Renderer/Vulkan/VulkanRenderer.cpp +++ b/src/Cafe/HW/Latte/Renderer/Vulkan/VulkanRenderer.cpp @@ -194,10 +194,22 @@ void VulkanRenderer::DetermineVendor() m_vendor = GfxVendor::Mesa; forceLog_printf("Using GPU: %s", properties.properties.deviceName); + if (m_featureControl.deviceExtensions.driver_properties) - forceLog_printf("Driver version: %s", driverProperties.driverInfo) + { + forceLog_printf("Driver version: %s", driverProperties.driverInfo); + + // needed for multithreaded pipelines on nvidia (requires 515.0 or higher) + sscanf(driverProperties.driverInfo, "%f", &driverVersion); + } + else + { forceLog_printf("Driver version (as stored in device info): %08X", properties.properties.driverVersion); + + // disables multithreaded pipeline loading on nvidia (requires 515.0 or higher) + driverVersion = 0.0f; + } } void VulkanRenderer::GetDeviceFeatures() diff --git a/src/Cafe/HW/Latte/Renderer/Vulkan/VulkanRenderer.h b/src/Cafe/HW/Latte/Renderer/Vulkan/VulkanRenderer.h index b77bfa53..1c310386 100644 --- a/src/Cafe/HW/Latte/Renderer/Vulkan/VulkanRenderer.h +++ b/src/Cafe/HW/Latte/Renderer/Vulkan/VulkanRenderer.h @@ -1012,7 +1012,8 @@ private: public: - bool useTFViaSSBO() { return m_featureControl.mode.useTFEmulationViaSSBO; }; + float GetDriverVersion() { return driverVersion; } + bool useTFViaSSBO() { return m_featureControl.mode.useTFEmulationViaSSBO; } bool IsDebugUtilsEnabled() const { return m_featureControl.debugMarkersSupported && m_featureControl.instanceExtensions.debug_utils; @@ -1020,6 +1021,8 @@ public: private: + float driverVersion; + // debug void debug_genericBarrier();