| Index: src/gpu/gl/builders/GrGLProgramBuilder.cpp
|
| diff --git a/src/gpu/gl/builders/GrGLProgramBuilder.cpp b/src/gpu/gl/builders/GrGLProgramBuilder.cpp
|
| index f4ee32b48db2579ff4b3ff9259c63d7829020690..41b84d806ab3a1b075e675acfd853f27eb2e3a2a 100644
|
| --- a/src/gpu/gl/builders/GrGLProgramBuilder.cpp
|
| +++ b/src/gpu/gl/builders/GrGLProgramBuilder.cpp
|
| @@ -99,10 +99,13 @@ bool GrGLProgramBuilder::genProgram(const GrEffectStage* colorStages[],
|
|
|
| GrGLProgramBuilder::GrGLProgramBuilder(GrGpuGL* gpu,
|
| const GrGLProgramDesc& desc)
|
| - : fFragOnly(!desc.getHeader().fHasVertexCode && gpu->shouldUseFixedFunctionTexturing())
|
| + : fFragOnly(!desc.getHeader().fRequiresVertexShader &&
|
| + gpu->glCaps().pathRenderingSupport() &&
|
| + gpu->glPathRendering()->texturingMode() == GrGLPathRendering::FixedFunction_TexturingMode)
|
| , fTexCoordSetCnt(0)
|
| , fProgramID(0)
|
| , fFS(this, desc)
|
| + , fSeparableVaryingInfos(kVarsPerBlock)
|
| , fDesc(desc)
|
| , fGpu(gpu)
|
| , fUniforms(kVarsPerBlock) {
|
| @@ -304,6 +307,16 @@ void GrGLProgramBuilder::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& GrGLProgramBuilder::ctxInfo() const {
|
| @@ -345,6 +358,18 @@ void GrGLFullProgramBuilder::addVarying(GrSLType type,
|
| fFS.addVarying(type, fsInputName->c_str(), fsInName);
|
| }
|
|
|
| +GrGLFullProgramBuilder::VaryingHandle
|
| +GrGLFullProgramBuilder::addSeparableVarying(GrSLType type,
|
| + const char* name,
|
| + const char** vsOutName,
|
| + const char** fsInName) {
|
| + addVarying(type, name, vsOutName, fsInName);
|
| + SeparableVaryingInfo& varying = fSeparableVaryingInfos.push_back();
|
| + varying.fVariable = fFS.fInputs.back();
|
| + return VaryingHandle::CreateFromSeparableVaryingIndex(fSeparableVaryingInfos.count() - 1);
|
| +}
|
| +
|
| +
|
| GrGLProgramEffects* GrGLFullProgramBuilder::createAndEmitEffects(
|
| const GrEffectStage* effectStages[],
|
| int effectCnt,
|
| @@ -381,7 +406,7 @@ void GrGLFullProgramBuilder::bindProgramLocations(GrGLuint programId) {
|
| GrGLFragmentOnlyProgramBuilder::GrGLFragmentOnlyProgramBuilder(GrGpuGL* gpu,
|
| const GrGLProgramDesc& desc)
|
| : INHERITED(gpu, desc) {
|
| - SkASSERT(!desc.getHeader().fHasVertexCode);
|
| + SkASSERT(!desc.getHeader().fRequiresVertexShader);
|
| SkASSERT(gpu->glCaps().pathRenderingSupport());
|
| SkASSERT(GrGLProgramDesc::kAttribute_ColorInput != desc.getHeader().fColorInput);
|
| SkASSERT(GrGLProgramDesc::kAttribute_ColorInput != desc.getHeader().fCoverageInput);
|
|
|