diff --git a/Source/Core/VideoCommon/Src/DriverDetails.cpp b/Source/Core/VideoCommon/Src/DriverDetails.cpp index 3e975e0917..76fe1f9dba 100644 --- a/Source/Core/VideoCommon/Src/DriverDetails.cpp +++ b/Source/Core/VideoCommon/Src/DriverDetails.cpp @@ -11,8 +11,9 @@ namespace DriverDetails { struct BugInfo { - Vendor m_vendor; // which vendor has the error - Driver m_driver; // which driver has the error + u32 m_os; // Which OS has the issue + Vendor m_vendor; // Which vendor has the error + Driver m_driver; // Which driver has the error Bug m_bug; // Which bug it is double m_versionstart; // When it started double m_versionend; // When it ended @@ -20,6 +21,16 @@ namespace DriverDetails }; // Local members +#ifdef _WIN32 + const u32 m_os = OS_ALL | OS_WINDOWS; +#elif ANDROID + const u32 m_os = OS_ALL | OS_ANDROID; +#elif __APPLE__ + const u32 m_os = OS_ALL | OS_OSX; +#elif __linux__ + const u32 m_os = OS_ALL | OS_LINUX; +#endif + Vendor m_vendor = VENDOR_UNKNOWN; Driver m_driver = DRIVER_UNKNOWN; double m_version = 0.0; @@ -27,18 +38,18 @@ namespace DriverDetails // This is a list of all known bugs for each vendor // We use this to check if the device and driver has a issue BugInfo m_known_bugs[] = { - {VENDOR_QUALCOMM, DRIVER_QUALCOMM_3XX, BUG_NODYNUBOACCESS, 14.0, 46.0, true}, - {VENDOR_QUALCOMM, DRIVER_QUALCOMM_3XX, BUG_BROKENCENTROID, 14.0, -1.0, true}, - {VENDOR_QUALCOMM, DRIVER_QUALCOMM_3XX, BUG_BROKENINFOLOG, -1.0, -1.0, true}, - {VENDOR_QUALCOMM, DRIVER_QUALCOMM_3XX, BUG_ANNIHILATEDUBOS, 41.0, 46.0, true}, - {VENDOR_QUALCOMM, DRIVER_QUALCOMM_3XX, BUG_BROKENSWAP, -1.0, -1.0, true}, - {VENDOR_QUALCOMM, DRIVER_QUALCOMM_3XX, BUG_BROKENBUFFERSTREAM, -1.0, -1.0, true}, - {VENDOR_ARM, DRIVER_ARM_T6XX, BUG_BROKENBUFFERSTREAM, -1.0, -1.0, true}, - {VENDOR_MESA, DRIVER_NOUVEAU, BUG_BROKENUBO, 900, 916, true}, - {VENDOR_MESA, DRIVER_R600, BUG_BROKENUBO, 900, 913, true}, - {VENDOR_MESA, DRIVER_I965, BUG_BROKENUBO, 900, 920, true}, - {VENDOR_ATI, DRIVER_ATI, BUG_BROKENHACKEDBUFFER, -1.0, -1.0, true}, - {VENDOR_MESA, DRIVER_NOUVEAU, BUG_BROKENHACKEDBUFFER, -1.0, -1.0, true}, + {OS_ALL, VENDOR_QUALCOMM, DRIVER_QUALCOMM_3XX, BUG_NODYNUBOACCESS, 14.0, 46.0, true}, + {OS_ALL, VENDOR_QUALCOMM, DRIVER_QUALCOMM_3XX, BUG_BROKENCENTROID, 14.0, -1.0, true}, + {OS_ALL, VENDOR_QUALCOMM, DRIVER_QUALCOMM_3XX, BUG_BROKENINFOLOG, -1.0, -1.0, true}, + {OS_ALL, VENDOR_QUALCOMM, DRIVER_QUALCOMM_3XX, BUG_ANNIHILATEDUBOS, 41.0, 46.0, true}, + {OS_ALL, VENDOR_QUALCOMM, DRIVER_QUALCOMM_3XX, BUG_BROKENSWAP, -1.0, -1.0, true}, + {OS_ALL, VENDOR_QUALCOMM, DRIVER_QUALCOMM_3XX, BUG_BROKENBUFFERSTREAM, -1.0, -1.0, true}, + {OS_ALL, VENDOR_ARM, DRIVER_ARM_T6XX, BUG_BROKENBUFFERSTREAM, -1.0, -1.0, true}, + {OS_ALL, VENDOR_MESA, DRIVER_NOUVEAU, BUG_BROKENUBO, 900, 916, true}, + {OS_ALL, VENDOR_MESA, DRIVER_R600, BUG_BROKENUBO, 900, 913, true}, + {OS_ALL, VENDOR_MESA, DRIVER_I965, BUG_BROKENUBO, 900, 920, true}, + {OS_ALL, VENDOR_ATI, DRIVER_ATI, BUG_BROKENHACKEDBUFFER, -1.0, -1.0, true}, + {OS_ALL, VENDOR_MESA, DRIVER_NOUVEAU, BUG_BROKENHACKEDBUFFER, -1.0, -1.0, true}, }; std::map m_bugs; @@ -75,6 +86,7 @@ namespace DriverDetails for(auto& bug : m_known_bugs) { if( + ( bug.m_vendor & m_vendor ) && ( bug.m_vendor == m_vendor || bug.m_vendor == VENDOR_ALL ) && ( bug.m_driver == m_driver || bug.m_driver == DRIVER_ALL ) && ( bug.m_versionstart <= m_version || bug.m_versionstart == -1 ) && diff --git a/Source/Core/VideoCommon/Src/DriverDetails.h b/Source/Core/VideoCommon/Src/DriverDetails.h index 0ddf097ea1..6ce3afbae5 100644 --- a/Source/Core/VideoCommon/Src/DriverDetails.h +++ b/Source/Core/VideoCommon/Src/DriverDetails.h @@ -6,6 +6,15 @@ namespace DriverDetails { + // Enum of supported operating systems + enum OS + { + OS_ALL = (1 << 0), + OS_WINDOWS = (1 << 1), + OS_LINUX = (1 << 2), + OS_OSX = (1 << 3), + OS_ANDROID = (1 << 4), + }; // Enum of known vendors // Tegra and Nvidia are separated out due to such substantial differences enum Vendor