| Index: src/gpu/GrContext.cpp
|
| diff --git a/src/gpu/GrContext.cpp b/src/gpu/GrContext.cpp
|
| index d55aed92f5e9724a030297faa1785b1ca16b6a97..46a5576b113358492361240cf4737d38f9f6a699 100755
|
| --- a/src/gpu/GrContext.cpp
|
| +++ b/src/gpu/GrContext.cpp
|
| @@ -30,7 +30,9 @@
|
| #include "GrStencilBuffer.h"
|
| #include "GrStencilAndCoverTextContext.h"
|
| #include "GrStrokeInfo.h"
|
| +#include "GrSurfacePriv.h"
|
| #include "GrTextStrike.h"
|
| +#include "GrTexturePriv.h"
|
| #include "GrTraceMarker.h"
|
| #include "GrTracing.h"
|
| #include "SkDashPathPriv.h"
|
| @@ -68,6 +70,25 @@ static const int DRAW_BUFFER_IBPOOL_PREALLOC_BUFFERS = 4;
|
|
|
| #define ASSERT_OWNED_RESOURCE(R) SkASSERT(!(R) || (R)->getContext() == this)
|
|
|
| +GrTexture* GrAutoScratchTexture::detach() {
|
| + if (NULL == fTexture) {
|
| + return NULL;
|
| + }
|
| + GrTexture* texture = fTexture;
|
| + fTexture = NULL;
|
| +
|
| + // This GrAutoScratchTexture has a ref from lockAndRefScratchTexture, which we give up now.
|
| + // The cache also has a ref which we are lending to the caller of detach(). When the caller
|
| + // lets go of the ref and the ref count goes to 0 internal_dispose will see this flag is
|
| + // set and re-ref the texture, thereby restoring the cache's ref.
|
| + SkASSERT(!texture->unique());
|
| + texture->texturePriv().setFlag((GrTextureFlags) GrTexture::kReturnToCache_FlagBit);
|
| + texture->unref();
|
| + SkASSERT(texture->getCacheEntry());
|
| +
|
| + return texture;
|
| +}
|
| +
|
| // Glorified typedef to avoid including GrDrawState.h in GrContext.h
|
| class GrContext::AutoRestoreEffects : public GrDrawState::AutoRestoreEffects {};
|
|
|
| @@ -262,7 +283,7 @@ GrTextContext* GrContext::createTextContext(GrRenderTarget* renderTarget,
|
| GrTexture* GrContext::findAndRefTexture(const GrTextureDesc& desc,
|
| const GrCacheID& cacheID,
|
| const GrTextureParams* params) {
|
| - GrResourceKey resourceKey = GrTextureImpl::ComputeKey(fGpu, params, desc, cacheID);
|
| + GrResourceKey resourceKey = GrTexturePriv::ComputeKey(fGpu, params, desc, cacheID);
|
| GrGpuResource* resource = fResourceCache->find(resourceKey);
|
| SkSafeRef(resource);
|
| return static_cast<GrTexture*>(resource);
|
| @@ -271,7 +292,7 @@ GrTexture* GrContext::findAndRefTexture(const GrTextureDesc& desc,
|
| bool GrContext::isTextureInCache(const GrTextureDesc& desc,
|
| const GrCacheID& cacheID,
|
| const GrTextureParams* params) const {
|
| - GrResourceKey resourceKey = GrTextureImpl::ComputeKey(fGpu, params, desc, cacheID);
|
| + GrResourceKey resourceKey = GrTexturePriv::ComputeKey(fGpu, params, desc, cacheID);
|
| return fResourceCache->hasKey(resourceKey);
|
| }
|
|
|
| @@ -410,16 +431,16 @@ GrTexture* GrContext::createTexture(const GrTextureParams* params,
|
| const void* srcData,
|
| size_t rowBytes,
|
| GrResourceKey* cacheKey) {
|
| - GrResourceKey resourceKey = GrTextureImpl::ComputeKey(fGpu, params, desc, cacheID);
|
| + GrResourceKey resourceKey = GrTexturePriv::ComputeKey(fGpu, params, desc, cacheID);
|
|
|
| GrTexture* texture;
|
| - if (GrTextureImpl::NeedsResizing(resourceKey)) {
|
| + if (GrTexturePriv::NeedsResizing(resourceKey)) {
|
| // We do not know how to resize compressed textures.
|
| SkASSERT(!GrPixelConfigIsCompressed(desc.fConfig));
|
|
|
| texture = this->createResizedTexture(desc, cacheID,
|
| srcData, rowBytes,
|
| - GrTextureImpl::NeedsBilerp(resourceKey));
|
| + GrTexturePriv::NeedsBilerp(resourceKey));
|
| } else {
|
| texture = fGpu->createTexture(desc, srcData, rowBytes);
|
| }
|
| @@ -443,7 +464,7 @@ static GrTexture* create_scratch_texture(GrGpu* gpu,
|
| const GrTextureDesc& desc) {
|
| GrTexture* texture = gpu->createTexture(desc, NULL, 0);
|
| if (texture) {
|
| - GrResourceKey key = GrTextureImpl::ComputeScratchKey(texture->desc());
|
| + GrResourceKey key = GrTexturePriv::ComputeScratchKey(texture->desc());
|
| // Adding a resource could put us overbudget. Try to free up the
|
| // necessary space before adding it.
|
| resourceCache->purgeAsNeeded(1, texture->gpuMemorySize());
|
| @@ -483,7 +504,7 @@ GrTexture* GrContext::lockAndRefScratchTexture(const GrTextureDesc& inDesc, Scra
|
| int origHeight = desc.fHeight;
|
|
|
| do {
|
| - GrResourceKey key = GrTextureImpl::ComputeScratchKey(desc);
|
| + GrResourceKey key = GrTexturePriv::ComputeScratchKey(desc);
|
| // Ensure we have exclusive access to the texture so future 'find' calls don't return it
|
| resource = fResourceCache->find(key, GrResourceCache::kHide_OwnershipFlag);
|
| if (resource) {
|
| @@ -578,7 +599,7 @@ void GrContext::unlockScratchTexture(GrTexture* texture) {
|
| // Instead, give up the cache's ref and leave the decision up to
|
| // addExistingTextureToCache once its ref count reaches 0. For
|
| // this to work we need to leave it in the exclusive list.
|
| - texture->impl()->setFlag((GrTextureFlags) GrTextureImpl::kReturnToCache_FlagBit);
|
| + texture->texturePriv().setFlag((GrTextureFlags) GrTexture::kReturnToCache_FlagBit);
|
| // Give up the cache's ref to the texture
|
| texture->unref();
|
| }
|
| @@ -1347,7 +1368,7 @@ bool GrContext::writeTexturePixels(GrTexture* texture,
|
| }
|
| }
|
|
|
| - if (!(kDontFlush_PixelOpsFlag & flags) && texture->hasPendingIO()) {
|
| + if (!(kDontFlush_PixelOpsFlag & flags) && texture->surfacePriv().hasPendingIO()) {
|
| this->flush();
|
| }
|
|
|
| @@ -1418,7 +1439,7 @@ bool GrContext::readRenderTargetPixels(GrRenderTarget* target,
|
| }
|
| }
|
|
|
| - if (!(kDontFlush_PixelOpsFlag & flags) && target->hasPendingWrite()) {
|
| + if (!(kDontFlush_PixelOpsFlag & flags) && target->surfacePriv().hasPendingWrite()) {
|
| this->flush();
|
| }
|
|
|
|
|