| Index: src/gpu/gl/builders/GrGLProgramBuilder.cpp
|
| diff --git a/src/gpu/gl/builders/GrGLProgramBuilder.cpp b/src/gpu/gl/builders/GrGLProgramBuilder.cpp
|
| index cfb1d38b6137e762feba29a9c4c87af24ae82dc6..13a14534cf42b03c8fe50f8b29b06d4bf7737605 100644
|
| --- a/src/gpu/gl/builders/GrGLProgramBuilder.cpp
|
| +++ b/src/gpu/gl/builders/GrGLProgramBuilder.cpp
|
| @@ -378,8 +378,22 @@ void GrGLProgramBuilder::emitTransforms(const GrPendingFragmentStage& stage,
|
|
|
| for (int t = 0; t < numTransforms; t++) {
|
| const char* uniName = "StageMatrix";
|
| - GrSLType varyingType = stage.isPerspectiveCoordTransform(t) ? kVec3f_GrSLType :
|
| - kVec2f_GrSLType;
|
| + GrSLType varyingType;
|
| +
|
| + // TODO when we have deleted the coord change matrices we can get rid of the below check
|
| + GrCoordSet coordType = processor->coordTransform(t).sourceCoords();
|
| + const SkMatrix& localMatrix = fOptState.getPrimitiveProcessor()->localMatrix();
|
| + if (localMatrix.isIdentity()) {
|
| + varyingType = stage.isPerspectiveCoordTransform(t) ? kVec3f_GrSLType :
|
| + kVec2f_GrSLType;
|
| + } else {
|
| + uint32_t type = processor->coordTransform(t).getMatrix().getType();
|
| + if (kLocal_GrCoordSet == coordType) {
|
| + type |= localMatrix.getType();
|
| + }
|
| + varyingType = SkToBool(SkMatrix::kPerspective_Mask & type) ? kVec3f_GrSLType :
|
| + kVec2f_GrSLType;
|
| + }
|
| GrSLPrecision precision = processor->coordTransform(t).precision();
|
|
|
| SkString suffixedUniName;
|
| @@ -401,7 +415,6 @@ void GrGLProgramBuilder::emitTransforms(const GrPendingFragmentStage& stage,
|
| varyingName = suffixedVaryingName.c_str();
|
| }
|
|
|
| - GrCoordSet coordType = processor->coordTransform(t).sourceCoords();
|
| GrGLVertToFrag v(varyingType);
|
| this->addVarying(varyingName, &v, precision);
|
| fCoordVaryings.push_back(TransformVarying(v, uniName, coordType));
|
|
|