diff options
author | bsalomon <bsalomon@google.com> | 2016-09-19 09:26:40 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-09-19 09:26:40 -0700 |
commit | 56b7dc476ba5e4a53ab24b5830b5ed03e404006d (patch) | |
tree | 043e07baf151bab960421fbfc06af7e09bf9b67e /src/gpu/GrPathProcessor.cpp | |
parent | 9f262811b79f2c3f2c52c03cc2947431a36e8fbe (diff) |
Revert of Stop flattening GrCoordTransforms in parent GrFragmentProcessors. (patchset #3 id:40001 of https://codereview.chromium.org/2339203002/ )
Reason for revert:
Crashing blink
https://codereview.chromium.org/2351743002/
Original issue's description:
> Stop flattening GrCoordTransforms in parent GrFragmentProcessors.
>
> This changes moves to a model that iterates over GrCTs in a GrFP hierarchy when inserting transformations by GrGLSLPrimitiveProcessors.
> GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2339203002
>
> Committed: https://skia.googlesource.com/skia/+/d91237ee051523f439238042674ade99207fe4a6
TBR=egdaniel@google.com,robertphillips@google.com
# Skipping CQ checks because original CL landed less than 1 days ago.
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
Review-Url: https://codereview.chromium.org/2351753002
Diffstat (limited to 'src/gpu/GrPathProcessor.cpp')
-rw-r--r-- | src/gpu/GrPathProcessor.cpp | 77 |
1 files changed, 44 insertions, 33 deletions
diff --git a/src/gpu/GrPathProcessor.cpp b/src/gpu/GrPathProcessor.cpp index c90481b8da..aa776ec2fb 100644 --- a/src/gpu/GrPathProcessor.cpp +++ b/src/gpu/GrPathProcessor.cpp @@ -34,7 +34,7 @@ public: } // emit transforms - this->emitTransforms(args.fVaryingHandler, args.fFPCoordTransformHandler); + this->emitTransforms(args.fVaryingHandler, args.fTransformsIn, args.fTransformsOut); // Setup uniform color if (pathProc.overrides().readsColor()) { @@ -54,30 +54,34 @@ public: } void emitTransforms(GrGLSLVaryingHandler* varyingHandler, - FPCoordTransformHandler* transformHandler) { - int i = 0; - while (const GrCoordTransform* coordTransform = transformHandler->nextCoordTransform()) { - GrSLType varyingType = - coordTransform->getMatrix().hasPerspective() ? kVec3f_GrSLType - : kVec2f_GrSLType; - - SkString strVaryingName; - strVaryingName.printf("TransformedCoord_%d", i); - GrGLSLVertToFrag v(varyingType); - GrGLVaryingHandler* glVaryingHandler = (GrGLVaryingHandler*) varyingHandler; - fInstalledTransforms.push_back().fHandle = - glVaryingHandler->addPathProcessingVarying(strVaryingName.c_str(), - &v).toIndex(); - fInstalledTransforms.back().fType = varyingType; - - transformHandler->specifyCoordsForCurrCoordTransform(SkString(v.fsIn()), varyingType); - ++i; + const TransformsIn& tin, + TransformsOut* tout) { + tout->push_back_n(tin.count()); + fInstalledTransforms.push_back_n(tin.count()); + for (int i = 0; i < tin.count(); i++) { + const ProcCoords& coordTransforms = tin[i]; + fInstalledTransforms[i].push_back_n(coordTransforms.count()); + for (int t = 0; t < coordTransforms.count(); t++) { + GrSLType varyingType = + coordTransforms[t]->getMatrix().hasPerspective() ? kVec3f_GrSLType : + kVec2f_GrSLType; + + SkString strVaryingName("MatrixCoord"); + strVaryingName.appendf("_%i_%i", i, t); + GrGLSLVertToFrag v(varyingType); + GrGLVaryingHandler* glVaryingHandler = (GrGLVaryingHandler*) varyingHandler; + fInstalledTransforms[i][t].fHandle = + glVaryingHandler->addPathProcessingVarying(strVaryingName.c_str(), + &v).toIndex(); + fInstalledTransforms[i][t].fType = varyingType; + + (*tout)[i].emplace_back(SkString(v.fsIn()), varyingType); + } } } void setData(const GrGLSLProgramDataManager& pd, - const GrPrimitiveProcessor& primProc, - FPCoordTransformIter&& transformIter) override { + const GrPrimitiveProcessor& primProc) override { const GrPathProcessor& pathProc = primProc.cast<GrPathProcessor>(); if (pathProc.overrides().readsColor() && pathProc.color() != fColor) { float c[4]; @@ -85,21 +89,28 @@ public: pd.set4fv(fColorUniform, 1, c); fColor = pathProc.color(); } + } - int t = 0; - while (const GrCoordTransform* coordTransform = transformIter.next()) { - SkASSERT(fInstalledTransforms[t].fHandle.isValid()); - const SkMatrix& m = GetTransformMatrix(pathProc.localMatrix(), *coordTransform); - if (fInstalledTransforms[t].fCurrentValue.cheapEqualTo(m)) { + void setTransformData(const GrPrimitiveProcessor& primProc, + const GrGLSLProgramDataManager& pdman, + int index, + const SkTArray<const GrCoordTransform*, true>& coordTransforms) override { + const GrPathProcessor& pathProc = primProc.cast<GrPathProcessor>(); + SkTArray<TransformVarying, true>& transforms = fInstalledTransforms[index]; + int numTransforms = transforms.count(); + for (int t = 0; t < numTransforms; ++t) { + SkASSERT(transforms[t].fHandle.isValid()); + const SkMatrix& transform = GetTransformMatrix(pathProc.localMatrix(), + *coordTransforms[t]); + if (transforms[t].fCurrentValue.cheapEqualTo(transform)) { continue; } - fInstalledTransforms[t].fCurrentValue = m; + transforms[t].fCurrentValue = transform; - SkASSERT(fInstalledTransforms[t].fType == kVec2f_GrSLType || - fInstalledTransforms[t].fType == kVec3f_GrSLType); - unsigned components = fInstalledTransforms[t].fType == kVec2f_GrSLType ? 2 : 3; - pd.setPathFragmentInputTransform(fInstalledTransforms[t].fHandle, components, m); - ++t; + SkASSERT(transforms[t].fType == kVec2f_GrSLType || + transforms[t].fType == kVec3f_GrSLType); + unsigned components = transforms[t].fType == kVec2f_GrSLType ? 2 : 3; + pdman.setPathFragmentInputTransform(transforms[t].fHandle, components, transform); } } @@ -111,7 +122,7 @@ private: GrSLType fType = kVoid_GrSLType; }; - SkTArray<TransformVarying, true> fInstalledTransforms; + SkSTArray<8, SkSTArray<2, TransformVarying, true> > fInstalledTransforms; UniformHandle fColorUniform; GrColor fColor; |