Merge pull request #10346 from iwubcode/fixed_shader_precompile_parallelization

VideoCommon: Fix shader precompilization detection
This commit is contained in:
JMC47 2022-01-06 16:28:15 -05:00 committed by GitHub
commit 4c0dcf42b8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 3 additions and 24 deletions

View File

@ -132,21 +132,10 @@ constexpr BugInfo m_known_bugs[] = {
-1.0, -1.0, true}, -1.0, -1.0, true},
{API_VULKAN, OS_OSX, VENDOR_ATI, DRIVER_PORTABILITY, Family::UNKNOWN, {API_VULKAN, OS_OSX, VENDOR_ATI, DRIVER_PORTABILITY, Family::UNKNOWN,
BUG_BROKEN_SUBGROUP_INVOCATION_ID, -1.0, -1.0, true}, BUG_BROKEN_SUBGROUP_INVOCATION_ID, -1.0, -1.0, true},
// Default cases for broken MT precompilation {API_OPENGL, OS_ANDROID, VENDOR_ALL, DRIVER_ALL, Family::UNKNOWN,
// Default cases get replaced by known-good places during init
{API_OPENGL, OS_ALL, VENDOR_ALL, DRIVER_ALL, Family::UNKNOWN,
BUG_BROKEN_MULTITHREADED_SHADER_PRECOMPILATION, -1.0, -1.0, true}, BUG_BROKEN_MULTITHREADED_SHADER_PRECOMPILATION, -1.0, -1.0, true},
{API_VULKAN, OS_ALL, VENDOR_ALL, DRIVER_ALL, Family::UNKNOWN, {API_VULKAN, OS_ANDROID, VENDOR_ALL, DRIVER_ALL, Family::UNKNOWN,
BUG_BROKEN_MULTITHREADED_SHADER_PRECOMPILATION, -1.0, -1.0, true}, BUG_BROKEN_MULTITHREADED_SHADER_PRECOMPILATION, -1.0, -1.0, true},
// known good cases for broken MT precompilation
{API_OPENGL, OS_OSX, VENDOR_ALL, DRIVER_ALL, Family::UNKNOWN,
BUG_BROKEN_MULTITHREADED_SHADER_PRECOMPILATION, -1.0, -1.0, false},
{API_VULKAN, OS_OSX, VENDOR_ALL, DRIVER_ALL, Family::UNKNOWN,
BUG_BROKEN_MULTITHREADED_SHADER_PRECOMPILATION, -1.0, -1.0, false},
{API_OPENGL, OS_WINDOWS, VENDOR_ALL, DRIVER_ALL, Family::UNKNOWN,
BUG_BROKEN_MULTITHREADED_SHADER_PRECOMPILATION, -1.0, -1.0, false},
{API_VULKAN, OS_WINDOWS, VENDOR_ALL, DRIVER_ALL, Family::UNKNOWN,
BUG_BROKEN_MULTITHREADED_SHADER_PRECOMPILATION, -1.0, -1.0, false},
}; };
static std::map<Bug, BugInfo> m_bugs; static std::map<Bug, BugInfo> m_bugs;

View File

@ -318,9 +318,6 @@ enum Bug
// BUG: Multi-threaded shader pre-compilation sometimes crashes // BUG: Multi-threaded shader pre-compilation sometimes crashes
// Used primarily in Videoconfig.cpp's GetNumAutoShaderPreCompilerThreads() // Used primarily in Videoconfig.cpp's GetNumAutoShaderPreCompilerThreads()
// refer to https://github.com/dolphin-emu/dolphin/pull/9414 for initial validation coverage // refer to https://github.com/dolphin-emu/dolphin/pull/9414 for initial validation coverage
// All untested platforms will report as having this bug as to avoid crashes
// Note that things should highly likely work out fine on D3D
// so we didn't extend the Bug API to also support D3D
BUG_BROKEN_MULTITHREADED_SHADER_PRECOMPILATION BUG_BROKEN_MULTITHREADED_SHADER_PRECOMPILATION
}; };

View File

@ -206,16 +206,9 @@ u32 VideoConfig::GetShaderPrecompilerThreads() const
if (!backend_info.bSupportsBackgroundCompiling) if (!backend_info.bSupportsBackgroundCompiling)
return 0; return 0;
const bool bugDatabaseSupported =
backend_info.api_type == APIType::OpenGL || backend_info.api_type == APIType::Vulkan;
// DirectX has always worked in our tests in PR#9414
const bool multiThreadingWorking =
!bugDatabaseSupported ||
!DriverDetails::HasBug(DriverDetails::BUG_BROKEN_MULTITHREADED_SHADER_PRECOMPILATION);
if (iShaderPrecompilerThreads >= 0) if (iShaderPrecompilerThreads >= 0)
return static_cast<u32>(iShaderPrecompilerThreads); return static_cast<u32>(iShaderPrecompilerThreads);
else if (multiThreadingWorking) else if (!DriverDetails::HasBug(DriverDetails::BUG_BROKEN_MULTITHREADED_SHADER_PRECOMPILATION))
return GetNumAutoShaderPreCompilerThreads(); return GetNumAutoShaderPreCompilerThreads();
else else
return 1; return 1;