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

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

Issue 674543004: OptState owns program descriptor (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 6 years, 1 month 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 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 GrOptDrawState_DEFINED 8 #ifndef GrOptDrawState_DEFINED
9 #define GrOptDrawState_DEFINED 9 #define GrOptDrawState_DEFINED
10 10
11 #include "GrColor.h" 11 #include "GrColor.h"
12 #include "GrGpu.h" 12 #include "GrGpu.h"
13 #include "GrProcessorStage.h" 13 #include "GrProcessorStage.h"
14 #include "GrProgramDesc.h"
14 #include "GrStencil.h" 15 #include "GrStencil.h"
15 #include "GrTypesPriv.h" 16 #include "GrTypesPriv.h"
16 #include "SkMatrix.h" 17 #include "SkMatrix.h"
17 #include "SkRefCnt.h" 18 #include "SkRefCnt.h"
18 19
20 class GrDeviceCoordTexture;
19 class GrDrawState; 21 class GrDrawState;
20 22
21 /** 23 /**
22 * Class that holds an optimized version of a GrDrawState. It is meant to be an immutable class, 24 * Class that holds an optimized version of a GrDrawState. It is meant to be an immutable class,
23 * and contains all data needed to set the state for a gpu draw. 25 * and contains all data needed to set the state for a gpu draw.
24 */ 26 */
25 class GrOptDrawState : public SkRefCnt { 27 class GrOptDrawState : public SkRefCnt {
26 public: 28 public:
27 /** 29 /**
28 * Returns a snapshot of the current optimized state. If the current drawSta te has a valid 30 * Returns a snapshot of the current optimized state. If the current drawSta te has a valid
29 * cached optimiezed state it will simply return a pointer to it otherwise i t will create a new 31 * cached optimiezed state it will simply return a pointer to it otherwise i t will create a new
30 * GrOptDrawState. In all cases the GrOptDrawState is reffed and ownership i s given to the 32 * GrOptDrawState. In all cases the GrOptDrawState is reffed and ownership i s given to the
31 * caller. 33 * caller.
32 */ 34 */
33 static GrOptDrawState* Create(const GrDrawState& drawState, const GrDrawTarg etCaps& caps, 35 static GrOptDrawState* Create(const GrDrawState& drawState, GrGpu*,
34 GrGpu::DrawType drawType); 36 const GrDeviceCoordTexture* dstCopy, GrGpu::Dr awType drawType);
35 37
36 bool operator== (const GrOptDrawState& that) const; 38 bool operator== (const GrOptDrawState& that) const;
37 39
38 /////////////////////////////////////////////////////////////////////////// 40 ///////////////////////////////////////////////////////////////////////////
39 /// @name Vertex Attributes 41 /// @name Vertex Attributes
40 //// 42 ////
41 43
42 enum { 44 enum {
43 kMaxVertexAttribCnt = kLast_GrVertexAttribBinding + 4, 45 kMaxVertexAttribCnt = kLast_GrVertexAttribBinding + 4,
44 }; 46 };
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after
299 kB_CombinedState, 301 kB_CombinedState,
300 }; 302 };
301 303
302 bool inputColorIsUsed() const { return fInputColorIsUsed; } 304 bool inputColorIsUsed() const { return fInputColorIsUsed; }
303 bool inputCoverageIsUsed() const { return fInputCoverageIsUsed; } 305 bool inputCoverageIsUsed() const { return fInputCoverageIsUsed; }
304 306
305 bool readsDst() const { return fReadsDst; } 307 bool readsDst() const { return fReadsDst; }
306 bool readsFragPosition() const { return fReadsFragPosition; } 308 bool readsFragPosition() const { return fReadsFragPosition; }
307 bool requiresLocalCoordAttrib() const { return fRequiresLocalCoordAttrib; } 309 bool requiresLocalCoordAttrib() const { return fRequiresLocalCoordAttrib; }
308 310
309 /////////////////////////////////////////////////////////////////////////// 311 GrProgramDesc::PrimaryOutputType getPrimaryOutputType() const { return fPrim aryOutputType; }
310 /// @name Stage Output Types 312 GrProgramDesc::SecondaryOutputType getSecondaryOutputType() const { return f SecondaryOutputType; }
311 ////
312 313
313 enum PrimaryOutputType { 314 const GrProgramDesc& desc() const { return fDesc; }
314 // Modulate color and coverage, write result as the color output.
315 kModulate_PrimaryOutputType,
316 // Combines the coverage, dst, and color as coverage * color + (1 - cove rage) * dst. This
317 // can only be set if fDstReadKey is non-zero.
318 kCombineWithDst_PrimaryOutputType,
319
320 kPrimaryOutputTypeCnt,
321 };
322
323 enum SecondaryOutputType {
324 // There is no secondary output
325 kNone_SecondaryOutputType,
326 // Writes coverage as the secondary output. Only set if dual source blen ding is supported
327 // and primary output is kModulate.
328 kCoverage_SecondaryOutputType,
329 // Writes coverage * (1 - colorA) as the secondary output. Only set if d ual source blending
330 // is supported and primary output is kModulate.
331 kCoverageISA_SecondaryOutputType,
332 // Writes coverage * (1 - colorRGBA) as the secondary output. Only set i f dual source
333 // blending is supported and primary output is kModulate.
334 kCoverageISC_SecondaryOutputType,
335
336 kSecondaryOutputTypeCnt,
337 };
338
339 PrimaryOutputType getPrimaryOutputType() const { return fPrimaryOutputType; }
340 SecondaryOutputType getSecondaryOutputType() const { return fSecondaryOutput Type; }
341 315
342 /// @} 316 /// @}
343 317
344 private: 318 private:
345 /** 319 /**
346 * Optimizations for blending / coverage to that can be applied based on the current state. 320 * Optimizations for blending / coverage to that can be applied based on the current state.
347 */ 321 */
348 enum BlendOptFlags { 322 enum BlendOptFlags {
349 /** 323 /**
350 * No optimization 324 * No optimization
(...skipping 18 matching lines...) Expand all
369 */ 343 */
370 kEmitTransBlack_BlendOptFlag = 0x8, 344 kEmitTransBlack_BlendOptFlag = 0x8,
371 }; 345 };
372 GR_DECL_BITFIELD_OPS_FRIENDS(BlendOptFlags); 346 GR_DECL_BITFIELD_OPS_FRIENDS(BlendOptFlags);
373 347
374 /** 348 /**
375 * Constructs and optimized drawState out of a GrRODrawState. 349 * Constructs and optimized drawState out of a GrRODrawState.
376 */ 350 */
377 GrOptDrawState(const GrDrawState& drawState, BlendOptFlags blendOptFlags, 351 GrOptDrawState(const GrDrawState& drawState, BlendOptFlags blendOptFlags,
378 GrBlendCoeff optSrcCoeff, GrBlendCoeff optDstCoeff, 352 GrBlendCoeff optSrcCoeff, GrBlendCoeff optDstCoeff,
379 const GrDrawTargetCaps& caps); 353 GrGpu*, const GrDeviceCoordTexture* dstCopy, GrGpu::DrawType) ;
380 354
381 /** 355 /**
382 * Loops through all the color stage effects to check if the stage will igno re color input or 356 * Loops through all the color stage effects to check if the stage will igno re color input or
383 * always output a constant color. In the ignore color input case we can ign ore all previous 357 * always output a constant color. In the ignore color input case we can ign ore all previous
384 * stages. In the constant color case, we can ignore all previous stages and 358 * stages. In the constant color case, we can ignore all previous stages and
385 * the current one and set the state color to the constant color. 359 * the current one and set the state color to the constant color.
386 */ 360 */
387 void computeEffectiveColorStages(const GrDrawState& ds, int* firstColorStage Idx, 361 void computeEffectiveColorStages(const GrDrawState& ds, int* firstColorStage Idx,
388 uint8_t* fixFunctionVAToRemove); 362 uint8_t* fixFunctionVAToRemove);
389 363
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
460 // These flags give aggregated info on the effect stages that are used when building programs. 434 // These flags give aggregated info on the effect stages that are used when building programs.
461 bool fReadsDst; 435 bool fReadsDst;
462 bool fReadsFragPosition; 436 bool fReadsFragPosition;
463 bool fRequiresLocalCoordAttrib; 437 bool fRequiresLocalCoordAttrib;
464 438
465 SkAutoSTArray<4, GrVertexAttrib> fOptVA; 439 SkAutoSTArray<4, GrVertexAttrib> fOptVA;
466 440
467 BlendOptFlags fBlendOptFlags; 441 BlendOptFlags fBlendOptFlags;
468 442
469 // Fragment shader color outputs 443 // Fragment shader color outputs
470 PrimaryOutputType fPrimaryOutputType : 8; 444 GrProgramDesc::PrimaryOutputType fPrimaryOutputType : 8;
bsalomon 2014/10/23 17:08:52 Is this stuff part of the key already? Wondering i
egdaniel 2014/10/23 17:15:07 An option would be to store these values locally i
joshualitt 2014/10/23 17:45:06 Seems a bit icky. We calculate these types while
egdaniel 2014/10/23 17:53:02 I don't think it is that wacky. The only reason we
bsalomon 2014/10/23 18:10:29 I'm not sure about the actual mechanics but I agre
471 SecondaryOutputType fSecondaryOutputType : 8; 445 GrProgramDesc::SecondaryOutputType fSecondaryOutputType : 8;
446
447 GrProgramDesc fDesc;
472 448
473 typedef SkRefCnt INHERITED; 449 typedef SkRefCnt INHERITED;
474 }; 450 };
475 451
476 GR_MAKE_BITFIELD_OPS(GrOptDrawState::BlendOptFlags); 452 GR_MAKE_BITFIELD_OPS(GrOptDrawState::BlendOptFlags);
477 453
478 #endif 454 #endif
479 455
OLDNEW
« no previous file with comments | « src/gpu/GrGpu.h ('k') | src/gpu/GrOptDrawState.cpp » ('j') | src/gpu/gl/GrGpuGL.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698