Reland "Update SkCanvas' experimental SkiaRenderer API"
This reverts commit 90791c202dd2d943565237bf511d929e8bd19951.
Reason for revert: Jumped the gun, just need to update blacklist
Original change's description:
> Revert "Update SkCanvas' experimental SkiaRenderer API"
>
> This reverts commit 4bf964602ab8758f6e580aaaa69add4fb260c1a6.
>
> Reason for revert: vulkan dm crashes
>
> Original change's description:
> > Update SkCanvas' experimental SkiaRenderer API
> >
> > This lifts the temporary functions in SkGpuDevice into SkCanvas and
> > deprecates the older experimental_DrawImageSetV1 and
> > experimental_DrawEdgeAARect. The new functions can handle paints and
> > transform batching. Internally, SkCanvas routes the old functions to the
> > new entry points and all device-level code is updated to handle the new
> > API features.
> >
> > While touching all of the canvas/device/recording areas, the
> > experimental functions are grouped in an "EdgeAA" cluster instead of being
> > separated into the image category and the rectangle category.
> >
> > Bug: skia:8739
> > Change-Id: I67c2a724873040ad5dc3307ab5b2823ba1eac54b
> > Reviewed-on: https://skia-review.googlesource.com/c/skia/+/190221
> > Commit-Queue: Michael Ludwig <michaelludwig@google.com>
> > Reviewed-by: Brian Salomon <bsalomon@google.com>
>
> TBR=bsalomon@google.com,robertphillips@google.com,michaelludwig@google.com
>
> Change-Id: I87a5a258c5a1bd15e16389cdf91743772d6fa98a
> No-Presubmit: true
> No-Tree-Checks: true
> No-Try: true
> Bug: skia:8739
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/201226
> Reviewed-by: Michael Ludwig <michaelludwig@google.com>
> Commit-Queue: Michael Ludwig <michaelludwig@google.com>
TBR=bsalomon@google.com,robertphillips@google.com,michaelludwig@google.com
Change-Id: I75e9b6cbf079a7739b69a7e208730a930621abf9
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: skia:8739
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/201229
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
Auto-Submit: Michael Ludwig <michaelludwig@google.com>
diff --git a/tools/debugger/SkDebugCanvas.cpp b/tools/debugger/SkDebugCanvas.cpp
index 45eaf96..7580dc6 100644
--- a/tools/debugger/SkDebugCanvas.cpp
+++ b/tools/debugger/SkDebugCanvas.cpp
@@ -362,11 +362,6 @@
this->addDrawCommand(new SkDrawImageNineCommand(image, center, dst, paint));
}
-void SkDebugCanvas::onDrawImageSet(const SkCanvas::ImageSetEntry set[], int count,
- SkFilterQuality filterQuality, SkBlendMode mode) {
- this->addDrawCommand(new SkDrawImageSetCommand(set, count, filterQuality, mode));
-}
-
void SkDebugCanvas::onDrawOval(const SkRect& oval, const SkPaint& paint) {
this->addDrawCommand(new SkDrawOvalCommand(oval, paint));
}
@@ -407,11 +402,6 @@
addDrawCommand(new SkDrawRectCommand(rect, paint));
}
-void SkDebugCanvas::onDrawEdgeAARect(const SkRect& rect, SkCanvas::QuadAAFlags aa, SkColor color,
- SkBlendMode mode) {
- this->addDrawCommand(new SkDrawEdgeAARectCommand(rect, aa, color, mode));
-}
-
void SkDebugCanvas::onDrawRRect(const SkRRect& rrect, const SkPaint& paint) {
this->addDrawCommand(new SkDrawRRectCommand(rrect, paint));
}
@@ -455,6 +445,18 @@
this->addDrawCommand(new SkDrawDrawableCommand(drawable, matrix));
}
+void SkDebugCanvas::onDrawEdgeAAQuad(const SkRect& rect, const SkPoint clip[4],
+ QuadAAFlags aa, SkColor color, SkBlendMode mode) {
+ this->addDrawCommand(new SkDrawEdgeAAQuadCommand(rect, clip, aa, color, mode));
+}
+
+void SkDebugCanvas::onDrawEdgeAAImageSet(const ImageSetEntry set[], int count,
+ const SkPoint dstClips[], const SkMatrix preViewMatrices[],
+ const SkPaint* paint, SrcRectConstraint constraint) {
+ this->addDrawCommand(new SkDrawEdgeAAImageSetCommand(set, count, dstClips, preViewMatrices,
+ paint, constraint));
+}
+
void SkDebugCanvas::willRestore() {
this->addDrawCommand(new SkRestoreCommand());
this->INHERITED::willRestore();
diff --git a/tools/debugger/SkDebugCanvas.h b/tools/debugger/SkDebugCanvas.h
index 9ae2950..56da424 100644
--- a/tools/debugger/SkDebugCanvas.h
+++ b/tools/debugger/SkDebugCanvas.h
@@ -133,7 +133,6 @@
void onDrawPaint(const SkPaint&) override;
void onDrawRect(const SkRect&, const SkPaint&) override;
- void onDrawEdgeAARect(const SkRect&, SkCanvas::QuadAAFlags, SkColor, SkBlendMode) override;
void onDrawOval(const SkRect&, const SkPaint&) override;
void onDrawArc(const SkRect&, SkScalar, SkScalar, bool, const SkPaint&) override;
void onDrawRRect(const SkRRect&, const SkPaint&) override;
@@ -152,7 +151,6 @@
const SkRect& dst, const SkPaint* paint) override;
void onDrawImageRect(const SkImage*, const SkRect* src, const SkRect& dst,
const SkPaint*, SrcRectConstraint) override;
- void onDrawImageSet(const ImageSetEntry[], int count, SkFilterQuality, SkBlendMode) override;
void onDrawBitmapNine(const SkBitmap&, const SkIRect& center, const SkRect& dst,
const SkPaint*) override;
void onDrawImageNine(const SkImage*, const SkIRect& center, const SkRect& dst,
@@ -168,6 +166,11 @@
void onDrawDrawable(SkDrawable*, const SkMatrix*) override;
void onDrawPicture(const SkPicture*, const SkMatrix*, const SkPaint*) override;
+ void onDrawEdgeAAQuad(const SkRect&, const SkPoint[4], QuadAAFlags, SkColor,
+ SkBlendMode) override;
+ void onDrawEdgeAAImageSet(const ImageSetEntry[], int count, const SkPoint[], const SkMatrix[],
+ const SkPaint*, SrcRectConstraint) override;
+
private:
SkTDArray<SkDrawCommand*> fCommandVector;
SkMatrix fMatrix;
diff --git a/tools/debugger/SkDrawCommand.cpp b/tools/debugger/SkDrawCommand.cpp
index d9723ac..347cc26 100644
--- a/tools/debugger/SkDrawCommand.cpp
+++ b/tools/debugger/SkDrawCommand.cpp
@@ -9,6 +9,7 @@
#include <algorithm>
#include "SkAutoMalloc.h"
+#include "SkCanvasPriv.h"
#include "SkClipOpPriv.h"
#include "SkColorFilter.h"
#include "SkDashPathEffect.h"
@@ -227,7 +228,6 @@
case kDrawImageLattice_OpType: return "DrawImageLattice";
case kDrawImageNine_OpType: return "DrawImageNine";
case kDrawImageRect_OpType: return "DrawImageRect";
- case kDrawImageSet_OpType: return "DrawImageSet";
case kDrawOval_OpType: return "DrawOval";
case kDrawPaint_OpType: return "DrawPaint";
case kDrawPatch_OpType: return "DrawPatch";
@@ -242,6 +242,8 @@
case kDrawVertices_OpType: return "DrawVertices";
case kDrawAtlas_OpType: return "DrawAtlas";
case kDrawDrawable_OpType: return "DrawDrawable";
+ case kDrawEdgeAAQuad_OpType: return "DrawEdgeAAQuad";
+ case kDrawEdgeAAImageSet_OpType: return "DrawEdgeAAImageSet";
case kEndDrawPicture_OpType: return "EndDrawPicture";
case kRestore_OpType: return "Restore";
case kSave_OpType: return "Save";
@@ -1477,20 +1479,6 @@
writer.appendString(SKDEBUGCANVAS_ATTRIBUTE_SHORTDESC, str_append(&desc, fDst)->c_str());
}
-SkDrawImageSetCommand::SkDrawImageSetCommand(const SkCanvas::ImageSetEntry set[], int count,
- SkFilterQuality filterQuality, SkBlendMode mode)
- : INHERITED(kDrawImageSet_OpType)
- , fSet(count)
- , fCount(count)
- , fFilterQuality(filterQuality)
- , fMode(mode) {
- std::copy_n(set, count, fSet.get());
-}
-
-void SkDrawImageSetCommand::execute(SkCanvas* canvas) const {
- canvas->experimental_DrawImageSetV1(fSet.get(), fCount, fFilterQuality, fMode);
-}
-
SkDrawImageNineCommand::SkDrawImageNineCommand(const SkImage* image, const SkIRect& center,
const SkRect& dst, const SkPaint* paint)
: INHERITED(kDrawImageNine_OpType)
@@ -1899,19 +1887,6 @@
writer.appendString(SKDEBUGCANVAS_ATTRIBUTE_SHORTDESC, str_append(&desc, fRect)->c_str());
}
-SkDrawEdgeAARectCommand::SkDrawEdgeAARectCommand(const SkRect& rect, SkCanvas::QuadAAFlags aa,
- SkColor color, SkBlendMode mode)
- : INHERITED(kDrawEdgeAARect_OpType) {
- fRect = rect;
- fAA = aa;
- fColor = color;
- fMode = mode;
-}
-
-void SkDrawEdgeAARectCommand::execute(SkCanvas* canvas) const {
- canvas->experimental_DrawEdgeAARectV1(fRect, fAA, fColor, fMode);
-}
-
SkDrawRRectCommand::SkDrawRRectCommand(const SkRRect& rrect, const SkPaint& paint)
: INHERITED(kDrawRRect_OpType) {
fRRect = rrect;
@@ -1996,6 +1971,52 @@
///////////////////////////////////////////////////////////////////////////////////////////////////
+SkDrawEdgeAAQuadCommand::SkDrawEdgeAAQuadCommand(const SkRect& rect, const SkPoint clip[],
+ SkCanvas::QuadAAFlags aa, SkColor color,
+ SkBlendMode mode)
+ : INHERITED(kDrawEdgeAAQuad_OpType)
+ , fRect(rect)
+ , fHasClip(clip != nullptr)
+ , fAA(aa)
+ , fColor(color)
+ , fMode(mode) {
+ if (clip) {
+ for (int i = 0; i < 4; ++i) {
+ fClip[i] = clip[i];
+ }
+ }
+}
+
+void SkDrawEdgeAAQuadCommand::execute(SkCanvas* canvas) const {
+ canvas->experimental_DrawEdgeAAQuad(fRect, fHasClip ? fClip : nullptr, fAA, fColor, fMode);
+}
+
+SkDrawEdgeAAImageSetCommand::SkDrawEdgeAAImageSetCommand(
+ const SkCanvas::ImageSetEntry set[], int count, const SkPoint dstClips[],
+ const SkMatrix preViewMatrices[], const SkPaint* paint,
+ SkCanvas::SrcRectConstraint constraint)
+ : INHERITED(kDrawEdgeAAImageSet_OpType)
+ , fSet(count)
+ , fCount(count)
+ , fPaint(paint)
+ , fConstraint(constraint) {
+ int totalDstClipCount, totalMatrixCount;
+ SkCanvasPriv::GetDstClipAndMatrixCounts(set, count, &totalDstClipCount, &totalMatrixCount);
+
+ std::copy_n(set, count, fSet.get());
+ fDstClips.reset(totalDstClipCount);
+ std::copy_n(dstClips, totalDstClipCount, fDstClips.get());
+ fPreViewMatrices.reset(totalMatrixCount);
+ std::copy_n(preViewMatrices, totalMatrixCount, fPreViewMatrices.get());
+}
+
+void SkDrawEdgeAAImageSetCommand::execute(SkCanvas* canvas) const {
+ canvas->experimental_DrawEdgeAAImageSet(fSet.get(), fCount, fDstClips.get(),
+ fPreViewMatrices.get(), fPaint.getMaybeNull(), fConstraint);
+}
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
SkDrawDrawableCommand::SkDrawDrawableCommand(SkDrawable* drawable, const SkMatrix* matrix)
: INHERITED(kDrawDrawable_OpType)
, fDrawable(SkRef(drawable))
diff --git a/tools/debugger/SkDrawCommand.h b/tools/debugger/SkDrawCommand.h
index 7c386bc..0812d85 100644
--- a/tools/debugger/SkDrawCommand.h
+++ b/tools/debugger/SkDrawCommand.h
@@ -43,7 +43,6 @@
kDrawImageLattice_OpType,
kDrawImageNine_OpType,
kDrawImageRect_OpType,
- kDrawImageSet_OpType,
kDrawOval_OpType,
kDrawArc_OpType,
kDrawPaint_OpType,
@@ -51,7 +50,6 @@
kDrawPath_OpType,
kDrawPoints_OpType,
kDrawRect_OpType,
- kDrawEdgeAARect_OpType,
kDrawRRect_OpType,
kDrawRegion_OpType,
kDrawShadow_OpType,
@@ -59,6 +57,8 @@
kDrawVertices_OpType,
kDrawAtlas_OpType,
kDrawDrawable_OpType,
+ kDrawEdgeAAQuad_OpType,
+ kDrawEdgeAAImageSet_OpType,
kEndDrawPicture_OpType,
kRestore_OpType,
kSave_OpType,
@@ -360,20 +360,6 @@
typedef SkDrawCommand INHERITED;
};
-class SkDrawImageSetCommand : public SkDrawCommand {
-public:
- SkDrawImageSetCommand(const SkCanvas::ImageSetEntry[], int count, SkFilterQuality, SkBlendMode);
- void execute(SkCanvas* canvas) const override;
-
-private:
- SkAutoTArray<SkCanvas::ImageSetEntry> fSet;
- int fCount;
- SkFilterQuality fFilterQuality;
- SkBlendMode fMode;
-
- typedef SkDrawCommand INHERITED;
-};
-
class SkDrawOvalCommand : public SkDrawCommand {
public:
SkDrawOvalCommand(const SkRect& oval, const SkPaint& paint);
@@ -543,21 +529,6 @@
typedef SkDrawCommand INHERITED;
};
-class SkDrawEdgeAARectCommand : public SkDrawCommand {
-public:
- SkDrawEdgeAARectCommand(const SkRect& rect, SkCanvas::QuadAAFlags aa, SkColor color,
- SkBlendMode mode);
- void execute(SkCanvas* canvas) const override;
-
-private:
- SkRect fRect;
- SkCanvas::QuadAAFlags fAA;
- SkColor fColor;
- SkBlendMode fMode;
-
- typedef SkDrawCommand INHERITED;
-};
-
class SkDrawRRectCommand : public SkDrawCommand {
public:
SkDrawRRectCommand(const SkRRect& rrect, const SkPaint& paint);
@@ -682,4 +653,38 @@
typedef SkDrawCommand INHERITED;
};
+
+class SkDrawEdgeAAQuadCommand : public SkDrawCommand {
+public:
+ SkDrawEdgeAAQuadCommand(const SkRect& rect, const SkPoint clip[4],
+ SkCanvas::QuadAAFlags aa, SkColor color, SkBlendMode mode);
+ void execute(SkCanvas* canvas) const override;
+
+private:
+ SkRect fRect;
+ SkPoint fClip[4];
+ int fHasClip;
+ SkCanvas::QuadAAFlags fAA;
+ SkColor fColor;
+ SkBlendMode fMode;
+
+ typedef SkDrawCommand INHERITED;
+};
+
+class SkDrawEdgeAAImageSetCommand : public SkDrawCommand {
+public:
+ SkDrawEdgeAAImageSetCommand(const SkCanvas::ImageSetEntry[], int count, const SkPoint[],
+ const SkMatrix[], const SkPaint*, SkCanvas::SrcRectConstraint);
+ void execute(SkCanvas* canvas) const override;
+
+private:
+ SkAutoTArray<SkCanvas::ImageSetEntry> fSet;
+ int fCount;
+ SkAutoTArray<SkPoint> fDstClips;
+ SkAutoTArray<SkMatrix> fPreViewMatrices;
+ SkTLazy<SkPaint> fPaint;
+ SkCanvas::SrcRectConstraint fConstraint;
+
+ typedef SkDrawCommand INHERITED;
+};
#endif