Fix colorspace transform with multitexture color text. Color text glyphs can be stored across multiple atlas textures, which requires sampling from one or another texture. However, if we use multiple appendTextureLookup calls with the same colorspace transform helper, it ends up generating multiple copies of its helper functions. Instead, we will pick our texture, sample its value, and apply the colorspace transform to the result outside the if-then-else block. Bug: b/309422936 Bug: chromium:1499098 Change-Id: I468fe3ef323081b22537427f1f7a894e8a52073c Reviewed-on: https://skia-review.googlesource.com/c/skia/+/775397 Reviewed-by: Brian Osman <brianosman@google.com> Commit-Queue: Jim Van Verth <jvanverth@google.com> (cherry picked from commit f91d39395e85b5803dd6231ba111e59955a0b012) Reviewed-on: https://skia-review.googlesource.com/c/skia/+/784018 Reviewed-by: Leon Scroggins <scroggo@google.com>
diff --git a/src/gpu/ganesh/effects/GrAtlasedShaderHelpers.h b/src/gpu/ganesh/effects/GrAtlasedShaderHelpers.h index c06f830..1e9ae1b 100644 --- a/src/gpu/ganesh/effects/GrAtlasedShaderHelpers.h +++ b/src/gpu/ganesh/effects/GrAtlasedShaderHelpers.h
@@ -79,8 +79,7 @@ int numTextureSamplers, const GrGLSLVarying& texIdx, const char* coordName, - const char* colorName, - GrGLSLColorSpaceXformHelper* cxh = nullptr) { + const char* colorName) { SkASSERT(numTextureSamplers > 0); // This shouldn't happen, but will avoid a crash if it does if (numTextureSamplers <= 0) { @@ -92,14 +91,12 @@ for (int i = 0; i < numTextureSamplers-1; ++i) { args.fFragBuilder->codeAppendf("if (%s == %d) { %s = ", texIdx.fsIn(), i, colorName); args.fFragBuilder->appendTextureLookup(args.fTexSamplers[i], - coordName, - cxh); + coordName); args.fFragBuilder->codeAppend("; } else "); } args.fFragBuilder->codeAppendf("{ %s = ", colorName); args.fFragBuilder->appendTextureLookup(args.fTexSamplers[numTextureSamplers - 1], - coordName, - cxh); + coordName); args.fFragBuilder->codeAppend("; }"); }
diff --git a/src/gpu/ganesh/effects/GrBitmapTextGeoProc.cpp b/src/gpu/ganesh/effects/GrBitmapTextGeoProc.cpp index 22c3518..4168152 100644 --- a/src/gpu/ganesh/effects/GrBitmapTextGeoProc.cpp +++ b/src/gpu/ganesh/effects/GrBitmapTextGeoProc.cpp
@@ -95,7 +95,12 @@ fragBuilder->codeAppend("half4 texColor;"); append_multitexture_lookup(args, btgp.numTextureSamplers(), - texIdx, uv.fsIn(), "texColor", &fColorSpaceXformHelper); + texIdx, uv.fsIn(), "texColor"); + if (!fColorSpaceXformHelper.isNoop()) { + fragBuilder->codeAppend("texColor = "); + fragBuilder->appendColorGamutXform("texColor", &fColorSpaceXformHelper); + fragBuilder->codeAppend(";"); + } if (btgp.fMaskFormat == MaskFormat::kARGB) { // modulate by color