Index: src/gpu/gl/GrGLCaps.cpp |
diff --git a/src/gpu/gl/GrGLCaps.cpp b/src/gpu/gl/GrGLCaps.cpp |
index a60230a2fe91de7e744a27a002cac988e6b3f912..47f3f0f0c819d6fd97312bd4cb424ebe42369d92 100644 |
--- a/src/gpu/gl/GrGLCaps.cpp |
+++ b/src/gpu/gl/GrGLCaps.cpp |
@@ -47,6 +47,7 @@ void GrGLCaps::reset() { |
fFixedFunctionSupport = false; |
fDiscardFBSupport = false; |
fFullClearIsFree = false; |
+ fDropsTileOnZeroDivide = false; |
} |
GrGLCaps::GrGLCaps(const GrGLCaps& caps) : GrDrawTargetCaps() { |
@@ -84,6 +85,7 @@ GrGLCaps& GrGLCaps::operator = (const GrGLCaps& caps) { |
fFixedFunctionSupport = caps.fFixedFunctionSupport; |
fDiscardFBSupport = caps.fDiscardFBSupport; |
fFullClearIsFree = caps.fFullClearIsFree; |
+ fDropsTileOnZeroDivide = caps.fDropsTileOnZeroDivide; |
return *this; |
} |
@@ -244,6 +246,9 @@ void GrGLCaps::init(const GrGLContextInfo& ctxInfo, const GrGLInterface* gli) { |
} |
} |
+ // Adreno GPUs have a tendency to drop tiles when there is a divide-by-zero in a shader |
+ fDropsTileOnZeroDivide = kQualcomm_GrGLVendor == ctxInfo.vendor(); |
+ |
this->initFSAASupport(ctxInfo, gli); |
this->initStencilFormats(ctxInfo); |
@@ -661,5 +666,6 @@ SkString GrGLCaps::dump() const { |
(fUseNonVBOVertexAndIndexDynamicData ? "YES" : "NO")); |
r.appendf("Discard FrameBuffer support: %s\n", (fDiscardFBSupport ? "YES" : "NO")); |
r.appendf("Full screen clear is free: %s\n", (fFullClearIsFree ? "YES" : "NO")); |
+ r.appendf("Drops tile on zero divide: %s\n", (fDropsTileOnZeroDivide ? "YES" : "NO")); |
return r; |
} |