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 GrOptDrawState_DEFINED | 8 #ifndef GrOptDrawState_DEFINED |
9 #define GrOptDrawState_DEFINED | 9 #define GrOptDrawState_DEFINED |
10 | 10 |
(...skipping 357 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
368 * Constructs and optimized drawState out of a GrRODrawState. | 368 * Constructs and optimized drawState out of a GrRODrawState. |
369 */ | 369 */ |
370 GrOptDrawState(const GrDrawState& drawState, BlendOptFlags blendOptFlags, | 370 GrOptDrawState(const GrDrawState& drawState, BlendOptFlags blendOptFlags, |
371 GrBlendCoeff optSrcCoeff, GrBlendCoeff optDstCoeff, | 371 GrBlendCoeff optSrcCoeff, GrBlendCoeff optDstCoeff, |
372 const GrDrawTargetCaps& caps); | 372 const GrDrawTargetCaps& caps); |
373 | 373 |
374 /** | 374 /** |
375 * Loops through all the color stage effects to check if the stage will igno
re color input or | 375 * Loops through all the color stage effects to check if the stage will igno
re color input or |
376 * always output a constant color. In the ignore color input case we can ign
ore all previous | 376 * always output a constant color. In the ignore color input case we can ign
ore all previous |
377 * stages. In the constant color case, we can ignore all previous stages and | 377 * stages. In the constant color case, we can ignore all previous stages and |
378 * the current one and set the state color to the constant color. Once we de
termine the so | 378 * the current one and set the state color to the constant color. |
379 * called first effective stage, we copy all the effective stages into our o
ptimized | |
380 * state. | |
381 */ | 379 */ |
382 void copyEffectiveColorStages(const GrDrawState& ds); | 380 void computeEffectiveColorStages(const GrDrawState& ds, int* firstColorStage
Idx, |
| 381 uint8_t* fixFunctionVAToRemove); |
383 | 382 |
384 /** | 383 /** |
385 * Loops through all the coverage stage effects to check if the stage will i
gnore color input. | 384 * Loops through all the coverage stage effects to check if the stage will i
gnore color input. |
386 * If a coverage stage will ignore input, then we can ignore all coverage st
ages before it. We | 385 * If a coverage stage will ignore input, then we can ignore all coverage st
ages before it. We |
387 * loop to determine the first effective coverage stage, and then copy all o
f our effective | 386 * loop to determine the first effective coverage stage. |
388 * coverage stages into our optimized state. | |
389 */ | 387 */ |
390 void copyEffectiveCoverageStages(const GrDrawState& ds); | 388 void computeEffectiveCoverageStages(const GrDrawState& ds, int* firstCoverag
eStageIdx); |
391 | 389 |
392 /** | 390 /** |
393 * This function takes in a flag and removes the corresponding fixed functio
n vertex attributes. | 391 * This function takes in a flag and removes the corresponding fixed functio
n vertex attributes. |
394 * The flags are in the same order as GrVertexAttribBinding array. If bit i
of removeVAFlags is | 392 * The flags are in the same order as GrVertexAttribBinding array. If bit i
of removeVAFlags is |
395 * set, then vertex attributes with binding (GrVertexAttribute)i will be rem
oved. | 393 * set, then vertex attributes with binding (GrVertexAttribute)i will be rem
oved. |
396 */ | 394 */ |
397 void removeFixedFunctionVertexAttribs(uint8_t removeVAFlags); | 395 void removeFixedFunctionVertexAttribs(uint8_t removeVAFlags); |
398 | 396 |
399 /** | 397 /** |
400 * Alter the OptDrawState (adjusting stages, vertex attribs, flags, etc.) ba
sed on the | 398 * Alter the OptDrawState (adjusting stages, vertex attribs, flags, etc.) ba
sed on the |
401 * BlendOptFlags. | 399 * BlendOptFlags. |
402 */ | 400 */ |
403 void adjustFromBlendOpts(); | 401 void adjustFromBlendOpts(const GrDrawState& ds, int* firstColorStageIdx, |
| 402 int* firstCoverageStageIdx, uint8_t* fixedFunctionV
AToRemove); |
404 | 403 |
405 /** | 404 /** |
406 * Loop over the effect stages to determine various info like what data they
will read and what | 405 * Loop over the effect stages to determine various info like what data they
will read and what |
407 * shaders they require. | 406 * shaders they require. |
408 */ | 407 */ |
409 void getStageStats(); | 408 void getStageStats(const GrDrawState& ds, int firstColorStageIdx, int firstC
overageStageIdx); |
410 | 409 |
411 /** | 410 /** |
412 * Calculates the primary and secondary output types of the shader. For cert
ain output types | 411 * Calculates the primary and secondary output types of the shader. For cert
ain output types |
413 * the function may adjust the blend coefficients. After this function is ca
lled the src and dst | 412 * the function may adjust the blend coefficients. After this function is ca
lled the src and dst |
414 * blend coeffs will represent those used by backend API. | 413 * blend coeffs will represent those used by backend API. |
415 */ | 414 */ |
416 void setOutputStateInfo(const GrDrawTargetCaps&); | 415 void setOutputStateInfo(const GrDrawState& ds, const GrDrawTargetCaps&, |
| 416 int firstCoverageStageIdx, bool* separateCoverageFro
mColor); |
417 | 417 |
418 bool isEqual(const GrOptDrawState& that) const; | 418 bool isEqual(const GrOptDrawState& that) const; |
419 | 419 |
420 // These fields are roughly sorted by decreasing likelihood of being differe
nt in op== | 420 // These fields are roughly sorted by decreasing likelihood of being differe
nt in op== |
421 typedef GrTGpuResourceRef<GrRenderTarget> ProgramRenderTarget; | 421 typedef GrTGpuResourceRef<GrRenderTarget> ProgramRenderTarget; |
422 ProgramRenderTarget fRenderTarget; | 422 ProgramRenderTarget fRenderTarget; |
423 GrColor fColor; | 423 GrColor fColor; |
424 SkMatrix fViewMatrix; | 424 SkMatrix fViewMatrix; |
425 GrColor fBlendConstant; | 425 GrColor fBlendConstant; |
426 uint32_t fFlagBits; | 426 uint32_t fFlagBits; |
427 const GrVertexAttrib* fVAPtr; | 427 const GrVertexAttrib* fVAPtr; |
428 int fVACount; | 428 int fVACount; |
429 size_t fVAStride; | 429 size_t fVAStride; |
430 GrStencilSettings fStencilSettings; | 430 GrStencilSettings fStencilSettings; |
431 uint8_t fCoverage; | 431 uint8_t fCoverage; |
432 DrawFace fDrawFace; | 432 DrawFace fDrawFace; |
433 GrBlendCoeff fSrcBlend; | 433 GrBlendCoeff fSrcBlend; |
434 GrBlendCoeff fDstBlend; | 434 GrBlendCoeff fDstBlend; |
435 | 435 |
436 typedef SkSTArray<4, GrFragmentStage> FragmentStageArray; | 436 typedef SkSTArray<8, GrFragmentStage> FragmentStageArray; |
437 SkAutoTDelete<GrGeometryStage> fGeometryProcessor; | 437 SkAutoTDelete<GrGeometryStage> fGeometryProcessor; |
438 FragmentStageArray fColorStages; | 438 FragmentStageArray fColorStages; |
439 FragmentStageArray fCoverageStages; | 439 FragmentStageArray fCoverageStages; |
440 | 440 |
441 // This is simply a different representation of info in fVertexAttribs and t
hus does | 441 // This is simply a different representation of info in fVertexAttribs and t
hus does |
442 // not need to be compared in op==. | 442 // not need to be compared in op==. |
443 int fFixedFunctionVertexAttribIndices[kGrFixedFunctionVertexAttribBindingCnt
]; | 443 int fFixedFunctionVertexAttribIndices[kGrFixedFunctionVertexAttribBindingCnt
]; |
444 | 444 |
445 // These flags are needed to protect the code from creating an unused unifor
m color/coverage | 445 // These flags are needed to protect the code from creating an unused unifor
m color/coverage |
446 // which will cause shader compiler errors. | 446 // which will cause shader compiler errors. |
(...skipping 13 matching lines...) Expand all Loading... |
460 PrimaryOutputType fPrimaryOutputType : 8; | 460 PrimaryOutputType fPrimaryOutputType : 8; |
461 SecondaryOutputType fSecondaryOutputType : 8; | 461 SecondaryOutputType fSecondaryOutputType : 8; |
462 | 462 |
463 typedef SkRefCnt INHERITED; | 463 typedef SkRefCnt INHERITED; |
464 }; | 464 }; |
465 | 465 |
466 GR_MAKE_BITFIELD_OPS(GrOptDrawState::BlendOptFlags); | 466 GR_MAKE_BITFIELD_OPS(GrOptDrawState::BlendOptFlags); |
467 | 467 |
468 #endif | 468 #endif |
469 | 469 |
OLD | NEW |