Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(19)

Unified Diff: include/gpu/GrProcessor.h

Issue 656503002: Move willUseInputColor check to computeInvariantOutput (Closed) Base URL: https://skia.googlesource.com/skia.git@addMultFlag
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « include/gpu/GrPaint.h ('k') | src/core/SkXfermode.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: include/gpu/GrProcessor.h
diff --git a/include/gpu/GrProcessor.h b/include/gpu/GrProcessor.h
index a8188ca043b932ac0ae21fdee2390d175ab4d4c5..1754f2d0156bd3f39ae17998cc39b30b9c971b82 100644
--- a/include/gpu/GrProcessor.h
+++ b/include/gpu/GrProcessor.h
@@ -39,7 +39,12 @@ public:
struct InvariantOutput{
InvariantOutput() : fColor(0), fValidFlags(0), fIsSingleComponent(false),
- fNonMulStageFound(false) {}
+ fNonMulStageFound(false), fWillUseInputColor(true) {}
+
+ enum ReadInput {
+ kWill_ReadInput,
+ kWillNot_ReadInput,
+ };
void mulByUnknownOpaqueColor() {
if (this->isOpaque()) {
@@ -69,26 +74,38 @@ public:
}
}
- void invalidateComponents(uint8_t invalidateFlags) {
+ void invalidateComponents(uint8_t invalidateFlags, ReadInput readsInput) {
fValidFlags &= ~invalidateFlags;
fIsSingleComponent = false;
+ if (kWillNot_ReadInput == readsInput) {
+ fWillUseInputColor = false;
+ }
}
- void setToTransparentBlack() {
+ void setToTransparentBlack(ReadInput readsInput) {
bsalomon 2014/10/15 14:52:42 Does this one need it? Aren't we going to omit the
egdaniel 2014/10/15 18:37:48 Changed function to be mulByKnownAlpha to clear up
this->internalSetToTransparentBlack();
fNonMulStageFound = true;
+ if (kWillNot_ReadInput == readsInput) {
+ fWillUseInputColor = false;
+ }
}
- void setToOther(uint8_t validFlags, GrColor color) {
+ void setToOther(uint8_t validFlags, GrColor color, ReadInput readsInput) {
fValidFlags = validFlags;
fColor = color;
fIsSingleComponent = false;
fNonMulStageFound = true;
+ if (kWillNot_ReadInput == readsInput) {
+ fWillUseInputColor = false;
+ }
}
- void setToUnknown() {
+ void setToUnknown(ReadInput readsInput) {
this->internalSetToUnknown();
fNonMulStageFound= true;
+ if (kWillNot_ReadInput == readsInput) {
+ fWillUseInputColor = false;
+ }
}
bool isOpaque() const {
@@ -136,11 +153,13 @@ public:
friend class GrDrawState;
friend class GrOptDrawState;
friend class GrPaint;
+ friend class GrProcessor;
GrColor fColor;
uint32_t fValidFlags;
bool fIsSingleComponent;
bool fNonMulStageFound;
+ bool fWillUseInputColor;
};
/**
@@ -152,6 +171,7 @@ public:
* meaning if the corresponding bit in validFlags is set.
*/
void computeInvariantOutput(InvariantOutput* inout) const {
+ inout->fWillUseInputColor = true;
this->onComputeInvariantOutput(inout);
#ifdef SK_DEBUG
inout->validate();
@@ -269,8 +289,7 @@ class GrFragmentProcessor : public GrProcessor {
public:
GrFragmentProcessor()
: INHERITED()
- , fWillReadDstColor(false)
- , fWillUseInputColor(true) {}
+ , fWillReadDstColor(false) {}
virtual const GrBackendFragmentProcessorFactory& getFactory() const = 0;
@@ -283,9 +302,6 @@ public:
/** Will this effect read the destination pixel value? */
bool willReadDstColor() const { return fWillReadDstColor; }
- /** Will this effect read the source color value? */
- bool willUseInputColor() const { return fWillUseInputColor; }
-
protected:
/**
* Fragment Processor subclasses call this from their constructor to register coordinate
@@ -304,17 +320,9 @@ protected:
*/
void setWillReadDstColor() { fWillReadDstColor = true; }
- /**
- * If the effect will generate a result that does not depend on the input color value then it
- * must call this function from its constructor. Otherwise, when its generated backend-specific
- * code might fail during variable binding due to unused variables.
- */
- void setWillNotUseInputColor() { fWillUseInputColor = false; }
-
private:
SkSTArray<4, const GrCoordTransform*, true> fCoordTransforms;
bool fWillReadDstColor;
- bool fWillUseInputColor;
typedef GrProcessor INHERITED;
};
« no previous file with comments | « include/gpu/GrPaint.h ('k') | src/core/SkXfermode.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698