We don't use these anywhere downstream except to check for opaqueness.
Change-Id: I897137135d69004ed45c0f4c1e7297183f49fc6d
Reviewed-on: https://skia-review.googlesource.com/8402
Commit-Queue: Brian Salomon <bsalomon@google.com>
Reviewed-by: Greg Daniel <egdaniel@google.com>
return series[0];
}
// Run the through the series, do the invariant output processing, and look for eliminations.
- GrProcOptInfo info(0x0, kNone_GrColorComponentFlags);
+ GrProcOptInfo info;
info.analyzeProcessors(sk_sp_address_as_pointer_address(series), cnt);
SkTArray<sk_sp<GrFragmentProcessor>> replacementSeries;
GrColor4f knownColor;
}
bool GrPaint::internalIsConstantBlendedColor(GrColor paintColor, GrColor* color) const {
- GrProcOptInfo colorProcInfo(paintColor, kRGBA_GrColorComponentFlags);
+ GrProcOptInfo colorProcInfo((GrPipelineInput(paintColor)));
colorProcInfo.analyzeProcessors(
sk_sp_address_as_pointer_address(fColorFragmentProcessors.begin()),
this->numColorFragmentProcessors());
* of a GrPipeline. This is also the GrPrimitiveProcessor color or coverage *output*.
*/
struct GrPipelineInput {
- GrPipelineInput()
- : fValidFlags(kNone_GrColorComponentFlags), fColor(0), fIsLCDCoverage(false) {}
+ enum class Opaque {
+ kNo,
+ kYes,
+ };
- void setKnownFourComponents(GrColor color) {
+ explicit GrPipelineInput(Opaque opaque = Opaque::kNo)
+ : fFlags(opaque == Opaque::kYes ? kIsOpaque_Flag : 0) {}
+
+ explicit GrPipelineInput(GrColor color) : fFlags(kColorIsKnown_Flag), fColor(color) {}
+
+ void setToConstant(GrColor color) {
fColor = color;
- fValidFlags = kRGBA_GrColorComponentFlags;
+ if (GrColorIsOpaque(color)) {
+ fFlags = kColorIsKnown_Flag | kIsOpaque_Flag;
+ } else {
+ fFlags = kColorIsKnown_Flag;
+ }
}
- void setUnknownFourComponents() { fValidFlags = kNone_GrColorComponentFlags; }
+ void setToUnknown() { fFlags = 0; }
+
+ void setToUnknownOpaque() { fFlags = kIsOpaque_Flag; }
- void setUnknownOpaqueFourComponents() {
- fColor = 0xffU << GrColor_SHIFT_A;
- fValidFlags = kA_GrColorComponentFlag;
+ void setToSolidCoverage() {
+ fColor = GrColor_WHITE;
+ fFlags = kColorIsKnown_Flag | kColorIsKnown_Flag;
}
- void setKnownSingleComponent(uint8_t alpha) {
- fColor = GrColorPackRGBA(alpha, alpha, alpha, alpha);
- fValidFlags = kRGBA_GrColorComponentFlags;
+ void setToScalar(uint8_t alpha) {
+ this->setToConstant(GrColorPackRGBA(alpha, alpha, alpha, alpha));
}
- void setUnknownSingleComponent() { fValidFlags = kNone_GrColorComponentFlags; }
+ void setToLCDCoverage() { fFlags = kIsLCDCoverage_Flag; }
- void setUsingLCDCoverage() { fIsLCDCoverage = true; }
+ bool isLCDCoverage() const { return SkToBool(kIsLCDCoverage_Flag & fFlags); }
+
+ bool isOpaque() const { return SkToBool(kIsOpaque_Flag & fFlags); }
+
+ bool isConstant(GrColor* color) const {
+ if (kColorIsKnown_Flag & fFlags) {
+ *color = fColor;
+ return true;
+ }
+ return false;
+ }
- GrColorComponentFlags fValidFlags;
+private:
+ enum Flags {
+ kColorIsKnown_Flag = 0x1,
+ kIsOpaque_Flag = 0x2,
+ kIsLCDCoverage_Flag = 0x4,
+ };
+ uint32_t fFlags;
GrColor fColor;
- bool fIsLCDCoverage;
};
#endif
*/
class GrProcOptInfo {
public:
- GrProcOptInfo() { this->reset(0, kNone_GrColorComponentFlags); }
+ GrProcOptInfo() = default;
- GrProcOptInfo(GrColor color, GrColorComponentFlags colorFlags) {
- this->reset(color, colorFlags);
- }
-
- void resetToLCDCoverage(GrColor color, GrColorComponentFlags colorFlags) {
- this->internalReset(color, colorFlags, true);
+ GrProcOptInfo(const GrPipelineInput& input) : GrProcOptInfo() {
+ fIsLCDCoverage = input.isLCDCoverage();
+ fIsOpaque = input.isOpaque();
+ GrColor color;
+ if (input.isConstant(&color)) {
+ fLastKnownOutputColor = GrColor4f::FromGrColor(color);
+ fProcessorsVisitedWithKnownOutput = 0;
+ }
}
- void reset(GrColor color, GrColorComponentFlags colorFlags) {
- this->internalReset(color, colorFlags, false);
+ void resetToLCDCoverage() {
+ *this = GrProcOptInfo();
+ fIsLCDCoverage = true;
}
- void reset(const GrPipelineInput& input) {
- this->internalReset(input.fColor, input.fValidFlags, input.fIsLCDCoverage);
- }
+ void reset(const GrPipelineInput& input) { *this = GrProcOptInfo(input); }
/**
* Runs through a series of processors and updates calculated values. This can be called
}
private:
- void internalReset(GrColor color, GrColorComponentFlags colorFlags, bool isLCDCoverage) {
- fTotalProcessorsVisited = 0;
- fIsLCDCoverage = isLCDCoverage;
- fIsOpaque = (kA_GrColorComponentFlag & colorFlags) && GrColorIsOpaque(color);
- fAllProcessorsModulatePremul = true;
- if (kRGBA_GrColorComponentFlags == colorFlags) {
- fProcessorsVisitedWithKnownOutput = 0;
- fLastKnownOutputColor = GrColor4f::FromGrColor(color);
- } else {
- // -1 so that we know that even without adding processors that the color is not known.
- fProcessorsVisitedWithKnownOutput = -1;
- }
- }
-
- int fTotalProcessorsVisited;
- int fProcessorsVisitedWithKnownOutput;
- bool fIsLCDCoverage;
- bool fIsOpaque;
- bool fAllProcessorsModulatePremul;
+ int fTotalProcessorsVisited = 0;
+ // negative one means even the color is unknown before adding the first processor.
+ int fProcessorsVisitedWithKnownOutput = -1;
+ bool fIsLCDCoverage = false;
+ bool fIsOpaque = false;
+ bool fAllProcessorsModulatePremul = true;
GrColor4f fLastKnownOutputColor;
};
}
void InstancedRendering::Op::getPipelineAnalysisInput(GrPipelineAnalysisDrawOpInput* input) const {
- input->pipelineColorInput()->setKnownFourComponents(this->getSingleInstance().fColor);
+ input->pipelineColorInput()->setToConstant(this->getSingleInstance().fColor);
if (AntialiasMode::kCoverage == fInfo.fAntialiasMode ||
(AntialiasMode::kNone == fInfo.fAntialiasMode &&
!fInfo.isSimpleRects() && fInfo.fCannotDiscard)) {
- input->pipelineCoverageInput()->setUnknownSingleComponent();
+ input->pipelineCoverageInput()->setToUnknown();
} else {
- input->pipelineCoverageInput()->setKnownSingleComponent(255);
+ input->pipelineCoverageInput()->setToSolidCoverage();
}
}
}
void getPipelineAnalysisInput(GrPipelineAnalysisDrawOpInput* input) const override {
- input->pipelineColorInput()->setKnownFourComponents(fColor);
- input->pipelineCoverageInput()->setUnknownSingleComponent();
+ input->pipelineColorInput()->setToConstant(fColor);
+ input->pipelineCoverageInput()->setToUnknown();
}
void applyPipelineOptimizations(const GrPipelineOptimizations& optimizations) override {
}
void getPipelineAnalysisInput(GrPipelineAnalysisDrawOpInput* input) const override {
- input->pipelineColorInput()->setKnownFourComponents(fShapes[0].fColor);
- input->pipelineCoverageInput()->setUnknownSingleComponent();
+ input->pipelineColorInput()->setToConstant(fShapes[0].fColor);
+ input->pipelineCoverageInput()->setToUnknown();
}
void applyPipelineOptimizations(const GrPipelineOptimizations& optimizations) override {
private:
void getPipelineAnalysisInput(GrPipelineAnalysisDrawOpInput* input) const override {
- input->pipelineColorInput()->setKnownFourComponents(this->first()->color());
- input->pipelineCoverageInput()->setUnknownSingleComponent();
+ input->pipelineColorInput()->setToConstant(this->first()->color());
+ input->pipelineCoverageInput()->setToUnknown();
}
void onPrepareDraws(Target* target) const override {
}
void getPipelineAnalysisInput(GrPipelineAnalysisDrawOpInput* input) const override {
- input->pipelineColorInput()->setKnownFourComponents(fColor);
- input->pipelineCoverageInput()->setUnknownSingleComponent();
+ input->pipelineColorInput()->setToConstant(fColor);
+ input->pipelineCoverageInput()->setToUnknown();
}
void applyPipelineOptimizations(const GrPipelineOptimizations& optimizations) override {
}
void getPipelineAnalysisInput(GrPipelineAnalysisDrawOpInput* input) const override {
- input->pipelineColorInput()->setKnownFourComponents(fPaths[0].fColor);
- input->pipelineCoverageInput()->setUnknownSingleComponent();
+ input->pipelineColorInput()->setToConstant(fPaths[0].fColor);
+ input->pipelineCoverageInput()->setToUnknown();
}
void applyPipelineOptimizations(const GrPipelineOptimizations& optimizations) override {
AAStrokeRectOp() : INHERITED(ClassID()) {}
void getPipelineAnalysisInput(GrPipelineAnalysisDrawOpInput* input) const override {
- input->pipelineColorInput()->setKnownFourComponents(fRects[0].fColor);
- input->pipelineCoverageInput()->setUnknownSingleComponent();
+ input->pipelineColorInput()->setToConstant(fRects[0].fColor);
+ input->pipelineCoverageInput()->setToUnknown();
}
void applyPipelineOptimizations(const GrPipelineOptimizations&) override;
void onPrepareDraws(Target*) const override;
private:
void getPipelineAnalysisInput(GrPipelineAnalysisDrawOpInput* input) const override {
- input->pipelineColorInput()->setKnownFourComponents(fGeoData[0].fColor);
- input->pipelineCoverageInput()->setUnknownSingleComponent();
+ input->pipelineColorInput()->setToConstant(fGeoData[0].fColor);
+ input->pipelineCoverageInput()->setToUnknown();
}
void applyPipelineOptimizations(const GrPipelineOptimizations& optimizations) override {
void GrAtlasTextOp::getPipelineAnalysisInput(GrPipelineAnalysisDrawOpInput* input) const {
if (kColorBitmapMask_MaskType == fMaskType) {
- input->pipelineColorInput()->setUnknownFourComponents();
+ input->pipelineColorInput()->setToUnknown();
} else {
- input->pipelineColorInput()->setKnownFourComponents(fColor);
+ input->pipelineColorInput()->setToConstant(fColor);
}
switch (fMaskType) {
case kGrayscaleDistanceField_MaskType:
case kGrayscaleCoverageMask_MaskType:
- input->pipelineCoverageInput()->setUnknownSingleComponent();
+ input->pipelineCoverageInput()->setToUnknown();
break;
case kLCDCoverageMask_MaskType:
case kLCDDistanceField_MaskType:
- input->pipelineCoverageInput()->setUnknownOpaqueFourComponents();
- input->pipelineCoverageInput()->setUsingLCDCoverage();
+ input->pipelineCoverageInput()->setToLCDCoverage();
break;
case kColorBitmapMask_MaskType:
- input->pipelineCoverageInput()->setKnownSingleComponent(0xff);
+ input->pipelineCoverageInput()->setToSolidCoverage();
}
}
}
void getPipelineAnalysisInput(GrPipelineAnalysisDrawOpInput* input) const override {
- input->pipelineColorInput()->setKnownFourComponents(fColor);
- input->pipelineCoverageInput()->setUnknownSingleComponent();
+ input->pipelineColorInput()->setToConstant(fColor);
+ input->pipelineCoverageInput()->setToUnknown();
}
void applyPipelineOptimizations(const GrPipelineOptimizations& optimizations) override {
}
void getPipelineAnalysisInput(GrPipelineAnalysisDrawOpInput* input) const override {
- input->pipelineColorInput()->setKnownFourComponents(fColor);
- input->pipelineCoverageInput()->setKnownSingleComponent(this->coverage());
+ input->pipelineColorInput()->setToConstant(fColor);
+ input->pipelineCoverageInput()->setToScalar(this->coverage());
}
void applyPipelineOptimizations(const GrPipelineOptimizations& optimizations) override {
void getPipelineAnalysisInput(GrPipelineAnalysisDrawOpInput* input) const override {
if (this->hasColors()) {
- input->pipelineColorInput()->setUnknownFourComponents();
+ input->pipelineColorInput()->setToUnknown();
} else {
- input->pipelineColorInput()->setKnownFourComponents(fGeoData[0].fColor);
+ input->pipelineColorInput()->setToConstant(fGeoData[0].fColor);
}
- input->pipelineCoverageInput()->setKnownSingleComponent(0xff);
+ input->pipelineCoverageInput()->setToSolidCoverage();
}
void onPrepareDraws(Target*) const override;
private:
void getPipelineAnalysisInput(GrPipelineAnalysisDrawOpInput* input) const override {
- input->pipelineColorInput()->setKnownFourComponents(fColor);
- input->pipelineCoverageInput()->setKnownSingleComponent(0xFF);
+ input->pipelineColorInput()->setToConstant(fColor);
+ input->pipelineCoverageInput()->setToSolidCoverage();
}
void applyPipelineOptimizations(const GrPipelineOptimizations& optimizations) override {
void GrDrawVerticesOp::getPipelineAnalysisInput(GrPipelineAnalysisDrawOpInput* input) const {
if (this->requiresPerVertexColors()) {
- input->pipelineColorInput()->setUnknownFourComponents();
+ input->pipelineColorInput()->setToUnknown();
} else {
- input->pipelineColorInput()->setKnownFourComponents(fMeshes[0].fColor);
+ input->pipelineColorInput()->setToConstant(fMeshes[0].fColor);
}
- input->pipelineCoverageInput()->setKnownSingleComponent(0xff);
+ input->pipelineCoverageInput()->setToSolidCoverage();
}
void GrDrawVerticesOp::applyPipelineOptimizations(const GrPipelineOptimizations& optimizations) {
private:
void getPipelineAnalysisInput(GrPipelineAnalysisDrawOpInput* input) const override {
- input->pipelineColorInput()->setUnknownFourComponents();
- input->pipelineCoverageInput()->setKnownSingleComponent(0xff);
+ input->pipelineColorInput()->setToUnknown();
+ input->pipelineCoverageInput()->setToSolidCoverage();
}
void applyPipelineOptimizations(const GrPipelineOptimizations& analysioptimizations) override {
}
void getPipelineAnalysisInput(GrPipelineAnalysisDrawOpInput* input) const override {
- input->pipelineColorInput()->setKnownFourComponents(fPaths[0].fColor);
- input->pipelineCoverageInput()->setKnownSingleComponent(0xff);
+ input->pipelineColorInput()->setToConstant(fPaths[0].fColor);
+ input->pipelineCoverageInput()->setToSolidCoverage();
}
void applyPipelineOptimizations(const GrPipelineOptimizations& optimizations) override {
NonAAFillRectOp() : INHERITED(ClassID()) {}
void getPipelineAnalysisInput(GrPipelineAnalysisDrawOpInput* input) const override {
- input->pipelineColorInput()->setKnownFourComponents(fRects[0].fColor);
- input->pipelineCoverageInput()->setKnownSingleComponent(0xff);
+ input->pipelineColorInput()->setToConstant(fRects[0].fColor);
+ input->pipelineCoverageInput()->setToSolidCoverage();
}
void applyPipelineOptimizations(const GrPipelineOptimizations& optimizations) override {
NonAAFillRectPerspectiveOp() : INHERITED(ClassID()) {}
void getPipelineAnalysisInput(GrPipelineAnalysisDrawOpInput* input) const override {
- input->pipelineColorInput()->setKnownFourComponents(fRects[0].fColor);
- input->pipelineCoverageInput()->setKnownSingleComponent(0xff);
+ input->pipelineColorInput()->setToConstant(fRects[0].fColor);
+ input->pipelineCoverageInput()->setToSolidCoverage();
}
void applyPipelineOptimizations(const GrPipelineOptimizations& optimizations) override {
NonAAStrokeRectOp() : INHERITED(ClassID()) {}
void getPipelineAnalysisInput(GrPipelineAnalysisDrawOpInput* input) const override {
- input->pipelineColorInput()->setKnownFourComponents(fColor);
- input->pipelineCoverageInput()->setKnownSingleComponent(0xFF);
+ input->pipelineColorInput()->setToConstant(fColor);
+ input->pipelineCoverageInput()->setToSolidCoverage();
}
void onPrepareDraws(Target* target) const override {
CircleOp() : INHERITED(ClassID()) {}
void getPipelineAnalysisInput(GrPipelineAnalysisDrawOpInput* input) const override {
- input->pipelineColorInput()->setKnownFourComponents(fGeoData[0].fColor);
- input->pipelineCoverageInput()->setUnknownSingleComponent();
+ input->pipelineColorInput()->setToConstant(fGeoData[0].fColor);
+ input->pipelineCoverageInput()->setToUnknown();
}
void applyPipelineOptimizations(const GrPipelineOptimizations& optimizations) override {
EllipseOp() : INHERITED(ClassID()) {}
void getPipelineAnalysisInput(GrPipelineAnalysisDrawOpInput* input) const override {
- input->pipelineColorInput()->setKnownFourComponents(fGeoData[0].fColor);
- input->pipelineCoverageInput()->setUnknownSingleComponent();
+ input->pipelineColorInput()->setToConstant(fGeoData[0].fColor);
+ input->pipelineCoverageInput()->setToUnknown();
}
void applyPipelineOptimizations(const GrPipelineOptimizations& optimizations) override {
DIEllipseOp() : INHERITED(ClassID()) {}
void getPipelineAnalysisInput(GrPipelineAnalysisDrawOpInput* input) const override {
- input->pipelineColorInput()->setKnownFourComponents(fGeoData[0].fColor);
- input->pipelineCoverageInput()->setUnknownSingleComponent();
+ input->pipelineColorInput()->setToConstant(fGeoData[0].fColor);
+ input->pipelineCoverageInput()->setToUnknown();
}
void applyPipelineOptimizations(const GrPipelineOptimizations& optimizations) override {
private:
void getPipelineAnalysisInput(GrPipelineAnalysisDrawOpInput* input) const override {
- input->pipelineColorInput()->setKnownFourComponents(fGeoData[0].fColor);
- input->pipelineCoverageInput()->setUnknownSingleComponent();
+ input->pipelineColorInput()->setToConstant(fGeoData[0].fColor);
+ input->pipelineCoverageInput()->setToUnknown();
}
void applyPipelineOptimizations(const GrPipelineOptimizations& optimizations) override {
EllipticalRRectOp() : INHERITED(ClassID()) {}
void getPipelineAnalysisInput(GrPipelineAnalysisDrawOpInput* input) const override {
- input->pipelineColorInput()->setKnownFourComponents(fGeoData[0].fColor);
- input->pipelineCoverageInput()->setUnknownSingleComponent();
+ input->pipelineColorInput()->setToConstant(fGeoData[0].fColor);
+ input->pipelineCoverageInput()->setToUnknown();
}
void applyPipelineOptimizations(const GrPipelineOptimizations& optimizations) override {
}
void getPipelineAnalysisInput(GrPipelineAnalysisDrawOpInput* input) const override {
- input->pipelineColorInput()->setKnownFourComponents(fColor);
- input->pipelineCoverageInput()->setUnknownSingleComponent();
+ input->pipelineColorInput()->setToConstant(fColor);
+ input->pipelineCoverageInput()->setToUnknown();
input->setUsesPLSDstRead();
}
private:
void getPipelineAnalysisInput(GrPipelineAnalysisDrawOpInput* input) const override {
- input->pipelineColorInput()->setKnownFourComponents(fRegions[0].fColor);
- input->pipelineCoverageInput()->setKnownSingleComponent(0xff);
+ input->pipelineColorInput()->setToConstant(fRegions[0].fColor);
+ input->pipelineCoverageInput()->setToSolidCoverage();
}
void applyPipelineOptimizations(const GrPipelineOptimizations& optimizations) override {
ShadowCircleOp() : INHERITED(ClassID()) {}
void getPipelineAnalysisInput(GrPipelineAnalysisDrawOpInput* input) const override {
- input->pipelineColorInput()->setKnownFourComponents(fCircles[0].fColor);
- input->pipelineCoverageInput()->setUnknownSingleComponent();
+ input->pipelineColorInput()->setToConstant(fCircles[0].fColor);
+ input->pipelineCoverageInput()->setToUnknown();
}
void applyPipelineOptimizations(const GrPipelineOptimizations& optimizations) override {
private:
void getPipelineAnalysisInput(GrPipelineAnalysisDrawOpInput* input) const override {
- input->pipelineColorInput()->setKnownFourComponents(fGeoData[0].fColor);
- input->pipelineCoverageInput()->setUnknownSingleComponent();
+ input->pipelineColorInput()->setToConstant(fGeoData[0].fColor);
+ input->pipelineCoverageInput()->setToUnknown();
}
void applyPipelineOptimizations(const GrPipelineOptimizations& optimizations) override {
private:
void getPipelineAnalysisInput(GrPipelineAnalysisDrawOpInput* input) const override {
- input->pipelineColorInput()->setKnownFourComponents(fColor);
- input->pipelineCoverageInput()->setUnknownSingleComponent();
+ input->pipelineColorInput()->setToConstant(fColor);
+ input->pipelineCoverageInput()->setToUnknown();
}
void applyPipelineOptimizations(const GrPipelineOptimizations& optimizations) override {
private:
void getPipelineAnalysisInput(GrPipelineAnalysisDrawOpInput* input) const override {
- input->pipelineColorInput()->setKnownFourComponents(fColor);
- input->pipelineCoverageInput()->setUnknownSingleComponent();
+ input->pipelineColorInput()->setToConstant(fColor);
+ input->pipelineCoverageInput()->setToUnknown();
}
void applyPipelineOptimizations(const GrPipelineOptimizations& optimizations) override {
static void test_lcd_coverage(skiatest::Reporter* reporter, const GrCaps& caps) {
GrPipelineAnalysis analysis;
- analysis.fColorPOI.reset(0, kNone_GrColorComponentFlags);
// Setting the last argument to true will force covPOI to LCD coverage.
- analysis.fCoveragePOI.resetToLCDCoverage(0, kNone_GrColorComponentFlags);
+ analysis.fCoveragePOI.resetToLCDCoverage();
SkASSERT(!analysis.fColorPOI.isOpaque());
SkASSERT(!analysis.fColorPOI.isSolidWhite());
}
static void test_color_unknown_with_coverage(skiatest::Reporter* reporter, const GrCaps& caps) {
GrPipelineAnalysis analysis;
- analysis.fColorPOI.reset(0, kNone_GrColorComponentFlags);
- analysis.fCoveragePOI.reset(0, kNone_GrColorComponentFlags);
SkASSERT(!analysis.fColorPOI.isOpaque());
SkASSERT(!analysis.fColorPOI.isSolidWhite());
static void test_color_unknown_no_coverage(skiatest::Reporter* reporter, const GrCaps& caps) {
GrPipelineAnalysis analysis;
- analysis.fColorPOI.reset(GrColorPackRGBA(229, 0, 154, 240), kRGBA_GrColorComponentFlags);
- analysis.fCoveragePOI.reset(GrColorPackA4(255), kRGBA_GrColorComponentFlags);
+ analysis.fColorPOI.reset(GrPipelineInput(GrColorPackRGBA(229, 0, 154, 240)));
+ analysis.fCoveragePOI.reset(GrPipelineInput(GrColorPackA4(255)));
SkASSERT(!analysis.fColorPOI.isOpaque());
SkASSERT(!analysis.fColorPOI.isSolidWhite());
static void test_color_opaque_with_coverage(skiatest::Reporter* reporter, const GrCaps& caps) {
GrPipelineAnalysis analysis;
- analysis.fColorPOI.reset(GrColorPackA4(255), kA_GrColorComponentFlag);
- analysis.fCoveragePOI.reset(0, kNone_GrColorComponentFlags);
+ analysis.fColorPOI.reset(GrPipelineInput(GrPipelineInput::Opaque::kYes));
SkASSERT(analysis.fColorPOI.isOpaque());
SkASSERT(!analysis.fColorPOI.isSolidWhite());
static void test_color_opaque_no_coverage(skiatest::Reporter* reporter, const GrCaps& caps) {
GrPipelineAnalysis analysis;
- analysis.fColorPOI.reset(GrColorPackRGBA(0, 82, 0, 255),
- kG_GrColorComponentFlag | kA_GrColorComponentFlag);
- analysis.fCoveragePOI.reset(GrColorPackA4(255), kRGBA_GrColorComponentFlags);
+ analysis.fColorPOI.reset(GrPipelineInput(GrPipelineInput::Opaque::kYes));
+ analysis.fCoveragePOI.reset(GrPipelineInput(GrColorPackA4(255)));
SkASSERT(analysis.fColorPOI.isOpaque());
SkASSERT(!analysis.fColorPOI.isSolidWhite());
break;
case SkBlendMode::kSrc:
TEST_ASSERT(!xpi.fReadsDst);
- // We don't really track per-component blended output anymore.
TEST_ASSERT(!xpi.fHasConstantPreCoverageBlendedColor);
TEST_ASSERT(kNone_OptFlags == xpi.fOptFlags);
TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
private:
void getPipelineAnalysisInput(GrPipelineAnalysisDrawOpInput* input) const override {
- input->pipelineColorInput()->setKnownFourComponents(GrColorPackRGBA(123, 45, 67, 221));
- input->pipelineCoverageInput()->setUnknownFourComponents();
- input->pipelineCoverageInput()->setUsingLCDCoverage();
+ input->pipelineColorInput()->setToConstant(GrColorPackRGBA(123, 45, 67, 221));
+ input->pipelineCoverageInput()->setToLCDCoverage();
}
void applyPipelineOptimizations(const GrPipelineOptimizations&) override {}
fakeDstTexture.setTexture(
ctx->textureProvider()->wrapBackendTexture(fakeDesc, kBorrow_GrWrapOwnership));
- static const GrColor testColors[] = {
- 0,
- GrColorPackRGBA(0, 82, 0, 255),
- GrColorPackA4(255)
- };
- static const GrColorComponentFlags testColorFlags[] = {
- kNone_GrColorComponentFlags,
- kG_GrColorComponentFlag | kA_GrColorComponentFlag,
- kRGBA_GrColorComponentFlags
- };
- GR_STATIC_ASSERT(SK_ARRAY_COUNT(testColors) == SK_ARRAY_COUNT(testColorFlags));
+ static const GrPipelineInput colorInputs[] = {GrPipelineInput(),
+ GrPipelineInput(GrPipelineInput::Opaque::kYes),
+ GrPipelineInput(GrColorPackRGBA(0, 82, 17, 100)),
+ GrPipelineInput(GrColorPackRGBA(0, 82, 17, 255))};
- for (size_t c = 0; c < SK_ARRAY_COUNT(testColors); c++) {
+ for (const auto& colorInput : colorInputs) {
GrPipelineAnalysis analysis;
- analysis.fColorPOI.reset(testColors[c], testColorFlags[c]);
- for (int f = 0; f <= 1; f++) {
- if (!f) {
- analysis.fCoveragePOI.reset(0, kNone_GrColorComponentFlags);
- } else {
- analysis.fCoveragePOI.reset(GrColorPackA4(255), kRGBA_GrColorComponentFlags);
+ analysis.fColorPOI = colorInput;
+ for (bool fractionalCoverage : {true, false}) {
+ if (!fractionalCoverage) {
+ analysis.fCoveragePOI.reset(GrPipelineInput(GrColorPackA4(255)));
}
for (int m = 0; m <= (int)SkBlendMode::kLastCoeffMode; m++) {
SkBlendMode xfermode = static_cast<SkBlendMode>(m);
}
void getPipelineAnalysisInput(GrPipelineAnalysisDrawOpInput* input) const override {
- input->pipelineColorInput()->setUnknownFourComponents();
- input->pipelineCoverageInput()->setUnknownSingleComponent();
+ input->pipelineColorInput()->setToUnknown();
+ input->pipelineCoverageInput()->setToUnknown();
}
void applyPipelineOptimizations(const GrPipelineOptimizations&) override {}