Index: src/gpu/gl/GrGLProgram.h |
=================================================================== |
--- src/gpu/gl/GrGLProgram.h (revision 8407) |
+++ src/gpu/gl/GrGLProgram.h (working copy) |
@@ -10,8 +10,8 @@ |
#define GrGLProgram_DEFINED |
#include "GrDrawState.h" |
-#include "GrGLEffect.h" |
#include "GrGLContext.h" |
+#include "GrGLProgramDesc.h" |
#include "GrGLSL.h" |
#include "GrGLTexture.h" |
#include "GrGLUniformManager.h" |
@@ -24,10 +24,6 @@ |
class GrGLShaderBuilder; |
class SkMWCRandom; |
-// optionally compile the experimental GS code. Set to GR_DEBUG |
-// so that debug build bots will execute the code. |
-#define GR_GL_EXPERIMENTAL_GS GR_DEBUG |
- |
/** |
* This class manages a GPU program and records per-program information. |
* We can specify the attribute locations so that they are constant |
@@ -41,22 +37,8 @@ |
public: |
SK_DECLARE_INST_COUNT(GrGLProgram) |
- class Desc; |
- |
- /** |
- * Builds a program descriptor from a GrDrawState. Whether the primitive type is points, the |
- * output of GrDrawState::getBlendOpts, and the caps of the GrGpuGL are also inputs. |
- */ |
- static void BuildDesc(const GrDrawState&, |
- bool isPoints, |
- GrDrawState::BlendOptFlags, |
- GrBlendCoeff srcCoeff, |
- GrBlendCoeff dstCoeff, |
- const GrGpuGL* gpu, |
- Desc* outDesc); |
- |
static GrGLProgram* Create(const GrGLContext& gl, |
- const Desc& desc, |
+ const GrGLProgramDesc& desc, |
const GrEffectStage* stages[]); |
virtual ~GrGLProgram(); |
@@ -71,7 +53,7 @@ |
*/ |
void overrideBlend(GrBlendCoeff* srcCoeff, GrBlendCoeff* dstCoeff) const; |
- const Desc& getDesc() { return fDesc; } |
+ const GrGLProgramDesc& getDesc() { return fDesc; } |
/** |
* Gets the GL program ID for this program. |
@@ -123,88 +105,9 @@ |
*/ |
void setData(GrGpuGL*, GrColor color, GrColor coverage, SharedGLState*); |
- // Parameters that affect code generation |
- // This structs should be kept compact; it is input to an expensive hash key generator. |
- class Desc { |
- public: |
- Desc() { |
- // since we use this as part of a key we can't have any uninitialized |
- // padding |
- memset(this, 0, sizeof(Desc)); |
- } |
- |
- // returns this as a uint32_t array to be used as a key in the program cache |
- const uint32_t* asKey() const { |
- return reinterpret_cast<const uint32_t*>(this); |
- } |
- |
- // For unit testing. |
- void setRandom(SkMWCRandom*, |
- const GrGpuGL* gpu, |
- const GrEffectStage stages[GrDrawState::kNumStages]); |
- |
- private: |
- // Specifies where the initial color comes from before the stages are applied. |
- enum ColorInput { |
- kSolidWhite_ColorInput, |
- kTransBlack_ColorInput, |
- kAttribute_ColorInput, |
- kUniform_ColorInput, |
- |
- kColorInputCnt |
- }; |
- // Dual-src blending makes use of a secondary output color that can be |
- // used as a per-pixel blend coefficient. This controls whether a |
- // secondary source is output and what value it holds. |
- enum DualSrcOutput { |
- kNone_DualSrcOutput, |
- kCoverage_DualSrcOutput, |
- kCoverageISA_DualSrcOutput, |
- kCoverageISC_DualSrcOutput, |
- |
- kDualSrcOutputCnt |
- }; |
- |
- // should the FS discard if the coverage is zero (to avoid stencil manipulation) |
- bool fDiscardIfZeroCoverage; |
- |
- // stripped of bits that don't affect program generation |
- GrAttribBindings fAttribBindings; |
- |
- /** Non-zero if this stage has an effect */ |
- GrGLEffect::EffectKey fEffectKeys[GrDrawState::kNumStages]; |
- |
- // To enable experimental geometry shader code (not for use in |
- // production) |
-#if GR_GL_EXPERIMENTAL_GS |
- bool fExperimentalGS; |
-#endif |
- uint8_t fColorInput; // casts to enum ColorInput |
- uint8_t fCoverageInput; // casts to enum ColorInput |
- uint8_t fDualSrcOutput; // casts to enum DualSrcOutput |
- int8_t fFirstCoverageStage; |
- SkBool8 fEmitsPointSize; |
- uint8_t fColorFilterXfermode; // casts to enum SkXfermode::Mode |
- |
- int8_t fPositionAttributeIndex; |
- int8_t fColorAttributeIndex; |
- int8_t fCoverageAttributeIndex; |
- int8_t fLocalCoordsAttributeIndex; |
- |
- friend class GrGLProgram; |
- }; |
- |
- // Layout information for OpenGL vertex attributes |
- struct AttribLayout { |
- GrGLint fCount; |
- GrGLenum fType; |
- GrGLboolean fNormalized; |
- }; |
- static const AttribLayout kAttribLayouts[kGrVertexAttribTypeCount]; |
- |
private: |
GrGLProgram(const GrGLContext& gl, |
- const Desc& desc, |
+ const GrGLProgramDesc& desc, |
const GrEffectStage* stages[]); |
bool succeeded() const { return 0 != fProgramID; } |
@@ -281,7 +184,7 @@ |
GrGLEffect* fEffects[GrDrawState::kNumStages]; |
- Desc fDesc; |
+ GrGLProgramDesc fDesc; |
const GrGLContext& fContext; |
GrGLUniformManager fUniformManager; |