Fix BGRA/RGBA readback conversions on mac
Reading back from a BGRA framebuffer as RGBA or vis-versa is slow on mac. On my early 2013 MBP, we see a 40% regression when using
the discrete GPU or a 13% regression on integrated.
This change adds a workaround which causes Mac to use the existing Mesa path and prefer readback from the same format as the
framebuffer.
BUG=581311
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1786813002
Review URL: https://codereview.chromium.org/1786813002
diff --git a/src/gpu/gl/GrGLCaps.cpp b/src/gpu/gl/GrGLCaps.cpp
index dfcde60..4088535 100644
--- a/src/gpu/gl/GrGLCaps.cpp
+++ b/src/gpu/gl/GrGLCaps.cpp
@@ -51,6 +51,7 @@
fRGBA8888PixelsOpsAreSlow = false;
fPartialFBOReadIsSlow = false;
fMipMapLevelAndLodControlSupport = false;
+ fRGBAToBGRAReadbackConversionsAreSlow = false;
fBlitFramebufferSupport = kNone_BlitFramebufferSupport;
@@ -253,6 +254,16 @@
fPartialFBOReadIsSlow = isANGLE;
#endif
+ bool isMESA = kMesa_GrGLDriver == ctxInfo.driver();
+ bool isMAC = false;
+#ifdef SK_BUILD_FOR_MAC
+ isMAC = true;
+#endif
+
+ // Both mesa and mac have reduced performance if reading back an RGBA framebuffer as BGRA or
+ // vis-versa.
+ fRGBAToBGRAReadbackConversionsAreSlow = isMESA || isMAC;
+
/**************************************************************************
* GrShaderCaps fields
**************************************************************************/
@@ -1077,6 +1088,8 @@
r.appendf("Bind uniform location support: %s\n", (fBindUniformLocationSupport ? "YES" : "NO"));
r.appendf("Rectangle texture support: %s\n", (fRectangleTextureSupport? "YES" : "NO"));
r.appendf("Texture swizzle support: %s\n", (fTextureSwizzleSupport ? "YES" : "NO"));
+ r.appendf("BGRA to RGBA readback conversions are slow: %s\n",
+ (fRGBAToBGRAReadbackConversionsAreSlow ? "YES" : "NO"));
r.append("Configs\n-------\n");
for (int i = 0; i < kGrPixelConfigCnt; ++i) {