| Index: tests/ResourceCacheTest.cpp
 | 
| diff --git a/tests/ResourceCacheTest.cpp b/tests/ResourceCacheTest.cpp
 | 
| index d063b6a59df7f02f7ee8e905547008c6a6520f66..b6e1eb7c890709087676fa280f8e3f9cddbb6cd0 100644
 | 
| --- a/tests/ResourceCacheTest.cpp
 | 
| +++ b/tests/ResourceCacheTest.cpp
 | 
| @@ -12,6 +12,8 @@
 | 
|  #include "GrGpu.h"
 | 
|  #include "GrGpuResourceCacheAccess.h"
 | 
|  #include "GrGpuResourcePriv.h"
 | 
| +#include "GrRenderTarget.h"
 | 
| +#include "GrRenderTargetPriv.h"
 | 
|  #include "GrResourceCache.h"
 | 
|  #include "SkCanvas.h"
 | 
|  #include "SkGr.h"
 | 
| @@ -73,18 +75,29 @@ static void test_stencil_buffers(skiatest::Reporter* reporter, GrContext* contex
 | 
|  
 | 
|      // Test that two budgeted RTs with the same desc share a stencil buffer.
 | 
|      SkAutoTUnref<GrTexture> smallRT0(context->createTexture(smallDesc, true));
 | 
| +    if (smallRT0 && smallRT0->asRenderTarget()) {
 | 
| +        smallRT0->asRenderTarget()->renderTargetPriv().attachStencilBuffer();
 | 
| +    }
 | 
| +
 | 
|      SkAutoTUnref<GrTexture> smallRT1(context->createTexture(smallDesc, true));
 | 
| +    if (smallRT1 && smallRT1->asRenderTarget()) {
 | 
| +        smallRT1->asRenderTarget()->renderTargetPriv().attachStencilBuffer();
 | 
| +    }
 | 
| +
 | 
|      REPORTER_ASSERT(reporter, smallRT0 && smallRT1 &&
 | 
|                                smallRT0->asRenderTarget() && smallRT1->asRenderTarget() &&
 | 
| -                              smallRT0->asRenderTarget()->getStencilBuffer() ==
 | 
| -                              smallRT1->asRenderTarget()->getStencilBuffer());
 | 
| +                              smallRT0->asRenderTarget()->renderTargetPriv().getStencilBuffer() ==
 | 
| +                              smallRT1->asRenderTarget()->renderTargetPriv().getStencilBuffer());
 | 
|  
 | 
|      // An unbudgeted RT with the same desc should also share.
 | 
|      SkAutoTUnref<GrTexture> smallRT2(context->createTexture(smallDesc, false));
 | 
| +    if (smallRT2 && smallRT2->asRenderTarget()) {
 | 
| +        smallRT2->asRenderTarget()->renderTargetPriv().attachStencilBuffer();
 | 
| +    }
 | 
|      REPORTER_ASSERT(reporter, smallRT0 && smallRT2 &&
 | 
|                                smallRT0->asRenderTarget() && smallRT2->asRenderTarget() &&
 | 
| -                              smallRT0->asRenderTarget()->getStencilBuffer() ==
 | 
| -                              smallRT2->asRenderTarget()->getStencilBuffer());
 | 
| +                              smallRT0->asRenderTarget()->renderTargetPriv().getStencilBuffer() ==
 | 
| +                              smallRT2->asRenderTarget()->renderTargetPriv().getStencilBuffer());
 | 
|  
 | 
|      // An RT with a much larger size should not share.
 | 
|      GrSurfaceDesc bigDesc;
 | 
| @@ -94,44 +107,60 @@ static void test_stencil_buffers(skiatest::Reporter* reporter, GrContext* contex
 | 
|      bigDesc.fHeight = 200;
 | 
|      bigDesc.fSampleCnt = 0;
 | 
|      SkAutoTUnref<GrTexture> bigRT(context->createTexture(bigDesc, false));
 | 
| +    if (bigRT && bigRT->asRenderTarget()) {
 | 
| +        bigRT->asRenderTarget()->renderTargetPriv().attachStencilBuffer();
 | 
| +    }
 | 
|      REPORTER_ASSERT(reporter, smallRT0 && bigRT &&
 | 
|                                smallRT0->asRenderTarget() && bigRT->asRenderTarget() &&
 | 
| -                              smallRT0->asRenderTarget()->getStencilBuffer() !=
 | 
| -                              bigRT->asRenderTarget()->getStencilBuffer());
 | 
| +                              smallRT0->asRenderTarget()->renderTargetPriv().getStencilBuffer() !=
 | 
| +                              bigRT->asRenderTarget()->renderTargetPriv().getStencilBuffer());
 | 
|  
 | 
