| Index: src/gpu/gl/GrGLCreateNullInterface.cpp
 | 
| diff --git a/src/gpu/gl/GrGLCreateNullInterface.cpp b/src/gpu/gl/GrGLCreateNullInterface.cpp
 | 
| index 80a7cfbd2cdba26465042be242be89925edf01e0..7282667913b9b368a58ae7983415ef2127fe58da 100644
 | 
| --- a/src/gpu/gl/GrGLCreateNullInterface.cpp
 | 
| +++ b/src/gpu/gl/GrGLCreateNullInterface.cpp
 | 
| @@ -112,7 +112,7 @@ private:
 | 
|  /** Null interface implementation */
 | 
|  class NullInterface : public GrGLTestInterface {
 | 
|  public:
 | 
| -    NullInterface()
 | 
| +    NullInterface(bool enableNVPR)
 | 
|          : fCurrArrayBuffer(0)
 | 
|          , fCurrElementArrayBuffer(0)
 | 
|          , fCurrPixelPackBuffer(0)
 | 
| @@ -120,7 +120,20 @@ public:
 | 
|          , fCurrProgramID(0)
 | 
|          , fCurrShaderID(0)
 | 
|          , fCurrGenericID(0)
 | 
| -        , fCurrUniformLocation(0) {
 | 
| +        , fCurrUniformLocation(0)
 | 
| +        , fCurrPathID(0) {
 | 
| +        fExtensions.push_back("GL_ARB_framebuffer_object");
 | 
| +        fExtensions.push_back("GL_ARB_blend_func_extended");
 | 
| +        fExtensions.push_back("GL_ARB_timer_query");
 | 
| +        fExtensions.push_back("GL_ARB_draw_buffers");
 | 
| +        fExtensions.push_back("GL_ARB_occlusion_query");
 | 
| +        fExtensions.push_back("GL_EXT_stencil_wrap");
 | 
| +        if (enableNVPR) {
 | 
| +            fExtensions.push_back("GL_NV_path_rendering");
 | 
| +            fExtensions.push_back("GL_ARB_program_interface_query");
 | 
| +        }
 | 
| +        fExtensions.push_back(nullptr);
 | 
| +
 | 
|          this->init(kGL_GrGLStandard);
 | 
|      }
 | 
|  
 | 
| @@ -293,7 +306,7 @@ public:
 | 
|                  break;
 | 
|              case GR_GL_NUM_EXTENSIONS: {
 | 
|                  GrGLint i = 0;
 | 
| -                while (kExtensions[i++]);
 | 
| +                while (fExtensions[i++]);
 | 
|                  *params = i;
 | 
|                  break;
 | 
|              }
 | 
| @@ -377,7 +390,7 @@ public:
 | 
|                  GrGLint count;
 | 
|                  this->getIntegerv(GR_GL_NUM_EXTENSIONS, &count);
 | 
|                  if ((GrGLint)i <= count) {
 | 
| -                    return (const GrGLubyte*) kExtensions[i];
 | 
| +                    return (const GrGLubyte*) fExtensions[i];
 | 
|                  } else {
 | 
|                      return nullptr;
 | 
|                  }
 | 
| @@ -507,16 +520,24 @@ public:
 | 
|          }
 | 
|      };
 | 
|  
 | 
| +    // NV_path_rendering
 | 
| +    GrGLuint genPaths(GrGLsizei range) override {
 | 
| +        return ++fCurrPathID;
 | 
| +    }
 | 
| +
 | 
| +
 | 
|  private:
 | 
| -    BufferManager   fBufferManager;
 | 
| -    GrGLuint        fCurrArrayBuffer;
 | 
| -    GrGLuint        fCurrElementArrayBuffer;
 | 
| -    GrGLuint        fCurrPixelPackBuffer;
 | 
| -    GrGLuint        fCurrPixelUnpackBuffer;
 | 
| -    GrGLuint        fCurrProgramID;
 | 
| -    GrGLuint        fCurrShaderID;
 | 
| -    GrGLuint        fCurrGenericID;
 | 
| -    GrGLuint        fCurrUniformLocation;
 | 
| +    BufferManager          fBufferManager;
 | 
| +    GrGLuint               fCurrArrayBuffer;
 | 
| +    GrGLuint               fCurrElementArrayBuffer;
 | 
| +    GrGLuint               fCurrPixelPackBuffer;
 | 
| +    GrGLuint               fCurrPixelUnpackBuffer;
 | 
| +    GrGLuint               fCurrProgramID;
 | 
| +    GrGLuint               fCurrShaderID;
 | 
| +    GrGLuint               fCurrGenericID;
 | 
| +    GrGLuint               fCurrUniformLocation;
 | 
| +    GrGLuint               fCurrPathID;
 | 
| +    SkTArray<const char*>  fExtensions;
 | 
|  
 | 
|      // the OpenGLES 2.0 spec says this must be >= 128
 | 
|      static const GrGLint kDefaultMaxVertexUniformVectors = 128;
 | 
| @@ -530,19 +551,17 @@ private:
 | 
|      // the OpenGLES 2.0 spec says this must be >= 8
 | 
|      static const GrGLint kDefaultMaxVaryingVectors = 8;
 | 
|  
 | 
| -    static const char* kExtensions[];
 | 
| -
 | 
| -    static const GrGLubyte* CombinedExtensionString() {
 | 
| +    const GrGLubyte* CombinedExtensionString() {
 | 
|          static SkString gExtString;
 | 
|          static SkMutex gMutex;
 | 
|          gMutex.acquire();
 | 
|          if (0 == gExtString.size()) {
 | 
|              int i = 0;
 | 
| -            while (kExtensions[i]) {
 | 
| +            while (fExtensions[i]) {
 | 
|                  if (i > 0) {
 | 
|                      gExtString.append(" ");
 | 
|                  }
 | 
| -                gExtString.append(kExtensions[i]);
 | 
| +                gExtString.append(fExtensions[i]);
 | 
|                  ++i;
 | 
|              }
 | 
|          }
 | 
| @@ -600,16 +619,6 @@ private:
 | 
|      typedef GrGLTestInterface INHERITED;
 | 
|  };
 | 
|  
 | 
| -const char* NullInterface::kExtensions[] = {
 | 
| -    "GL_ARB_framebuffer_object",
 | 
| -    "GL_ARB_blend_func_extended",
 | 
| -    "GL_ARB_timer_query",
 | 
| -    "GL_ARB_draw_buffers",
 | 
| -    "GL_ARB_occlusion_query",
 | 
| -    "GL_EXT_stencil_wrap",
 | 
| -    nullptr, // signifies the end of the array.
 | 
| -};
 | 
| -
 | 
|  }  // anonymous namespace
 | 
|  
 | 
| -const GrGLInterface* GrGLCreateNullInterface() { return new NullInterface; }
 | 
| +const GrGLInterface* GrGLCreateNullInterface(bool enableNVPR) { return new NullInterface(enableNVPR); }
 | 
| 
 |