Index: src/gpu/gl/GrGLInterface.cpp |
diff --git a/src/gpu/gl/GrGLInterface.cpp b/src/gpu/gl/GrGLInterface.cpp |
index c09efae2b88bd87007efdcfdda0209fd368d44f2..53911bfcc9f13af1d6e0acff2b0dad1e8ae1b8c7 100644 |
--- a/src/gpu/gl/GrGLInterface.cpp |
+++ b/src/gpu/gl/GrGLInterface.cpp |
@@ -216,6 +216,15 @@ bool GrGLInterface::validate() const { |
if (GR_GL_INVALID_VER == glVer) { |
RETURN_FALSE_INTERFACE |
} |
+ // TODO: Remove this once command buffer implements full ES3. |
+ bool ALLOW_MISSING_FUNCTIONS_FOR_INCOMPLETE_COMMAND_BUFFER_ES3 = false; |
+ if (kGLES_GrGLStandard == fStandard && glVer >= GR_GL_VER(3,0)) { |
+ const GrGLubyte* rendererUByte; |
+ GR_GL_CALL_RET(this, rendererUByte, GetString(GR_GL_RENDERER)); |
+ const char* renderer = reinterpret_cast<const char*>(rendererUByte); |
+ ALLOW_MISSING_FUNCTIONS_FOR_INCOMPLETE_COMMAND_BUFFER_ES3 = |
+ 0 == strcmp(renderer, "Chromium"); |
+ } |
// Now check that baseline ES/Desktop fns not covered above are present |
// and that we have fn pointers for any advertised fExtensions that we will |
@@ -306,8 +315,10 @@ bool GrGLInterface::validate() const { |
} |
} |
} else if (glVer >= GR_GL_VER(3,0) || fExtensions.has("GL_EXT_texture_storage")) { |
- if (nullptr == fFunctions.fTexStorage2D) { |
- RETURN_FALSE_INTERFACE |
+ if (!ALLOW_MISSING_FUNCTIONS_FOR_INCOMPLETE_COMMAND_BUFFER_ES3) { |
+ if (nullptr == fFunctions.fTexStorage2D) { |
+ RETURN_FALSE_INTERFACE |
+ } |
} |
} |
@@ -480,9 +491,11 @@ bool GrGLInterface::validate() const { |
if (glVer >= GR_GL_VER(3,0) || |
(kGLES_GrGLStandard == fStandard && fExtensions.has("GL_EXT_map_buffer_range")) || |
(kGL_GrGLStandard == fStandard && fExtensions.has("GL_ARB_map_buffer_range"))) { |
- if (nullptr == fFunctions.fMapBufferRange || |
- nullptr == fFunctions.fFlushMappedBufferRange) { |
- RETURN_FALSE_INTERFACE; |
+ if (!ALLOW_MISSING_FUNCTIONS_FOR_INCOMPLETE_COMMAND_BUFFER_ES3) { |
+ if (nullptr == fFunctions.fMapBufferRange || |
+ nullptr == fFunctions.fFlushMappedBufferRange) { |
+ RETURN_FALSE_INTERFACE; |
+ } |
} |
} |
@@ -562,14 +575,16 @@ bool GrGLInterface::validate() const { |
nullptr == fFunctions.fDrawElementsInstanced) { |
RETURN_FALSE_INTERFACE |
} |
- } |
+ } |
} else if (kGLES_GrGLStandard == fStandard) { |
- if (glVer >= GR_GL_VER(3,0) || fExtensions.has("GL_EXT_draw_instanced")) { |
- if (nullptr == fFunctions.fDrawArraysInstanced || |
- nullptr == fFunctions.fDrawElementsInstanced) { |
- RETURN_FALSE_INTERFACE |
+ if (!ALLOW_MISSING_FUNCTIONS_FOR_INCOMPLETE_COMMAND_BUFFER_ES3) { |
+ if (glVer >= GR_GL_VER(3,0) || fExtensions.has("GL_EXT_draw_instanced")) { |
+ if (nullptr == fFunctions.fDrawArraysInstanced || |
+ nullptr == fFunctions.fDrawElementsInstanced) { |
+ RETURN_FALSE_INTERFACE |
+ } |
} |
- } |
+ } |
} |
if (kGL_GrGLStandard == fStandard) { |
@@ -577,13 +592,15 @@ bool GrGLInterface::validate() const { |
if (nullptr == fFunctions.fVertexAttribDivisor) { |
RETURN_FALSE_INTERFACE |
} |
- } |
+ } |
} else if (kGLES_GrGLStandard == fStandard) { |
- if (glVer >= GR_GL_VER(3,0) || fExtensions.has("GL_EXT_instanced_arrays")) { |
- if (nullptr == fFunctions.fVertexAttribDivisor) { |
- RETURN_FALSE_INTERFACE |
+ if (!ALLOW_MISSING_FUNCTIONS_FOR_INCOMPLETE_COMMAND_BUFFER_ES3) { |
+ if (glVer >= GR_GL_VER(3,0) || fExtensions.has("GL_EXT_instanced_arrays")) { |
+ if (nullptr == fFunctions.fVertexAttribDivisor) { |
+ RETURN_FALSE_INTERFACE |
+ } |
} |
- } |
+ } |
} |
if ((kGL_GrGLStandard == fStandard && glVer >= GR_GL_VER(4,3)) || |