| Index: src/gpu/GrContext.cpp
 | 
| diff --git a/src/gpu/GrContext.cpp b/src/gpu/GrContext.cpp
 | 
| index 5baf72209385afdc210faaf90134a07abc8e3cde..ca98ffb416a7f6fec0364cedbc38b8abcda5c6f5 100755
 | 
| --- a/src/gpu/GrContext.cpp
 | 
| +++ b/src/gpu/GrContext.cpp
 | 
| @@ -138,6 +138,7 @@ static int32_t next_id() {
 | 
|  
 | 
|  GrContext::GrContext() : fUniqueID(next_id()) {
 | 
|      fGpu = NULL;
 | 
| +    fCaps = NULL;
 | 
|      fResourceCache = NULL;
 | 
|      fResourceProvider = NULL;
 | 
|      fPathRendererChain = NULL;
 | 
| @@ -159,6 +160,7 @@ bool GrContext::init(GrBackend backend, GrBackendContext backendContext,
 | 
|  }
 | 
|  
 | 
|  void GrContext::initCommon() {
 | 
| +    fCaps = SkRef(fGpu->caps());
 | 
|      fResourceCache = SkNEW(GrResourceCache);
 | 
|      fResourceCache->setOverBudgetCallback(OverBudgetCB, this);
 | 
|      fResourceProvider = SkNEW_ARGS(GrResourceProvider, (fGpu, fResourceCache));
 | 
| @@ -177,6 +179,7 @@ void GrContext::initCommon() {
 | 
|  
 | 
|  GrContext::~GrContext() {
 | 
|      if (!fGpu) {
 | 
| +        SkASSERT(!fCaps);
 | 
|          return;
 | 
|      }
 | 
|  
 | 
| @@ -191,6 +194,7 @@ GrContext::~GrContext() {
 | 
|      SkDELETE(fBatchFontCache);
 | 
|  
 | 
|      fGpu->unref();
 | 
| +    fCaps->unref();
 | 
|      SkSafeUnref(fPathRendererChain);
 | 
|      SkSafeUnref(fSoftwarePathRenderer);
 | 
|  }
 | 
| @@ -258,18 +262,6 @@ GrTextContext* GrContext::createTextContext(GrRenderTarget* renderTarget,
 | 
|  
 | 
|  ////////////////////////////////////////////////////////////////////////////////
 | 
|  
 | 
| -bool GrContext::shaderDerivativeSupport() const {
 | 
| -    return fGpu->caps()->shaderCaps()->shaderDerivativeSupport();
 | 
| -}
 | 
| -
 | 
| -bool GrContext::isConfigTexturable(GrPixelConfig config) const {
 | 
| -    return fGpu->caps()->isConfigTexturable(config);
 | 
| -}
 | 
| -
 | 
| -bool GrContext::npotTextureTileSupport() const {
 | 
| -    return fGpu->caps()->npotTextureTileSupport();
 | 
| -}
 | 
| -
 | 
|  void GrContext::OverBudgetCB(void* data) {
 | 
|      SkASSERT(data);
 | 
|  
 | 
| @@ -290,18 +282,6 @@ void GrContext::TextBlobCacheOverBudgetCB(void* data) {
 | 
|      context->flush();
 | 
|  }
 | 
|  
 | 
| -int GrContext::getMaxTextureSize() const {
 | 
| -    return fGpu->caps()->maxTextureSize();
 | 
| -}
 | 
| -
 | 
| -int GrContext::getMaxRenderTargetSize() const {
 | 
| -    return fGpu->caps()->maxRenderTargetSize();
 | 
| -}
 | 
| -
 | 
| -int GrContext::getMaxSampleCount() const {
 | 
| -    return fGpu->caps()->maxSampleCount();
 | 
| -}
 | 
| -
 | 
|  ////////////////////////////////////////////////////////////////////////////////
 | 
|  
 | 
|  void GrContext::flush(int flagsBitfield) {
 | 
| @@ -687,13 +667,9 @@ GrPathRenderer* GrContext::getPathRenderer(const GrDrawTarget* target,
 | 
|  }
 | 
|  
 | 
|  ////////////////////////////////////////////////////////////////////////////////
 | 
| -bool GrContext::isConfigRenderable(GrPixelConfig config, bool withMSAA) const {
 | 
| -    return fGpu->caps()->isConfigRenderable(config, withMSAA);
 | 
| -}
 | 
| -
 | 
|  int GrContext::getRecommendedSampleCount(GrPixelConfig config,
 | 
|                                           SkScalar dpi) const {
 | 
| -    if (!this->isConfigRenderable(config, true)) {
 | 
| +    if (!this->caps()->isConfigRenderable(config, true)) {
 | 
|          return 0;
 | 
|      }
 | 
|      int chosenSampleCount = 0;
 | 
| 
 |