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

Side by Side Diff: src/gpu/GrDrawState.h

Issue 791743003: Remove GP from drawstate, revision of invariant output for GP (Closed) Base URL: https://skia.googlesource.com/skia.git@color-to-gp
Patch Set: cleanup Created 6 years 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright 2011 Google Inc. 2 * Copyright 2011 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #ifndef GrDrawState_DEFINED 8 #ifndef GrDrawState_DEFINED
9 #define GrDrawState_DEFINED 9 #define GrDrawState_DEFINED
10 10
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
61 void reset(const SkMatrix& initialViewMatrix) { this->onReset(&initialViewMa trix); } 61 void reset(const SkMatrix& initialViewMatrix) { this->onReset(&initialViewMa trix); }
62 62
63 /** 63 /**
64 * Initializes the GrDrawState based on a GrPaint, view matrix and render ta rget. Note that 64 * Initializes the GrDrawState based on a GrPaint, view matrix and render ta rget. Note that
65 * GrDrawState encompasses more than GrPaint. Aspects of GrDrawState that ha ve no GrPaint 65 * GrDrawState encompasses more than GrPaint. Aspects of GrDrawState that ha ve no GrPaint
66 * equivalents are set to default values with the exception of vertex attrib ute state which 66 * equivalents are set to default values with the exception of vertex attrib ute state which
67 * is unmodified by this function and clipping which will be enabled. 67 * is unmodified by this function and clipping which will be enabled.
68 */ 68 */
69 void setFromPaint(const GrPaint& , const SkMatrix& viewMatrix, GrRenderTarge t*); 69 void setFromPaint(const GrPaint& , const SkMatrix& viewMatrix, GrRenderTarge t*);
70 70
71 ///////////////////////////////////////////////////////////////////////////
72 /// @name Vertex Attributes
73 ////
74
75 // TODO when we move this info off of GrGeometryProcessor, delete these
76 bool hasLocalCoordAttribute() const {
77 return this->hasGeometryProcessor() && this->getGeometryProcessor()->has LocalCoords();
78 }
79 bool hasColorVertexAttribute() const {
80 return this->hasGeometryProcessor() && this->getGeometryProcessor()->has VertexColor();
81 }
82 bool hasCoverageVertexAttribute() const {
83 return this->hasGeometryProcessor() && this->getGeometryProcessor()->has VertexCoverage();
84 }
85
86 /// @} 71 /// @}
87 72
88 /** 73 /**
89 * Depending on features available in the underlying 3D API and the color bl end mode requested 74 * Depending on features available in the underlying 3D API and the color bl end mode requested
90 * it may or may not be possible to correctly blend with fractional pixel co verage generated by 75 * it may or may not be possible to correctly blend with fractional pixel co verage generated by
91 * the fragment shader. 76 * the fragment shader.
92 * 77 *
93 * This function considers the current draw state and the draw target's capa bilities to 78 * This function considers the current draw state and the draw target's capa bilities to
94 * determine whether coverage can be handled correctly. This function assume s that the caller 79 * determine whether coverage can be handled correctly. This function assume s that the caller
95 * intends to specify fractional pixel coverage via a primitive processor bu t may not have 80 * intends to specify fractional pixel coverage via a primitive processor bu t may not have
96 * specified it yet. 81 * specified it yet.
97 */ 82 */
98 bool canUseFracCoveragePrimProc(GrColor color, const GrDrawTargetCaps& caps) const; 83 bool canUseFracCoveragePrimProc(GrColor color, const GrDrawTargetCaps& caps) const;
99 84
100 /** 85 /**
101 * Determines whether the output coverage is guaranteed to be one for all pi xels hit by a draw. 86 * Determines whether the output coverage is guaranteed to be one for all pi xels hit by a draw.
102 */ 87 */
103 bool hasSolidCoverage(GrColor coverage) const; 88 bool hasSolidCoverage(const GrPrimitiveProcessor*) const;
104 89
105 /** 90 /**
106 * This function returns true if the render target destination pixel values will be read for 91 * This function returns true if the render target destination pixel values will be read for
107 * blending during draw. 92 * blending during draw.
108 */ 93 */
109 bool willBlendWithDst(GrColor color, GrColor coverage) const; 94 bool willBlendWithDst(const GrPrimitiveProcessor*) const;
110
111 /// @}
112
113 /**
114 * The geometry processor is the sole element of the skia pipeline which can use the vertex,
115 * geometry, and tesselation shaders. The GP may also compute a coverage in its fragment shader
116 * but is never put in the color processing pipeline.
117 */
118
119 const GrGeometryProcessor* setGeometryProcessor(const GrGeometryProcessor* g eometryProcessor) {
120 SkASSERT(geometryProcessor);
121 SkASSERT(!this->hasGeometryProcessor());
122 fGeometryProcessor.reset(SkRef(geometryProcessor));
123 fCoverageProcInfoValid = false;
124 return geometryProcessor;
125 }
126 95
127 /////////////////////////////////////////////////////////////////////////// 96 ///////////////////////////////////////////////////////////////////////////
128 /// @name Effect Stages 97 /// @name Effect Stages
129 /// Each stage hosts a GrProcessor. The effect produces an output color or c overage in the 98 /// Each stage hosts a GrProcessor. The effect produces an output color or c overage in the
130 /// fragment shader. Its inputs are the output from the previous stage as we ll as some variables 99 /// fragment shader. Its inputs are the output from the previous stage as we ll as some variables
131 /// available to it in the fragment and vertex shader (e.g. the vertex posit ion, the dst color, 100 /// available to it in the fragment and vertex shader (e.g. the vertex posit ion, the dst color,
132 /// the fragment position, local coordinates). 101 /// the fragment position, local coordinates).
133 /// 102 ///
134 /// The stages are divided into two sets, color-computing and coverage-compu ting. The final 103 /// The stages are divided into two sets, color-computing and coverage-compu ting. The final
135 /// color stage produces the final pixel color. The coverage-computing stage s function exactly 104 /// color stage produces the final pixel color. The coverage-computing stage s function exactly
136 /// as the color-computing but the output of the final coverage stage is tre ated as a fractional 105 /// as the color-computing but the output of the final coverage stage is tre ated as a fractional
137 /// pixel coverage rather than as input to the src/dst color blend step. 106 /// pixel coverage rather than as input to the src/dst color blend step.
138 /// 107 ///
139 /// The input color to the first color-stage is either the constant color or interpolated 108 /// The input color to the first color-stage is either the constant color or interpolated
140 /// per-vertex colors. The input to the first coverage stage is either a con stant coverage 109 /// per-vertex colors. The input to the first coverage stage is either a con stant coverage
141 /// (usually full-coverage) or interpolated per-vertex coverage. 110 /// (usually full-coverage) or interpolated per-vertex coverage.
142 /// 111 ///
143 /// See the documentation of kCoverageDrawing_StateBit for information about disabling the 112 /// See the documentation of kCoverageDrawing_StateBit for information about disabling the
144 /// the color / coverage distinction. 113 /// the color / coverage distinction.
145 //// 114 ////
146 115
147 int numColorStages() const { return fColorStages.count(); } 116 int numColorStages() const { return fColorStages.count(); }
148 int numCoverageStages() const { return fCoverageStages.count(); } 117 int numCoverageStages() const { return fCoverageStages.count(); }
149 int numFragmentStages() const { return this->numColorStages() + this->numCov erageStages(); } 118 int numFragmentStages() const { return this->numColorStages() + this->numCov erageStages(); }
150 int numTotalStages() const {
151 return this->numFragmentStages() + (this->hasGeometryProcessor() ? 1 : 0);
152 }
153
154 bool hasGeometryProcessor() const { return SkToBool(fGeometryProcessor.get() ); }
155 const GrGeometryProcessor* getGeometryProcessor() const { return fGeometryPr ocessor.get(); }
156 119
157 const GrXPFactory* getXPFactory() const { return fXPFactory.get(); } 120 const GrXPFactory* getXPFactory() const { return fXPFactory.get(); }
158 121
159 const GrFragmentStage& getColorStage(int idx) const { return fColorStages[id x]; } 122 const GrFragmentStage& getColorStage(int idx) const { return fColorStages[id x]; }
160 const GrFragmentStage& getCoverageStage(int idx) const { return fCoverageSta ges[idx]; } 123 const GrFragmentStage& getCoverageStage(int idx) const { return fCoverageSta ges[idx]; }
161 124
162 /** 125 /**
163 * Checks whether any of the effects will read the dst pixel color. 126 * Checks whether any of the effects will read the dst pixel color.
164 * TODO remove when we have an XP 127 * TODO remove when we have an XP
165 */ 128 */
166 bool willEffectReadDstColor(GrColor color, GrColor coverage) const; 129 bool willEffectReadDstColor(const GrPrimitiveProcessor*) const;
167 130
168 /** 131 /**
169 * The xfer processor factory. 132 * The xfer processor factory.
170 */ 133 */
171 const GrXPFactory* setXPFactory(const GrXPFactory* xpFactory) { 134 const GrXPFactory* setXPFactory(const GrXPFactory* xpFactory) {
172 fXPFactory.reset(SkRef(xpFactory)); 135 fXPFactory.reset(SkRef(xpFactory));
173 return xpFactory; 136 return xpFactory;
174 } 137 }
175 138
176 void setPorterDuffXPFactory(SkXfermode::Mode mode) { 139 void setPorterDuffXPFactory(SkXfermode::Mode mode) {
(...skipping 371 matching lines...) Expand 10 before | Expand all | Expand 10 after
548 511
549 bool vertexColorsAreOpaque() const { return kVertexColorsAreOpaque_Hint & fH ints; } 512 bool vertexColorsAreOpaque() const { return kVertexColorsAreOpaque_Hint & fH ints; }
550 513
551 /// @} 514 /// @}
552 515
553 /////////////////////////////////////////////////////////////////////////// 516 ///////////////////////////////////////////////////////////////////////////
554 517
555 GrDrawState& operator= (const GrDrawState& that); 518 GrDrawState& operator= (const GrDrawState& that);
556 519
557 private: 520 private:
558 bool isEqual(const GrDrawState& that) const; 521 bool isEqual(const GrDrawState& that, bool explicitLocalCoords) const;
559 522
560 const GrProcOptInfo& colorProcInfo(GrColor color) const { 523 const GrProcOptInfo& colorProcInfo(const GrPrimitiveProcessor* pp) const {
561 this->calcColorInvariantOutput(color); 524 this->calcColorInvariantOutput(pp);
562 return fColorProcInfo; 525 return fColorProcInfo;
563 } 526 }
564 527
565 const GrProcOptInfo& coverageProcInfo(GrColor coverage) const { 528 const GrProcOptInfo& coverageProcInfo(const GrPrimitiveProcessor* pp) const {
566 this->calcCoverageInvariantOutput(coverage); 529 this->calcCoverageInvariantOutput(pp);
567 return fCoverageProcInfo; 530 return fCoverageProcInfo;
568 } 531 }
569 532
570 /** 533 /**
571 * Determines whether src alpha is guaranteed to be one for all src pixels 534 * If fColorProcInfoValid is false, function calculates the invariant output for the color
535 * stages and results are stored in fColorProcInfo.
572 */ 536 */
573 bool srcAlphaWillBeOne(GrColor color, GrColor coverage) const; 537 void calcColorInvariantOutput(const GrPrimitiveProcessor*) const;
538
539 /**
540 * If fCoverageProcInfoValid is false, function calculates the invariant out put for the coverage
541 * stages and results are stored in fCoverageProcInfo.
542 */
543 void calcCoverageInvariantOutput(const GrPrimitiveProcessor*) const;
574 544
575 /** 545 /**
576 * If fColorProcInfoValid is false, function calculates the invariant output for the color 546 * If fColorProcInfoValid is false, function calculates the invariant output for the color
577 * stages and results are stored in fColorProcInfo. 547 * stages and results are stored in fColorProcInfo.
578 */ 548 */
579 void calcColorInvariantOutput(GrColor) const; 549 void calcColorInvariantOutput(GrColor) const;
580 550
581 /** 551 /**
582 * If fCoverageProcInfoValid is false, function calculates the invariant out put for the coverage 552 * If fCoverageProcInfoValid is false, function calculates the invariant out put for the coverage
583 * stages and results are stored in fCoverageProcInfo. 553 * stages and results are stored in fCoverageProcInfo.
584 */ 554 */
585 void calcCoverageInvariantOutput(GrColor) const; 555 void calcCoverageInvariantOutput(GrColor) const;
586 556
587 void onReset(const SkMatrix* initialViewMatrix); 557 void onReset(const SkMatrix* initialViewMatrix);
588 558
589 // Some of the auto restore objects assume that no effects are removed durin g their lifetime. 559 // Some of the auto restore objects assume that no effects are removed durin g their lifetime.
590 // This is used to assert that this condition holds. 560 // This is used to assert that this condition holds.
591 SkDEBUGCODE(int fBlockEffectRemovalCnt;) 561 SkDEBUGCODE(int fBlockEffectRemovalCnt;)
592 562
593 typedef SkSTArray<4, GrFragmentStage> FragmentStageArray; 563 typedef SkSTArray<4, GrFragmentStage> FragmentStageArray;
594 564
595 SkAutoTUnref<GrRenderTarget> fRenderTarget; 565 SkAutoTUnref<GrRenderTarget> fRenderTarget;
596 SkMatrix fViewMatrix; 566 SkMatrix fViewMatrix;
597 uint32_t fFlagBits; 567 uint32_t fFlagBits;
598 GrStencilSettings fStencilSettings; 568 GrStencilSettings fStencilSettings;
599 DrawFace fDrawFace; 569 DrawFace fDrawFace;
600 SkAutoTUnref<const GrGeometryProcessor> fGeometryProcessor;
601 SkAutoTUnref<const GrXPFactory> fXPFactory; 570 SkAutoTUnref<const GrXPFactory> fXPFactory;
602 FragmentStageArray fColorStages; 571 FragmentStageArray fColorStages;
603 FragmentStageArray fCoverageStages; 572 FragmentStageArray fCoverageStages;
604 uint32_t fHints; 573 uint32_t fHints;
605 574
606 mutable GrProcOptInfo fColorProcInfo; 575 mutable GrProcOptInfo fColorProcInfo;
607 mutable GrProcOptInfo fCoverageProcInfo; 576 mutable GrProcOptInfo fCoverageProcInfo;
608 mutable bool fColorProcInfoValid; 577 mutable bool fColorProcInfoValid;
609 mutable bool fCoverageProcInfoValid; 578 mutable bool fCoverageProcInfoValid;
610 mutable GrColor fColorCache; 579 mutable GrColor fColorCache;
611 mutable GrColor fCoverageCache; 580 mutable GrColor fCoverageCache;
581 mutable const GrPrimitiveProcessor* fColorPrimProc;
582 mutable const GrPrimitiveProcessor* fCoveragePrimProc;
612 583
613 friend class GrOptDrawState; 584 friend class GrOptDrawState;
614 }; 585 };
615 586
616 #endif 587 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698