| Index: src/gpu/gl/GrGLProgramDesc.cpp | 
| diff --git a/src/gpu/gl/GrGLProgramDesc.cpp b/src/gpu/gl/GrGLProgramDesc.cpp | 
| index f8dbbc26f9096858a19966f0fcba2f422c176528..474f7026e48845fe1816518d5426ce35a06da388 100644 | 
| --- a/src/gpu/gl/GrGLProgramDesc.cpp | 
| +++ b/src/gpu/gl/GrGLProgramDesc.cpp | 
| @@ -123,9 +123,6 @@ static bool get_meta_key(const GrProcessor& proc, | 
| uint32_t transformKey, | 
| uint32_t attribKey, | 
| GrProcessorKeyBuilder* b) { | 
| -    const GrBackendProcessorFactory& factory = proc.getFactory(); | 
| -    factory.getGLProcessorKey(proc, caps, b); | 
| - | 
| size_t processorKeySize = b->size(); | 
| uint32_t textureKey = gen_texture_key(proc, caps); | 
| uint32_t classID = proc.getFactory().classID(); | 
| @@ -170,6 +167,8 @@ bool GrGLProgramDescBuilder::Build(const GrOptDrawState& optState, | 
| if (optState.hasGeometryProcessor()) { | 
| const GrGeometryProcessor& gp = *optState.getGeometryProcessor(); | 
| GrProcessorKeyBuilder b(&desc->fKey); | 
| +        const GrBackendGeometryProcessorFactory& factory = gp.getFactory(); | 
| +        factory.getGLProcessorKey(gp, optState.getBatchTracker(), gpu->glCaps(), &b); | 
| if (!get_meta_key(gp, gpu->glCaps(), 0, gen_attrib_key(gp), &b)) { | 
| desc->fKey.reset(); | 
| return false; | 
| @@ -178,7 +177,10 @@ bool GrGLProgramDescBuilder::Build(const GrOptDrawState& optState, | 
|  | 
| for (int s = 0; s < optState.numFragmentStages(); ++s) { | 
| const GrPendingFragmentStage& fps = optState.getFragmentStage(s); | 
| +        const GrFragmentProcessor& fp = *fps.getProcessor(); | 
| GrProcessorKeyBuilder b(&desc->fKey); | 
| +        const GrBackendFragmentProcessorFactory& factory = fp.getFactory(); | 
| +        factory.getGLProcessorKey(fp, gpu->glCaps(), &b); | 
| if (!get_meta_key(*fps.getProcessor(), gpu->glCaps(), | 
| gen_transform_key(fps, requiresLocalCoordAttrib), 0, &b)) { | 
| desc->fKey.reset(); | 
|  |