VideoCommon: Gate Multi-Threaded Shader Pre-Compilation behind a bug entry
This commit is contained in:
parent
61cfd8696e
commit
613c4563c2
|
@ -131,6 +131,21 @@ 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
|
||||||
|
// 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},
|
||||||
|
{API_VULKAN, OS_ALL, VENDOR_ALL, DRIVER_ALL, Family::UNKNOWN,
|
||||||
|
BUG_BROKEN_MULTITHREADED_SHADER_PRECOMPILATION, -1.0, -1.0, true},
|
||||||
|
// known good cases for broken MT precompilation
|
||||||
|
{API_OPENGL, OS_OSX, VENDOR_NVIDIA, DRIVER_ALL, Family::UNKNOWN,
|
||||||
|
BUG_BROKEN_MULTITHREADED_SHADER_PRECOMPILATION, -1.0, -1.0, false},
|
||||||
|
{API_VULKAN, OS_OSX, VENDOR_NVIDIA, 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;
|
||||||
|
|
|
@ -314,6 +314,14 @@ enum Bug
|
||||||
// Started version: -1
|
// Started version: -1
|
||||||
// Ended version: -1
|
// Ended version: -1
|
||||||
BUG_BROKEN_SUBGROUP_INVOCATION_ID,
|
BUG_BROKEN_SUBGROUP_INVOCATION_ID,
|
||||||
|
|
||||||
|
// BUG: Multi-threaded shader pre-compilation sometimes crashes
|
||||||
|
// Used primarily in Videoconfig.cpp's GetNumAutoShaderPreCompilerThreads()
|
||||||
|
// 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
|
||||||
};
|
};
|
||||||
|
|
||||||
// Initializes our internal vendor, device family, and driver version
|
// Initializes our internal vendor, device family, and driver version
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
#include "Core/ConfigManager.h"
|
#include "Core/ConfigManager.h"
|
||||||
#include "Core/Core.h"
|
#include "Core/Core.h"
|
||||||
#include "Core/Movie.h"
|
#include "Core/Movie.h"
|
||||||
|
#include "VideoCommon/DriverDetails.h"
|
||||||
#include "VideoCommon/OnScreenDisplay.h"
|
#include "VideoCommon/OnScreenDisplay.h"
|
||||||
#include "VideoCommon/VideoCommon.h"
|
#include "VideoCommon/VideoCommon.h"
|
||||||
#include "VideoCommon/VideoConfig.h"
|
#include "VideoCommon/VideoConfig.h"
|
||||||
|
@ -204,8 +205,17 @@ 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
|
else if (multiThreadingWorking)
|
||||||
return GetNumAutoShaderPreCompilerThreads();
|
return GetNumAutoShaderPreCompilerThreads();
|
||||||
|
else
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue