| Index: src/gpu/gl/GrGpuGL.cpp
|
| diff --git a/src/gpu/gl/GrGpuGL.cpp b/src/gpu/gl/GrGpuGL.cpp
|
| index 28e41af5f040f0eeb6281bde4fb968865ea919aa..47dd1b43ac22b6db6656987df91469ae98c18638 100644
|
| --- a/src/gpu/gl/GrGpuGL.cpp
|
| +++ b/src/gpu/gl/GrGpuGL.cpp
|
| @@ -789,11 +789,43 @@ bool renderbuffer_storage_msaa(GrGLContext& ctx,
|
| created = (GR_GL_NO_ERROR == CHECK_ALLOC_ERROR(ctx.interface()));
|
| }
|
| if (!created) {
|
| +#if GR_GL_IGNORE_ES3_MSAA
|
| GL_ALLOC_CALL(ctx.interface(),
|
| RenderbufferStorageMultisample(GR_GL_RENDERBUFFER,
|
| sampleCount,
|
| format,
|
| width, height));
|
| +#else
|
| + switch (ctx.info().caps()->msFBOType()) {
|
| + case GrGLCaps::kDesktop_ARB_MSFBOType:
|
| + case GrGLCaps::kDesktop_EXT_MSFBOType:
|
| + case GrGLCaps::kES_3_0_MSFBOType:
|
| + GL_ALLOC_CALL(ctx.interface(),
|
| + RenderbufferStorageMultisample(GR_GL_RENDERBUFFER,
|
| + sampleCount,
|
| + format,
|
| + width, height));
|
| + break;
|
| + case GrGLCaps::kES_Apple_MSFBOType:
|
| + GL_ALLOC_CALL(ctx.interface(),
|
| + RenderbufferStorageMultisampleES2APPLE(GR_GL_RENDERBUFFER,
|
| + sampleCount,
|
| + format,
|
| + width, height));
|
| + break;
|
| + case GrGLCaps::kES_EXT_MsToTexture_MSFBOType:
|
| + case GrGLCaps::kES_IMG_MsToTexture_MSFBOType:
|
| + GL_ALLOC_CALL(ctx.interface(),
|
| + RenderbufferStorageMultisampleES2EXT(GR_GL_RENDERBUFFER,
|
| + sampleCount,
|
| + format,
|
| + width, height));
|
| + break;
|
| + case GrGLCaps::kNone_MSFBOType:
|
| + GrCrash("Shouldn't be here if we don't support multisampled renderbuffers.");
|
| + break;
|
| + }
|
| +#endif
|
| created = (GR_GL_NO_ERROR == CHECK_ALLOC_ERROR(ctx.interface()));
|
| }
|
| return created;
|
| @@ -2313,6 +2345,12 @@ inline bool can_blit_framebuffer(const GrSurface* dst,
|
| if (gpu->isConfigRenderable(dst->config()) &&
|
| gpu->isConfigRenderable(src->config()) &&
|
| gpu->glCaps().usesMSAARenderBuffers()) {
|
| + // ES3 doesn't allow framebuffer blits when the src has MSAA and the configs don't match
|
| + // or the rects are not the same (not just the same size but have the same edges).
|
| + if (GrGLCaps::kES_3_0_MSFBOType == gpu->glCaps().msFBOType() &&
|
| + (src->desc().fSampleCnt > 0 || src->config() != dst->config())) {
|
| + return false;
|
| + }
|
| if (NULL != wouldNeedTempFBO) {
|
| *wouldNeedTempFBO = NULL == dst->asRenderTarget() || NULL == src->asRenderTarget();
|
| }
|
|
|