diff options
author | 2016-09-19 09:26:40 -0700 | |
---|---|---|
committer | 2016-09-19 09:26:40 -0700 | |
commit | 56b7dc476ba5e4a53ab24b5830b5ed03e404006d (patch) | |
tree | 043e07baf151bab960421fbfc06af7e09bf9b67e /src/gpu/glsl/GrGLSLGeometryProcessor.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/glsl/GrGLSLGeometryProcessor.cpp')
-rw-r--r-- | src/gpu/glsl/GrGLSLGeometryProcessor.cpp | 113 |
1 files changed, 51 insertions, 62 deletions
diff --git a/src/gpu/glsl/GrGLSLGeometryProcessor.cpp b/src/gpu/glsl/GrGLSLGeometryProcessor.cpp index bea49e5069..ddbe8e133a 100644 --- a/src/gpu/glsl/GrGLSLGeometryProcessor.cpp +++ b/src/gpu/glsl/GrGLSLGeometryProcessor.cpp @@ -29,82 +29,71 @@ void GrGLSLGeometryProcessor::emitTransforms(GrGLSLVertexBuilder* vb, const GrShaderVar& posVar, const char* localCoords, const SkMatrix& localMatrix, - FPCoordTransformHandler* handler) { - int i = 0; - while (const GrCoordTransform* coordTransform = handler->nextCoordTransform()) { - SkString strUniName; - strUniName.printf("CoordTransformMatrix_%d", i); - GrSLType varyingType; + 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++) { + SkString strUniName("StageMatrix"); + strUniName.appendf("_%i_%i", i, t); + GrSLType varyingType; - GrCoordSet coordType = coordTransform->sourceCoords(); - uint32_t type = coordTransform->getMatrix().getType(); - if (kLocal_GrCoordSet == coordType) { - type |= localMatrix.getType(); - } - varyingType = SkToBool(SkMatrix::kPerspective_Mask & type) ? kVec3f_GrSLType : - kVec2f_GrSLType; - GrSLPrecision precision = coordTransform->precision(); - - const char* uniName; + GrCoordSet coordType = coordTransforms[t]->sourceCoords(); + uint32_t type = coordTransforms[t]->getMatrix().getType(); + if (kLocal_GrCoordSet == coordType) { + type |= localMatrix.getType(); + } + varyingType = SkToBool(SkMatrix::kPerspective_Mask & type) ? kVec3f_GrSLType : + kVec2f_GrSLType; + GrSLPrecision precision = coordTransforms[t]->precision(); + const char* uniName; + fInstalledTransforms[i][t].fHandle = + uniformHandler->addUniform(kVertex_GrShaderFlag, + kMat33f_GrSLType, precision, + strUniName.c_str(), + &uniName).toIndex(); - fInstalledTransforms.push_back().fHandle = uniformHandler->addUniform(kVertex_GrShaderFlag, - kMat33f_GrSLType, - precision, - strUniName.c_str(), - &uniName).toIndex(); - SkString strVaryingName; - strVaryingName.printf("TransformedCoords_%d", i); + SkString strVaryingName("MatrixCoord"); + strVaryingName.appendf("_%i_%i", i, t); - GrGLSLVertToFrag v(varyingType); - varyingHandler->addVarying(strVaryingName.c_str(), &v, precision); + GrGLSLVertToFrag v(varyingType); + varyingHandler->addVarying(strVaryingName.c_str(), &v, precision); - SkASSERT(kVec2f_GrSLType == varyingType || kVec3f_GrSLType == varyingType); - handler->specifyCoordsForCurrCoordTransform(SkString(v.fsIn()), varyingType); + SkASSERT(kVec2f_GrSLType == varyingType || kVec3f_GrSLType == varyingType); + (*tout)[i].emplace_back(SkString(v.fsIn()), varyingType); - // varying = matrix * coords (logically) - if (kDevice_GrCoordSet == coordType) { - if (kVec2f_GrSLType == varyingType) { - if (kVec2f_GrSLType == posVar.getType()) { - vb->codeAppendf("%s = (%s * vec3(%s, 1)).xy;", - v.vsOut(), uniName, posVar.c_str()); + // varying = matrix * coords (logically) + if (kDevice_GrCoordSet == coordType) { + if (kVec2f_GrSLType == varyingType) { + if (kVec2f_GrSLType == posVar.getType()) { + vb->codeAppendf("%s = (%s * vec3(%s, 1)).xy;", + v.vsOut(), uniName, posVar.c_str()); + } else { + // The brackets here are just to scope the temp variable + vb->codeAppendf("{ vec3 temp = %s * %s;", uniName, posVar.c_str()); + vb->codeAppendf("%s = vec2(temp.x/temp.z, temp.y/temp.z); }", v.vsOut()); + } } else { - // The brackets here are just to scope the temp variable - vb->codeAppendf("{ vec3 temp = %s * %s;", uniName, posVar.c_str()); - vb->codeAppendf("%s = vec2(temp.x/temp.z, temp.y/temp.z); }", v.vsOut()); + if (kVec2f_GrSLType == posVar.getType()) { + vb->codeAppendf("%s = %s * vec3(%s, 1);", + v.vsOut(), uniName, posVar.c_str()); + } else { + vb->codeAppendf("%s = %s * %s;", v.vsOut(), uniName, posVar.c_str()); + } } } else { - if (kVec2f_GrSLType == posVar.getType()) { - vb->codeAppendf("%s = %s * vec3(%s, 1);", - v.vsOut(), uniName, posVar.c_str()); + if (kVec2f_GrSLType == varyingType) { + vb->codeAppendf("%s = (%s * vec3(%s, 1)).xy;", v.vsOut(), uniName, localCoords); } else { - vb->codeAppendf("%s = %s * %s;", v.vsOut(), uniName, posVar.c_str()); + vb->codeAppendf("%s = %s * vec3(%s, 1);", v.vsOut(), uniName, localCoords); } } - } else { - if (kVec2f_GrSLType == varyingType) { - vb->codeAppendf("%s = (%s * vec3(%s, 1)).xy;", v.vsOut(), uniName, localCoords); - } else { - vb->codeAppendf("%s = %s * vec3(%s, 1);", v.vsOut(), uniName, localCoords); - } - } - ++i; - } -} - -void GrGLSLGeometryProcessor::setTransformDataHelper(const SkMatrix& localMatrix, - const GrGLSLProgramDataManager& pdman, - FPCoordTransformIter* transformIter) { - int i = 0; - while (const GrCoordTransform* coordTransform = transformIter->next()) { - const SkMatrix& m = GetTransformMatrix(localMatrix, *coordTransform); - if (!fInstalledTransforms[i].fCurrentValue.cheapEqualTo(m)) { - pdman.setSkMatrix(fInstalledTransforms[i].fHandle.toIndex(), m); - fInstalledTransforms[i].fCurrentValue = m; } - ++i; } - SkASSERT(i == fInstalledTransforms.count()); } void GrGLSLGeometryProcessor::setupPosition(GrGLSLVertexBuilder* vertBuilder, |