Speed up GrDrawState handling.
Compact GrDrawState and nested structs; dynamically only copy and compare
the fields actually active on the structs in question.
Yields 10-20% speedup of text benchmarks in GPU configuration.
Could probably get additional marginal speedup by ignoring unused
kernel fields.
Has some fragile constructs: pointer math on members to compute
sizes of portions of structs.
Removes fields necessary for GrTesselatedPathRenderer.
git-svn-id: http://skia.googlecode.com/svn/trunk@2644 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/gpu/GrGpuGL.cpp b/src/gpu/GrGpuGL.cpp
index d768a24..c162e11 100644
--- a/src/gpu/GrGpuGL.cpp
+++ b/src/gpu/GrGpuGL.cpp
@@ -622,8 +622,9 @@
fActiveTextureUnitIdx = -1;
// illegal values
- fHWDrawState.fSrcBlend = (GrBlendCoeff)-1;
- fHWDrawState.fDstBlend = (GrBlendCoeff)-1;
+ //fHWDrawState.fSrcBlend = (GrBlendCoeff)(uint8_t)-1;
+ fHWDrawState.fSrcBlend = (GrBlendCoeff)0xFF;
+ fHWDrawState.fDstBlend = (GrBlendCoeff)(uint8_t)-1;
fHWDrawState.fBlendConstant = 0x00000000;
GL_CALL(BlendColor(0,0,0,0));
@@ -1872,7 +1873,8 @@
GrAssert(settings->fFrontFunc < kBasicStencilFuncCount);
frontFunc = grToGLStencilFunc[settings->fFrontFunc];
} else {
- frontFunc = grToGLStencilFunc[ConvertStencilFunc(stencilClip, settings->fFrontFunc)];
+ frontFunc = grToGLStencilFunc[ConvertStencilFunc(
+ stencilClip, settings->fFrontFunc)];
ConvertStencilFuncAndMask(settings->fFrontFunc,
stencilClip,
@@ -1882,14 +1884,14 @@
&frontMask);
frontWriteMask &= userStencilMask;
}
- GrAssert(settings->fFrontFailOp >= 0 &&
- (unsigned) settings->fFrontFailOp < GR_ARRAY_COUNT(grToGLStencilOp));
- GrAssert(settings->fFrontPassOp >= 0 &&
- (unsigned) settings->fFrontPassOp < GR_ARRAY_COUNT(grToGLStencilOp));
- GrAssert(settings->fBackFailOp >= 0 &&
- (unsigned) settings->fBackFailOp < GR_ARRAY_COUNT(grToGLStencilOp));
- GrAssert(settings->fBackPassOp >= 0 &&
- (unsigned) settings->fBackPassOp < GR_ARRAY_COUNT(grToGLStencilOp));
+ GrAssert((size_t)
+ settings->fFrontFailOp < GR_ARRAY_COUNT(grToGLStencilOp));
+ GrAssert((size_t)
+ settings->fFrontPassOp < GR_ARRAY_COUNT(grToGLStencilOp));
+ GrAssert((size_t)
+ settings->fBackFailOp < GR_ARRAY_COUNT(grToGLStencilOp));
+ GrAssert((size_t)
+ settings->fBackPassOp < GR_ARRAY_COUNT(grToGLStencilOp));
if (this->getCaps().fTwoSidedStencilSupport) {
GrGLenum backFunc;
@@ -1902,7 +1904,8 @@
GrAssert(settings->fBackFunc < kBasicStencilFuncCount);
backFunc = grToGLStencilFunc[settings->fBackFunc];
} else {
- backFunc = grToGLStencilFunc[ConvertStencilFunc(stencilClip, settings->fBackFunc)];
+ backFunc = grToGLStencilFunc[ConvertStencilFunc(
+ stencilClip, settings->fBackFunc)];
ConvertStencilFuncAndMask(settings->fBackFunc,
stencilClip,
clipStencilMask,