aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/effects
diff options
context:
space:
mode:
authorGravatar Stan Iliev <stani@google.com>2017-07-25 11:59:12 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-07-25 18:34:01 +0000
commit4ed9ae4b230425df7735bc4a3778da00f63178de (patch)
tree44244b8ee7dcdf70926501fdec4f20034f62dffc /src/gpu/effects
parentc47f223d14d562ad9899f64073d8134287982926 (diff)
Improve GrGLNonlinearColorSpaceXformEffect to support scRGB
Improve GrGLNonlinearColorSpaceXformEffect to correctly implement scRGB transfer function and allow for negative colors. Relax SkSurface_Gpu::Valid to allow kRGBA_half_GrPixelConfig render target without a color space needed for legacy blending on Android. Bug: b/62347704 Change-Id: Ibc6144e69c26cdbdcbf29348c4f612fb6b639e01 Reviewed-on: https://skia-review.googlesource.com/26143 Commit-Queue: Stan Iliev <stani@google.com> Reviewed-by: Brian Osman <brianosman@google.com>
Diffstat (limited to 'src/gpu/effects')
-rw-r--r--src/gpu/effects/GrNonlinearColorSpaceXformEffect.cpp4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/gpu/effects/GrNonlinearColorSpaceXformEffect.cpp b/src/gpu/effects/GrNonlinearColorSpaceXformEffect.cpp
index bfa2ed77df..c0573e915a 100644
--- a/src/gpu/effects/GrNonlinearColorSpaceXformEffect.cpp
+++ b/src/gpu/effects/GrNonlinearColorSpaceXformEffect.cpp
@@ -63,7 +63,9 @@ public:
transferFnBody.appendf("float E = %s[4];", coeffsName);
transferFnBody.appendf("float F = %s[5];", coeffsName);
transferFnBody.appendf("float G = %s[6];", coeffsName);
- transferFnBody.appendf("return (x < D) ? (C * x) + F : pow(A * x + B, G) + E;");
+ transferFnBody.append("float s = sign(x);");
+ transferFnBody.append("x = abs(x);");
+ transferFnBody.appendf("return s * ((x < D) ? (C * x) + F : pow(A * x + B, G) + E);");
fragBuilder->emitFunction(kFloat_GrSLType, fnName, SK_ARRAY_COUNT(gTransferFnFuncArgs),
gTransferFnFuncArgs, transferFnBody.c_str(), &tfFuncNames[i]);
}