Update GrLatticeOp to not read from the gpu vertex buffer.
Change-Id: I93e90da7762c379486fd1a329ebf984e93578c69
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/364917
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Greg Daniel <egdaniel@google.com>
diff --git a/src/gpu/ops/GrLatticeOp.cpp b/src/gpu/ops/GrLatticeOp.cpp
index 90aa7b4..f3e090b 100644
--- a/src/gpu/ops/GrLatticeOp.cpp
+++ b/src/gpu/ops/GrLatticeOp.cpp
@@ -259,7 +259,6 @@
SkIRect srcR;
SkRect dstR;
- SkPoint* patchPositions = reinterpret_cast<SkPoint*>(vertices.fPtr);
Sk4f scales(1.f / fView.proxy()->width(), 1.f / fView.proxy()->height(),
1.f / fView.proxy()->width(), 1.f / fView.proxy()->height());
static const Sk4f kDomainOffsets(0.5f, 0.5f, -0.5f, -0.5f);
@@ -280,17 +279,36 @@
domain.store(&texDomain);
coords.store(&texCoords);
- vertices.writeQuad(GrVertexWriter::TriStripFromRect(dstR),
- GrVertexWriter::TriStripFromRect(texCoords),
+ if (isScaleTranslate) {
+ vertices.writeQuad(GrVertexWriter::TriStripFromRect(dstR),
+ GrVertexWriter::TriStripFromRect(texCoords),
+ texDomain,
+ patchColor);
+ } else {
+ SkPoint mappedPts[4];
+ patch.fViewMatrix.mapRectToQuad(mappedPts, dstR);
+ // In the above if statement, writeQuad writes the corners as:
+ // left-top, left-bottom, right-top, right-bottom.
+ // However, mapRectToQuad returns them in the order:
+ // left-top, right-top, right-bottom, left-bottom
+ // Thus we write out the vertices to match the writeQuad path.
+ vertices.write(mappedPts[0],
+ SkPoint::Make(texCoords.fLeft, texCoords.fTop),
texDomain,
patchColor);
- }
-
- // If we didn't handle it above, apply the matrix here.
- if (!isScaleTranslate) {
- SkMatrixPriv::MapPointsWithStride(
- patch.fViewMatrix, patchPositions, kVertexStride,
- GrResourceProvider::NumVertsPerNonAAQuad() * patch.fIter->numRectsToDraw());
+ vertices.write(mappedPts[3],
+ SkPoint::Make(texCoords.fLeft, texCoords.fBottom),
+ texDomain,
+ patchColor);
+ vertices.write(mappedPts[1],
+ SkPoint::Make(texCoords.fRight, texCoords.fTop),
+ texDomain,
+ patchColor);
+ vertices.write(mappedPts[2],
+ SkPoint::Make(texCoords.fRight, texCoords.fBottom),
+ texDomain,
+ patchColor);
+ }
}
}