sksl: Negate dFdy when the Y axis is flipped
Bug: skia:
Change-Id: Icbdaa6b1ebbe00168f57ebb888c2345d4f7a5e7d
Reviewed-on: https://skia-review.googlesource.com/c/195160
Commit-Queue: Chris Dalton <csmartdalton@google.com>
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
diff --git a/src/sksl/SkSLGLSLCodeGenerator.cpp b/src/sksl/SkSLGLSLCodeGenerator.cpp
index 9f8a185..285a94c 100644
--- a/src/sksl/SkSLGLSLCodeGenerator.cpp
+++ b/src/sksl/SkSLGLSLCodeGenerator.cpp
@@ -460,9 +460,9 @@
(*fFunctionClasses)["abs"] = FunctionClass::kAbs;
(*fFunctionClasses)["atan"] = FunctionClass::kAtan;
(*fFunctionClasses)["determinant"] = FunctionClass::kDeterminant;
- (*fFunctionClasses)["dFdx"] = FunctionClass::kDerivative;
- (*fFunctionClasses)["dFdy"] = FunctionClass::kDerivative;
- (*fFunctionClasses)["fwidth"] = FunctionClass::kDerivative;
+ (*fFunctionClasses)["dFdx"] = FunctionClass::kDFdx;
+ (*fFunctionClasses)["dFdy"] = FunctionClass::kDFdy;
+ (*fFunctionClasses)["fwidth"] = FunctionClass::kFwidth;
(*fFunctionClasses)["fma"] = FunctionClass::kFMA;
(*fFunctionClasses)["fract"] = FunctionClass::kFract;
(*fFunctionClasses)["inverse"] = FunctionClass::kInverse;
@@ -517,7 +517,15 @@
}
}
break;
- case FunctionClass::kDerivative:
+ case FunctionClass::kDFdy:
+ if (fProgram.fSettings.fFlipY) {
+ // Flipping Y also negates the Y derivatives.
+ this->write("-dFdy");
+ nameWritten = true;
+ }
+ // fallthru
+ case FunctionClass::kDFdx:
+ case FunctionClass::kFwidth:
if (!fFoundDerivatives &&
fProgram.fSettings.fCaps->shaderDerivativeExtensionString()) {
SkASSERT(fProgram.fSettings.fCaps->shaderDerivativeSupport());