change driverVersion to m_featureControl bool

This commit is contained in:
Niko 2022-08-28 13:47:25 -04:00
parent 5df72b4425
commit 8ca3154ca3
3 changed files with 14 additions and 15 deletions

View file

@ -34,29 +34,29 @@ uint32 VulkanPipelineStableCache::BeginLoading(uint64 cacheTitleId)
std::error_code ec; std::error_code ec;
fs::create_directories(ActiveSettings::GetPath("shaderCache/transferable"), ec); fs::create_directories(ActiveSettings::GetPath("shaderCache/transferable"), ec);
const auto pathCacheFile = ActiveSettings::GetPath("shaderCache/transferable/{:016x}_vkpipeline.bin", cacheTitleId); const auto pathCacheFile = ActiveSettings::GetPath("shaderCache/transferable/{:016x}_vkpipeline.bin", cacheTitleId);
// init cache loader state // init cache loader state
g_vkCacheState.pipelineLoadIndex = 0; g_vkCacheState.pipelineLoadIndex = 0;
g_vkCacheState.pipelineMaxFileIndex = 0; g_vkCacheState.pipelineMaxFileIndex = 0;
g_vkCacheState.pipelinesLoaded = 0; g_vkCacheState.pipelinesLoaded = 0;
g_vkCacheState.pipelinesQueued = 0; g_vkCacheState.pipelinesQueued = 0;
// start async compilation threads // start async compilation threads
m_compilationCount.store(0); m_compilationCount.store(0);
m_compilationQueue.clear(); m_compilationQueue.clear();
// get core count
uint32 cpuCoreCount = GetPhysicalCoreCount(); uint32 cpuCoreCount = GetPhysicalCoreCount();
m_numCompilationThreads = std::clamp(cpuCoreCount, 1u, 8u); m_numCompilationThreads = std::clamp(cpuCoreCount, 1u, 8u);
if (g_renderer->GetVendor() == GfxVendor::Nvidia) if (VulkanRenderer::GetInstance()->GetDisableMultithreadedCompilation())
{ m_numCompilationThreads = 1;
if(VulkanRenderer::GetInstance()->GetDriverVersion() < 515)
{
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++) for (uint32 i = 0; i < m_numCompilationThreads; i++)
{ {
std::thread compileThread(&VulkanPipelineStableCache::CompilerThread, this); std::thread compileThread(&VulkanPipelineStableCache::CompilerThread, this);
compileThread.detach(); compileThread.detach();
} }
// open cache file or create it // open cache file or create it
cemu_assert_debug(s_cache == nullptr); cemu_assert_debug(s_cache == nullptr);
const uint32 cacheFileVersion = 1; const uint32 cacheFileVersion = 1;

View file

@ -201,15 +201,15 @@ void VulkanRenderer::DetermineVendor()
forceLog_printf("Driver version: %s", driverProperties.driverInfo); forceLog_printf("Driver version: %s", driverProperties.driverInfo);
// needed for multithreaded pipelines on nvidia (requires 515 or higher) // needed for multithreaded pipelines on nvidia (requires 515 or higher)
driverVersion = StringHelpers::ToInt(std::string(driverProperties.driverInfo)); m_featureControl.disableMultithreadedCompilation = (StringHelpers::ToInt(std::string(driverProperties.driverInfo)) < 515);
} }
else else
{ {
forceLog_printf("Driver version (as stored in device info): %08X", properties.properties.driverVersion); forceLog_printf("Driver version (as stored in device info): %08X", properties.properties.driverVersion);
// disables multithreaded pipeline loading on nvidia (requires 515.0 or higher) // disableMultithreadedCompilation defaults to false, not like there's any other driver
driverVersion = -1; // on the planet with broken multithreading except Nvidia, which will always have a driver version string
} }
} }

View file

@ -548,6 +548,7 @@ private:
}limits; }limits;
bool debugMarkersSupported = false; // frame debugger is attached bool debugMarkersSupported = false; // frame debugger is attached
bool disableMultithreadedCompilation = false; // for old nvidia drivers
}m_featureControl{}; }m_featureControl{};
static bool CheckDeviceExtensionSupport(const VkPhysicalDevice device, FeatureControl& info); static bool CheckDeviceExtensionSupport(const VkPhysicalDevice device, FeatureControl& info);
@ -1012,7 +1013,7 @@ private:
public: public:
int GetDriverVersion() { return driverVersion; } bool GetDisableMultithreadedCompilation() { return m_featureControl.disableMultithreadedCompilation; }
bool useTFViaSSBO() { return m_featureControl.mode.useTFEmulationViaSSBO; } bool useTFViaSSBO() { return m_featureControl.mode.useTFEmulationViaSSBO; }
bool IsDebugUtilsEnabled() const bool IsDebugUtilsEnabled() const
{ {
@ -1021,8 +1022,6 @@ public:
private: private:
int driverVersion;
// debug // debug
void debug_genericBarrier(); void debug_genericBarrier();