Index: src/gpu/gl/GrGLShaderBuilder.cpp |
diff --git a/src/gpu/gl/GrGLShaderBuilder.cpp b/src/gpu/gl/GrGLShaderBuilder.cpp |
index fe9a66ae42ff328871c5de08ad38ca92c3e0bb4b..5b8e690612e16b71674fdc0260e34c1a2fc22448 100644 |
--- a/src/gpu/gl/GrGLShaderBuilder.cpp |
+++ b/src/gpu/gl/GrGLShaderBuilder.cpp |
@@ -232,10 +232,11 @@ GrGLShaderBuilder::GrGLShaderBuilder(GrGpuGL* gpu, |
: fHasVertexShader(false) |
, fTexCoordSetCnt(0) |
, fProgramID(0) |
+ , fFSInputs(kVarsPerBlock) |
+ , fSeparableVaryingInfos(kVarsPerBlock) |
, fDesc(desc) |
, fGpu(gpu) |
, fFSFeaturesAddedMask(0) |
- , fFSInputs(kVarsPerBlock) |
, fFSOutputs(kMaxFSOutputs) |
, fUniforms(kVarsPerBlock) |
, fSetupFragPosition(false) |
@@ -775,6 +776,16 @@ void GrGLShaderBuilder::resolveProgramLocations(GrGLuint programId) { |
fUniforms[i].fLocation = location; |
} |
} |
+ |
+ int count = fSeparableVaryingInfos.count(); |
+ for (int i = 0; i < count; ++i) { |
+ GrGLint location; |
+ GL_CALL_RET(location, |
+ GetProgramResourceLocation(programId, |
+ GR_GL_FRAGMENT_INPUT, |
+ fSeparableVaryingInfos[i].fVariable.c_str())); |
+ fSeparableVaryingInfos[i].fLocation = location; |
+ } |
} |
const GrGLContextInfo& GrGLShaderBuilder::ctxInfo() const { |
@@ -914,12 +925,23 @@ 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); |
if (fsInName) { |
*fsInName = fsName->c_str(); |
} |
} |
+GrGLFullShaderBuilder::VaryingHandle |
+GrGLFullShaderBuilder::addSeparableVarying(GrSLType type, |
+ const char* name, |
+ const char** vsOutName, |
+ const char** fsInName) { |
+ addVarying(type, name, vsOutName, fsInName); |
+ SeparableVaryingInfo& varying = fSeparableVaryingInfos.push_back(); |
+ varying.fVariable = fFSInputs.back(); |
+ return VaryingHandle::CreateFromSeparableVaryingIndex(fSeparableVaryingInfos.count() - 1); |
+} |
+ |
const SkString* GrGLFullShaderBuilder::getEffectAttributeName(int attributeIndex) const { |
const AttributePair* attribEnd = fEffectAttributes.end(); |
for (const AttributePair* attrib = fEffectAttributes.begin(); attrib != attribEnd; ++attrib) { |