From 626e1ffe84c24a969dc56ca70ab2e950bf5034c4 Mon Sep 17 00:00:00 2001 From: cdalton Date: Fri, 12 Jun 2015 13:56:46 -0700 Subject: 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: Committed: https://skia.googlesource.com/skia/+/202c4c75fb806f751cf796850bf67fe9793e0643 Review URL: https://codereview.chromium.org/1185573003 --- src/gpu/gl/GrGLAssembleInterface.cpp | 185 ++++++++++++++++++++++++++++++++++- 1 file changed, 181 insertions(+), 4 deletions(-) (limited to 'src/gpu/gl/GrGLAssembleInterface.cpp') diff --git a/src/gpu/gl/GrGLAssembleInterface.cpp b/src/gpu/gl/GrGLAssembleInterface.cpp index af5b336b9f..6296f6ec3d 100644 --- a/src/gpu/gl/GrGLAssembleInterface.cpp +++ b/src/gpu/gl/GrGLAssembleInterface.cpp @@ -153,10 +153,6 @@ const GrGLInterface* GrGLAssembleGLInterface(void* ctx, GrGLGetProc get) { GET_PROC(LineWidth); GET_PROC(LinkProgram); GET_PROC(MapBuffer); - if (extensions.has("GL_EXT_direct_state_access")) { - GET_PROC_SUFFIX(MatrixLoadf, EXT); - GET_PROC_SUFFIX(MatrixLoadIdentity, EXT); - } GET_PROC(PixelStorei); if (extensions.has("GL_EXT_raster_multisample")) { GET_PROC_SUFFIX(RasterSamples, EXT); @@ -273,6 +269,8 @@ const GrGLInterface* GrGLAssembleGLInterface(void* ctx, GrGLGetProc get) { } if (extensions.has("GL_NV_path_rendering")) { + GET_PROC_SUFFIX(MatrixLoadf, EXT); + GET_PROC_SUFFIX(MatrixLoadIdentity, EXT); GET_PROC_SUFFIX(PathCommands, NV); GET_PROC_SUFFIX(PathCoords, NV); GET_PROC_SUFFIX(PathParameteri, NV); @@ -323,6 +321,150 @@ const GrGLInterface* GrGLAssembleGLInterface(void* ctx, GrGLGetProc get) { GET_PROC(GetProgramResourceLocation); } + if (glVer >= GR_GL_VER(3,1) || extensions.has("GL_ARB_draw_instanced")) { + GET_PROC(DrawArraysInstanced); + GET_PROC(DrawElementsInstanced); + } + + if (glVer >= GR_GL_VER(3,2) || extensions.has("GL_ARB_instanced_arrays")) { + GET_PROC(VertexAttribDivisor); + } + + if (extensions.has("GL_NV_bindless_texture")) { + GET_PROC_SUFFIX(GetTextureHandle, NV); + GET_PROC_SUFFIX(GetTextureSamplerHandle, NV); + GET_PROC_SUFFIX(MakeTextureHandleResident, NV); + GET_PROC_SUFFIX(MakeTextureHandleNonResident, NV); + GET_PROC_SUFFIX(GetImageHandle, NV); + GET_PROC_SUFFIX(MakeImageHandleResident, NV); + GET_PROC_SUFFIX(MakeImageHandleNonResident, NV); + GET_PROC_SUFFIX(IsTextureHandleResident, NV); + GET_PROC_SUFFIX(IsImageHandleResident, NV); + GET_PROC_SUFFIX(UniformHandleui64, NV); + GET_PROC_SUFFIX(UniformHandleui64v, NV); + GET_PROC_SUFFIX(ProgramUniformHandleui64, NV); + GET_PROC_SUFFIX(ProgramUniformHandleui64v, NV); + } + + if (extensions.has("GL_EXT_direct_state_access")) { + GET_PROC_SUFFIX(TextureParameteri, EXT); + GET_PROC_SUFFIX(TextureParameteriv, EXT); + GET_PROC_SUFFIX(TextureParameterf, EXT); + GET_PROC_SUFFIX(TextureParameterfv, EXT); + GET_PROC_SUFFIX(TextureImage1D, EXT); + GET_PROC_SUFFIX(TextureImage2D, EXT); + GET_PROC_SUFFIX(TextureSubImage1D, EXT); + GET_PROC_SUFFIX(TextureSubImage2D, EXT); + GET_PROC_SUFFIX(CopyTextureImage1D, EXT); + GET_PROC_SUFFIX(CopyTextureImage2D, EXT); + GET_PROC_SUFFIX(CopyTextureSubImage1D, EXT); + GET_PROC_SUFFIX(CopyTextureSubImage2D, EXT); + GET_PROC_SUFFIX(GetTextureImage, EXT); + GET_PROC_SUFFIX(GetTextureParameterfv, EXT); + GET_PROC_SUFFIX(GetTextureParameteriv, EXT); + GET_PROC_SUFFIX(GetTextureLevelParameterfv, EXT); + GET_PROC_SUFFIX(GetTextureLevelParameteriv, EXT); + if (glVer >= GR_GL_VER(1,2)) { + GET_PROC_SUFFIX(TextureImage3D, EXT); + GET_PROC_SUFFIX(TextureSubImage3D, EXT); + GET_PROC_SUFFIX(CopyTextureSubImage3D, EXT); + GET_PROC_SUFFIX(CompressedTextureImage3D, EXT); + GET_PROC_SUFFIX(CompressedTextureImage2D, EXT); + GET_PROC_SUFFIX(CompressedTextureImage1D, EXT); + GET_PROC_SUFFIX(CompressedTextureSubImage3D, EXT); + GET_PROC_SUFFIX(CompressedTextureSubImage2D, EXT); + GET_PROC_SUFFIX(CompressedTextureSubImage1D, EXT); + GET_PROC_SUFFIX(GetCompressedTextureImage, EXT); + } + if (glVer >= GR_GL_VER(1,5)) { + GET_PROC_SUFFIX(NamedBufferData, EXT); + GET_PROC_SUFFIX(NamedBufferSubData, EXT); + GET_PROC_SUFFIX(MapNamedBuffer, EXT); + GET_PROC_SUFFIX(UnmapNamedBuffer, EXT); + GET_PROC_SUFFIX(GetNamedBufferParameteriv, EXT); + GET_PROC_SUFFIX(GetNamedBufferPointerv, EXT); + GET_PROC_SUFFIX(GetNamedBufferSubData, EXT); + } + if (glVer >= GR_GL_VER(2,0)) { + GET_PROC_SUFFIX(ProgramUniform1f, EXT); + GET_PROC_SUFFIX(ProgramUniform2f, EXT); + GET_PROC_SUFFIX(ProgramUniform3f, EXT); + GET_PROC_SUFFIX(ProgramUniform4f, EXT); + GET_PROC_SUFFIX(ProgramUniform1i, EXT); + GET_PROC_SUFFIX(ProgramUniform2i, EXT); + GET_PROC_SUFFIX(ProgramUniform3i, EXT); + GET_PROC_SUFFIX(ProgramUniform4i, EXT); + GET_PROC_SUFFIX(ProgramUniform1fv, EXT); + GET_PROC_SUFFIX(ProgramUniform2fv, EXT); + GET_PROC_SUFFIX(ProgramUniform3fv, EXT); + GET_PROC_SUFFIX(ProgramUniform4fv, EXT); + GET_PROC_SUFFIX(ProgramUniform1iv, EXT); + GET_PROC_SUFFIX(ProgramUniform2iv, EXT); + GET_PROC_SUFFIX(ProgramUniform3iv, EXT); + GET_PROC_SUFFIX(ProgramUniform4iv, EXT); + GET_PROC_SUFFIX(ProgramUniformMatrix2fv, EXT); + GET_PROC_SUFFIX(ProgramUniformMatrix3fv, EXT); + GET_PROC_SUFFIX(ProgramUniformMatrix4fv, EXT); + } + if (glVer >= GR_GL_VER(2,1)) { + GET_PROC_SUFFIX(ProgramUniformMatrix2x3fv, EXT); + GET_PROC_SUFFIX(ProgramUniformMatrix3x2fv, EXT); + GET_PROC_SUFFIX(ProgramUniformMatrix2x4fv, EXT); + GET_PROC_SUFFIX(ProgramUniformMatrix4x2fv, EXT); + GET_PROC_SUFFIX(ProgramUniformMatrix3x4fv, EXT); + GET_PROC_SUFFIX(ProgramUniformMatrix4x3fv, EXT); + } + if (glVer >= GR_GL_VER(3,0)) { + GET_PROC_SUFFIX(NamedRenderbufferStorage, EXT); + GET_PROC_SUFFIX(GetNamedRenderbufferParameteriv, EXT); + GET_PROC_SUFFIX(NamedRenderbufferStorageMultisample, EXT); + GET_PROC_SUFFIX(CheckNamedFramebufferStatus, EXT); + GET_PROC_SUFFIX(NamedFramebufferTexture1D, EXT); + GET_PROC_SUFFIX(NamedFramebufferTexture2D, EXT); + GET_PROC_SUFFIX(NamedFramebufferTexture3D, EXT); + GET_PROC_SUFFIX(NamedFramebufferRenderbuffer, EXT); + GET_PROC_SUFFIX(GetNamedFramebufferAttachmentParameteriv, EXT); + GET_PROC_SUFFIX(GenerateTextureMipmap, EXT); + GET_PROC_SUFFIX(FramebufferDrawBuffer, EXT); + GET_PROC_SUFFIX(FramebufferDrawBuffers, EXT); + GET_PROC_SUFFIX(FramebufferReadBuffer, EXT); + GET_PROC_SUFFIX(GetFramebufferParameteriv, EXT); + GET_PROC_SUFFIX(NamedCopyBufferSubData, EXT); + GET_PROC_SUFFIX(VertexArrayVertexOffset, EXT); + GET_PROC_SUFFIX(VertexArrayColorOffset, EXT); + GET_PROC_SUFFIX(VertexArrayEdgeFlagOffset, EXT); + GET_PROC_SUFFIX(VertexArrayIndexOffset, EXT); + GET_PROC_SUFFIX(VertexArrayNormalOffset, EXT); + GET_PROC_SUFFIX(VertexArrayTexCoordOffset, EXT); + GET_PROC_SUFFIX(VertexArrayMultiTexCoordOffset, EXT); + GET_PROC_SUFFIX(VertexArrayFogCoordOffset, EXT); + GET_PROC_SUFFIX(VertexArraySecondaryColorOffset, EXT); + GET_PROC_SUFFIX(VertexArrayVertexAttribOffset, EXT); + GET_PROC_SUFFIX(VertexArrayVertexAttribIOffset, EXT); + GET_PROC_SUFFIX(EnableVertexArray, EXT); + GET_PROC_SUFFIX(DisableVertexArray, EXT); + GET_PROC_SUFFIX(EnableVertexArrayAttrib, EXT); + GET_PROC_SUFFIX(DisableVertexArrayAttrib, EXT); + GET_PROC_SUFFIX(GetVertexArrayIntegerv, EXT); + GET_PROC_SUFFIX(GetVertexArrayPointerv, EXT); + GET_PROC_SUFFIX(GetVertexArrayIntegeri_v, EXT); + GET_PROC_SUFFIX(GetVertexArrayPointeri_v, EXT); + GET_PROC_SUFFIX(MapNamedBufferRange, EXT); + GET_PROC_SUFFIX(FlushMappedNamedBufferRange, EXT); + } + } + + if (glVer >= GR_GL_VER(4,3) || extensions.has("GL_KHR_debug")) { + // KHR_debug defines these methods to have no suffix in an OpenGL (not ES) context. + GET_PROC(DebugMessageControl); + GET_PROC(DebugMessageInsert); + GET_PROC(DebugMessageCallback); + GET_PROC(GetDebugMessageLog); + GET_PROC(PushDebugGroup); + GET_PROC(PopDebugGroup); + GET_PROC(ObjectLabel); + } + interface->fStandard = kGL_GrGLStandard; interface->fExtensions.swap(&extensions); @@ -566,6 +708,41 @@ const GrGLInterface* GrGLAssembleGLESInterface(void* ctx, GrGLGetProc get) { GET_PROC_SUFFIX(CoverageModulation, NV); } + if (version >= GR_GL_VER(3,0) || extensions.has("GL_EXT_draw_instanced")) { + GET_PROC(DrawArraysInstanced); + GET_PROC(DrawElementsInstanced); + } + + if (version >= GR_GL_VER(3,0) || extensions.has("GL_EXT_instanced_arrays")) { + GET_PROC(VertexAttribDivisor); + } + + if (extensions.has("GL_NV_bindless_texture")) { + GET_PROC_SUFFIX(GetTextureHandle, NV); + GET_PROC_SUFFIX(GetTextureSamplerHandle, NV); + GET_PROC_SUFFIX(MakeTextureHandleResident, NV); + GET_PROC_SUFFIX(MakeTextureHandleNonResident, NV); + GET_PROC_SUFFIX(GetImageHandle, NV); + GET_PROC_SUFFIX(MakeImageHandleResident, NV); + GET_PROC_SUFFIX(MakeImageHandleNonResident, NV); + GET_PROC_SUFFIX(IsTextureHandleResident, NV); + GET_PROC_SUFFIX(IsImageHandleResident, NV); + GET_PROC_SUFFIX(UniformHandleui64, NV); + GET_PROC_SUFFIX(UniformHandleui64v, NV); + GET_PROC_SUFFIX(ProgramUniformHandleui64, NV); + GET_PROC_SUFFIX(ProgramUniformHandleui64v, NV); + } + + if (extensions.has("GL_KHR_debug")) { + GET_PROC_SUFFIX(DebugMessageControl, KHR); + GET_PROC_SUFFIX(DebugMessageInsert, KHR); + GET_PROC_SUFFIX(DebugMessageCallback, KHR); + GET_PROC_SUFFIX(GetDebugMessageLog, KHR); + GET_PROC_SUFFIX(PushDebugGroup, KHR); + GET_PROC_SUFFIX(PopDebugGroup, KHR); + GET_PROC_SUFFIX(ObjectLabel, KHR); + } + interface->fStandard = kGLES_GrGLStandard; interface->fExtensions.swap(&extensions); -- cgit v1.2.3