diff options
-rw-r--r-- | src/gpu/gl/GrGLAssembleInterface.cpp | 15 | ||||
-rw-r--r-- | src/gpu/gl/GrGLCaps.cpp | 6 | ||||
-rw-r--r-- | src/gpu/gl/GrGLInterface.cpp | 9 |
3 files changed, 24 insertions, 6 deletions
diff --git a/src/gpu/gl/GrGLAssembleInterface.cpp b/src/gpu/gl/GrGLAssembleInterface.cpp index b435655a5f..9dccd4bc22 100644 --- a/src/gpu/gl/GrGLAssembleInterface.cpp +++ b/src/gpu/gl/GrGLAssembleInterface.cpp @@ -748,12 +748,19 @@ const GrGLInterface* GrGLAssembleGLESInterface(void* ctx, GrGLGetProc get) { GET_PROC(FramebufferRenderbuffer); GET_PROC(FramebufferTexture2D); - if (extensions.has("GL_CHROMIUM_framebuffer_multisample")) { - GET_PROC_SUFFIX(RenderbufferStorageMultisample, CHROMIUM); - GET_PROC_SUFFIX(BlitFramebuffer, CHROMIUM); - } else if (version >= GR_GL_VER(3,0)) { + if (version >= GR_GL_VER(3,0)) { GET_PROC(RenderbufferStorageMultisample); GET_PROC(BlitFramebuffer); + } else if (extensions.has("GL_CHROMIUM_framebuffer_multisample")) { + GET_PROC_SUFFIX(RenderbufferStorageMultisample, CHROMIUM); + GET_PROC_SUFFIX(BlitFramebuffer, CHROMIUM); + } else { + if (extensions.has("GL_ANGLE_framebuffer_multisample")) { + GET_PROC_SUFFIX(RenderbufferStorageMultisample, ANGLE); + } + if (extensions.has("GL_ANGLE_framebuffer_blit")) { + GET_PROC_SUFFIX(BlitFramebuffer, ANGLE); + } } if (extensions.has("GL_CHROMIUM_map_sub")) { diff --git a/src/gpu/gl/GrGLCaps.cpp b/src/gpu/gl/GrGLCaps.cpp index 23b069f9f8..7a7a722427 100644 --- a/src/gpu/gl/GrGLCaps.cpp +++ b/src/gpu/gl/GrGLCaps.cpp @@ -929,7 +929,8 @@ void GrGLCaps::initFSAASupport(const GrGLContextInfo& ctxInfo, const GrGLInterfa } else if (fUsesMixedSamples) { fMSFBOType = kMixedSamples_MSFBOType; } else if (ctxInfo.version() >= GR_GL_VER(3,0) || - ctxInfo.hasExtension("GL_CHROMIUM_framebuffer_multisample")) { + ctxInfo.hasExtension("GL_CHROMIUM_framebuffer_multisample") || + ctxInfo.hasExtension("GL_ANGLE_framebuffer_multisample")) { fMSFBOType = kStandard_MSFBOType; } else if (ctxInfo.hasExtension("GL_APPLE_framebuffer_multisample")) { fMSFBOType = kES_Apple_MSFBOType; @@ -940,7 +941,8 @@ void GrGLCaps::initFSAASupport(const GrGLContextInfo& ctxInfo, const GrGLInterfa if (ctxInfo.version() >= GR_GL_VER(3, 0)) { fBlitFramebufferFlags = kNoFormatConversionForMSAASrc_BlitFramebufferFlag | kRectsMustMatchForMSAASrc_BlitFramebufferFlag; - } else if (ctxInfo.hasExtension("GL_CHROMIUM_framebuffer_multisample")) { + } else if (ctxInfo.hasExtension("GL_CHROMIUM_framebuffer_multisample") || + ctxInfo.hasExtension("GL_ANGLE_framebuffer_blit")) { // The CHROMIUM extension uses the ANGLE version of glBlitFramebuffer and includes its // limitations. fBlitFramebufferFlags = kNoScalingOrMirroring_BlitFramebufferFlag | diff --git a/src/gpu/gl/GrGLInterface.cpp b/src/gpu/gl/GrGLInterface.cpp index 0a157dda11..72c2b46d41 100644 --- a/src/gpu/gl/GrGLInterface.cpp +++ b/src/gpu/gl/GrGLInterface.cpp @@ -348,6 +348,15 @@ bool GrGLInterface::validate() const { nullptr == fFunctions.fBlitFramebuffer) { RETURN_FALSE_INTERFACE } + } else { + if (fExtensions.has("GL_ANGLE_framebuffer_multisample") && + nullptr == fFunctions.fRenderbufferStorageMultisample) { + RETURN_FALSE_INTERFACE + } + if (fExtensions.has("GL_ANGLE_framebuffer_blit") && + nullptr == fFunctions.fBlitFramebuffer) { + RETURN_FALSE_INTERFACE + } } if (fExtensions.has("GL_APPLE_framebuffer_multisample")) { if (nullptr == fFunctions.fRenderbufferStorageMultisampleES2APPLE || |