Chromium Code Reviews| Index: src/gpu/gl/GrGLCaps.cpp |
| diff --git a/src/gpu/gl/GrGLCaps.cpp b/src/gpu/gl/GrGLCaps.cpp |
| index 7d9c50d16b4965e07c80880e2eda11cfd1988abc..22e23dc28c7f2ff2d9f7675a3ca4061b1aa6ae3a 100644 |
| --- a/src/gpu/gl/GrGLCaps.cpp |
| +++ b/src/gpu/gl/GrGLCaps.cpp |
| @@ -44,10 +44,10 @@ void GrGLCaps::reset() { |
| fFragCoordsConventionSupport = false; |
| fVertexArrayObjectSupport = false; |
| fES2CompatibilitySupport = false; |
| + fMultisampleDisableSupport = false; |
| fUseNonVBOVertexAndIndexDynamicData = false; |
| fIsCoreProfile = false; |
| fFullClearIsFree = false; |
| - fFBMixedSamplesSupport = false; |
| fReadPixelsSupportedCache.reset(); |
| @@ -86,10 +86,10 @@ GrGLCaps& GrGLCaps::operator= (const GrGLCaps& caps) { |
| fFragCoordsConventionSupport = caps.fFragCoordsConventionSupport; |
| fVertexArrayObjectSupport = caps.fVertexArrayObjectSupport; |
| fES2CompatibilitySupport = caps.fES2CompatibilitySupport; |
| + fMultisampleDisableSupport = caps.fMultisampleDisableSupport; |
| fUseNonVBOVertexAndIndexDynamicData = caps.fUseNonVBOVertexAndIndexDynamicData; |
| fIsCoreProfile = caps.fIsCoreProfile; |
| fFullClearIsFree = caps.fFullClearIsFree; |
| - fFBMixedSamplesSupport = caps.fFBMixedSamplesSupport; |
| *(reinterpret_cast<GrGLSLCaps*>(fShaderCaps.get())) = |
| *(reinterpret_cast<GrGLSLCaps*>(caps.fShaderCaps.get())); |
| @@ -252,6 +252,12 @@ bool GrGLCaps::init(const GrGLContextInfo& ctxInfo, const GrGLInterface* gli) { |
| fES2CompatibilitySupport = true; |
| } |
| + if (kGL_GrGLStandard == standard) { |
| + fMultisampleDisableSupport = true; |
| + } else { |
| + fMultisampleDisableSupport = false; |
|
Chris Dalton
2015/05/21 03:28:52
This will eventually be replaced with a check for
|
| + } |
| + |
| this->initFSAASupport(ctxInfo, gli); |
| this->initStencilFormats(ctxInfo); |
| @@ -336,8 +342,6 @@ bool GrGLCaps::init(const GrGLContextInfo& ctxInfo, const GrGLInterface* gli) { |
| // attachment, hence this min: |
| fMaxRenderTargetSize = SkTMin(fMaxTextureSize, fMaxRenderTargetSize); |
| - fFBMixedSamplesSupport = ctxInfo.hasExtension("GL_NV_framebuffer_mixed_samples"); |
| - |
| fGpuTracingSupport = ctxInfo.hasExtension("GL_EXT_debug_marker"); |
| // Disable scratch texture reuse on Mali and Adreno devices |
| @@ -915,6 +919,7 @@ SkString GrGLCaps::dump() const { |
| r.appendf("Fragment coord conventions support: %s\n", |
| (fFragCoordsConventionSupport ? "YES": "NO")); |
| r.appendf("Vertex array object support: %s\n", (fVertexArrayObjectSupport ? "YES": "NO")); |
| + r.appendf("Multisample disable support: %s\n", (fMultisampleDisableSupport ? "YES" : "NO")); |
| r.appendf("Use non-VBO for dynamic data: %s\n", |
| (fUseNonVBOVertexAndIndexDynamicData ? "YES" : "NO")); |
| r.appendf("Full screen clear is free: %s\n", (fFullClearIsFree ? "YES" : "NO")); |
| @@ -1034,6 +1039,15 @@ bool GrGLSLCaps::init(const GrGLContextInfo& ctxInfo, |
| ctxInfo.hasExtension("GL_OES_standard_derivatives"); |
| } |
| + // We need dual source blending and the ability to disable multisample in order to support mixed |
| + // samples in every corner case. |
| + if (fDualSourceBlendingSupport && glCaps.multisampleDisableSupport()) { |
| + // We understand "mixed samples" to mean the collective capability of 3 different extensions |
| + fMixedSamplesSupport = ctxInfo.hasExtension("GL_NV_framebuffer_mixed_samples") && |
| + ctxInfo.hasExtension("GL_NV_sample_mask_override_coverage") && |
| + ctxInfo.hasExtension("GL_EXT_raster_multisample"); |
| + } |
| + |
| if (glCaps.advancedBlendEquationSupport()) { |
| bool coherent = glCaps.advancedCoherentBlendEquationSupport(); |
| if (ctxInfo.hasExtension(coherent ? "GL_NV_blend_equation_advanced_coherent" |