Work around certain buggy Vivante GPU drivers on Android

love2d/love-android#204
This commit is contained in:
Alex Szpakowski
2021-04-17 15:09:21 -03:00
parent 977c690fa9
commit e9c58c8192
3 changed files with 22 additions and 4 deletions
+14 -3
View File
@@ -124,6 +124,20 @@ bool OpenGL::initContext()
if (!gladLoadGLLoader(LOVEGetProcAddress)) if (!gladLoadGLLoader(LOVEGetProcAddress))
return false; return false;
initVendor();
bugs = {};
if (GLAD_ES_VERSION_3_0 && !GLAD_ES_VERSION_3_1)
{
const char *device = (const char *) glGetString(GL_RENDERER);
if (getVendor() == VENDOR_VIVANTE && strstr(device, "Vivante GC7000UL"))
bugs.brokenGLES3 = true;
}
if (bugs.brokenGLES3)
GLAD_ES_VERSION_3_0 = false;
if (GLAD_VERSION_3_2) if (GLAD_VERSION_3_2)
{ {
GLint profileMask = 0; GLint profileMask = 0;
@@ -134,9 +148,6 @@ bool OpenGL::initContext()
coreProfile = false; coreProfile = false;
initOpenGLFunctions(); initOpenGLFunctions();
initVendor();
bugs = {};
#if defined(LOVE_WINDOWS) || defined(LOVE_LINUX) #if defined(LOVE_WINDOWS) || defined(LOVE_LINUX)
// See the comments in OpenGL.h. // See the comments in OpenGL.h.
+7
View File
@@ -184,6 +184,13 @@ public:
**/ **/
bool brokenSRGB; bool brokenSRGB;
/**
* Some Android graphics drivers claim to support GLES3.0 but have bugs
* with certain aspects that users expect to work. For example:
* https://github.com/love2d/love-android/issues/204
**/
bool brokenGLES3;
/** /**
* Other bugs which have workarounds that don't use conditional code at * Other bugs which have workarounds that don't use conditional code at
* the moment: * the moment:
+1 -1
View File
@@ -95,7 +95,7 @@ GLSL.FUNCTIONS = [[
#if __VERSION__ >= 300 || defined(GL_OES_texture_3D) #if __VERSION__ >= 300 || defined(GL_OES_texture_3D)
precision lowp sampler3D; precision lowp sampler3D;
#endif #endif
#if __VERSION__ >= 300 #if __VERSION__ >= 300 && !defined(LOVE_GLSL1_ON_GLSL3)
precision lowp sampler2DShadow; precision lowp sampler2DShadow;
precision lowp samplerCubeShadow; precision lowp samplerCubeShadow;
precision lowp sampler2DArrayShadow; precision lowp sampler2DArrayShadow;