| Index: src/gpu/GrTextureProvider.cpp
|
| diff --git a/src/gpu/GrTextureProvider.cpp b/src/gpu/GrTextureProvider.cpp
|
| index cb652f7a7fd8c2e27b46fb7a4c802a4031b900e1..1c2f36535a0166ce143d66ca34936f9874ec1cb8 100644
|
| --- a/src/gpu/GrTextureProvider.cpp
|
| +++ b/src/gpu/GrTextureProvider.cpp
|
| @@ -10,6 +10,10 @@
|
| #include "GrTexturePriv.h"
|
| #include "GrResourceCache.h"
|
| #include "GrGpu.h"
|
| +#include "../private/GrSingleOwner.h"
|
| +
|
| +#define ASSERT_SINGLE_OWNER \
|
| + SkDEBUGCODE(GrSingleOwner::AutoEnforce debug_SingleOwner(fSingleOwner);)
|
|
|
| enum ScratchTextureFlags {
|
| kExact_ScratchTextureFlag = 0x1,
|
| @@ -17,8 +21,18 @@ enum ScratchTextureFlags {
|
| kNoCreate_ScratchTextureFlag = 0x4,
|
| };
|
|
|
| +GrTextureProvider::GrTextureProvider(GrGpu* gpu, GrResourceCache* cache, GrSingleOwner* singleOwner)
|
| + : fCache(cache)
|
| + , fGpu(gpu)
|
| +#ifdef SK_DEBUG
|
| + , fSingleOwner(singleOwner)
|
| +#endif
|
| + {
|
| +}
|
| +
|
| GrTexture* GrTextureProvider::createTexture(const GrSurfaceDesc& desc, bool budgeted,
|
| const void* srcData, size_t rowBytes) {
|
| + ASSERT_SINGLE_OWNER
|
| if (this->isAbandoned()) {
|
| return nullptr;
|
| }
|
| @@ -44,11 +58,13 @@ GrTexture* GrTextureProvider::createTexture(const GrSurfaceDesc& desc, bool budg
|
| }
|
|
|
| GrTexture* GrTextureProvider::createApproxTexture(const GrSurfaceDesc& desc) {
|
| + ASSERT_SINGLE_OWNER
|
| return this->internalCreateApproxTexture(desc, 0);
|
| }
|
|
|
| GrTexture* GrTextureProvider::internalCreateApproxTexture(const GrSurfaceDesc& desc,
|
| uint32_t scratchFlags) {
|
| + ASSERT_SINGLE_OWNER
|
| if (this->isAbandoned()) {
|
| return nullptr;
|
| }
|
| @@ -62,6 +78,7 @@ GrTexture* GrTextureProvider::internalCreateApproxTexture(const GrSurfaceDesc& d
|
|
|
| GrTexture* GrTextureProvider::refScratchTexture(const GrSurfaceDesc& inDesc,
|
| uint32_t flags) {
|
| + ASSERT_SINGLE_OWNER
|
| SkASSERT(!this->isAbandoned());
|
| SkASSERT(!GrPixelConfigIsCompressed(inDesc.fConfig));
|
|
|
| @@ -108,6 +125,7 @@ GrTexture* GrTextureProvider::refScratchTexture(const GrSurfaceDesc& inDesc,
|
|
|
| GrTexture* GrTextureProvider::wrapBackendTexture(const GrBackendTextureDesc& desc,
|
| GrWrapOwnership ownership) {
|
| + ASSERT_SINGLE_OWNER
|
| if (this->isAbandoned()) {
|
| return nullptr;
|
| }
|
| @@ -115,11 +133,13 @@ GrTexture* GrTextureProvider::wrapBackendTexture(const GrBackendTextureDesc& des
|
| }
|
|
|
| GrRenderTarget* GrTextureProvider::wrapBackendRenderTarget(const GrBackendRenderTargetDesc& desc) {
|
| + ASSERT_SINGLE_OWNER
|
| return this->isAbandoned() ? nullptr : fGpu->wrapBackendRenderTarget(desc,
|
| - kBorrow_GrWrapOwnership);
|
| + kBorrow_GrWrapOwnership);
|
| }
|
|
|
| void GrTextureProvider::assignUniqueKeyToResource(const GrUniqueKey& key, GrGpuResource* resource) {
|
| + ASSERT_SINGLE_OWNER
|
| if (this->isAbandoned() || !resource) {
|
| return;
|
| }
|
| @@ -127,9 +147,22 @@ void GrTextureProvider::assignUniqueKeyToResource(const GrUniqueKey& key, GrGpuR
|
| }
|
|
|
| bool GrTextureProvider::existsResourceWithUniqueKey(const GrUniqueKey& key) const {
|
| + ASSERT_SINGLE_OWNER
|
| return this->isAbandoned() ? false : fCache->hasUniqueKey(key);
|
| }
|
|
|
| GrGpuResource* GrTextureProvider::findAndRefResourceByUniqueKey(const GrUniqueKey& key) {
|
| + ASSERT_SINGLE_OWNER
|
| return this->isAbandoned() ? nullptr : fCache->findAndRefUniqueResource(key);
|
| }
|
| +
|
| +GrTexture* GrTextureProvider::findAndRefTextureByUniqueKey(const GrUniqueKey& key) {
|
| + ASSERT_SINGLE_OWNER
|
| + GrGpuResource* resource = this->findAndRefResourceByUniqueKey(key);
|
| + if (resource) {
|
| + GrTexture* texture = static_cast<GrSurface*>(resource)->asTexture();
|
| + SkASSERT(texture);
|
| + return texture;
|
| + }
|
| + return NULL;
|
| +}
|
|
|