| 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());
|
| }
|
| }
|
| }
|
|
|