aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/gl/GrGLInterface.cpp
diff options
context:
space:
mode:
authorGravatar cdalton <cdalton@nvidia.com>2015-06-12 10:31:36 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2015-06-12 10:31:36 -0700
commit202c4c75fb806f751cf796850bf67fe9793e0643 (patch)
tree618064f2f8c5c4dc80b91408e2bb1e495d6fd686 /src/gpu/gl/GrGLInterface.cpp
parent8ed08e54f4868d3ef88225bf873ce678e7716bd9 (diff)
Import functionality for new GL backend
Brings in the following functionality: ARB_draw_instanced ARB_instanced_arrays NV_bindless_texture EXT_direct_state_access KHR_debug Also cleans up some of the NVPR extension loading. BUG=skia: Review URL: https://codereview.chromium.org/1185573003
Diffstat (limited to 'src/gpu/gl/GrGLInterface.cpp')
-rw-r--r--src/gpu/gl/GrGLInterface.cpp187
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;
}