Index: src/gpu/gl/GrGLInterface.cpp |
diff --git a/src/gpu/gl/GrGLInterface.cpp b/src/gpu/gl/GrGLInterface.cpp |
index 8bbd2f3b1b77c508a025269de66ac03988eaa6b7..29a092adaec69ec8469db45b0f5e312ee5c8bf32 100644 |
--- a/src/gpu/gl/GrGLInterface.cpp |
+++ b/src/gpu/gl/GrGLInterface.cpp |
@@ -466,14 +466,6 @@ bool GrGLInterface::validate() const { |
} |
} |
- if ((kGL_GrGLStandard == fStandard && fExtensions.has("GL_EXT_direct_state_access")) || |
- (kGLES_GrGLStandard == fStandard && fExtensions.has("GL_NV_path_rendering"))) { |
- if (NULL == fFunctions.fMatrixLoadf || |
- NULL == fFunctions.fMatrixLoadIdentity) { |
- RETURN_FALSE_INTERFACE |
- } |
- } |
- |
if ((kGL_GrGLStandard == fStandard && |
(glVer >= GR_GL_VER(4,3) || fExtensions.has("GL_ARB_program_interface_query"))) || |
(kGLES_GrGLStandard == fStandard && glVer >= GR_GL_VER(3,1))) { |
@@ -492,7 +484,9 @@ bool GrGLInterface::validate() const { |
} |
if (fExtensions.has("GL_NV_path_rendering")) { |
- if (NULL == fFunctions.fPathCommands || |
+ if (NULL == fFunctions.fMatrixLoadf || |
+ NULL == fFunctions.fMatrixLoadIdentity || |
+ NULL == fFunctions.fPathCommands || |
NULL == fFunctions.fPathCoords || |
NULL == fFunctions.fPathParameteri || |
NULL == fFunctions.fPathParameterf || |
@@ -540,5 +534,175 @@ bool GrGLInterface::validate() const { |
} |
} |
+ if ((kGL_GrGLStandard == fStandard && glVer >= GR_GL_VER(3,1)) || |
+ (kGLES_GrGLStandard == fStandard && glVer >= GR_GL_VER(3,0)) || |
+ fExtensions.has("GL_ARB_draw_instanced") || |
+ fExtensions.has("GL_EXT_draw_instanced")) { |
+ if (NULL == fFunctions.fDrawArraysInstanced || |
+ NULL == fFunctions.fDrawElementsInstanced) { |
+ RETURN_FALSE_INTERFACE |
+ } |
+ } |
+ |
+ if ((kGL_GrGLStandard == fStandard && glVer >= GR_GL_VER(3,2)) || |
+ (kGLES_GrGLStandard == fStandard && glVer >= GR_GL_VER(3,0)) || |
+ fExtensions.has("GL_ARB_instanced_arrays") || |
+ fExtensions.has("GL_EXT_instanced_arrays")) { |
+ if (NULL == fFunctions.fVertexAttribDivisor) { |
+ RETURN_FALSE_INTERFACE |
+ } |
+ } |
+ |
+ if (fExtensions.has("GL_NV_bindless_texture")) { |
+ if (NULL == fFunctions.fGetTextureHandle || |
+ NULL == fFunctions.fGetTextureSamplerHandle || |
+ NULL == fFunctions.fMakeTextureHandleResident || |
+ NULL == fFunctions.fMakeTextureHandleNonResident || |
+ NULL == fFunctions.fGetImageHandle || |
+ NULL == fFunctions.fMakeImageHandleResident || |
+ NULL == fFunctions.fMakeImageHandleNonResident || |
+ NULL == fFunctions.fIsTextureHandleResident || |
+ NULL == fFunctions.fIsImageHandleResident || |
+ NULL == fFunctions.fUniformHandleui64 || |
+ NULL == fFunctions.fUniformHandleui64v || |
+ NULL == fFunctions.fProgramUniformHandleui64 || |
+ NULL == fFunctions.fProgramUniformHandleui64v) { |
+ RETURN_FALSE_INTERFACE |
+ } |
+ } |
+ |
+ if (kGL_GrGLStandard == fStandard && fExtensions.has("GL_EXT_direct_state_access")) { |
+ if (NULL == fFunctions.fTextureParameteri || |
+ NULL == fFunctions.fTextureParameteriv || |
+ NULL == fFunctions.fTextureParameterf || |
+ NULL == fFunctions.fTextureParameterfv || |
+ NULL == fFunctions.fTextureImage1D || |
+ NULL == fFunctions.fTextureImage2D || |
+ NULL == fFunctions.fTextureSubImage1D || |
+ NULL == fFunctions.fTextureSubImage2D || |
+ NULL == fFunctions.fCopyTextureImage1D || |
+ NULL == fFunctions.fCopyTextureImage2D || |
+ NULL == fFunctions.fCopyTextureSubImage1D || |
+ NULL == fFunctions.fCopyTextureSubImage2D || |
+ NULL == fFunctions.fGetTextureImage || |
+ NULL == fFunctions.fGetTextureParameterfv || |
+ NULL == fFunctions.fGetTextureParameteriv || |
+ NULL == fFunctions.fGetTextureLevelParameterfv || |
+ NULL == fFunctions.fGetTextureLevelParameteriv) { |
+ RETURN_FALSE_INTERFACE |
+ } |
+ if (glVer >= GR_GL_VER(1,2)) { |
+ if (NULL == fFunctions.fTextureImage3D || |
+ NULL == fFunctions.fTextureSubImage3D || |
+ NULL == fFunctions.fCopyTextureSubImage3D || |
+ NULL == fFunctions.fCompressedTextureImage3D || |
+ NULL == fFunctions.fCompressedTextureImage2D || |
+ NULL == fFunctions.fCompressedTextureImage1D || |
+ NULL == fFunctions.fCompressedTextureSubImage3D || |
+ NULL == fFunctions.fCompressedTextureSubImage2D || |
+ NULL == fFunctions.fCompressedTextureSubImage1D || |
+ NULL == fFunctions.fGetCompressedTextureImage) { |
+ RETURN_FALSE_INTERFACE |
+ } |
+ } |
+ if (glVer >= GR_GL_VER(1,5)) { |
+ if (NULL == fFunctions.fNamedBufferData || |
+ NULL == fFunctions.fNamedBufferSubData || |
+ NULL == fFunctions.fMapNamedBuffer || |
+ NULL == fFunctions.fUnmapNamedBuffer || |
+ NULL == fFunctions.fGetNamedBufferParameteriv || |
+ NULL == fFunctions.fGetNamedBufferPointerv || |
+ NULL == fFunctions.fGetNamedBufferSubData) { |
+ RETURN_FALSE_INTERFACE |
+ } |
+ } |
+ if (glVer >= GR_GL_VER(2,0)) { |
+ if (NULL == fFunctions.fProgramUniform1f || |
+ NULL == fFunctions.fProgramUniform2f || |
+ NULL == fFunctions.fProgramUniform3f || |
+ NULL == fFunctions.fProgramUniform4f || |
+ NULL == fFunctions.fProgramUniform1i || |
+ NULL == fFunctions.fProgramUniform2i || |
+ NULL == fFunctions.fProgramUniform3i || |
+ NULL == fFunctions.fProgramUniform4i || |
+ NULL == fFunctions.fProgramUniform1fv || |
+ NULL == fFunctions.fProgramUniform2fv || |
+ NULL == fFunctions.fProgramUniform3fv || |
+ NULL == fFunctions.fProgramUniform4fv || |
+ NULL == fFunctions.fProgramUniform1iv || |
+ NULL == fFunctions.fProgramUniform2iv || |
+ NULL == fFunctions.fProgramUniform3iv || |
+ NULL == fFunctions.fProgramUniform4iv || |
+ NULL == fFunctions.fProgramUniformMatrix2fv || |
+ NULL == fFunctions.fProgramUniformMatrix3fv || |
+ NULL == fFunctions.fProgramUniformMatrix4fv) { |
+ RETURN_FALSE_INTERFACE |
+ } |
+ } |
+ if (glVer >= GR_GL_VER(2,1)) { |
+ if (NULL == fFunctions.fProgramUniformMatrix2x3fv || |
+ NULL == fFunctions.fProgramUniformMatrix3x2fv || |
+ NULL == fFunctions.fProgramUniformMatrix2x4fv || |
+ NULL == fFunctions.fProgramUniformMatrix4x2fv || |
+ NULL == fFunctions.fProgramUniformMatrix3x4fv || |
+ NULL == fFunctions.fProgramUniformMatrix4x3fv) { |
+ RETURN_FALSE_INTERFACE |
+ } |
+ } |
+ if (glVer >= GR_GL_VER(3,0)) { |
+ if (NULL == fFunctions.fNamedRenderbufferStorage || |
+ NULL == fFunctions.fGetNamedRenderbufferParameteriv || |
+ NULL == fFunctions.fNamedRenderbufferStorageMultisample || |
+ NULL == fFunctions.fCheckNamedFramebufferStatus || |
+ NULL == fFunctions.fNamedFramebufferTexture1D || |
+ NULL == fFunctions.fNamedFramebufferTexture2D || |
+ NULL == fFunctions.fNamedFramebufferTexture3D || |
+ NULL == fFunctions.fNamedFramebufferRenderbuffer || |
+ NULL == fFunctions.fGetNamedFramebufferAttachmentParameteriv || |
+ NULL == fFunctions.fGenerateTextureMipmap || |
+ NULL == fFunctions.fFramebufferDrawBuffer || |
+ NULL == fFunctions.fFramebufferDrawBuffers || |
+ NULL == fFunctions.fFramebufferReadBuffer || |
+ NULL == fFunctions.fGetFramebufferParameteriv || |
+ NULL == fFunctions.fNamedCopyBufferSubData || |
+ NULL == fFunctions.fVertexArrayVertexOffset || |
+ NULL == fFunctions.fVertexArrayColorOffset || |
+ NULL == fFunctions.fVertexArrayEdgeFlagOffset || |
+ NULL == fFunctions.fVertexArrayIndexOffset || |
+ NULL == fFunctions.fVertexArrayNormalOffset || |
+ NULL == fFunctions.fVertexArrayTexCoordOffset || |
+ NULL == fFunctions.fVertexArrayMultiTexCoordOffset || |
+ NULL == fFunctions.fVertexArrayFogCoordOffset || |
+ NULL == fFunctions.fVertexArraySecondaryColorOffset || |
+ NULL == fFunctions.fVertexArrayVertexAttribOffset || |
+ NULL == fFunctions.fVertexArrayVertexAttribIOffset || |
+ NULL == fFunctions.fEnableVertexArray || |
+ NULL == fFunctions.fDisableVertexArray || |
+ NULL == fFunctions.fEnableVertexArrayAttrib || |
+ NULL == fFunctions.fDisableVertexArrayAttrib || |
+ NULL == fFunctions.fGetVertexArrayIntegerv || |
+ NULL == fFunctions.fGetVertexArrayPointerv || |
+ NULL == fFunctions.fGetVertexArrayIntegeri_v || |
+ NULL == fFunctions.fGetVertexArrayPointeri_v || |
+ NULL == fFunctions.fMapNamedBufferRange || |
+ NULL == fFunctions.fFlushMappedNamedBufferRange) { |
+ RETURN_FALSE_INTERFACE |
+ } |
+ } |
+ } |
+ |
+ if ((kGL_GrGLStandard == fStandard && glVer >= GR_GL_VER(4,3)) || |
+ fExtensions.has("GL_KHR_debug")) { |
+ if (NULL == fFunctions.fDebugMessageControl || |
+ NULL == fFunctions.fDebugMessageInsert || |
+ NULL == fFunctions.fDebugMessageCallback || |
+ NULL == fFunctions.fGetDebugMessageLog || |
+ NULL == fFunctions.fPushDebugGroup || |
+ NULL == fFunctions.fPopDebugGroup || |
+ NULL == fFunctions.fObjectLabel) { |
+ RETURN_FALSE_INTERFACE |
+ } |
+ } |
+ |
return true; |
} |