Index: src/gpu/gl/GrGLCaps.cpp |
diff --git a/src/gpu/gl/GrGLCaps.cpp b/src/gpu/gl/GrGLCaps.cpp |
index 40405fd55c1549660127ce6b6ffc4951177b0a03..e8c3b55163be26a00cbcbed9d63bf96950ff7fde 100644 |
--- a/src/gpu/gl/GrGLCaps.cpp |
+++ b/src/gpu/gl/GrGLCaps.cpp |
@@ -292,6 +292,11 @@ void GrGLCaps::init(const GrContextOptions& contextOptions, |
ctxInfo.hasExtension("GL_NV_sample_mask_override_coverage") && |
ctxInfo.hasExtension("GL_EXT_raster_multisample"); |
} |
+ // Workaround NVIDIA bug related to glInvalidateFramebuffer and mixed samples. |
+ if (kNVIDIA_GrGLDriver == ctxInfo.driver() && fShaderCaps->mixedSamplesSupport()) { |
+ fDiscardRenderTargetSupport = false; |
+ fInvalidateFBType = kNone_InvalidateFBType; |
+ } |
/************************************************************************** |
* GrCaps fields |
@@ -789,6 +794,8 @@ void GrGLCaps::initFSAASupport(const GrGLContextInfo& ctxInfo, const GrGLInterfa |
fMSFBOType = kES_EXT_MsToTexture_MSFBOType; |
} else if (ctxInfo.hasExtension("GL_IMG_multisampled_render_to_texture")) { |
fMSFBOType = kES_IMG_MsToTexture_MSFBOType; |
+ } else if (fShaderCaps->mixedSamplesSupport() && fShaderCaps->pathRenderingSupport()) { |
+ fMSFBOType = kMixedSamples_MSFBOType; |
} else if (ctxInfo.version() >= GR_GL_VER(3,0)) { |
fMSFBOType = GrGLCaps::kES_3_0_MSFBOType; |
} else if (ctxInfo.hasExtension("GL_CHROMIUM_framebuffer_multisample")) { |
@@ -799,7 +806,9 @@ void GrGLCaps::initFSAASupport(const GrGLContextInfo& ctxInfo, const GrGLInterfa |
fMSFBOType = kES_Apple_MSFBOType; |
} |
} else { |
- if ((ctxInfo.version() >= GR_GL_VER(3,0)) || |
+ if (fShaderCaps->mixedSamplesSupport() && fShaderCaps->pathRenderingSupport()) { |
+ fMSFBOType = kMixedSamples_MSFBOType; |
+ } else if ((ctxInfo.version() >= GR_GL_VER(3,0)) || |
ctxInfo.hasExtension("GL_ARB_framebuffer_object")) { |
fMSFBOType = GrGLCaps::kDesktop_ARB_MSFBOType; |
} else if (ctxInfo.hasExtension("GL_EXT_framebuffer_multisample") && |
@@ -932,6 +941,7 @@ SkString GrGLCaps::dump() const { |
"Apple", |
"IMG MS To Texture", |
"EXT MS To Texture", |
+ "MixedSamples", |
}; |
GR_STATIC_ASSERT(0 == kNone_MSFBOType); |
GR_STATIC_ASSERT(1 == kDesktop_ARB_MSFBOType); |
@@ -940,6 +950,7 @@ SkString GrGLCaps::dump() const { |
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(7 == kMixedSamples_MSFBOType); |
GR_STATIC_ASSERT(SK_ARRAY_COUNT(kMSFBOExtStr) == kLast_MSFBOType + 1); |
static const char* kInvalidateFBTypeStr[] = { |