Index: src/gpu/gl/GrGLCaps.cpp |
diff --git a/src/gpu/gl/GrGLCaps.cpp b/src/gpu/gl/GrGLCaps.cpp |
index 382bfba68daf67831f9f120be0c358e5b2f0a54b..1488e75c293c4af9f1f8032ad9d75e6bb0d65157 100644 |
--- a/src/gpu/gl/GrGLCaps.cpp |
+++ b/src/gpu/gl/GrGLCaps.cpp |
@@ -386,17 +386,21 @@ void GrGLCaps::initFSAASupport(const GrGLContextInfo& ctxInfo, const GrGLInterfa |
fMSFBOType = kNone_MSFBOType; |
if (kDesktop_GrGLBinding != ctxInfo.binding()) { |
- if (ctxInfo.hasExtension("GL_CHROMIUM_framebuffer_multisample")) { |
- // chrome's extension is equivalent to the EXT msaa |
- // and fbo_blit extensions. |
- fMSFBOType = kDesktop_EXT_MSFBOType; |
- } else if (ctxInfo.hasExtension("GL_APPLE_framebuffer_multisample")) { |
- fMSFBOType = kES_Apple_MSFBOType; |
- } else if (ctxInfo.hasExtension("GL_EXT_multisampled_render_to_texture")) { |
- fMSFBOType = kES_EXT_MsToTexture_MSFBOType; |
- } else if (ctxInfo.hasExtension("GL_IMG_multisampled_render_to_texture")) { |
- fMSFBOType = kES_IMG_MsToTexture_MSFBOType; |
- } |
+ // We prefer the EXT/IMG extension over ES3 MSAA because we've observed |
+ // ES3 driver bugs on at least one device with a tiled GPU (N10). |
+ if (ctxInfo.hasExtension("GL_EXT_multisampled_render_to_texture")) { |
+ fMSFBOType = kES_EXT_MsToTexture_MSFBOType; |
+ } else if (ctxInfo.hasExtension("GL_IMG_multisampled_render_to_texture")) { |
+ fMSFBOType = kES_IMG_MsToTexture_MSFBOType; |
+ } else if (!GR_GL_IGNORE_ES3_MSAA && ctxInfo.version() >= GR_GL_VER(3,0)) { |
+ fMSFBOType = GrGLCaps::kES_3_0_MSFBOType; |
+ } else if (ctxInfo.hasExtension("GL_CHROMIUM_framebuffer_multisample")) { |
+ // chrome's extension is equivalent to the EXT msaa |
+ // and fbo_blit extensions. |
+ fMSFBOType = kDesktop_EXT_MSFBOType; |
+ } else if (ctxInfo.hasExtension("GL_APPLE_framebuffer_multisample")) { |
+ fMSFBOType = kES_Apple_MSFBOType; |
+ } |
} else { |
if ((ctxInfo.version() >= GR_GL_VER(3,0)) || |
ctxInfo.hasExtension("GL_ARB_framebuffer_object")) { |
@@ -569,6 +573,7 @@ void GrGLCaps::print() const { |
"None", |
"ARB", |
"EXT", |
+ "ES 3.0", |
"Apple", |
"IMG MS To Texture", |
"EXT MS To Texture", |
@@ -576,9 +581,10 @@ void GrGLCaps::print() const { |
GR_STATIC_ASSERT(0 == kNone_MSFBOType); |
GR_STATIC_ASSERT(1 == kDesktop_ARB_MSFBOType); |
GR_STATIC_ASSERT(2 == kDesktop_EXT_MSFBOType); |
- GR_STATIC_ASSERT(3 == kES_Apple_MSFBOType); |
- GR_STATIC_ASSERT(4 == kES_IMG_MsToTexture_MSFBOType); |
- GR_STATIC_ASSERT(5 == kES_EXT_MsToTexture_MSFBOType); |
+ GR_STATIC_ASSERT(3 == kES_3_0_MSFBOType); |
+ GR_STATIC_ASSERT(4 == kES_Apple_MSFBOType); |
+ GR_STATIC_ASSERT(5 == kES_IMG_MsToTexture_MSFBOType); |
+ GR_STATIC_ASSERT(6 == kES_EXT_MsToTexture_MSFBOType); |
GR_STATIC_ASSERT(GR_ARRAY_COUNT(kMSFBOExtStr) == kLast_MSFBOType + 1); |
static const char* kFBFetchTypeStr[] = { |