Index: src/gpu/gl/GrGLCaps.cpp |
diff --git a/src/gpu/gl/GrGLCaps.cpp b/src/gpu/gl/GrGLCaps.cpp |
index 2b19f1314d6c4592394d237e1fa74968a8949178..3e02e1134d8d0f4a25c8f013c0f8afc453a58937 100644 |
--- a/src/gpu/gl/GrGLCaps.cpp |
+++ b/src/gpu/gl/GrGLCaps.cpp |
@@ -50,6 +50,8 @@ GrGLCaps::GrGLCaps(const GrContextOptions& contextOptions, |
fFullClearIsFree = false; |
fBindFragDataLocationSupport = false; |
fSRGBWriteControl = false; |
+ fRGBA8888PixelsOpsAreSlow = false; |
+ fPartialFBOReadIsSlow = false; |
fReadPixelsSupportedCache.reset(); |
@@ -304,6 +306,21 @@ void GrGLCaps::init(const GrContextOptions& contextOptions, |
} |
} |
robertphillips
2015/07/31 17:17:41
Can we just do all this only when SK_BUILD_FOR_WIN
|
+ static const bool kIsWindows = |
+#ifdef SK_BUILD_FOR_WIN |
+ true; |
+#else |
+ false; |
+#endif |
+ |
robertphillips
2015/07/31 17:17:41
Maybe:
bool isAngle = ...;
fRGBA8888PixelsOpsAre
|
+ // Angle has slow read/write pixel paths for 32bit RGBA (but fast for BGRA). We're assuming that |
+ // on Windows Chromium we're using ANGLE. |
+ fRGBA8888PixelsOpsAreSlow = kIsWindows && (ctxInfo.driver() == kChromium_GrGLDriver || |
+ ctxInfo.driver() == kANGLE_GrGLDriver); |
+ // On DX9 ANGLE reading a partial FBO is slow. TODO: Check whether this is still true and |
+ // check DX11 ANGLE. |
+ fPartialFBOReadIsSlow = fRGBA8888PixelsOpsAreSlow; |
+ |
/************************************************************************** |
* GrShaderCaps fields |
**************************************************************************/ |
@@ -1132,6 +1149,8 @@ SkString GrGLCaps::dump() const { |
(fUseNonVBOVertexAndIndexDynamicData ? "YES" : "NO")); |
r.appendf("Full screen clear is free: %s\n", (fFullClearIsFree ? "YES" : "NO")); |
r.appendf("SRGB write contol: %s\n", (fSRGBWriteControl ? "YES" : "NO")); |
+ r.appendf("RGBA 8888 pixel ops are slow: %s\n", (fRGBA8888PixelsOpsAreSlow? "YES" : "NO")); |
+ r.appendf("Partial FBO read is slow: %s\n", (fPartialFBOReadIsSlow? "YES" : "NO")); |
return r; |
} |