OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2014 Google Inc. | 2 * Copyright 2014 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 GrProgramDesc_DEFINED | 8 #ifndef GrProgramDesc_DEFINED |
9 #define GrProgramDesc_DEFINED | 9 #define GrProgramDesc_DEFINED |
10 | 10 |
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
132 | 132 |
133 int numCoverageEffects() const { | 133 int numCoverageEffects() const { |
134 return this->header().fCoverageEffectCnt; | 134 return this->header().fCoverageEffectCnt; |
135 } | 135 } |
136 | 136 |
137 int numTotalEffects() const { return this->numColorEffects() + this->numCove
rageEffects(); } | 137 int numTotalEffects() const { return this->numColorEffects() + this->numCove
rageEffects(); } |
138 | 138 |
139 // This should really only be used internally, base classes should return th
eir own headers | 139 // This should really only be used internally, base classes should return th
eir own headers |
140 const KeyHeader& header() const { return *this->atOffset<KeyHeader, kHeaderO
ffset>(); } | 140 const KeyHeader& header() const { return *this->atOffset<KeyHeader, kHeaderO
ffset>(); } |
141 | 141 |
142 /** Used to provide effects' keys to their emitCode() function. */ | |
143 class ProcKeyProvider { | |
144 public: | |
145 enum ProcessorType { | |
146 kGeometry_ProcessorType, | |
147 kFragment_ProcessorType, | |
148 }; | |
149 | |
150 ProcKeyProvider(const GrProgramDesc* desc, ProcessorType type, int effec
tOffset) | |
151 : fDesc(desc), fBaseIndex(0), fEffectOffset(effectOffset) { | |
152 switch (type) { | |
153 case kGeometry_ProcessorType: | |
154 // there can be only one | |
155 fBaseIndex = 0; | |
156 break; | |
157 case kFragment_ProcessorType: | |
158 fBaseIndex = desc->hasGeometryProcessor() ? 1 : 0; | |
159 break; | |
160 } | |
161 } | |
162 | |
163 GrProcessorKey get(int index) const { | |
164 const uint16_t* offsetsAndLengths = reinterpret_cast<const uint16_t*
>( | |
165 fDesc->fKey.begin() + fEffectOffset); | |
166 // We store two uint16_ts per effect, one for the offset to the effe
ct's key and one for | |
167 // its length. Here we just need the offset. | |
168 uint16_t offset = offsetsAndLengths[2 * (fBaseIndex + index) + 0]; | |
169 uint16_t length = offsetsAndLengths[2 * (fBaseIndex + index) + 1]; | |
170 // Currently effects must add to the key in units of uint32_t. | |
171 SkASSERT(0 == (length % sizeof(uint32_t))); | |
172 return GrProcessorKey(reinterpret_cast<const uint32_t*>(fDesc->fKey.
begin() + offset), | |
173 length / sizeof(uint32_t)); | |
174 } | |
175 private: | |
176 const GrProgramDesc* fDesc; | |
177 int fBaseIndex; | |
178 int fEffectOffset; | |
179 }; | |
180 | |
181 // A struct to communicate descriptor information to the program descriptor
builder | 142 // A struct to communicate descriptor information to the program descriptor
builder |
182 struct DescInfo { | 143 struct DescInfo { |
183 int positionAttributeIndex() const { | 144 int positionAttributeIndex() const { |
184 return fFixedFunctionVertexAttribIndices[kPosition_GrVertexAttribBin
ding]; | 145 return fFixedFunctionVertexAttribIndices[kPosition_GrVertexAttribBin
ding]; |
185 } | 146 } |
186 int localCoordAttributeIndex() const { | 147 int localCoordAttributeIndex() const { |
187 return fFixedFunctionVertexAttribIndices[kLocalCoord_GrVertexAttribB
inding]; | 148 return fFixedFunctionVertexAttribIndices[kLocalCoord_GrVertexAttribB
inding]; |
188 } | 149 } |
189 int colorVertexAttributeIndex() const { | 150 int colorVertexAttributeIndex() const { |
190 return fFixedFunctionVertexAttribIndices[kColor_GrVertexAttribBindin
g]; | 151 return fFixedFunctionVertexAttribIndices[kColor_GrVertexAttribBindin
g]; |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
260 kPreAllocSize = kHeaderOffset + kHeaderSize + | 221 kPreAllocSize = kHeaderOffset + kHeaderSize + |
261 kMaxPreallocProcessors * sizeof(uint32_t) * kIntsPerProc
essor, | 222 kMaxPreallocProcessors * sizeof(uint32_t) * kIntsPerProc
essor, |
262 }; | 223 }; |
263 | 224 |
264 SkSTArray<kPreAllocSize, uint8_t, true> fKey; | 225 SkSTArray<kPreAllocSize, uint8_t, true> fKey; |
265 | 226 |
266 friend class GrGLProgramDescBuilder; | 227 friend class GrGLProgramDescBuilder; |
267 }; | 228 }; |
268 | 229 |
269 #endif | 230 #endif |
OLD | NEW |