Index: src/gpu/gl/GrGLShaderBuilder.cpp |
diff --git a/src/gpu/gl/GrGLShaderBuilder.cpp b/src/gpu/gl/GrGLShaderBuilder.cpp |
index 764d482389a122415d10f340b0404bd7e39d3947..6d5bec571afe8f349a719b4f10a80cfd286a480e 100644 |
--- a/src/gpu/gl/GrGLShaderBuilder.cpp |
+++ b/src/gpu/gl/GrGLShaderBuilder.cpp |
@@ -252,11 +252,11 @@ bool GrGLShaderBuilder::genProgram(const GrEffectStage* colorStages[], |
GrGLShaderBuilder::GrGLShaderBuilder(GrGpuGL* gpu, |
GrGLUniformManager* uniformManager, |
const GrGLProgramDesc& desc) |
- : fDesc(desc) |
- , fGpu(gpu) |
+ : fFSInputs(kVarsPerBlock) |
, fUniformManager(SkRef(uniformManager)) |
+ , fDesc(desc) |
+ , fGpu(gpu) |
, fFSFeaturesAddedMask(0) |
- , fFSInputs(kVarsPerBlock) |
, fFSOutputs(kMaxFSOutputs) |
, fUniforms(kVarsPerBlock) |
, fSetupFragPosition(false) |
@@ -508,6 +508,7 @@ const char* GrGLShaderBuilder::fragmentPosition() { |
"gl_FragCoord", |
GrGLShaderVar::kDefault_Precision, |
GrGLShaderVar::kUpperLeft_Origin); |
+ fUniformManager->appendFragmentInput(); |
fSetupFragPosition = true; |
} |
return "gl_FragCoord"; |
@@ -675,9 +676,7 @@ bool GrGLShaderBuilder::finish() { |
} |
this->bindProgramLocations(fOutput.fProgramID); |
- if (fUniformManager->isUsingBindUniform()) { |
- fUniformManager->getUniformLocations(fOutput.fProgramID, fUniforms); |
- } |
+ fUniformManager->bindProgramResourceLocations(fOutput.fProgramID, fUniforms); |
GL_CALL(LinkProgram(fOutput.fProgramID)); |
@@ -710,9 +709,7 @@ bool GrGLShaderBuilder::finish() { |
} |
} |
- if (!fUniformManager->isUsingBindUniform()) { |
- fUniformManager->getUniformLocations(fOutput.fProgramID, fUniforms); |
- } |
+ fUniformManager->resolveProgramResourceLocations(fOutput.fProgramID, fUniforms, fFSInputs); |
for (int i = 0; i < shadersToDelete.count(); ++i) { |
GL_CALL(DeleteShader(shadersToDelete[i])); |
@@ -921,10 +918,10 @@ bool GrGLFullShaderBuilder::addEffectAttribute(int attributeIndex, |
return true; |
} |
-void GrGLFullShaderBuilder::addVarying(GrSLType type, |
- const char* name, |
- const char** vsOutName, |
- const char** fsInName) { |
+GrGLUniformManager::FragmentInputHandle GrGLFullShaderBuilder::addVarying(GrSLType type, |
+ const char* name, |
+ const char** vsOutName, |
+ const char** fsInName) { |
fVSOutputs.push_back(); |
fVSOutputs.back().setType(type); |
fVSOutputs.back().setTypeModifier(GrGLShaderVar::kVaryingOut_TypeModifier); |
@@ -954,10 +951,18 @@ void GrGLFullShaderBuilder::addVarying(GrSLType type, |
{ |
fsName = fVSOutputs.back().accessName(); |
} |
- this->fsInputAppend().set(type, GrGLShaderVar::kVaryingIn_TypeModifier, *fsName); |
+ this->fFSInputs.push_back().set(type, GrGLShaderVar::kVaryingIn_TypeModifier, *fsName); |
+ GrGLUniformManager::FragmentInputHandle h = |
+ GrGLUniformManager::FragmentInputHandle::CreateFromFragmentInputIndex(fFSInputs.count() - 1); |
+ |
+ SkDEBUGCODE(GrGLUniformManager::FragmentInputHandle h2 =) |
+ fUniformManager->appendFragmentInput(); |
+ SkASSERT(h == h2); |
+ |
if (fsInName) { |
*fsInName = fsName->c_str(); |
} |
+ return h; |
} |
const SkString* GrGLFullShaderBuilder::getEffectAttributeName(int attributeIndex) const { |