OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2013 Google Inc. | 2 * Copyright 2013 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 GrGLProgramDesc_DEFINED | 8 #ifndef GrGLProgramDesc_DEFINED |
9 #define GrGLProgramDesc_DEFINED | 9 #define GrGLProgramDesc_DEFINED |
10 | 10 |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
58 private: | 58 private: |
59 // Specifies where the initial color comes from before the stages are applie
d. | 59 // Specifies where the initial color comes from before the stages are applie
d. |
60 enum ColorInput { | 60 enum ColorInput { |
61 kSolidWhite_ColorInput, | 61 kSolidWhite_ColorInput, |
62 kTransBlack_ColorInput, | 62 kTransBlack_ColorInput, |
63 kAttribute_ColorInput, | 63 kAttribute_ColorInput, |
64 kUniform_ColorInput, | 64 kUniform_ColorInput, |
65 | 65 |
66 kColorInputCnt | 66 kColorInputCnt |
67 }; | 67 }; |
68 // Dual-src blending makes use of a secondary output color that can be | |
69 // used as a per-pixel blend coefficient. This controls whether a | |
70 // secondary source is output and what value it holds. | |
71 enum DualSrcOutput { | |
72 kNone_DualSrcOutput, | |
73 kCoverage_DualSrcOutput, | |
74 kCoverageISA_DualSrcOutput, | |
75 kCoverageISC_DualSrcOutput, | |
76 | 68 |
77 kDualSrcOutputCnt | 69 enum CoverageOutput { |
| 70 // modulate color and coverage, write result as the color output. |
| 71 kModulate_CoverageOutput, |
| 72 // Writes color*coverage as the primary color output and also writes cov
erage as the |
| 73 // secondary output. Only set if dual source blending is supported. |
| 74 kSecondaryCoverage_CoverageOutput, |
| 75 // Writes color*coverage as the primary color output and also writes cov
erage * (1 - colorA) |
| 76 // as the secondary output. Only set if dual source blending is supporte
d. |
| 77 kSecondaryCoverageISA_CoverageOutput, |
| 78 // Writes color*coverage as the primary color output and also writes cov
erage * |
| 79 // (1 - colorRGB) as the secondary output. Only set if dual source blend
ing is supported. |
| 80 kSecondaryCoverageISC_CoverageOutput, |
| 81 // Combines the coverage, dst, and color as coverage * color + (1 - cove
rage) * dst. This |
| 82 // can only be set if fDstRead is set. |
| 83 kCombineWithDst_CoverageOutput, |
| 84 |
| 85 kCoverageOutputCnt |
78 }; | 86 }; |
79 | 87 |
| 88 static bool CoverageOutputUsesSecondaryOutput(CoverageOutput co) { |
| 89 switch (co) { |
| 90 case kSecondaryCoverage_CoverageOutput: // fallthru |
| 91 case kSecondaryCoverageISA_CoverageOutput: |
| 92 case kSecondaryCoverageISC_CoverageOutput: |
| 93 return true; |
| 94 default: |
| 95 return false; |
| 96 } |
| 97 } |
| 98 |
80 /** Non-zero if this stage has an effect */ | 99 /** Non-zero if this stage has an effect */ |
81 GrGLEffect::EffectKey fEffectKeys[GrDrawState::kNumStages]; | 100 GrGLEffect::EffectKey fEffectKeys[GrDrawState::kNumStages]; |
82 | 101 |
83 // To enable experimental geometry shader code (not for use in | 102 // To enable experimental geometry shader code (not for use in |
84 // production) | 103 // production) |
85 #if GR_GL_EXPERIMENTAL_GS | 104 #if GR_GL_EXPERIMENTAL_GS |
86 bool fExperimentalGS; | 105 bool fExperimentalGS; |
87 #endif | 106 #endif |
88 | 107 |
89 GrGLShaderBuilder::DstReadKey fDstRead; // set by GrGLShaderBuil
der if there | 108 GrGLShaderBuilder::DstReadKey fDstRead; // set by GrGLShaderBuil
der if there |
90 // are effects that must
read the dst. | 109 // are effects that must
read the dst. |
91 // Otherwise, 0. | 110 // Otherwise, 0. |
92 | 111 |
93 // should the FS discard if the coverage is zero (to avoid stencil manipulat
ion) | 112 // should the FS discard if the coverage is zero (to avoid stencil manipulat
ion) |
94 SkBool8 fDiscardIfZeroCoverage; | 113 SkBool8 fDiscardIfZeroCoverage; |
95 | 114 |
96 uint8_t fColorInput; // casts to enum ColorIn
put | 115 uint8_t fColorInput; // casts to enum ColorIn
put |
97 uint8_t fCoverageInput; // casts to enum ColorIn
put | 116 uint8_t fCoverageInput; // casts to enum ColorIn
put |
98 uint8_t fDualSrcOutput; // casts to enum DualSrc
Output | 117 uint8_t fCoverageOutput; // casts to enum Coverag
eOutput |
99 | 118 |
100 int8_t fFirstCoverageStage; | 119 int8_t fFirstCoverageStage; |
101 SkBool8 fEmitsPointSize; | 120 SkBool8 fEmitsPointSize; |
102 uint8_t fColorFilterXfermode; // casts to enum SkXferm
ode::Mode | 121 uint8_t fColorFilterXfermode; // casts to enum SkXferm
ode::Mode |
103 | 122 |
104 int8_t fPositionAttributeIndex; | 123 int8_t fPositionAttributeIndex; |
105 int8_t fLocalCoordAttributeIndex; | 124 int8_t fLocalCoordAttributeIndex; |
106 int8_t fColorAttributeIndex; | 125 int8_t fColorAttributeIndex; |
107 int8_t fCoverageAttributeIndex; | 126 int8_t fCoverageAttributeIndex; |
108 | 127 |
109 // GrGLProgram and GrGLShaderBuilder read the private fields to generate cod
e. TODO: Move all | 128 // GrGLProgram and GrGLShaderBuilder read the private fields to generate cod
e. TODO: Move all |
110 // code generation to GrGLShaderBuilder (and maybe add getters rather than f
riending). | 129 // code generation to GrGLShaderBuilder (and maybe add getters rather than f
riending). |
111 friend class GrGLProgram; | 130 friend class GrGLProgram; |
112 friend class GrGLShaderBuilder; | 131 friend class GrGLShaderBuilder; |
113 }; | 132 }; |
114 | 133 |
115 #endif | 134 #endif |
OLD | NEW |