| Index: src/gpu/gl/GrGLInterface.cpp | 
| diff --git a/src/gpu/gl/GrGLInterface.cpp b/src/gpu/gl/GrGLInterface.cpp | 
| index b81d9ceeb84b378366a3e119a04e6812496327e9..89e23f79f156946826ec97c3b6a8794c2f72c442 100644 | 
| --- a/src/gpu/gl/GrGLInterface.cpp | 
| +++ b/src/gpu/gl/GrGLInterface.cpp | 
| @@ -39,57 +39,23 @@ const GrGLInterface* GrGLInterfaceRemoveNVPR(const GrGLInterface* interface) { | 
| GrGLInterface* newInterface = GrGLInterface::NewClone(interface); | 
|  | 
| newInterface->fExtensions.remove("GL_NV_path_rendering"); | 
| - | 
| newInterface->fFunctions.fPathCommands = NULL; | 
| newInterface->fFunctions.fPathCoords = NULL; | 
| -    newInterface->fFunctions.fPathSubCommands = NULL; | 
| -    newInterface->fFunctions.fPathSubCoords = NULL; | 
| -    newInterface->fFunctions.fPathString = NULL; | 
| -    newInterface->fFunctions.fPathGlyphs = NULL; | 
| -    newInterface->fFunctions.fPathGlyphRange = NULL; | 
| -    newInterface->fFunctions.fWeightPaths = NULL; | 
| -    newInterface->fFunctions.fCopyPath = NULL; | 
| -    newInterface->fFunctions.fInterpolatePaths = NULL; | 
| -    newInterface->fFunctions.fTransformPath = NULL; | 
| -    newInterface->fFunctions.fPathParameteriv = NULL; | 
| newInterface->fFunctions.fPathParameteri = NULL; | 
| -    newInterface->fFunctions.fPathParameterfv = NULL; | 
| newInterface->fFunctions.fPathParameterf = NULL; | 
| -    newInterface->fFunctions.fPathDashArray = NULL; | 
| newInterface->fFunctions.fGenPaths = NULL; | 
| newInterface->fFunctions.fDeletePaths = NULL; | 
| -    newInterface->fFunctions.fIsPath = NULL; | 
| newInterface->fFunctions.fPathStencilFunc = NULL; | 
| -    newInterface->fFunctions.fPathStencilDepthOffset = NULL; | 
| newInterface->fFunctions.fStencilFillPath = NULL; | 
| newInterface->fFunctions.fStencilStrokePath = NULL; | 
| newInterface->fFunctions.fStencilFillPathInstanced = NULL; | 
| newInterface->fFunctions.fStencilStrokePathInstanced = NULL; | 
| -    newInterface->fFunctions.fPathCoverDepthFunc = NULL; | 
| -    newInterface->fFunctions.fPathColorGen = NULL; | 
| newInterface->fFunctions.fPathTexGen = NULL; | 
| -    newInterface->fFunctions.fPathFogGen = NULL; | 
| newInterface->fFunctions.fCoverFillPath = NULL; | 
| newInterface->fFunctions.fCoverStrokePath = NULL; | 
| newInterface->fFunctions.fCoverFillPathInstanced = NULL; | 
| newInterface->fFunctions.fCoverStrokePathInstanced = NULL; | 
| -    newInterface->fFunctions.fGetPathParameteriv = NULL; | 
| -    newInterface->fFunctions.fGetPathParameterfv = NULL; | 
| -    newInterface->fFunctions.fGetPathCommands = NULL; | 
| -    newInterface->fFunctions.fGetPathCoords = NULL; | 
| -    newInterface->fFunctions.fGetPathDashArray = NULL; | 
| -    newInterface->fFunctions.fGetPathMetrics = NULL; | 
| -    newInterface->fFunctions.fGetPathMetricRange = NULL; | 
| -    newInterface->fFunctions.fGetPathSpacing = NULL; | 
| -    newInterface->fFunctions.fGetPathColorGeniv = NULL; | 
| -    newInterface->fFunctions.fGetPathColorGenfv = NULL; | 
| -    newInterface->fFunctions.fGetPathTexGeniv = NULL; | 
| -    newInterface->fFunctions.fGetPathTexGenfv = NULL; | 
| -    newInterface->fFunctions.fIsPointInFillPath = NULL; | 
| -    newInterface->fFunctions.fIsPointInStrokePath = NULL; | 
| -    newInterface->fFunctions.fGetPathLength = NULL; | 
| -    newInterface->fFunctions.fPointAlongPath = NULL; | 
| - | 
| +    newInterface->fFunctions.fProgramPathFragmentInputGen = NULL; | 
| return newInterface; | 
| } | 
|  | 
| @@ -292,65 +258,6 @@ bool GrGLInterface::validate() const { | 
| RETURN_FALSE_INTERFACE | 
| } | 
| } | 
| -        if (fExtensions.has("GL_EXT_direct_state_access")) { | 
| -            if (NULL == fFunctions.fMatrixLoadf || | 
| -                NULL == fFunctions.fMatrixLoadIdentity) { | 
| -                RETURN_FALSE_INTERFACE | 
| -            } | 
| -        } | 
| -        if (fExtensions.has("GL_NV_path_rendering")) { | 
| -            if (NULL == fFunctions.fPathCommands || | 
| -                NULL == fFunctions.fPathCoords || | 
| -                NULL == fFunctions.fPathSubCommands || | 
| -                NULL == fFunctions.fPathSubCoords || | 
| -                NULL == fFunctions.fPathString || | 
| -                NULL == fFunctions.fPathGlyphs || | 
| -                NULL == fFunctions.fPathGlyphRange || | 
| -                NULL == fFunctions.fWeightPaths || | 
| -                NULL == fFunctions.fCopyPath || | 
| -                NULL == fFunctions.fInterpolatePaths || | 
| -                NULL == fFunctions.fTransformPath || | 
| -                NULL == fFunctions.fPathParameteriv || | 
| -                NULL == fFunctions.fPathParameteri || | 
| -                NULL == fFunctions.fPathParameterfv || | 
| -                NULL == fFunctions.fPathParameterf || | 
| -                NULL == fFunctions.fPathDashArray || | 
| -                NULL == fFunctions.fGenPaths || | 
| -                NULL == fFunctions.fDeletePaths || | 
| -                NULL == fFunctions.fIsPath || | 
| -                NULL == fFunctions.fPathStencilFunc || | 
| -                NULL == fFunctions.fPathStencilDepthOffset || | 
| -                NULL == fFunctions.fStencilFillPath || | 
| -                NULL == fFunctions.fStencilStrokePath || | 
| -                NULL == fFunctions.fStencilFillPathInstanced || | 
| -                NULL == fFunctions.fStencilStrokePathInstanced || | 
| -                NULL == fFunctions.fPathCoverDepthFunc || | 
| -                NULL == fFunctions.fPathColorGen || | 
| -                NULL == fFunctions.fPathTexGen || | 
| -                NULL == fFunctions.fPathFogGen || | 
| -                NULL == fFunctions.fCoverFillPath || | 
| -                NULL == fFunctions.fCoverStrokePath || | 
| -                NULL == fFunctions.fCoverFillPathInstanced || | 
| -                NULL == fFunctions.fCoverStrokePathInstanced || | 
| -                NULL == fFunctions.fGetPathParameteriv || | 
| -                NULL == fFunctions.fGetPathParameterfv || | 
| -                NULL == fFunctions.fGetPathCommands || | 
| -                NULL == fFunctions.fGetPathCoords || | 
| -                NULL == fFunctions.fGetPathDashArray || | 
| -                NULL == fFunctions.fGetPathMetrics || | 
| -                NULL == fFunctions.fGetPathMetricRange || | 
| -                NULL == fFunctions.fGetPathSpacing || | 
| -                NULL == fFunctions.fGetPathColorGeniv || | 
| -                NULL == fFunctions.fGetPathColorGenfv || | 
| -                NULL == fFunctions.fGetPathTexGeniv || | 
| -                NULL == fFunctions.fGetPathTexGenfv || | 
| -                NULL == fFunctions.fIsPointInFillPath || | 
| -                NULL == fFunctions.fIsPointInStrokePath || | 
| -                NULL == fFunctions.fGetPathLength || | 
| -                NULL == fFunctions.fPointAlongPath) { | 
| -                RETURN_FALSE_INTERFACE | 
| -            } | 
| -        } | 
| } | 
|  | 
| // optional function on desktop before 1.3 | 
| @@ -526,5 +433,48 @@ bool GrGLInterface::validate() const { | 
| RETURN_FALSE_INTERFACE; | 
| } | 
| } | 
| + | 
| +    if ((kGL_GrGLStandard == fStandard && fExtensions.has("GL_EXT_direct_state_access")) || | 
| +        (kGLES_GrGLStandard == fStandard && fExtensions.has("GL_NV_path_rendering"))) { | 
| +        if (NULL == fFunctions.fMatrixLoadf || | 
| +            NULL == fFunctions.fMatrixLoadIdentity) { | 
| +            RETURN_FALSE_INTERFACE | 
| +        } | 
| +    } | 
| + | 
| +    if ((kGL_GrGLStandard == fStandard && | 
| +         (glVer >= GR_GL_VER(4,3) || fExtensions.has("GL_ARB_program_interface_query"))) || | 
| +        (kGLES_GrGLStandard == fStandard && glVer >= GR_GL_VER(3,1))) { | 
| +        if (NULL == fFunctions.fGetProgramResourceLocation) { | 
| +            RETURN_FALSE_INTERFACE | 
| +        } | 
| +    } | 
| + | 
| +    if (fExtensions.has("GL_NV_path_rendering")) { | 
| +        if (NULL == fFunctions.fPathCommands || | 
| +            NULL == fFunctions.fPathCoords || | 
| +            NULL == fFunctions.fPathParameteri || | 
| +            NULL == fFunctions.fPathParameterf || | 
| +            NULL == fFunctions.fGenPaths || | 
| +            NULL == fFunctions.fDeletePaths || | 
| +            NULL == fFunctions.fPathStencilFunc || | 
| +            NULL == fFunctions.fStencilFillPath || | 
| +            NULL == fFunctions.fStencilStrokePath || | 
| +            NULL == fFunctions.fStencilFillPathInstanced || | 
| +            NULL == fFunctions.fStencilStrokePathInstanced || | 
| +            NULL == fFunctions.fCoverFillPath || | 
| +            NULL == fFunctions.fCoverStrokePath || | 
| +            NULL == fFunctions.fCoverFillPathInstanced || | 
| +            NULL == fFunctions.fCoverStrokePathInstanced) { | 
| +            RETURN_FALSE_INTERFACE | 
| +        } | 
| +        // Currently ProgramPathFragmentInputGen is not used on | 
| +        // OpenGL, rather PathTexGen is. | 
| +        if ((kGL_GrGLStandard == fStandard && NULL == fFunctions.fPathTexGen) || | 
| +            (kGLES_GrGLStandard == fStandard && NULL == fFunctions.fProgramPathFragmentInputGen)) { | 
| +            RETURN_FALSE_INTERFACE | 
| +        } | 
| +    } | 
| + | 
| return true; | 
| } | 
|  |