|      if (context->getMaxSampleCount() >= 4) {
 | 
|          // An RT with a different sample count should not share. 
 | 
|          GrSurfaceDesc smallMSAADesc = smallDesc;
 | 
|          smallMSAADesc.fSampleCnt = 4;
 | 
|          SkAutoTUnref<GrTexture> smallMSAART0(context->createTexture(smallMSAADesc, false));
 | 
| +        if (smallMSAART0 && smallMSAART0->asRenderTarget()) {
 | 
| +            smallMSAART0->asRenderTarget()->renderTargetPriv().attachStencilBuffer();
 | 
| +        }
 | 
|  #ifdef SK_BUILD_FOR_ANDROID
 | 
|          if (!smallMSAART0) {
 | 
|              // The nexus player seems to fail to create MSAA textures.
 | 
|              return;
 | 
|          }
 | 
|  #endif
 | 
| -        REPORTER_ASSERT(reporter, smallRT0 && smallMSAART0 &&
 | 
| -                                  smallRT0->asRenderTarget() && smallMSAART0->asRenderTarget() &&
 | 
| -                                  smallRT0->asRenderTarget()->getStencilBuffer() !=
 | 
| -                                  smallMSAART0->asRenderTarget()->getStencilBuffer());
 | 
| +        REPORTER_ASSERT(reporter,
 | 
| +                        smallRT0 && smallMSAART0 &&
 | 
| +                        smallRT0->asRenderTarget() && smallMSAART0->asRenderTarget() &&
 | 
| +                        smallRT0->asRenderTarget()->renderTargetPriv().getStencilBuffer() !=
 | 
| +                        smallMSAART0->asRenderTarget()->renderTargetPriv().getStencilBuffer());
 | 
|          // A second MSAA RT should share with the first MSAA RT.
 | 
|          SkAutoTUnref<GrTexture> smallMSAART1(context->createTexture(smallMSAADesc, false));
 | 
| -        REPORTER_ASSERT(reporter, smallMSAART0 && smallMSAART1 &&
 | 
| -                                  smallMSAART0->asRenderTarget() &&
 | 
| -                                  smallMSAART1->asRenderTarget() &&
 | 
| -                                  smallMSAART0->asRenderTarget()->getStencilBuffer() ==
 | 
| -                                  smallMSAART1->asRenderTarget()->getStencilBuffer());
 | 
| +        if (smallMSAART1 && smallMSAART1->asRenderTarget()) {
 | 
| +            smallMSAART1->asRenderTarget()->renderTargetPriv().attachStencilBuffer();
 | 
| +        }
 | 
| +        REPORTER_ASSERT(reporter,
 | 
| +                        smallMSAART0 && smallMSAART1 &&
 | 
| +                        smallMSAART0->asRenderTarget() &&
 | 
| +                        smallMSAART1->asRenderTarget() &&
 | 
| +                        smallMSAART0->asRenderTarget()->renderTargetPriv().getStencilBuffer() ==
 | 
| +                        smallMSAART1->asRenderTarget()->renderTargetPriv().getStencilBuffer());
 | 
|          // But not one with a larger sample count should not. (Also check that the request for 4
 | 
|          // samples didn't get rounded up to >= 8 or else they could share.).
 | 
|          if (context->getMaxSampleCount() >= 8 && smallMSAART0 && smallMSAART0->asRenderTarget() &&
 | 
|              smallMSAART0->asRenderTarget()->numSamples() < 8) {
 | 
|              smallMSAADesc.fSampleCnt = 8;
 | 
|              smallMSAART1.reset(context->createTexture(smallMSAADesc, false));
 | 
| -            REPORTER_ASSERT(reporter, smallMSAART0 && smallMSAART1 &&
 | 
| -                                      smallMSAART0->asRenderTarget() &&
 | 
| -                                      smallMSAART1->asRenderTarget() &&
 | 
| -                                      smallMSAART0->asRenderTarget()->getStencilBuffer() !=
 | 
| -                                      smallMSAART1->asRenderTarget()->getStencilBuffer());
 | 
| +            SkAutoTUnref<GrTexture> smallMSAART1(context->createTexture(smallMSAADesc, false));
 | 
| +            if (smallMSAART1 && smallMSAART1->asRenderTarget()) {
 | 
| +                smallMSAART1->asRenderTarget()->renderTargetPriv().attachStencilBuffer();
 | 
| +            }
 | 
| +            REPORTER_ASSERT(reporter,
 | 
| +                            smallMSAART0 && smallMSAART1 &&
 | 
| +                            smallMSAART0->asRenderTarget() &&
 | 
| +                            smallMSAART1->asRenderTarget() &&
 | 
| +                            smallMSAART0->asRenderTarget()->renderTargetPriv().getStencilBuffer() !=
 | 
| +                            smallMSAART1->asRenderTarget()->renderTargetPriv().getStencilBuffer());
 | 
|          }
 | 
|      }
 | 
|  }
 | 
| 
 |