Lift atlas clip FP creation out of GrClip::apply
Atlas clips always had a potential point of failure: If the SDC's
opsTask ever got closed between GrClip::apply and
GrOpsTask::addDrawOp, their mask would have gotten sent to the wrong
opsTask. It didn't _look_ like this could happen with the current
code, but it could have also been inadvertently changed quite easily.
This CL adds a "pathsForClipAtlas" array for GrClip::apply to fill out
instead of creating FPs. The SDC then generates the actual clip atlas
FPs once it knows exactly which opsTask they will belong in.
Bug: chromium:928984
Change-Id: I507ab13b2b5e8c3c3c1916d97611297dbbd8a522
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/389926
Commit-Queue: Chris Dalton <csmartdalton@google.com>
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
diff --git a/src/gpu/GrAppliedClip.h b/src/gpu/GrAppliedClip.h
index e8ccc2d..9a8f8b4 100644
--- a/src/gpu/GrAppliedClip.h
+++ b/src/gpu/GrAppliedClip.h
@@ -45,11 +45,9 @@
/**
* Intersects the applied clip with the provided rect. Returns false if the draw became empty.
- * 'clippedDrawBounds' will be intersected with 'irect'. This returns false if the clip becomes
- * empty or the draw no longer intersects the clip. In either case the draw can be skipped.
*/
- bool addScissor(const SkIRect& irect, SkRect* clippedDrawBounds) {
- return fScissorState.intersect(irect) && clippedDrawBounds->intersect(SkRect::Make(irect));
+ bool SK_WARN_UNUSED_RESULT addScissor(const SkIRect& scissor) {
+ return fScissorState.intersect(scissor);
}
void setScissor(const SkIRect& irect) {