| 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 {
|
|
|