aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/gl
diff options
context:
space:
mode:
Diffstat (limited to 'src/gpu/gl')
-rw-r--r--src/gpu/gl/GrGLProgram.cpp4
-rw-r--r--src/gpu/gl/GrGLShaderBuilder.cpp7
-rw-r--r--src/gpu/gl/GrGLShaderBuilder.h2
-rw-r--r--src/gpu/gl/GrGpuGL.cpp2
-rw-r--r--src/gpu/gl/GrGpuGL.h4
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);