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

Side by Side Diff: src/gpu/gl/GrGLProgramEffects.h

Issue 385713005: Allow GrGLEffects to produce variable length keys. (Closed) Base URL: https://skia.googlesource.com/skia.git@key
Patch Set: rebase Created 6 years, 5 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 unified diff | Download patch
« no previous file with comments | « src/gpu/gl/GrGLProgramDesc.h ('k') | src/gpu/gl/GrGLProgramEffects.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 GrGLProgramEffects_DEFINED 8 #ifndef GrGLProgramEffects_DEFINED
9 #define GrGLProgramEffects_DEFINED 9 #define GrGLProgramEffects_DEFINED
10 10
11 #include "GrBackendEffectFactory.h" 11 #include "GrBackendEffectFactory.h"
12 #include "GrGLUniformManager.h" 12 #include "GrGLUniformManager.h"
13 #include "GrTexture.h" 13 #include "GrTexture.h"
14 #include "GrTextureAccess.h" 14 #include "GrTextureAccess.h"
15 15
16 class GrEffect; 16 class GrEffect;
17 class GrEffectStage; 17 class GrEffectStage;
18 class GrGLVertexProgramEffectsBuilder; 18 class GrGLVertexProgramEffectsBuilder;
19 class GrGLShaderBuilder; 19 class GrGLShaderBuilder;
20 class GrGLFullShaderBuilder; 20 class GrGLFullShaderBuilder;
21 class GrGLFragmentOnlyShaderBuilder; 21 class GrGLFragmentOnlyShaderBuilder;
22 22
23 /** 23 /**
24 * This class encapsulates an array of GrGLEffects and their supporting data (co ord transforms 24 * This class encapsulates an array of GrGLEffects and their supporting data (co ord transforms
25 * and textures). It is built with GrGLProgramEffectsBuilder, then used to manag e the necessary GL 25 * and textures). It is built with GrGLProgramEffectsBuilder, then used to manag e the necessary GL
26 * state and shader uniforms. 26 * state and shader uniforms.
27 */ 27 */
28 class GrGLProgramEffects : public SkRefCnt { 28 class GrGLProgramEffects : public SkRefCnt {
29 public: 29 public:
30 typedef GrBackendEffectFactory::EffectKey EffectKey;
31 typedef GrGLUniformManager::UniformHandle UniformHandle; 30 typedef GrGLUniformManager::UniformHandle UniformHandle;
32 31
33 /** 32 /**
34 * This class emits some of the code inserted into the shaders for an effect . The code it 33 * This class emits some of the code inserted into the shaders for an effect . The code it
35 * creates may be dependent on properties of the effect that the effect itse lf doesn't use 34 * creates may be dependent on properties of the effect that the effect itse lf doesn't use
36 * in its key (e.g. the pixel format of textures used). So this class insert s a meta-key for 35 * in its key (e.g. the pixel format of textures used). So this class insert s a meta-key for
37 * every effect using this function. It is also responsible for inserting th e effect's class ID 36 * every effect using this function. It is also responsible for inserting th e effect's class ID
38 * which must be different for every GrEffect subclass. It can fail if an ef fect uses too many 37 * which must be different for every GrEffect subclass. It can fail if an ef fect uses too many
39 * textures, attributes, etc for the space allotted in the meta-key. 38 * textures, attributes, etc for the space allotted in the meta-key.
40 */ 39 */
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
97 uint32_t fConfigComponentMask; 96 uint32_t fConfigComponentMask;
98 char fSwizzle[5]; 97 char fSwizzle[5];
99 }; 98 };
100 99
101 typedef SkTArray<TextureSampler> TextureSamplerArray; 100 typedef SkTArray<TextureSampler> TextureSamplerArray;
102 101
103 protected: 102 protected:
104 /** 103 /**
105 * Helpers for GenEffectMetaKey. 104 * Helpers for GenEffectMetaKey.
106 */ 105 */
107 static EffectKey GenAttribKey(const GrDrawEffect&); 106 static uint32_t GenAttribKey(const GrDrawEffect&);
108 static EffectKey GenTransformKey(const GrDrawEffect&); 107 static uint32_t GenTransformKey(const GrDrawEffect&);
109 static EffectKey GenTextureKey(const GrDrawEffect&, const GrGLCaps&); 108 static uint32_t GenTextureKey(const GrDrawEffect&, const GrGLCaps&);
110 109
111 GrGLProgramEffects(int reserveCount) 110 GrGLProgramEffects(int reserveCount)
112 : fGLEffects(reserveCount) 111 : fGLEffects(reserveCount)
113 , fSamplers(reserveCount) { 112 , fSamplers(reserveCount) {
114 } 113 }
115 114
116 /** 115 /**
117 * Helper for emitEffect() in a subclasses. Emits uniforms for an effect's t exture accesses and 116 * Helper for emitEffect() in a subclasses. Emits uniforms for an effect's t exture accesses and
118 * appends the necessary data to the TextureSamplerArray* object so effects can add texture 117 * appends the necessary data to the TextureSamplerArray* object so effects can add texture
119 * lookups to their code. This method is only meant to be called during the construction phase. 118 * lookups to their code. This method is only meant to be called during the construction phase.
(...skipping 22 matching lines...) Expand all
142 * This is an abstract base class for constructing different types of GrGLProgra mEffects objects. 141 * This is an abstract base class for constructing different types of GrGLProgra mEffects objects.
143 */ 142 */
144 class GrGLProgramEffectsBuilder { 143 class GrGLProgramEffectsBuilder {
145 public: 144 public:
146 virtual ~GrGLProgramEffectsBuilder() { } 145 virtual ~GrGLProgramEffectsBuilder() { }
147 146
148 /** 147 /**
149 * Emits the effect's shader code, and stores the necessary uniforms interna lly. 148 * Emits the effect's shader code, and stores the necessary uniforms interna lly.
150 */ 149 */
151 virtual void emitEffect(const GrEffectStage&, 150 virtual void emitEffect(const GrEffectStage&,
152 GrGLProgramEffects::EffectKey, 151 const GrEffectKey&,
153 const char* outColor, 152 const char* outColor,
154 const char* inColor, 153 const char* inColor,
155 int stageIndex) = 0; 154 int stageIndex) = 0;
156 }; 155 };
157 156
158 //////////////////////////////////////////////////////////////////////////////// 157 ////////////////////////////////////////////////////////////////////////////////
159 158
160 /** 159 /**
161 * This is a GrGLProgramEffects implementation that does coord transforms with t he vertex shader. 160 * This is a GrGLProgramEffects implementation that does coord transforms with t he vertex shader.
162 */ 161 */
(...skipping 11 matching lines...) Expand all
174 , fTransforms(reserveCount) 173 , fTransforms(reserveCount)
175 , fHasExplicitLocalCoords(explicitLocalCoords) { 174 , fHasExplicitLocalCoords(explicitLocalCoords) {
176 } 175 }
177 176
178 /** 177 /**
179 * Helper for GrGLProgramEffectsBuilder::emitEfffect(). This method is meant to only be called 178 * Helper for GrGLProgramEffectsBuilder::emitEfffect(). This method is meant to only be called
180 * during the construction phase. 179 * during the construction phase.
181 */ 180 */
182 void emitEffect(GrGLFullShaderBuilder*, 181 void emitEffect(GrGLFullShaderBuilder*,
183 const GrEffectStage&, 182 const GrEffectStage&,
184 GrGLProgramEffects::EffectKey, 183 const GrEffectKey&,
185 const char* outColor, 184 const char* outColor,
186 const char* inColor, 185 const char* inColor,
187 int stageIndex); 186 int stageIndex);
188 187
189 /** 188 /**
190 * Helper for emitEffect(). Emits any attributes an effect may have. 189 * Helper for emitEffect(). Emits any attributes an effect may have.
191 */ 190 */
192 void emitAttributes(GrGLFullShaderBuilder*, const GrEffectStage&); 191 void emitAttributes(GrGLFullShaderBuilder*, const GrEffectStage&);
193 192
194 /** 193 /**
(...skipping 26 matching lines...) Expand all
221 220
222 /** 221 /**
223 * This class is used to construct a GrGLVertexProgramEffects* object. 222 * This class is used to construct a GrGLVertexProgramEffects* object.
224 */ 223 */
225 class GrGLVertexProgramEffectsBuilder : public GrGLProgramEffectsBuilder { 224 class GrGLVertexProgramEffectsBuilder : public GrGLProgramEffectsBuilder {
226 public: 225 public:
227 GrGLVertexProgramEffectsBuilder(GrGLFullShaderBuilder*, int reserveCount); 226 GrGLVertexProgramEffectsBuilder(GrGLFullShaderBuilder*, int reserveCount);
228 virtual ~GrGLVertexProgramEffectsBuilder() { } 227 virtual ~GrGLVertexProgramEffectsBuilder() { }
229 228
230 virtual void emitEffect(const GrEffectStage&, 229 virtual void emitEffect(const GrEffectStage&,
231 GrGLProgramEffects::EffectKey, 230 const GrEffectKey&,
232 const char* outColor, 231 const char* outColor,
233 const char* inColor, 232 const char* inColor,
234 int stageIndex) SK_OVERRIDE; 233 int stageIndex) SK_OVERRIDE;
235 234
236 /** 235 /**
237 * Finalizes the building process and returns the effect array. After this c all, the builder 236 * Finalizes the building process and returns the effect array. After this c all, the builder
238 * becomes invalid. 237 * becomes invalid.
239 */ 238 */
240 GrGLProgramEffects* finish() { return fProgramEffects.detach(); } 239 GrGLProgramEffects* finish() { return fProgramEffects.detach(); }
241 240
(...skipping 23 matching lines...) Expand all
265 : INHERITED(reserveCount) 264 : INHERITED(reserveCount)
266 , fTransforms(reserveCount) { 265 , fTransforms(reserveCount) {
267 } 266 }
268 267
269 /** 268 /**
270 * Helper for GrGLProgramEffectsBuilder::emitEfffect(). This method is meant to only be called 269 * Helper for GrGLProgramEffectsBuilder::emitEfffect(). This method is meant to only be called
271 * during the construction phase. 270 * during the construction phase.
272 */ 271 */
273 void emitEffect(GrGLFragmentOnlyShaderBuilder*, 272 void emitEffect(GrGLFragmentOnlyShaderBuilder*,
274 const GrEffectStage&, 273 const GrEffectStage&,
275 GrGLProgramEffects::EffectKey, 274 const GrEffectKey&,
276 const char* outColor, 275 const char* outColor,
277 const char* inColor, 276 const char* inColor,
278 int stageIndex); 277 int stageIndex);
279 278
280 /** 279 /**
281 * Helper for emitEffect(). Allocates texture units from the builder for eac h transform in an 280 * Helper for emitEffect(). Allocates texture units from the builder for eac h transform in an
282 * effect. The transforms all use adjacent texture units. They either use tw o or three of the 281 * effect. The transforms all use adjacent texture units. They either use tw o or three of the
283 * coordinates at a given texture unit, depending on if they need perspectiv e interpolation. 282 * coordinates at a given texture unit, depending on if they need perspectiv e interpolation.
284 * The expressions to access the transformed coords (i.e. 'vec2(gl_TexCoord[ 0])') as well as the 283 * The expressions to access the transformed coords (i.e. 'vec2(gl_TexCoord[ 0])') as well as the
285 * types are appended to the TransformedCoordsArray* object, which is in tur n passed to the 284 * types are appended to the TransformedCoordsArray* object, which is in tur n passed to the
286 * effect's emitCode() function. 285 * effect's emitCode() function.
287 */ 286 */
288 void setupPathTexGen(GrGLFragmentOnlyShaderBuilder*, 287 void setupPathTexGen(GrGLFragmentOnlyShaderBuilder*,
289 const GrDrawEffect&, 288 const GrDrawEffect&,
290 TransformedCoordsArray*); 289 TransformedCoordsArray*);
291 290
292 /** 291 /**
293 * Helper for setData(). Sets the PathTexGen state for each transform in an effect. 292 * Helper for setData(). Sets the PathTexGen state for each transform in an effect.
294 */ 293 */
295 void setPathTexGenState(GrGpuGL*, const GrDrawEffect&, int effectIdx); 294 void setPathTexGenState(GrGpuGL*, const GrDrawEffect&, int effectIdx);
296 295
297 struct Transforms { 296 struct Transforms {
298 Transforms(EffectKey transformKey, int texCoordIndex) 297 Transforms(uint32_t transformKey, int texCoordIndex)
299 : fTransformKey(transformKey), fTexCoordIndex(texCoordIndex) {} 298 : fTransformKey(transformKey), fTexCoordIndex(texCoordIndex) {}
300 EffectKey fTransformKey; 299 uint32_t fTransformKey;
301 int fTexCoordIndex; 300 int fTexCoordIndex;
302 }; 301 };
303 302
304 SkTArray<Transforms> fTransforms; 303 SkTArray<Transforms> fTransforms;
305 304
306 typedef GrGLProgramEffects INHERITED; 305 typedef GrGLProgramEffects INHERITED;
307 }; 306 };
308 307
309 /** 308 /**
310 * This class is used to construct a GrGLPathTexGenProgramEffects* object. 309 * This class is used to construct a GrGLPathTexGenProgramEffects* object.
311 */ 310 */
312 class GrGLPathTexGenProgramEffectsBuilder : public GrGLProgramEffectsBuilder { 311 class GrGLPathTexGenProgramEffectsBuilder : public GrGLProgramEffectsBuilder {
313 public: 312 public:
314 GrGLPathTexGenProgramEffectsBuilder(GrGLFragmentOnlyShaderBuilder*, int rese rveCount); 313 GrGLPathTexGenProgramEffectsBuilder(GrGLFragmentOnlyShaderBuilder*, int rese rveCount);
315 virtual ~GrGLPathTexGenProgramEffectsBuilder() { } 314 virtual ~GrGLPathTexGenProgramEffectsBuilder() { }
316 315
317 virtual void emitEffect(const GrEffectStage&, 316 virtual void emitEffect(const GrEffectStage&,
318 GrGLProgramEffects::EffectKey, 317 const GrEffectKey&,
319 const char* outColor, 318 const char* outColor,
320 const char* inColor, 319 const char* inColor,
321 int stageIndex) SK_OVERRIDE; 320 int stageIndex) SK_OVERRIDE;
322 321
323 /** 322 /**
324 * Finalizes the building process and returns the effect array. After this c all, the builder 323 * Finalizes the building process and returns the effect array. After this c all, the builder
325 * becomes invalid. 324 * becomes invalid.
326 */ 325 */
327 GrGLProgramEffects* finish() { return fProgramEffects.detach(); } 326 GrGLProgramEffects* finish() { return fProgramEffects.detach(); }
328 327
329 private: 328 private:
330 GrGLFragmentOnlyShaderBuilder* fBuilder; 329 GrGLFragmentOnlyShaderBuilder* fBuilder;
331 SkAutoTDelete<GrGLPathTexGenProgramEffects> fProgramEffects; 330 SkAutoTDelete<GrGLPathTexGenProgramEffects> fProgramEffects;
332 331
333 typedef GrGLProgramEffectsBuilder INHERITED; 332 typedef GrGLProgramEffectsBuilder INHERITED;
334 }; 333 };
335 334
336 #endif 335 #endif
OLDNEW
« no previous file with comments | « src/gpu/gl/GrGLProgramDesc.h ('k') | src/gpu/gl/GrGLProgramEffects.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698