diff --git a/Source/Core/VideoBackends/OGL/Render.cpp b/Source/Core/VideoBackends/OGL/Render.cpp index 2b7a081fb3..e98c2b8b7a 100644 --- a/Source/Core/VideoBackends/OGL/Render.cpp +++ b/Source/Core/VideoBackends/OGL/Render.cpp @@ -290,10 +290,29 @@ void InitDriverInfo() } break; case DriverDetails::VENDOR_ARM: - if (std::string::npos != srenderer.find("Mali-T6")) - driver = DriverDetails::DRIVER_ARM_T6XX; + // Currently the Mali-T line has two families in it. + // Mali-T6xx and Mali-T7xx + // These two families are similar enough that they share bugs in their drivers. + if (std::string::npos != srenderer.find("Mali-T")) + { + driver = DriverDetails::DRIVER_ARM_TXXX; + // Mali drivers provide no way to explicitly find out what video driver is running. + // This is similar to how we can't find the Nvidia driver version in Windows. + // Good thing is that ARM introduces a new video driver about once every two years so we can + // find the driver version by the features it exposes. + // r2p0 - No OpenGL ES 3.0 support (We don't support this) + // r3p0 - OpenGL ES 3.0 support + // r4p0 - Supports 'GL_EXT_shader_pixel_local_storage' extension. + + if (GLExtensions::Supports("GL_EXT_shader_pixel_local_storage")) + version = 400; + else + version = 300; + } else if (std::string::npos != srenderer.find("Mali-4")) + { driver = DriverDetails::DRIVER_ARM_4XX; + } break; case DriverDetails::VENDOR_MESA: { diff --git a/Source/Core/VideoCommon/DriverDetails.cpp b/Source/Core/VideoCommon/DriverDetails.cpp index a0b69b829a..faf219d107 100644 --- a/Source/Core/VideoCommon/DriverDetails.cpp +++ b/Source/Core/VideoCommon/DriverDetails.cpp @@ -48,7 +48,7 @@ namespace DriverDetails {OS_ALL, VENDOR_QUALCOMM, DRIVER_QUALCOMM_3XX, -1, BUG_BROKENBUFFERSTREAM, -1.0, -1.0, true}, {OS_ALL, VENDOR_QUALCOMM, DRIVER_QUALCOMM_3XX, -1, BUG_BROKENTEXTURESIZE, -1.0, -1.0, true}, {OS_ALL, VENDOR_QUALCOMM, DRIVER_QUALCOMM_3XX, -1, BUG_ROTATEDFRAMEBUFFER, 53.0, -1.0, true}, - {OS_ALL, VENDOR_ARM, DRIVER_ARM_T6XX, -1, BUG_BROKENBUFFERSTREAM, -1.0, -1.0, true}, + {OS_ALL, VENDOR_ARM, DRIVER_ARM_TXXX, -1, BUG_BROKENBUFFERSTREAM, -1.0, -1.0, true}, {OS_ALL, VENDOR_MESA, DRIVER_NOUVEAU, -1, BUG_BROKENUBO, 900, 916, true}, {OS_ALL, VENDOR_MESA, DRIVER_R600, -1, BUG_BROKENUBO, 900, 913, true}, {OS_ALL, VENDOR_MESA, DRIVER_I965, -1, BUG_BROKENUBO, 900, 920, true}, diff --git a/Source/Core/VideoCommon/DriverDetails.h b/Source/Core/VideoCommon/DriverDetails.h index 458973880a..bbe9262b0a 100644 --- a/Source/Core/VideoCommon/DriverDetails.h +++ b/Source/Core/VideoCommon/DriverDetails.h @@ -43,7 +43,7 @@ namespace DriverDetails DRIVER_INTEL, // Official Intel DRIVER_I965, // OSS Intel DRIVER_ARM_4XX, // Official Mali driver - DRIVER_ARM_T6XX, // Official Mali driver + DRIVER_ARM_TXXX, // Official Mali driver DRIVER_LIMA, // OSS Mali driver DRIVER_QUALCOMM_3XX, // Official Adreno driver 3xx DRIVER_QUALCOMM_2XX, // Official Adreno driver 2xx