diff options
author | Greg Daniel <egdaniel@google.com> | 2017-12-18 15:50:34 +0000 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-12-18 21:50:26 +0000 |
commit | f226e66d75374e370f3ae2c6895bc689670e9e18 (patch) | |
tree | b1e38311a08f7294f366fe3e89c4ba231f3be600 /src/gpu/glsl | |
parent | de71572f650005e36d4fc2fe95fb5677a25ae4f6 (diff) |
Revert "Transform vertices for distance field glyphs on CPU."
This reverts commit 0215e39d7e415d0530231df6ad20d5f215c72152.
Reason for revert: break intel 540 and HD2000 intel release bots on gltestthreading gm dftext_blob_pers
Original change's description:
> Transform vertices for distance field glyphs on CPU.
>
> This allows batching of DF draws with different view matrices.
>
> For perspective matrices this means the transformed position vertex
> attribute must have w values. Currently, non-perspective DF draws still
> use 2 component positions, though this could be changed in the future.
> Consequently, perspective draws can batch with other perspective draws
> but not non-perspective draws.
>
> Adds a GM to test batching and reusing the same blobs with both perspective
> and non-perspective matrices.
>
> Change-Id: I0e42c5449ebf3a5a54025dbcdec824d904d5bd9e
> Reviewed-on: https://skia-review.googlesource.com/79900
> Commit-Queue: Brian Salomon <bsalomon@google.com>
> Reviewed-by: Jim Van Verth <jvanverth@google.com>
TBR=jvanverth@google.com,bsalomon@google.com
# Not skipping CQ checks because original CL landed > 1 day ago.
Change-Id: Idc658d9263976d5b5e00a5026c5d6d3c8f4bdc2d
Reviewed-on: https://skia-review.googlesource.com/86560
Commit-Queue: Greg Daniel <egdaniel@google.com>
Reviewed-by: Greg Daniel <egdaniel@google.com>
Diffstat (limited to 'src/gpu/glsl')
-rw-r--r-- | src/gpu/glsl/GrGLSLGeometryProcessor.cpp | 33 | ||||
-rw-r--r-- | src/gpu/glsl/GrGLSLGeometryProcessor.h | 3 |
2 files changed, 16 insertions, 20 deletions
diff --git a/src/gpu/glsl/GrGLSLGeometryProcessor.cpp b/src/gpu/glsl/GrGLSLGeometryProcessor.cpp index 9a768c21b4..9c71042413 100644 --- a/src/gpu/glsl/GrGLSLGeometryProcessor.cpp +++ b/src/gpu/glsl/GrGLSLGeometryProcessor.cpp @@ -57,43 +57,40 @@ void GrGLSLGeometryProcessor::emitTransforms(GrGLSLVertexBuilder* vb, const SkMatrix& localMatrix, FPCoordTransformHandler* handler) { SkASSERT(GrSLTypeIsFloatType(localCoordsVar.getType())); - SkASSERT(2 == GrSLTypeVecLength(localCoordsVar.getType()) || - 3 == GrSLTypeVecLength(localCoordsVar.getType())); + SkASSERT(2 == GrSLTypeVecLength(localCoordsVar.getType())); - bool threeComponentLocalCoords = 3 == GrSLTypeVecLength(localCoordsVar.getType()); - SkString localCoords; - if (threeComponentLocalCoords) { - localCoords = localCoordsVar.getName(); - } else { - localCoords.printf("float3(%s, 1)", localCoordsVar.c_str()); - } int i = 0; while (const GrCoordTransform* coordTransform = handler->nextCoordTransform()) { SkString strUniName; strUniName.printf("CoordTransformMatrix_%d", i); + GrSLType varyingType; + + uint32_t type = coordTransform->getMatrix().getType(); + type |= localMatrix.getType(); + + varyingType = SkToBool(SkMatrix::kPerspective_Mask & type) ? kFloat3_GrSLType : + kFloat2_GrSLType; const char* uniName; + + fInstalledTransforms.push_back().fHandle = uniformHandler->addUniform(kVertex_GrShaderFlag, kFloat3x3_GrSLType, strUniName.c_str(), &uniName).toIndex(); - GrSLType varyingType = kFloat2_GrSLType; - if (localMatrix.hasPerspective() || coordTransform->getMatrix().hasPerspective()) { - varyingType = kFloat3_GrSLType; - } SkString strVaryingName; strVaryingName.printf("TransformedCoords_%d", i); + GrGLSLVarying v(varyingType); varyingHandler->addVarying(strVaryingName.c_str(), &v); + SkASSERT(kFloat2_GrSLType == varyingType || kFloat3_GrSLType == varyingType); handler->specifyCoordsForCurrCoordTransform(SkString(v.fsIn()), varyingType); if (kFloat2_GrSLType == varyingType) { - vb->codeAppendf("%s = (%s * %s).xy;", v.vsOut(), uniName, localCoords.c_str()); - if (threeComponentLocalCoords) { - vb->codeAppendf("%s /= %s.z;", v.vsOut(), localCoords.c_str()); - } + vb->codeAppendf("%s = (%s * float3(%s, 1)).xy;", v.vsOut(), uniName, + localCoordsVar.c_str()); } else { - vb->codeAppendf("%s = %s * %s;", v.vsOut(), uniName, localCoords.c_str()); + vb->codeAppendf("%s = %s * float3(%s, 1);", v.vsOut(), uniName, localCoordsVar.c_str()); } ++i; } diff --git a/src/gpu/glsl/GrGLSLGeometryProcessor.h b/src/gpu/glsl/GrGLSLGeometryProcessor.h index 36cc546c4c..de1e4fd02a 100644 --- a/src/gpu/glsl/GrGLSLGeometryProcessor.h +++ b/src/gpu/glsl/GrGLSLGeometryProcessor.h @@ -29,8 +29,7 @@ protected: FPCoordTransformIter*); // Emit transformed local coords from the vertex shader as a uniform matrix and varying per - // coord-transform. localCoordsVar must be a 2- or 3-component vector. If it is 3 then it is - // assumed to be a 2D homogeneous coordinate. + // coord-transform. void emitTransforms(GrGLSLVertexBuilder*, GrGLSLVaryingHandler*, GrGLSLUniformHandler*, |