diff options
| author | Stenzek <stenzek@gmail.com> | 2016-08-13 15:16:31 +1000 |
|---|---|---|
| committer | Stenzek <stenzek@gmail.com> | 2016-10-01 01:09:12 +1000 |
| commit | 09638e714e75c348e597a7020f05d51256dd75e8 (patch) | |
| tree | 04bd29cce78c5ff177a0a31100ed67ab01ca74ba /Source/Core/VideoCommon/DriverDetails.cpp | |
| parent | a71381e80a1e60b48b815f3e6a1a6290a918b596 (diff) | |
VideoCommon: Extend DriverDetails to support both OpenGL and Vulkan
Diffstat (limited to 'Source/Core/VideoCommon/DriverDetails.cpp')
| -rw-r--r-- | Source/Core/VideoCommon/DriverDetails.cpp | 103 |
1 files changed, 73 insertions, 30 deletions
diff --git a/Source/Core/VideoCommon/DriverDetails.cpp b/Source/Core/VideoCommon/DriverDetails.cpp index 6da311c4e2..cf167f7d8d 100644 --- a/Source/Core/VideoCommon/DriverDetails.cpp +++ b/Source/Core/VideoCommon/DriverDetails.cpp @@ -11,6 +11,7 @@ namespace DriverDetails { struct BugInfo { + API m_api; // Which API has the issue u32 m_os; // Which OS has the issue Vendor m_vendor; // Which vendor has the error Driver m_driver; // Which driver has the error @@ -36,6 +37,7 @@ const u32 m_os = OS_ALL | OS_FREEBSD; const u32 m_os = OS_ALL | OS_OPENBSD; #endif +static API m_api = API_OPENGL; static Vendor m_vendor = VENDOR_UNKNOWN; static Driver m_driver = DRIVER_UNKNOWN; static Family m_family = Family::UNKNOWN; @@ -44,49 +46,58 @@ static double m_version = 0.0; // This is a list of all known bugs for each vendor // We use this to check if the device and driver has a issue static BugInfo m_known_bugs[] = { - {OS_ALL, VENDOR_QUALCOMM, DRIVER_QUALCOMM, Family::UNKNOWN, BUG_BROKENBUFFERSTREAM, -1.0, -1.0, - true}, - {OS_ALL, VENDOR_QUALCOMM, DRIVER_QUALCOMM, Family::UNKNOWN, BUG_BROKENNEGATEDBOOLEAN, -1.0, + {API_OPENGL, OS_ALL, VENDOR_QUALCOMM, DRIVER_QUALCOMM, Family::UNKNOWN, BUG_BROKENBUFFERSTREAM, + -1.0, -1.0, true}, + {API_OPENGL, OS_ALL, VENDOR_QUALCOMM, DRIVER_QUALCOMM, Family::UNKNOWN, + BUG_BROKENNEGATEDBOOLEAN, -1.0, -1.0, true}, + {API_OPENGL, OS_ALL, VENDOR_QUALCOMM, DRIVER_QUALCOMM, Family::UNKNOWN, BUG_BROKENEXPLICITFLUSH, + -1.0, -1.0, true}, + {API_OPENGL, OS_ALL, VENDOR_ARM, DRIVER_ARM, Family::UNKNOWN, BUG_BROKENBUFFERSTREAM, -1.0, -1.0, true}, - {OS_ALL, VENDOR_QUALCOMM, DRIVER_QUALCOMM, Family::UNKNOWN, BUG_BROKENEXPLICITFLUSH, -1.0, -1.0, - true}, - {OS_ALL, VENDOR_ARM, DRIVER_ARM, Family::UNKNOWN, BUG_BROKENBUFFERSTREAM, -1.0, -1.0, true}, - {OS_ALL, VENDOR_ARM, DRIVER_ARM, Family::UNKNOWN, BUG_BROKENVSYNC, -1.0, -1.0, true}, - {OS_ALL, VENDOR_IMGTEC, DRIVER_IMGTEC, Family::UNKNOWN, BUG_BROKENBUFFERSTREAM, -1.0, -1.0, - true}, - {OS_ALL, VENDOR_MESA, DRIVER_NOUVEAU, Family::UNKNOWN, BUG_BROKENUBO, 900, 916, true}, - {OS_ALL, VENDOR_MESA, DRIVER_R600, Family::UNKNOWN, BUG_BROKENUBO, 900, 913, true}, - {OS_ALL, VENDOR_MESA, DRIVER_R600, Family::UNKNOWN, BUG_BROKENGEOMETRYSHADERS, -1.0, 1112.0, - true}, - {OS_ALL, VENDOR_MESA, DRIVER_I965, Family::INTEL_SANDY, BUG_BROKENGEOMETRYSHADERS, -1.0, 1120.0, - true}, - {OS_ALL, VENDOR_MESA, DRIVER_I965, Family::UNKNOWN, BUG_BROKENUBO, 900, 920, true}, - {OS_ALL, VENDOR_MESA, DRIVER_ALL, Family::UNKNOWN, BUG_BROKENCOPYIMAGE, -1.0, 1064.0, true}, - {OS_LINUX, VENDOR_ATI, DRIVER_ATI, Family::UNKNOWN, BUG_BROKENPINNEDMEMORY, -1.0, -1.0, true}, - {OS_LINUX, VENDOR_NVIDIA, DRIVER_NVIDIA, Family::UNKNOWN, BUG_BROKENBUFFERSTORAGE, -1.0, - 33138.0, true}, - {OS_OSX, VENDOR_INTEL, DRIVER_INTEL, Family::INTEL_SANDY, BUG_PRIMITIVERESTART, -1.0, -1.0, - true}, - {OS_WINDOWS, VENDOR_NVIDIA, DRIVER_NVIDIA, Family::UNKNOWN, BUG_BROKENUNSYNCMAPPING, -1.0, -1.0, + {API_OPENGL, OS_ALL, VENDOR_ARM, DRIVER_ARM, Family::UNKNOWN, BUG_BROKENVSYNC, -1.0, -1.0, true}, - {OS_LINUX, VENDOR_NVIDIA, DRIVER_NVIDIA, Family::UNKNOWN, BUG_BROKENUNSYNCMAPPING, -1.0, -1.0, + {API_OPENGL, OS_ALL, VENDOR_IMGTEC, DRIVER_IMGTEC, Family::UNKNOWN, BUG_BROKENBUFFERSTREAM, + -1.0, -1.0, true}, + {API_OPENGL, OS_ALL, VENDOR_MESA, DRIVER_NOUVEAU, Family::UNKNOWN, BUG_BROKENUBO, 900, 916, true}, - {OS_WINDOWS, VENDOR_INTEL, DRIVER_INTEL, Family::UNKNOWN, BUG_INTELBROKENBUFFERSTORAGE, - 101810.3907, 101810.3960, true}, - {OS_ALL, VENDOR_ATI, DRIVER_ATI, Family::UNKNOWN, BUG_SLOWGETBUFFERSUBDATA, -1.0, -1.0, true}, - {OS_ALL, VENDOR_MESA, DRIVER_I965, Family::UNKNOWN, BUG_BROKENCLIPDISTANCE, -1.0, -1.0, true}, + {API_OPENGL, OS_ALL, VENDOR_MESA, DRIVER_R600, Family::UNKNOWN, BUG_BROKENUBO, 900, 913, true}, + {API_OPENGL, OS_ALL, VENDOR_MESA, DRIVER_R600, Family::UNKNOWN, BUG_BROKENGEOMETRYSHADERS, -1.0, + 1112.0, true}, + {API_OPENGL, OS_ALL, VENDOR_MESA, DRIVER_I965, Family::INTEL_SANDY, BUG_BROKENGEOMETRYSHADERS, + -1.0, 1120.0, true}, + {API_OPENGL, OS_ALL, VENDOR_MESA, DRIVER_I965, Family::UNKNOWN, BUG_BROKENUBO, 900, 920, true}, + {API_OPENGL, OS_ALL, VENDOR_MESA, DRIVER_ALL, Family::UNKNOWN, BUG_BROKENCOPYIMAGE, -1.0, + 1064.0, true}, + {API_OPENGL, OS_LINUX, VENDOR_ATI, DRIVER_ATI, Family::UNKNOWN, BUG_BROKENPINNEDMEMORY, -1.0, + -1.0, true}, + {API_OPENGL, OS_LINUX, VENDOR_NVIDIA, DRIVER_NVIDIA, Family::UNKNOWN, BUG_BROKENBUFFERSTORAGE, + -1.0, 33138.0, true}, + {API_OPENGL, OS_OSX, VENDOR_INTEL, DRIVER_INTEL, Family::INTEL_SANDY, BUG_PRIMITIVERESTART, + -1.0, -1.0, true}, + {API_OPENGL, OS_WINDOWS, VENDOR_NVIDIA, DRIVER_NVIDIA, Family::UNKNOWN, BUG_BROKENUNSYNCMAPPING, + -1.0, -1.0, true}, + {API_OPENGL, OS_LINUX, VENDOR_NVIDIA, DRIVER_NVIDIA, Family::UNKNOWN, BUG_BROKENUNSYNCMAPPING, + -1.0, -1.0, true}, + {API_OPENGL, OS_WINDOWS, VENDOR_INTEL, DRIVER_INTEL, Family::UNKNOWN, + BUG_INTELBROKENBUFFERSTORAGE, 101810.3907, 101810.3960, true}, + {API_OPENGL, OS_ALL, VENDOR_ATI, DRIVER_ATI, Family::UNKNOWN, BUG_SLOWGETBUFFERSUBDATA, -1.0, + -1.0, true}, + {API_OPENGL, OS_ALL, VENDOR_MESA, DRIVER_I965, Family::UNKNOWN, BUG_BROKENCLIPDISTANCE, -1.0, + -1.0, true}, }; static std::map<Bug, BugInfo> m_bugs; -void Init(Vendor vendor, Driver driver, const double version, const Family family) +void Init(API api, Vendor vendor, Driver driver, const double version, const Family family) { + m_api = api; m_vendor = vendor; m_driver = driver; m_version = version; m_family = family; if (driver == DRIVER_UNKNOWN) + { switch (vendor) { case VENDOR_NVIDIA: @@ -108,10 +119,15 @@ void Init(Vendor vendor, Driver driver, const double version, const Family famil default: break; } + } + + // Clear bug list, as the API may have changed + m_bugs.clear(); for (auto& bug : m_known_bugs) { - if ((bug.m_os & m_os) && (bug.m_vendor == m_vendor || bug.m_vendor == VENDOR_ALL) && + if ((bug.m_api & api) && (bug.m_os & m_os) && + (bug.m_vendor == m_vendor || bug.m_vendor == VENDOR_ALL) && (bug.m_driver == m_driver || bug.m_driver == DRIVER_ALL) && (bug.m_family == m_family || bug.m_family == Family::UNKNOWN) && (bug.m_versionstart <= m_version || bug.m_versionstart == -1) && @@ -127,4 +143,31 @@ bool HasBug(Bug bug) return false; return it->second.m_hasbug; } + +Vendor TranslatePCIVendorID(u32 vendor_id) +{ + switch (vendor_id) + { + case 0x10DE: + return VENDOR_NVIDIA; + + case 0x1002: + case 0x1022: + return VENDOR_ATI; + + case 0x8086: + case 0x8087: + return VENDOR_INTEL; + + // TODO: Is this correct for Mali? + case 0x13B6: + return VENDOR_ARM; + + case 0x5143: + return VENDOR_QUALCOMM; + + default: + return VENDOR_UNKNOWN; + } +} } |
