| 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 |
| 11 #include "GrGLEffect.h" | 11 #include "GrGLEffect.h" |
| 12 #include "GrDrawState.h" | 12 #include "GrDrawState.h" |
| 13 #include "GrGpu.h" | 13 #include "GrGpu.h" |
| 14 #include "GrOptDrawState.h" |
| 14 | 15 |
| 15 class GrGpuGL; | 16 class GrGpuGL; |
| 16 | 17 |
| 17 #ifdef SK_DEBUG | 18 #ifdef SK_DEBUG |
| 18 // Optionally compile the experimental GS code. Set to SK_DEBUG so that debug
build bots will | 19 // Optionally compile the experimental GS code. Set to SK_DEBUG so that debug
build bots will |
| 19 // execute the code. | 20 // execute the code. |
| 20 #define GR_GL_EXPERIMENTAL_GS 1 | 21 #define GR_GL_EXPERIMENTAL_GS 1 |
| 21 #else | 22 #else |
| 22 #define GR_GL_EXPERIMENTAL_GS 0 | 23 #define GR_GL_EXPERIMENTAL_GS 0 |
| 23 #endif | 24 #endif |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 104 private: | 105 private: |
| 105 // Specifies where the initial color comes from before the stages are applie
d. | 106 // Specifies where the initial color comes from before the stages are applie
d. |
| 106 enum ColorInput { | 107 enum ColorInput { |
| 107 kAllOnes_ColorInput, | 108 kAllOnes_ColorInput, |
| 108 kAttribute_ColorInput, | 109 kAttribute_ColorInput, |
| 109 kUniform_ColorInput, | 110 kUniform_ColorInput, |
| 110 | 111 |
| 111 kColorInputCnt | 112 kColorInputCnt |
| 112 }; | 113 }; |
| 113 | 114 |
| 114 enum CoverageOutput { | |
| 115 // modulate color and coverage, write result as the color output. | |
| 116 kModulate_CoverageOutput, | |
| 117 // Writes color*coverage as the primary color output and also writes cov
erage as the | |
| 118 // secondary output. Only set if dual source blending is supported. | |
| 119 kSecondaryCoverage_CoverageOutput, | |
| 120 // Writes color*coverage as the primary color output and also writes cov
erage * (1 - colorA) | |
| 121 // as the secondary output. Only set if dual source blending is supporte
d. | |
| 122 kSecondaryCoverageISA_CoverageOutput, | |
| 123 // Writes color*coverage as the primary color output and also writes cov
erage * | |
| 124 // (1 - colorRGB) as the secondary output. Only set if dual source blend
ing is supported. | |
| 125 kSecondaryCoverageISC_CoverageOutput, | |
| 126 // Combines the coverage, dst, and color as coverage * color + (1 - cove
rage) * dst. This | |
| 127 // can only be set if fDstReadKey is non-zero. | |
| 128 kCombineWithDst_CoverageOutput, | |
| 129 | |
| 130 kCoverageOutputCnt | |
| 131 }; | |
| 132 | |
| 133 static bool CoverageOutputUsesSecondaryOutput(CoverageOutput co) { | |
| 134 switch (co) { | |
| 135 case kSecondaryCoverage_CoverageOutput: // fallthru | |
| 136 case kSecondaryCoverageISA_CoverageOutput: | |
| 137 case kSecondaryCoverageISC_CoverageOutput: | |
| 138 return true; | |
| 139 default: | |
| 140 return false; | |
| 141 } | |
| 142 } | |
| 143 | |
| 144 struct KeyHeader { | 115 struct KeyHeader { |
| 145 uint8_t fDstReadKey; // set by GrGLShaderBuil
der if there | 116 uint8_t fDstReadKey; // set by GrGLShaderBuil
der if there |
| 146 // are effects that must
read the dst. | 117 // are effects that must
read the dst. |
| 147 // Otherwise, 0. | 118 // Otherwise, 0. |
| 148 uint8_t fFragPosKey; // set by GrGLShaderBuil
der if there are | 119 uint8_t fFragPosKey; // set by GrGLShaderBuil
der if there are |
| 149 // effects that read the
fragment position. | 120 // effects that read the
fragment position. |
| 150 // Otherwise, 0. | 121 // Otherwise, 0. |
| 151 ColorInput fColorInput : 8; | |
| 152 ColorInput fCoverageInput : 8; | |
| 153 CoverageOutput fCoverageOutput : 8; | |
| 154 | 122 |
| 155 SkBool8 fUseFragShaderOnly; | 123 SkBool8 fUseFragShaderOnly; |
| 156 SkBool8 fEmitsPointSize; | 124 SkBool8 fEmitsPointSize; |
| 157 | 125 |
| 126 ColorInput fColorInput : 8; |
| 127 ColorInput fCoverageInput : 8; |
| 128 |
| 129 GrOptDrawState::PrimaryOutputType fPrimaryOutputType : 8; |
| 130 GrOptDrawState::SecondaryOutputType fSecondaryOutputType : 8; |
| 131 |
| 132 |
| 158 // To enable experimental geometry shader code (not for use in | 133 // To enable experimental geometry shader code (not for use in |
| 159 // production) | 134 // production) |
| 160 #if GR_GL_EXPERIMENTAL_GS | 135 #if GR_GL_EXPERIMENTAL_GS |
| 161 SkBool8 fExperimentalGS; | 136 SkBool8 fExperimentalGS; |
| 162 #endif | 137 #endif |
| 163 | 138 |
| 164 int8_t fPositionAttributeIndex; | 139 int8_t fPositionAttributeIndex; |
| 165 int8_t fLocalCoordAttributeIndex; | 140 int8_t fLocalCoordAttributeIndex; |
| 166 int8_t fColorAttributeIndex; | 141 int8_t fColorAttributeIndex; |
| 167 int8_t fCoverageAttributeIndex; | 142 int8_t fCoverageAttributeIndex; |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 266 friend class GrGLProgram; | 241 friend class GrGLProgram; |
| 267 friend class GrGLProgramBuilder; | 242 friend class GrGLProgramBuilder; |
| 268 friend class GrGLFullProgramBuilder; | 243 friend class GrGLFullProgramBuilder; |
| 269 friend class GrGLFragmentOnlyProgramBuilder; | 244 friend class GrGLFragmentOnlyProgramBuilder; |
| 270 friend class GrGLVertexShaderBuilder; | 245 friend class GrGLVertexShaderBuilder; |
| 271 friend class GrGLFragmentShaderBuilder; | 246 friend class GrGLFragmentShaderBuilder; |
| 272 friend class GrGLGeometryShaderBuilder; | 247 friend class GrGLGeometryShaderBuilder; |
| 273 }; | 248 }; |
| 274 | 249 |
| 275 #endif | 250 #endif |
| OLD | NEW |