OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2013 Google Inc. | 2 * Copyright 2013 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 // Include here to ensure SK_SUPPORT_GPU is set correctly before it is examined. | 8 // Include here to ensure SK_SUPPORT_GPU is set correctly before it is examined. |
9 #include "SkTypes.h" | 9 #include "SkTypes.h" |
10 | 10 |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
129 if (bigRT && bigRT->asRenderTarget()) { | 129 if (bigRT && bigRT->asRenderTarget()) { |
130 resourceProvider->attachStencilAttachment(bigRT->asRenderTarget()); | 130 resourceProvider->attachStencilAttachment(bigRT->asRenderTarget()); |
131 } | 131 } |
132 REPORTER_ASSERT(reporter, | 132 REPORTER_ASSERT(reporter, |
133 smallRT0 && bigRT && | 133 smallRT0 && bigRT && |
134 smallRT0->asRenderTarget() && bigRT->asRenderTarget() && | 134 smallRT0->asRenderTarget() && bigRT->asRenderTarget() && |
135 resourceProvider->attachStencilAttachment(smallRT0->asRender
Target()) != | 135 resourceProvider->attachStencilAttachment(smallRT0->asRender
Target()) != |
136 resourceProvider->attachStencilAttachment(bigRT->asRenderTar
get())); | 136 resourceProvider->attachStencilAttachment(bigRT->asRenderTar
get())); |
137 | 137 |
138 if (context->caps()->maxSampleCount() >= 4) { | 138 if (context->caps()->maxSampleCount() >= 4) { |
139 // An RT with a different sample count should not share. | 139 // An RT with a different sample count should not share. |
140 GrSurfaceDesc smallMSAADesc = smallDesc; | 140 GrSurfaceDesc smallMSAADesc = smallDesc; |
141 smallMSAADesc.fSampleCnt = 4; | 141 smallMSAADesc.fSampleCnt = 4; |
142 SkAutoTUnref<GrTexture> smallMSAART0(cache->createTexture(smallMSAADesc,
SkBudgeted::kNo)); | 142 SkAutoTUnref<GrTexture> smallMSAART0(cache->createTexture(smallMSAADesc,
SkBudgeted::kNo)); |
143 if (smallMSAART0 && smallMSAART0->asRenderTarget()) { | 143 if (smallMSAART0 && smallMSAART0->asRenderTarget()) { |
144 resourceProvider->attachStencilAttachment(smallMSAART0->asRenderTarg
et()); | 144 resourceProvider->attachStencilAttachment(smallMSAART0->asRenderTarg
et()); |
145 } | 145 } |
146 #ifdef SK_BUILD_FOR_ANDROID | 146 #ifdef SK_BUILD_FOR_ANDROID |
147 if (!smallMSAART0) { | 147 if (!smallMSAART0) { |
148 // The nexus player seems to fail to create MSAA textures. | 148 // The nexus player seems to fail to create MSAA textures. |
149 return; | 149 return; |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
209 desc.fHeight = kH; | 209 desc.fHeight = kH; |
210 | 210 |
211 desc.fTextureHandle = texHandles[0]; | 211 desc.fTextureHandle = texHandles[0]; |
212 SkAutoTUnref<GrTexture> borrowed(context->textureProvider()->wrapBackendText
ure( | 212 SkAutoTUnref<GrTexture> borrowed(context->textureProvider()->wrapBackendText
ure( |
213 desc, kBorrow_GrWrapOwnership)); | 213 desc, kBorrow_GrWrapOwnership)); |
214 | 214 |
215 desc.fTextureHandle = texHandles[1]; | 215 desc.fTextureHandle = texHandles[1]; |
216 SkAutoTUnref<GrTexture> adopted(context->textureProvider()->wrapBackendTextu
re( | 216 SkAutoTUnref<GrTexture> adopted(context->textureProvider()->wrapBackendTextu
re( |
217 desc, kAdopt_GrWrapOwnership)); | 217 desc, kAdopt_GrWrapOwnership)); |
218 | 218 |
219 REPORTER_ASSERT(reporter, SkToBool(borrowed) && SkToBool(adopted)); | 219 REPORTER_ASSERT(reporter, borrowed != nullptr && adopted != nullptr); |
220 if (!SkToBool(borrowed) || !SkToBool(adopted)) { | 220 if (!borrowed || !adopted) { |
221 return; | 221 return; |
222 } | 222 } |
223 | 223 |
224 borrowed.reset(nullptr); | 224 borrowed.reset(nullptr); |
225 adopted.reset(nullptr); | 225 adopted.reset(nullptr); |
226 | 226 |
227 context->flush(); | 227 context->flush(); |
228 | 228 |
229 bool borrowedIsAlive = gpu->isTestingOnlyBackendTexture(texHandles[0]); | 229 bool borrowedIsAlive = gpu->isTestingOnlyBackendTexture(texHandles[0]); |
230 bool adoptedIsAlive = gpu->isTestingOnlyBackendTexture(texHandles[1]); | 230 bool adoptedIsAlive = gpu->isTestingOnlyBackendTexture(texHandles[1]); |
231 | 231 |
232 REPORTER_ASSERT(reporter, borrowedIsAlive); | 232 REPORTER_ASSERT(reporter, borrowedIsAlive); |
233 REPORTER_ASSERT(reporter, !adoptedIsAlive); | 233 REPORTER_ASSERT(reporter, !adoptedIsAlive); |
234 | 234 |
235 gpu->deleteTestingOnlyBackendTexture(texHandles[0], !borrowedIsAlive); | 235 gpu->deleteTestingOnlyBackendTexture(texHandles[0], !borrowedIsAlive); |
236 gpu->deleteTestingOnlyBackendTexture(texHandles[1], !adoptedIsAlive); | 236 gpu->deleteTestingOnlyBackendTexture(texHandles[1], !adoptedIsAlive); |
237 | 237 |
238 context->resetContext(); | 238 context->resetContext(); |
239 } | 239 } |
240 | 240 |
241 class TestResource : public GrGpuResource { | 241 class TestResource : public GrGpuResource { |
242 enum ScratchConstructor { kScratchConstructor }; | 242 enum ScratchConstructor { kScratchConstructor }; |
243 public: | 243 public: |
244 static const size_t kDefaultSize = 100; | 244 static const size_t kDefaultSize = 100; |
245 | 245 |
246 /** Property that distinctly categorizes the resource. | 246 /** Property that distinctly categorizes the resource. |
247 * For example, textures have width, height, ... */ | 247 * For example, textures have width, height, ... */ |
248 enum SimulatedProperty { kA_SimulatedProperty, kB_SimulatedProperty }; | 248 enum SimulatedProperty { kA_SimulatedProperty, kB_SimulatedProperty }; |
249 | 249 |
250 TestResource(GrGpu* gpu, size_t size, GrGpuResource::LifeCycle lifeCycle) | 250 TestResource(GrGpu* gpu, size_t size, GrGpuResource::LifeCycle lifeCycle) |
251 : INHERITED(gpu, lifeCycle) | 251 : INHERITED(gpu, lifeCycle) |
252 , fToDelete(nullptr) | 252 , fToDelete(nullptr) |
253 , fSize(size) | 253 , fSize(size) |
254 , fProperty(kA_SimulatedProperty) { | 254 , fProperty(kA_SimulatedProperty) { |
255 ++fNumAlive; | 255 ++fNumAlive; |
(...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
583 REPORTER_ASSERT(reporter, size == cache->getResourceBytes()); | 583 REPORTER_ASSERT(reporter, size == cache->getResourceBytes()); |
584 REPORTER_ASSERT(reporter, 1 == cache->getBudgetedResourceCount()); | 584 REPORTER_ASSERT(reporter, 1 == cache->getBudgetedResourceCount()); |
585 REPORTER_ASSERT(reporter, size == cache->getBudgetedResourceBytes()); | 585 REPORTER_ASSERT(reporter, size == cache->getBudgetedResourceBytes()); |
586 resource = static_cast<TestResource*>(cache->findAndRefScratchResource(k
ey, TestResource::kDefaultSize, 0)); | 586 resource = static_cast<TestResource*>(cache->findAndRefScratchResource(k
ey, TestResource::kDefaultSize, 0)); |
587 REPORTER_ASSERT(reporter, resource); | 587 REPORTER_ASSERT(reporter, resource); |
588 REPORTER_ASSERT(reporter, resource->resourcePriv().getScratchKey() == ke
y); | 588 REPORTER_ASSERT(reporter, resource->resourcePriv().getScratchKey() == ke
y); |
589 REPORTER_ASSERT(reporter, resource->cacheAccess().isScratch()); | 589 REPORTER_ASSERT(reporter, resource->cacheAccess().isScratch()); |
590 REPORTER_ASSERT(reporter, SkBudgeted::kYes == resource->resourcePriv().i
sBudgeted()); | 590 REPORTER_ASSERT(reporter, SkBudgeted::kYes == resource->resourcePriv().i
sBudgeted()); |
591 | 591 |
592 if (0 == i) { | 592 if (0 == i) { |
593 // If made unbudgeted, it should return to original state: ref'ed an
d unbudgeted. Try | 593 // If made unbudgeted, it should return to original state: ref'ed an
d unbudgeted. Try |
594 // the above tests again. | 594 // the above tests again. |
595 resource->resourcePriv().makeUnbudgeted(); | 595 resource->resourcePriv().makeUnbudgeted(); |
596 } else { | 596 } else { |
597 // After the second time around, try removing the scratch key | 597 // After the second time around, try removing the scratch key |
598 resource->resourcePriv().removeScratchKey(); | 598 resource->resourcePriv().removeScratchKey(); |
599 REPORTER_ASSERT(reporter, 1 == cache->getResourceCount()); | 599 REPORTER_ASSERT(reporter, 1 == cache->getResourceCount()); |
600 REPORTER_ASSERT(reporter, size == cache->getResourceBytes()); | 600 REPORTER_ASSERT(reporter, size == cache->getResourceBytes()); |
601 REPORTER_ASSERT(reporter, 1 == cache->getBudgetedResourceCount()); | 601 REPORTER_ASSERT(reporter, 1 == cache->getBudgetedResourceCount()); |
602 REPORTER_ASSERT(reporter, size == cache->getBudgetedResourceBytes())
; | 602 REPORTER_ASSERT(reporter, size == cache->getBudgetedResourceBytes())
; |
603 REPORTER_ASSERT(reporter, !resource->resourcePriv().getScratchKey().
isValid()); | 603 REPORTER_ASSERT(reporter, !resource->resourcePriv().getScratchKey().
isValid()); |
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
777 find->unref(); | 777 find->unref(); |
778 } | 778 } |
779 | 779 |
780 static void test_duplicate_unique_key(skiatest::Reporter* reporter) { | 780 static void test_duplicate_unique_key(skiatest::Reporter* reporter) { |
781 Mock mock(5, 30000); | 781 Mock mock(5, 30000); |
782 GrContext* context = mock.context(); | 782 GrContext* context = mock.context(); |
783 GrResourceCache* cache = mock.cache(); | 783 GrResourceCache* cache = mock.cache(); |
784 | 784 |
785 GrUniqueKey key; | 785 GrUniqueKey key; |
786 make_unique_key<0>(&key, 0); | 786 make_unique_key<0>(&key, 0); |
787 | 787 |
788 // Create two resources that we will attempt to register with the same uniqu
e key. | 788 // Create two resources that we will attempt to register with the same uniqu
e key. |
789 TestResource* a = new TestResource(context->getGpu()); | 789 TestResource* a = new TestResource(context->getGpu()); |
790 a->setSize(11); | 790 a->setSize(11); |
791 | 791 |
792 // Set key on resource a. | 792 // Set key on resource a. |
793 a->resourcePriv().setUniqueKey(key); | 793 a->resourcePriv().setUniqueKey(key); |
794 REPORTER_ASSERT(reporter, a == cache->findAndRefUniqueResource(key)); | 794 REPORTER_ASSERT(reporter, a == cache->findAndRefUniqueResource(key)); |
795 a->unref(); | 795 a->unref(); |
796 | 796 |
797 // Make sure that redundantly setting a's key works. | 797 // Make sure that redundantly setting a's key works. |
798 a->resourcePriv().setUniqueKey(key); | 798 a->resourcePriv().setUniqueKey(key); |
799 REPORTER_ASSERT(reporter, a == cache->findAndRefUniqueResource(key)); | 799 REPORTER_ASSERT(reporter, a == cache->findAndRefUniqueResource(key)); |
800 a->unref(); | 800 a->unref(); |
801 REPORTER_ASSERT(reporter, 1 == cache->getResourceCount()); | 801 REPORTER_ASSERT(reporter, 1 == cache->getResourceCount()); |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
875 | 875 |
876 static void test_purge_invalidated(skiatest::Reporter* reporter) { | 876 static void test_purge_invalidated(skiatest::Reporter* reporter) { |
877 Mock mock(5, 30000); | 877 Mock mock(5, 30000); |
878 GrContext* context = mock.context(); | 878 GrContext* context = mock.context(); |
879 GrResourceCache* cache = mock.cache(); | 879 GrResourceCache* cache = mock.cache(); |
880 | 880 |
881 GrUniqueKey key1, key2, key3; | 881 GrUniqueKey key1, key2, key3; |
882 make_unique_key<0>(&key1, 1); | 882 make_unique_key<0>(&key1, 1); |
883 make_unique_key<0>(&key2, 2); | 883 make_unique_key<0>(&key2, 2); |
884 make_unique_key<0>(&key3, 3); | 884 make_unique_key<0>(&key3, 3); |
885 | 885 |
886 // Add three resources to the cache. Only c is usable as scratch. | 886 // Add three resources to the cache. Only c is usable as scratch. |
887 TestResource* a = new TestResource(context->getGpu()); | 887 TestResource* a = new TestResource(context->getGpu()); |
888 TestResource* b = new TestResource(context->getGpu()); | 888 TestResource* b = new TestResource(context->getGpu()); |
889 TestResource* c = TestResource::CreateScratch(context->getGpu(), | 889 TestResource* c = TestResource::CreateScratch(context->getGpu(), |
890 TestResource::kA_SimulatedProp
erty); | 890 TestResource::kA_SimulatedProp
erty); |
891 a->resourcePriv().setUniqueKey(key1); | 891 a->resourcePriv().setUniqueKey(key1); |
892 b->resourcePriv().setUniqueKey(key2); | 892 b->resourcePriv().setUniqueKey(key2); |
893 c->resourcePriv().setUniqueKey(key3); | 893 c->resourcePriv().setUniqueKey(key3); |
894 a->unref(); | 894 a->unref(); |
895 // hold b until *after* the message is sent. | 895 // hold b until *after* the message is sent. |
(...skipping 413 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1309 test_cache_chained_purge(reporter); | 1309 test_cache_chained_purge(reporter); |
1310 test_resource_size_changed(reporter); | 1310 test_resource_size_changed(reporter); |
1311 test_timestamp_wrap(reporter); | 1311 test_timestamp_wrap(reporter); |
1312 test_flush(reporter); | 1312 test_flush(reporter); |
1313 test_large_resource_count(reporter); | 1313 test_large_resource_count(reporter); |
1314 test_custom_data(reporter); | 1314 test_custom_data(reporter); |
1315 test_abandoned(reporter); | 1315 test_abandoned(reporter); |
1316 } | 1316 } |
1317 | 1317 |
1318 #endif | 1318 #endif |
OLD | NEW |