Remove most GrCoordTransform code
All coord transforms were identity, so this enshrines that
knowledge, then transitively removes a large amount of code.
Bug: skia:10416
Change-Id: Iae4af9ca21590bced1ce9fce3ab807f6cceaebd4
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/300234
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
diff --git a/src/gpu/GrPathProcessor.cpp b/src/gpu/GrPathProcessor.cpp
index 4385844..2fdd97b 100644
--- a/src/gpu/GrPathProcessor.cpp
+++ b/src/gpu/GrPathProcessor.cpp
@@ -8,7 +8,7 @@
#include "src/gpu/GrPathProcessor.h"
#include "include/private/SkTo.h"
-#include "src/gpu/GrCoordTransform.h"
+#include "src/core/SkMatrixPriv.h"
#include "src/gpu/GrShaderCaps.h"
#include "src/gpu/gl/GrGLGpu.h"
#ifdef SK_GL
@@ -54,102 +54,47 @@
fragBuilder->codeAppendf("%s = half4(1);", args.fOutputCoverage);
}
- SkString matrix_to_sksl(const SkMatrix& m) {
- return SkStringPrintf("float3x3(%f, %f, %f, %f, %f, %f, %f, %f, %f)", m[0], m[1], m[2],
- m[3], m[4], m[5], m[6], m[7], m[8]);
- }
-
void emitTransforms(GrGLSLVaryingHandler* varyingHandler,
GrGLSLUniformHandler* uniformHandler,
FPCoordTransformHandler* transformHandler) {
for (int i = 0; *transformHandler; ++*transformHandler, ++i) {
- auto [coordTransform, fp] = transformHandler->get();
+ const auto& fp = transformHandler->get();
GrShaderVar fragmentVar;
GrShaderVar transformVar;
if (fp.isSampledWithExplicitCoords()) {
- if (coordTransform.isNoOp()) {
- transformHandler->omitCoordsForCurrCoordTransform();
- continue;
- } else {
- const char* name;
- SkString strUniName;
- strUniName.printf("CoordTransformMatrix_%d", i);
- auto& uni = fUniformTransform.push_back();
- if (coordTransform.matrix().isScaleTranslate()) {
- uni.fType = kFloat4_GrSLType;
- } else {
- uni.fType = kFloat3x3_GrSLType;
- }
- uni.fHandle = uniformHandler
- ->addUniform(nullptr,
- kFragment_GrShaderFlag,
- uni.fType,
- strUniName.c_str(),
- &name)
- .toIndex();
- transformVar = uniformHandler->getUniformVariable(uni.fHandle);
- }
+ transformHandler->omitCoordsForCurrCoordTransform();
} else {
SkString strVaryingName;
strVaryingName.printf("TransformedCoord_%d", i);
- GrSLType varyingType = coordTransform.matrix().hasPerspective() ? kFloat3_GrSLType
- : kFloat2_GrSLType;
- GrGLSLVarying v(varyingType);
+ GrGLSLVarying v(kFloat2_GrSLType);
#ifdef SK_GL
GrGLVaryingHandler* glVaryingHandler = (GrGLVaryingHandler*)varyingHandler;
fVaryingTransform.push_back().fHandle =
glVaryingHandler->addPathProcessingVarying(strVaryingName.c_str(), &v)
.toIndex();
#endif
- fVaryingTransform.back().fType = varyingType;
- fragmentVar = {SkString(v.fsIn()), varyingType};
+ fragmentVar = {SkString(v.fsIn()), kFloat2_GrSLType};
+ transformHandler->specifyCoordsForCurrCoordTransform(transformVar, fragmentVar);
}
- transformHandler->specifyCoordsForCurrCoordTransform(transformVar, fragmentVar);
}
}
void setData(const GrGLSLProgramDataManager& pd,
- const GrPrimitiveProcessor& primProc,
- const CoordTransformRange& transformRange) override {
+ const GrPrimitiveProcessor& primProc) override {
const GrPathProcessor& pathProc = primProc.cast<GrPathProcessor>();
if (pathProc.color() != fColor) {
pd.set4fv(fColorUniform, 1, pathProc.color().vec());
fColor = pathProc.color();
}
- int v = 0, u = 0;
- for (auto [transform, fp] : transformRange) {
- if (fp.isSampledWithExplicitCoords()) {
- if (transform.isNoOp()) {
- continue;
- }
- if (fUniformTransform[u].fHandle.isValid()) {
- SkMatrix m = GetTransformMatrix(transform, SkMatrix::I());
- if (!SkMatrixPriv::CheapEqual(fUniformTransform[u].fCurrentValue, m)) {
- fUniformTransform[u].fCurrentValue = m;
- if (fUniformTransform[u].fType == kFloat4_GrSLType) {
- float values[4] = {m.getScaleX(), m.getTranslateX(),
- m.getScaleY(), m.getTranslateY()};
- pd.set4fv(fUniformTransform[u].fHandle.toIndex(), 1, values);
- } else {
- SkASSERT(fUniformTransform[u].fType == kFloat3x3_GrSLType);
- pd.setSkMatrix(fUniformTransform[u].fHandle.toIndex(), m);
- }
- }
- }
- ++u;
- } else {
- SkASSERT(fVaryingTransform[v].fHandle.isValid());
- SkMatrix m = GetTransformMatrix(transform, pathProc.localMatrix());
+ for (int v = 0; v < fVaryingTransform.count(); ++v) {
+ if (fVaryingTransform[v].fHandle.isValid()) {
+ SkMatrix m = pathProc.localMatrix();
if (!SkMatrixPriv::CheapEqual(fVaryingTransform[v].fCurrentValue, m)) {
fVaryingTransform[v].fCurrentValue = m;
- SkASSERT(fVaryingTransform[v].fType == kFloat2_GrSLType ||
- fVaryingTransform[v].fType == kFloat3_GrSLType);
- int components = fVaryingTransform[v].fType == kFloat2_GrSLType ? 2 : 3;
- pd.setPathFragmentInputTransform(fVaryingTransform[v].fHandle, components, m);
+ pd.setPathFragmentInputTransform(fVaryingTransform[v].fHandle, 2, m);
}
- ++v;
}
}
}
@@ -163,18 +108,9 @@
struct TransformVarying {
VaryingHandle fHandle;
SkMatrix fCurrentValue = SkMatrix::InvalidMatrix();
- GrSLType fType = kVoid_GrSLType;
- };
- // For explicitly sampled FPs we stick a uniform in the FS and apply it to the explicit coords
- // to implement the CoordTransform.
- struct TransformUniform {
- UniformHandle fHandle;
- SkMatrix fCurrentValue = SkMatrix::InvalidMatrix();
- GrSLType fType = kVoid_GrSLType;
};
SkTArray<TransformVarying, true> fVaryingTransform;
- SkTArray<TransformUniform, true> fUniformTransform;
UniformHandle fColorUniform;
SkPMColor4f fColor;