Index: src/gpu/gl/GrGLCaps.cpp |
diff --git a/src/gpu/gl/GrGLCaps.cpp b/src/gpu/gl/GrGLCaps.cpp |
index dd4ba65f771195133150fc34719408054427d38b..32e63382e12936fefef52a9ffe70617e599e6809 100644 |
--- a/src/gpu/gl/GrGLCaps.cpp |
+++ b/src/gpu/gl/GrGLCaps.cpp |
@@ -230,23 +230,25 @@ void GrGLCaps::init(const GrGLContextInfo& ctxInfo, const GrGLInterface* gli) { |
fStencilWrapOpsSupport = true; |
} |
-// Disabling advanced blend until we can resolve various bugs |
-#if 0 |
- if (kIntel_GrGLVendor != ctxInfo.vendor()) { |
+ // Only allowing advanced blend on NVIDIA until we can resolve various bugs. |
+ if (kNVIDIA_GrGLDriver == ctxInfo.driver()) { |
egdaniel
2015/06/05 18:18:04
Outside of intel which I believe you had said had
nv_mark
2015/06/05 19:09:38
I question if blacking listing the individual Dodg
|
if (ctxInfo.hasExtension("GL_KHR_blend_equation_advanced_coherent") || |
ctxInfo.hasExtension("GL_NV_blend_equation_advanced_coherent")) { |
fBlendEquationSupport = kAdvancedCoherent_BlendEquationSupport; |
- } else if (ctxInfo.hasExtension("GL_KHR_blend_equation_advanced") || |
- ctxInfo.hasExtension("GL_NV_blend_equation_advanced")) { |
- fBlendEquationSupport = kAdvanced_BlendEquationSupport; |
- } else { |
- fBlendEquationSupport = kBasic_BlendEquationSupport; |
+ } else if (ctxInfo.driverVersion() >= GR_GL_DRIVER_VER(337,00)) { |
+ // Non-coherent advanced blend has an issue before 337.00. |
+ if (ctxInfo.hasExtension("GL_KHR_blend_equation_advanced") || |
+ ctxInfo.hasExtension("GL_NV_blend_equation_advanced")) { |
+ fBlendEquationSupport = kAdvanced_BlendEquationSupport; |
+ } |
+ } |
+ if (this->advancedBlendEquationSupport()) { |
+ // Blacklist color-dodge and color-burn until the NVIDIA fix is released. |
+ fAdvBlendEqBlacklist |= (1 << kColorDodge_GrBlendEquation) | |
+ (1 << kColorBurn_GrBlendEquation); |
} |
- } else { |
- // On Intel platforms, KHR_blend_equation_advanced is not conformant. |
- fBlendEquationSupport = kBasic_BlendEquationSupport; |
} |
-#endif |
+ |
if (kGL_GrGLStandard == standard) { |
fMapBufferFlags = kCanMap_MapFlag; // we require VBO support and the desktop VBO |
// extension includes glMapBuffer. |