mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2024-11-15 05:47:56 -07:00
Make us capable of supporting driver specific issues(OSS versus official)
This commit is contained in:
parent
906cbe5ddf
commit
1910f5851f
@ -20,6 +20,7 @@ namespace DriverDetails
|
||||
|
||||
// Local members
|
||||
Vendor m_vendor = VENDOR_UNKNOWN;
|
||||
Driver m_driver = DRIVER_UNKNOWN;
|
||||
u32 m_devfamily = 0;
|
||||
double m_version = 0.0;
|
||||
|
||||
@ -36,24 +37,52 @@ namespace DriverDetails
|
||||
// Private function
|
||||
void InitBugMap()
|
||||
{
|
||||
switch(m_vendor)
|
||||
switch(m_driver)
|
||||
{
|
||||
case VENDOR_QUALCOMM:
|
||||
case DRIVER_QUALCOMM:
|
||||
for (unsigned int a = 0; a < (sizeof(m_qualcommbugs) / sizeof(BugInfo)); ++a)
|
||||
m_bugs[std::make_pair(m_vendor, m_qualcommbugs[a].m_bug)] = m_qualcommbugs[a];
|
||||
break;
|
||||
case VENDOR_ARM:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Init(Vendor vendor, const u32 devfamily, const double version)
|
||||
void Init(Vendor vendor, Driver driver, const u32 devfamily, const double version)
|
||||
{
|
||||
m_vendor = vendor;
|
||||
m_driver = driver;
|
||||
m_devfamily = devfamily;
|
||||
m_version = version;
|
||||
InitBugMap();
|
||||
InitBugMap();
|
||||
if (driver == DRIVER_UNKNOWN)
|
||||
switch(vendor)
|
||||
{
|
||||
case VENDOR_NVIDIA:
|
||||
case VENDOR_TEGRA:
|
||||
m_driver = DRIVER_NVIDIA;
|
||||
break;
|
||||
case VENDOR_ATI:
|
||||
m_driver = DRIVER_ATI;
|
||||
break;
|
||||
case VENDOR_INTEL:
|
||||
m_driver = DRIVER_INTEL;
|
||||
break;
|
||||
case VENDOR_ARM:
|
||||
m_driver = DRIVER_ARM;
|
||||
break;
|
||||
case VENDOR_QUALCOMM:
|
||||
m_driver = DRIVER_QUALCOMM;
|
||||
break;
|
||||
case VENDOR_IMGTEC:
|
||||
m_driver = DRIVER_IMGTEC;
|
||||
break;
|
||||
case VENDOR_VIVANTE:
|
||||
m_driver = DRIVER_VIVANTE;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
for (auto it = m_bugs.begin(); it != m_bugs.end(); ++it)
|
||||
if (it->second.m_devfamily == m_devfamily)
|
||||
|
@ -21,6 +21,23 @@ namespace DriverDetails
|
||||
VENDOR_UNKNOWN
|
||||
};
|
||||
|
||||
// Enum of known drivers
|
||||
enum Driver
|
||||
{
|
||||
DRIVER_NVIDIA = 0, // Official Nvidia, including mobile GPU
|
||||
DRIVER_NOUVEAU, // OSS nouveau
|
||||
DRIVER_ATI, // Official Nvidia
|
||||
DRIVER_RADEONHD, // OSS Radeon
|
||||
DRIVER_INTEL, // Official Intel
|
||||
DRIVER_ARM, // Official Mali driver
|
||||
DRIVER_LIMA, // OSS Mali driver
|
||||
DRIVER_QUALCOMM, // Official Adreno driver
|
||||
DRIVER_FREEDRENO, // OSS Adreno driver
|
||||
DRIVER_IMGTEC, // OSS PowerVR driver
|
||||
DRIVER_VIVANTE, // Official vivante driver
|
||||
DRIVER_UNKNOWN // Unknown driver, default to official hardware driver
|
||||
};
|
||||
|
||||
// Enum of known bugs
|
||||
// These can be vendor specific, but we put them all in here
|
||||
// For putting a new bug in here, make sure to put a detailed comment above the enum
|
||||
@ -55,7 +72,7 @@ namespace DriverDetails
|
||||
};
|
||||
|
||||
// Initializes our internal vendor, device family, and driver version
|
||||
void Init(Vendor vendor, const u32 devfamily, const double version);
|
||||
void Init(Vendor vendor, Driver driver, const u32 devfamily, const double version);
|
||||
|
||||
// Once Vendor and driver version is set, this will return if it has the applicable bug passed to it.
|
||||
bool HasBug(Bug bug);
|
||||
|
@ -269,17 +269,17 @@ void GLAPIENTRY ClearDepthf(GLfloat depthval)
|
||||
|
||||
void InitDriverInfo()
|
||||
{
|
||||
// Get Vendor
|
||||
std::string svendor = std::string(g_ogl_config.gl_vendor);
|
||||
std::string srenderer = std::string(g_ogl_config.gl_renderer);
|
||||
DriverDetails::Vendor vendor = DriverDetails::VENDOR_UNKNOWN;
|
||||
DriverDetails::Driver driver = DriverDetails::DRIVER_UNKNOWN;
|
||||
u32 devfamily = 0;
|
||||
double version = 0.0;
|
||||
|
||||
// Get Vendor first
|
||||
// Get the vendor first
|
||||
if (svendor == "NVIDIA Corporation" && srenderer != "NVIDIA Tegra")
|
||||
vendor = DriverDetails::VENDOR_NVIDIA;
|
||||
else if (svendor == "ATI Technologies Inc.")
|
||||
else if (svendor == "ATI Technologies Inc." || svendor == "Advanced Micro Devices, Inc.")
|
||||
vendor = DriverDetails::VENDOR_ATI;
|
||||
else if (std::string::npos != svendor.find("Intel"))
|
||||
vendor = DriverDetails::VENDOR_INTEL;
|
||||
@ -317,7 +317,7 @@ void InitDriverInfo()
|
||||
default:
|
||||
break;
|
||||
}
|
||||
DriverDetails::Init(vendor, devfamily, version);
|
||||
DriverDetails::Init(vendor, driver, devfamily, version);
|
||||
}
|
||||
|
||||
// Init functions
|
||||
|
Loading…
Reference in New Issue
Block a user