aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Brian Salomon <bsalomon@google.com>2017-07-12 16:58:54 +0000
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-07-12 16:59:04 +0000
commitbeae8a9faa2afcdbeeec96e658db7e113a4fa1c9 (patch)
treea37d25e80c2c45675511036b351d8ea72b49a42a /src
parent1c8bb8a4c63c327fb856a41e1b0b19775eac0ac1 (diff)
Revert "Make DashOp a non-legacy GrMeshDrawOp."
This reverts commit ebb38256c65f2d799dd64f0274256a0c1deffed1. Reason for revert: Assertions on ANGLE bots Original change's description: > Make DashOp a non-legacy GrMeshDrawOp. > > Change-Id: I84ee3c64a5af8889e9a122cbc08d70ed6b25fbab > Reviewed-on: https://skia-review.googlesource.com/22210 > Commit-Queue: Brian Salomon <bsalomon@google.com> > Reviewed-by: Greg Daniel <egdaniel@google.com> TBR=egdaniel@google.com,bsalomon@google.com Change-Id: I886a0bd75221f05d737d8b27c6b3d8d6cce5573c No-Presubmit: true No-Tree-Checks: true No-Try: true Reviewed-on: https://skia-review.googlesource.com/22680 Reviewed-by: Brian Salomon <bsalomon@google.com> Commit-Queue: Brian Salomon <bsalomon@google.com>
Diffstat (limited to 'src')
-rw-r--r--src/gpu/GrOpFlushState.h12
-rw-r--r--src/gpu/ops/GrDashLinePathRenderer.cpp12
-rw-r--r--src/gpu/ops/GrDashOp.cpp139
-rw-r--r--src/gpu/ops/GrDashOp.h13
4 files changed, 62 insertions, 114 deletions
diff --git a/src/gpu/GrOpFlushState.h b/src/gpu/GrOpFlushState.h
index 42daab3960..b5cacfa0fe 100644
--- a/src/gpu/GrOpFlushState.h
+++ b/src/gpu/GrOpFlushState.h
@@ -245,18 +245,6 @@ public:
return this->state()->allocPipeline(std::forward<Args>(args)...);
}
- GrPipeline* makePipeline(uint32_t pipelineFlags, const GrProcessorSet* processorSet) {
- GrPipeline::InitArgs pipelineArgs;
- pipelineArgs.fFlags = pipelineFlags;
- pipelineArgs.fProcessors = processorSet;
- pipelineArgs.fRenderTarget = this->renderTarget();
- pipelineArgs.fAppliedClip = this->clip();
- pipelineArgs.fDstProxy = this->dstProxy();
- pipelineArgs.fCaps = &this->caps();
- pipelineArgs.fResourceProvider = this->resourceProvider();
- return this->allocPipeline(pipelineArgs);
- }
-
private:
GrMeshDrawOp* meshDrawOp() { return static_cast<GrMeshDrawOp*>(this->op()); }
typedef GrDrawOp::Target INHERITED;
diff --git a/src/gpu/ops/GrDashLinePathRenderer.cpp b/src/gpu/ops/GrDashLinePathRenderer.cpp
index a364d9294d..cafe2474c7 100644
--- a/src/gpu/ops/GrDashLinePathRenderer.cpp
+++ b/src/gpu/ops/GrDashLinePathRenderer.cpp
@@ -46,12 +46,16 @@ bool GrDashLinePathRenderer::onDrawPath(const DrawPathArgs& args) {
}
SkPoint pts[2];
SkAssertResult(args.fShape->asLine(pts, nullptr));
- std::unique_ptr<GrDrawOp> op =
- GrDashOp::MakeDashLineOp(std::move(args.fPaint), *args.fViewMatrix, pts, aaMode,
- args.fShape->style(), args.fUserStencilSettings);
+ std::unique_ptr<GrLegacyMeshDrawOp> op = GrDashOp::MakeDashLineOp(
+ args.fPaint.getColor(), *args.fViewMatrix, pts, aaMode, args.fShape->style());
if (!op) {
return false;
}
- args.fRenderTargetContext->addDrawOp(*args.fClip, std::move(op));
+
+ GrPipelineBuilder pipelineBuilder(std::move(args.fPaint), args.fAAType);
+ pipelineBuilder.setUserStencil(args.fUserStencilSettings);
+
+ args.fRenderTargetContext->addLegacyMeshDrawOp(
+ std::move(pipelineBuilder), *args.fClip, std::move(op));
return true;
}
diff --git a/src/gpu/ops/GrDashOp.cpp b/src/gpu/ops/GrDashOp.cpp
index 645477810e..64ddc408fa 100644
--- a/src/gpu/ops/GrDashOp.cpp
+++ b/src/gpu/ops/GrDashOp.cpp
@@ -6,7 +6,7 @@
*/
#include "GrDashOp.h"
-#include "GrAppliedClip.h"
+
#include "GrCaps.h"
#include "GrContext.h"
#include "GrCoordTransform.h"
@@ -240,7 +240,7 @@ static sk_sp<GrGeometryProcessor> make_dash_gp(GrColor,
const SkMatrix& localMatrix,
bool usesLocalCoords);
-class DashOp final : public GrMeshDrawOp {
+class DashOp final : public GrLegacyMeshDrawOp {
public:
DEFINE_OP_CLASS_ID
struct LineData {
@@ -254,11 +254,11 @@ public:
SkScalar fPerpendicularScale;
};
- static std::unique_ptr<GrDrawOp> Make(GrPaint&& paint, const LineData& geometry,
- SkPaint::Cap cap, AAMode aaMode, bool fullDash,
- const GrUserStencilSettings* stencilSettings) {
- return std::unique_ptr<GrDrawOp>(
- new DashOp(std::move(paint), geometry, cap, aaMode, fullDash, stencilSettings));
+ static std::unique_ptr<GrLegacyMeshDrawOp> Make(const LineData& geometry, GrColor color,
+ SkPaint::Cap cap, AAMode aaMode,
+ bool fullDash) {
+ return std::unique_ptr<GrLegacyMeshDrawOp>(
+ new DashOp(geometry, color, cap, aaMode, fullDash));
}
const char* name() const override { return "DashOp"; }
@@ -275,49 +275,14 @@ public:
geo.fIntervals[1],
geo.fPhase);
}
- string += fProcessorSet.dumpProcessors();
- string += INHERITED::dumpInfo();
+ string.append(DumpPipelineInfo(*this->pipeline()));
+ string.append(INHERITED::dumpInfo());
return string;
}
- FixedFunctionFlags fixedFunctionFlags() const override {
- FixedFunctionFlags flags = FixedFunctionFlags::kNone;
- if (AAMode::kCoverageWithMSAA == fAAMode) {
- flags |= FixedFunctionFlags::kUsesHWAA;
- }
- if (fStencilSettings) {
- flags |= FixedFunctionFlags::kUsesStencil;
- }
- return flags;
- }
-
- RequiresDstTexture finalize(const GrCaps& caps, const GrAppliedClip* clip) override {
- GrProcessorAnalysisCoverage coverage;
- if (AAMode::kNone == fAAMode && !clip->clipCoverageFragmentProcessor()) {
- coverage = GrProcessorAnalysisCoverage::kNone;
- } else {
- coverage = GrProcessorAnalysisCoverage::kSingleChannel;
- }
- auto analysis = fProcessorSet.finalize(fColor, coverage, clip, false, caps, &fColor);
- fDisallowCombineOnTouchOrOverlap = analysis.requiresDstTexture() ||
- (fProcessorSet.xferProcessor() &&
- fProcessorSet.xferProcessor()->xferBarrierType(caps));
- fUsesLocalCoords = analysis.usesLocalCoords();
- return analysis.requiresDstTexture() ? RequiresDstTexture::kYes : RequiresDstTexture::kNo;
- }
-
private:
- DashOp(GrPaint&& paint, const LineData& geometry, SkPaint::Cap cap, AAMode aaMode,
- bool fullDash, const GrUserStencilSettings* stencilSettings)
- : INHERITED(ClassID())
- , fColor(paint.getColor())
- , fAllowsSRGBInputs(paint.getAllowSRGBInputs())
- , fDisableSRGBOutputConversion(paint.getDisableOutputConversionToSRGB())
- , fCap(cap)
- , fFullDash(fullDash)
- , fAAMode(aaMode)
- , fProcessorSet(std::move(paint))
- , fStencilSettings(stencilSettings) {
+ DashOp(const LineData& geometry, GrColor color, SkPaint::Cap cap, AAMode aaMode, bool fullDash)
+ : INHERITED(ClassID()), fColor(color), fCap(cap), fAAMode(aaMode), fFullDash(fullDash) {
fLines.push_back(geometry);
// compute bounds
@@ -336,6 +301,18 @@ private:
this->setTransformedBounds(bounds, combinedMatrix, aaBloat, zeroArea);
}
+ void getProcessorAnalysisInputs(GrProcessorAnalysisColor* color,
+ GrProcessorAnalysisCoverage* coverage) const override {
+ color->setToConstant(fColor);
+ *coverage = GrProcessorAnalysisCoverage::kSingleChannel;
+ }
+
+ void applyPipelineOptimizations(const PipelineOptimizations& optimizations) override {
+ optimizations.getOverrideColorIfSet(&fColor);
+
+ fUsesLocalCoords = optimizations.readsLocalCoords();
+ }
+
struct DashDraw {
DashDraw(const LineData& geo) {
memcpy(fPtsRot, geo.fPtsRot, sizeof(geo.fPtsRot));
@@ -365,13 +342,14 @@ private:
sk_sp<GrGeometryProcessor> gp;
if (this->fullDash()) {
gp = make_dash_gp(this->color(), this->aaMode(), capType, this->viewMatrix(),
- fUsesLocalCoords);
+ this->usesLocalCoords());
} else {
// Set up the vertex data for the line and start/end dashes
using namespace GrDefaultGeoProcFactory;
Color color(this->color());
- LocalCoords::Type localCoordsType =
- fUsesLocalCoords ? LocalCoords::kUsePosition_Type : LocalCoords::kUnused_Type;
+ LocalCoords::Type localCoordsType = this->usesLocalCoords()
+ ? LocalCoords::kUsePosition_Type
+ : LocalCoords::kUnused_Type;
gp = MakeForDeviceSpace(color, Coverage::kSolid_Type, localCoordsType,
this->viewMatrix());
}
@@ -652,27 +630,13 @@ private:
rectIndex++;
}
SkASSERT(0 == (curVIdx % 4) && (curVIdx / 4) == totalRectCount);
- uint32_t pipelineFlags = 0;
- if (AAMode::kCoverageWithMSAA == fAAMode) {
- pipelineFlags |= GrPipeline::kHWAntialias_Flag;
- }
- if (fDisableSRGBOutputConversion) {
- pipelineFlags |= GrPipeline::kDisableOutputConversionToSRGB_Flag;
- }
- if (fAllowsSRGBInputs) {
- pipelineFlags |= GrPipeline::kAllowSRGBInputs_Flag;
- }
- const GrPipeline* pipeline = target->makePipeline(pipelineFlags, &fProcessorSet);
- helper.recordDraw(target, gp.get(), pipeline);
+ helper.recordDraw(target, gp.get(), this->pipeline());
}
bool onCombineIfPossible(GrOp* t, const GrCaps& caps) override {
DashOp* that = t->cast<DashOp>();
- if (fProcessorSet != that->fProcessorSet) {
- return false;
- }
- if (fDisallowCombineOnTouchOrOverlap &&
- GrRectsTouchOrOverlap(this->bounds(), that->bounds())) {
+ if (!GrPipeline::CanCombine(*this->pipeline(), this->bounds(), *that->pipeline(),
+ that->bounds(), caps)) {
return false;
}
@@ -693,7 +657,8 @@ private:
return false;
}
- if (fUsesLocalCoords && !this->viewMatrix().cheapEqualTo(that->viewMatrix())) {
+ SkASSERT(this->usesLocalCoords() == that->usesLocalCoords());
+ if (this->usesLocalCoords() && !this->viewMatrix().cheapEqualTo(that->viewMatrix())) {
return false;
}
@@ -703,6 +668,7 @@ private:
}
GrColor color() const { return fColor; }
+ bool usesLocalCoords() const { return fUsesLocalCoords; }
const SkMatrix& viewMatrix() const { return fLines[0].fViewMatrix; }
AAMode aaMode() const { return fAAMode; }
bool fullDash() const { return fFullDash; }
@@ -711,27 +677,21 @@ private:
static const int kVertsPerDash = 4;
static const int kIndicesPerDash = 6;
- SkSTArray<1, LineData, true> fLines;
GrColor fColor;
- bool fAllowsSRGBInputs : 1;
- bool fDisableSRGBOutputConversion : 1;
- bool fDisallowCombineOnTouchOrOverlap : 1;
- bool fUsesLocalCoords : 1;
- SkPaint::Cap fCap : 2;
- bool fFullDash : 1;
+ bool fUsesLocalCoords;
+ SkPaint::Cap fCap;
AAMode fAAMode;
- GrProcessorSet fProcessorSet;
- const GrUserStencilSettings* fStencilSettings;
+ bool fFullDash;
+ SkSTArray<1, LineData, true> fLines;
- typedef GrMeshDrawOp INHERITED;
+ typedef GrLegacyMeshDrawOp INHERITED;
};
-std::unique_ptr<GrDrawOp> GrDashOp::MakeDashLineOp(GrPaint&& paint,
- const SkMatrix& viewMatrix,
- const SkPoint pts[2],
- AAMode aaMode,
- const GrStyle& style,
- const GrUserStencilSettings* stencilSettings) {
+std::unique_ptr<GrLegacyMeshDrawOp> GrDashOp::MakeDashLineOp(GrColor color,
+ const SkMatrix& viewMatrix,
+ const SkPoint pts[2],
+ AAMode aaMode,
+ const GrStyle& style) {
SkASSERT(GrDashOp::CanDrawDashLine(pts, style, viewMatrix));
const SkScalar* intervals = style.dashIntervals();
SkScalar phase = style.dashPhase();
@@ -777,7 +737,7 @@ std::unique_ptr<GrDrawOp> GrDashOp::MakeDashLineOp(GrPaint&& paint,
lineData.fIntervals[0] = intervals[0];
lineData.fIntervals[1] = intervals[1];
- return DashOp::Make(std::move(paint), lineData, cap, aaMode, fullDash, stencilSettings);
+ return DashOp::Make(lineData, color, cap, aaMode, fullDash);
}
//////////////////////////////////////////////////////////////////////////////
@@ -1238,12 +1198,10 @@ static sk_sp<GrGeometryProcessor> make_dash_gp(GrColor color,
#if GR_TEST_UTILS
-GR_DRAW_OP_TEST_DEFINE(DashOp) {
+GR_LEGACY_MESH_DRAW_OP_TEST_DEFINE(DashOp) {
+ GrColor color = GrRandomColor(random);
SkMatrix viewMatrix = GrTest::TestMatrixPreservesRightAngles(random);
- AAMode aaMode;
- do {
- aaMode = static_cast<AAMode>(random->nextULessThan(GrDashOp::kAAModeCnt));
- } while (AAMode::kCoverageWithMSAA == aaMode && GrFSAAType::kUnifiedMSAA != fsaaType);
+ AAMode aaMode = static_cast<AAMode>(random->nextULessThan(GrDashOp::kAAModeCnt));
// We can only dash either horizontal or vertical lines
SkPoint pts[2];
@@ -1308,8 +1266,7 @@ GR_DRAW_OP_TEST_DEFINE(DashOp) {
GrStyle style(p);
- return GrDashOp::MakeDashLineOp(std::move(paint), viewMatrix, pts, aaMode, style,
- GrGetRandomStencil(random, context));
+ return GrDashOp::MakeDashLineOp(color, viewMatrix, pts, aaMode, style);
}
#endif
diff --git a/src/gpu/ops/GrDashOp.h b/src/gpu/ops/GrDashOp.h
index 86ab619926..d3e0b6f9b2 100644
--- a/src/gpu/ops/GrDashOp.h
+++ b/src/gpu/ops/GrDashOp.h
@@ -8,13 +8,12 @@
#ifndef GrDashOp_DEFINED
#define GrDashOp_DEFINED
-#include "GrTypes.h"
+#include "GrColor.h"
+#include "GrTypesPriv.h"
#include "SkPathEffect.h"
-class GrDrawOp;
-class GrPaint;
+class GrLegacyMeshDrawOp;
class GrStyle;
-struct GrUserStencilSettings;
namespace GrDashOp {
enum class AAMode {
@@ -24,9 +23,9 @@ enum class AAMode {
};
static const int kAAModeCnt = static_cast<int>(AAMode::kCoverageWithMSAA) + 1;
-std::unique_ptr<GrDrawOp> MakeDashLineOp(GrPaint&&, const SkMatrix& viewMatrix,
- const SkPoint pts[2], AAMode, const GrStyle& style,
- const GrUserStencilSettings*);
+std::unique_ptr<GrLegacyMeshDrawOp> MakeDashLineOp(GrColor, const SkMatrix& viewMatrix,
+ const SkPoint pts[2], AAMode,
+ const GrStyle& style);
bool CanDrawDashLine(const SkPoint pts[2], const GrStyle& style, const SkMatrix& viewMatrix);
}