Merge pull request #2917 from Sonicadvance1/android_fix_sgs6

[Android] Workaround Mali driver issue on the Samsung Galaxy S6.
This commit is contained in:
Markus Wick 2015-08-29 08:56:32 +02:00
commit a16669231a
3 changed files with 15 additions and 1 deletions

View File

@ -4,6 +4,7 @@
#include "VideoBackends/OGL/GLInterfaceBase.h"
#include "VideoBackends/OGL/GLInterface/EGL.h"
#include "VideoCommon/DriverDetails.h"
#include "VideoCommon/RenderBase.h"
// Show the current FPS
@ -13,7 +14,8 @@ void cInterfaceEGL::Swap()
}
void cInterfaceEGL::SwapInterval(int Interval)
{
eglSwapInterval(egl_dpy, Interval);
if (!DriverDetails::HasBug(DriverDetails::BUG_BROKENVSYNC))
eglSwapInterval(egl_dpy, Interval);
}
void* cInterfaceEGL::GetFuncAddress(const std::string& name)

View File

@ -54,6 +54,7 @@ namespace DriverDetails
{OS_ALL, VENDOR_QUALCOMM, DRIVER_QUALCOMM, -1, BUG_BROKENIVECSHIFTS, -1.0, 46.0, true},
{OS_ALL, VENDOR_QUALCOMM, DRIVER_QUALCOMM, -1, BUG_BROKENGLES31, -1.0, -1.0, true},
{OS_ALL, VENDOR_ARM, DRIVER_ARM, -1, BUG_BROKENBUFFERSTREAM, -1.0, -1.0, true},
{OS_ALL, VENDOR_ARM, DRIVER_ARM, -1, BUG_BROKENVSYNC, -1.0, -1.0, true},
{OS_ALL, VENDOR_IMGTEC, DRIVER_IMGTEC, -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},

View File

@ -248,6 +248,17 @@ namespace DriverDetails
// This isn't fully researched, but at the very least Qualcomm doesn't implement Geometry shader features fully.
// Until each bug is fully investigated, just disable GLES 3.1 entirely on these devices.
BUG_BROKENGLES31,
// Bug: ARM Mali managed to break disabling vsync
// Affected Devices: Mali
// Started Version: r5p0-rev2
// Ended Version: -1
// If we disable vsync with eglSwapInterval(dpy, 0) then the screen will stop showing new updates after a handful of swaps.
// This was noticed on a Samsung Galaxy S6 with its Android 5.1.1 update.
// The default Android 5.0 image didn't encounter this issue.
// We can't actually detect what the driver version is on Android, so until the driver version lands that displays the version in
// the GL_VERSION string, we will have to force vsync to be enabled at all times.
BUG_BROKENVSYNC,
};
// Initializes our internal vendor, device family, and driver version