diff options
Diffstat (limited to 'src/gpu/gl/GrGLInterface.cpp')
-rw-r--r-- | src/gpu/gl/GrGLInterface.cpp | 187 |
1 files changed, 178 insertions, 9 deletions
diff --git a/src/gpu/gl/GrGLInterface.cpp b/src/gpu/gl/GrGLInterface.cpp index 8bbd2f3b1b..2e7cde6546 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,180 @@ 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 (kGL_GrGLStandard == fStandard && fExtensions.has("GL_EXT_direct_state_access")) { + if (NULL == fFunctions.fVertexArrayVertexAttribDivisor) { + 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; } |