diff options
Diffstat (limited to 'src/gpu/gl')
-rw-r--r-- | src/gpu/gl/GrGLProgram.cpp | 4 | ||||
-rw-r--r-- | src/gpu/gl/GrGLShaderBuilder.cpp | 7 | ||||
-rw-r--r-- | src/gpu/gl/GrGLShaderBuilder.h | 2 | ||||
-rw-r--r-- | src/gpu/gl/GrGpuGL.cpp | 2 | ||||
-rw-r--r-- | src/gpu/gl/GrGpuGL.h | 4 |
5 files changed, 15 insertions, 4 deletions
diff --git a/src/gpu/gl/GrGLProgram.cpp b/src/gpu/gl/GrGLProgram.cpp index b0435928eb..c1b3a31218 100644 --- a/src/gpu/gl/GrGLProgram.cpp +++ b/src/gpu/gl/GrGLProgram.cpp @@ -51,9 +51,7 @@ GrGLProgram::GrGLProgram(GrGpuGL* gpu, fColorFilterColor = GrColor_ILLEGAL; if (fDesc.getHeader().fHasVertexCode || - !fGpu->glCaps().fixedFunctionSupport() || - !fGpu->glCaps().pathRenderingSupport()) { - + !fGpu->shouldUseFixedFunctionTexturing()) { GrGLFullShaderBuilder fullBuilder(fGpu, fUniformManager, fDesc); if (this->genProgram(&fullBuilder, colorStages, coverageStages)) { fUniformHandles.fViewMatrixUni = fullBuilder.getViewMatrixUniform(); diff --git a/src/gpu/gl/GrGLShaderBuilder.cpp b/src/gpu/gl/GrGLShaderBuilder.cpp index 71942404e7..4d8df4e3b7 100644 --- a/src/gpu/gl/GrGLShaderBuilder.cpp +++ b/src/gpu/gl/GrGLShaderBuilder.cpp @@ -943,6 +943,13 @@ GrGLFragmentOnlyShaderBuilder::GrGLFragmentOnlyShaderBuilder(GrGpuGL* gpu, SkASSERT(GrGLProgramDesc::kAttribute_ColorInput != desc.getHeader().fCoverageInput); } +int GrGLFragmentOnlyShaderBuilder::addTexCoordSets(int count) { + int firstFreeCoordSet = fNumTexCoordSets; + fNumTexCoordSets += count; + SkASSERT(gpu()->glCaps().maxFixedFunctionTextureCoords() >= fNumTexCoordSets); + return firstFreeCoordSet; +} + GrGLProgramEffects* GrGLFragmentOnlyShaderBuilder::createAndEmitEffects( const GrEffectStage* effectStages[], const EffectKey effectKeys[], diff --git a/src/gpu/gl/GrGLShaderBuilder.h b/src/gpu/gl/GrGLShaderBuilder.h index d7ba58e077..3eff1df050 100644 --- a/src/gpu/gl/GrGLShaderBuilder.h +++ b/src/gpu/gl/GrGLShaderBuilder.h @@ -439,7 +439,7 @@ public: GrGLFragmentOnlyShaderBuilder(GrGpuGL*, GrGLUniformManager&, const GrGLProgramDesc&); int getNumTexCoordSets() const { return fNumTexCoordSets; } - int addTexCoordSets(int count) { return (fNumTexCoordSets += count) - count; } + int addTexCoordSets(int count); virtual GrGLProgramEffects* createAndEmitEffects( const GrEffectStage* effectStages[], diff --git a/src/gpu/gl/GrGpuGL.cpp b/src/gpu/gl/GrGpuGL.cpp index 1fd6f7dd45..108979dffc 100644 --- a/src/gpu/gl/GrGpuGL.cpp +++ b/src/gpu/gl/GrGpuGL.cpp @@ -2108,6 +2108,7 @@ void GrGpuGL::enableTexGen(int unitIdx, SkASSERT(this->glCaps().fixedFunctionSupport()); SkASSERT(this->caps()->pathRenderingSupport()); SkASSERT(components >= kS_TexGenComponents && components <= kSTR_TexGenComponents); + SkASSERT(this->glCaps().maxFixedFunctionTextureCoords() >= unitIdx); if (GR_GL_OBJECT_LINEAR == fHWTexGenSettings[unitIdx].fMode && components == fHWTexGenSettings[unitIdx].fNumComponents && @@ -2180,6 +2181,7 @@ void GrGpuGL::enableTexGen(int unitIdx, TexGenComponents components, const SkMat void GrGpuGL::disableUnusedTexGen(int numUsedTexCoordSets) { SkASSERT(this->glCaps().fixedFunctionSupport()); + SkASSERT(this->glCaps().maxFixedFunctionTextureCoords() >= numUsedTexCoordSets); for (int i = numUsedTexCoordSets; i < fHWActiveTexGenSets; i++) { if (0 == fHWTexGenSettings[i].fNumComponents) { diff --git a/src/gpu/gl/GrGpuGL.h b/src/gpu/gl/GrGpuGL.h index 65e82077bc..5ff34aec22 100644 --- a/src/gpu/gl/GrGpuGL.h +++ b/src/gpu/gl/GrGpuGL.h @@ -50,6 +50,10 @@ public: void enableTexGen(int unitIdx, TexGenComponents, const GrGLfloat* coefficients); void enableTexGen(int unitIdx, TexGenComponents, const SkMatrix& matrix); void disableUnusedTexGen(int numUsedTexCoordSets); + bool shouldUseFixedFunctionTexturing() const { + return this->glCaps().fixedFunctionSupport() && + this->glCaps().pathRenderingSupport(); + } bool programUnitTest(int maxStages); |