mirror of
https://github.com/hedge-dev/UnleashedRecomp.git
synced 2026-04-27 04:41:39 +00:00
Add Auto Graphics API option, add AMD driver workaround.
This commit is contained in:
parent
fb55ac1087
commit
bb2b24a6dd
7 changed files with 40 additions and 8 deletions
|
|
@ -3374,6 +3374,13 @@ namespace plume {
|
|||
capabilities.uma = uma;
|
||||
description.name = deviceName;
|
||||
description.dedicatedVideoMemory = adapterDesc.DedicatedVideoMemory;
|
||||
description.vendor = RenderDeviceVendor(adapterDesc.VendorId);
|
||||
|
||||
LARGE_INTEGER adapterVersion = {};
|
||||
res = adapter->CheckInterfaceSupport(__uuidof(IDXGIDevice), &adapterVersion);
|
||||
if (SUCCEEDED(res)) {
|
||||
description.driverVersion = adapterVersion.QuadPart;
|
||||
}
|
||||
|
||||
if (preferUserChoice) {
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -72,6 +72,13 @@ namespace plume {
|
|||
|
||||
// Enums.
|
||||
|
||||
enum class RenderDeviceVendor {
|
||||
UNKNOWN = 0x0,
|
||||
AMD = 0x1002,
|
||||
NVIDIA = 0x10DE,
|
||||
INTEL = 0x8086
|
||||
};
|
||||
|
||||
enum class RenderFormat {
|
||||
UNKNOWN,
|
||||
R32G32B32A32_TYPELESS,
|
||||
|
|
@ -1769,7 +1776,8 @@ namespace plume {
|
|||
struct RenderDeviceDescription {
|
||||
std::string name = "Unknown";
|
||||
RenderDeviceType type = RenderDeviceType::UNKNOWN;
|
||||
uint32_t driverVersion = 0;
|
||||
RenderDeviceVendor vendor = RenderDeviceVendor::UNKNOWN;
|
||||
uint64_t driverVersion = 0;
|
||||
uint64_t dedicatedVideoMemory = 0;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -3516,6 +3516,7 @@ namespace plume {
|
|||
description.name = deviceName;
|
||||
description.type = toDeviceType(deviceProperties.deviceType);
|
||||
description.driverVersion = deviceProperties.driverVersion;
|
||||
description.vendor = RenderDeviceVendor(deviceProperties.vendorID);
|
||||
currentDeviceTypeScore = deviceTypeScore;
|
||||
|
||||
if (preferUserChoice) {
|
||||
|
|
|
|||
|
|
@ -1610,6 +1610,7 @@ bool Video::CreateHostDevice(const char *sdlVideoDriver)
|
|||
interfaceFunctions.push_back(CreateVulkanInterfaceWrapper);
|
||||
#endif
|
||||
|
||||
bool driverWorkaroundsEnabled = Config::GraphicsAPI == EGraphicsAPI::Auto;
|
||||
for (RenderInterfaceFunction *interfaceFunction : interfaceFunctions)
|
||||
{
|
||||
g_interface = interfaceFunction();
|
||||
|
|
@ -1618,7 +1619,26 @@ bool Video::CreateHostDevice(const char *sdlVideoDriver)
|
|||
g_device = g_interface->createDevice(Config::GraphicsDevice);
|
||||
if (g_device != nullptr)
|
||||
{
|
||||
const RenderDeviceDescription &deviceDescription = g_device->getDescription();
|
||||
|
||||
#ifdef UNLEASHED_RECOMP_D3D12
|
||||
if (interfaceFunction == CreateD3D12Interface)
|
||||
{
|
||||
if (deviceDescription.vendor == RenderDeviceVendor::AMD)
|
||||
{
|
||||
// AMD Drivers before this version have a known issue where MSAA resolve targets will fail to work correctly.
|
||||
// If no specific graphics API was selected, we silently destroy this one and move to the next option as it'll
|
||||
// just work incorrectly otherwise and result in visual glitches and 3D rendering not working in general.
|
||||
constexpr uint64_t MinimumAMDDriverVersion = 0x1F00005DC2005CULL; // 31.0.24002.92
|
||||
if ((Config::GraphicsAPI == EGraphicsAPI::Auto) && (deviceDescription.driverVersion < MinimumAMDDriverVersion))
|
||||
{
|
||||
g_device.reset();
|
||||
g_interface.reset();
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
g_vulkan = (interfaceFunction == CreateVulkanInterfaceWrapper);
|
||||
#endif
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -302,6 +302,7 @@ CONFIG_DEFINE_ENUM_TEMPLATE(EVoiceLanguage)
|
|||
|
||||
CONFIG_DEFINE_ENUM_TEMPLATE(EGraphicsAPI)
|
||||
{
|
||||
{ "Auto", EGraphicsAPI::Auto },
|
||||
#ifdef UNLEASHED_RECOMP_D3D12
|
||||
{ "D3D12", EGraphicsAPI::D3D12 },
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -62,6 +62,7 @@ enum class EChannelConfiguration : uint32_t
|
|||
|
||||
enum class EGraphicsAPI : uint32_t
|
||||
{
|
||||
Auto,
|
||||
#ifdef UNLEASHED_RECOMP_D3D12
|
||||
D3D12,
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -47,13 +47,7 @@ CONFIG_DEFINE_LOCALISED("Audio", bool, MusicAttenuation, false);
|
|||
CONFIG_DEFINE_LOCALISED("Audio", bool, BattleTheme, true);
|
||||
|
||||
CONFIG_DEFINE("Video", std::string, GraphicsDevice, "");
|
||||
|
||||
#ifdef UNLEASHED_RECOMP_D3D12
|
||||
CONFIG_DEFINE_ENUM("Video", EGraphicsAPI, GraphicsAPI, EGraphicsAPI::D3D12);
|
||||
#else
|
||||
CONFIG_DEFINE_ENUM("Video", EGraphicsAPI, GraphicsAPI, EGraphicsAPI::Vulkan);
|
||||
#endif
|
||||
|
||||
CONFIG_DEFINE_ENUM("Video", EGraphicsAPI, GraphicsAPI, EGraphicsAPI::Auto);
|
||||
CONFIG_DEFINE("Video", int32_t, WindowX, WINDOWPOS_CENTRED);
|
||||
CONFIG_DEFINE("Video", int32_t, WindowY, WINDOWPOS_CENTRED);
|
||||
CONFIG_DEFINE_LOCALISED("Video", int32_t, WindowSize, -1);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue