| Index: src/gpu/GrTexture.cpp
|
| diff --git a/src/gpu/GrTexture.cpp b/src/gpu/GrTexture.cpp
|
| index e5d0fcc0323764161acd1eb37d54cf89c8ede0eb..eb518f5635ae2095f7a816296a74da104cd73d70 100644
|
| --- a/src/gpu/GrTexture.cpp
|
| +++ b/src/gpu/GrTexture.cpp
|
| @@ -9,6 +9,7 @@
|
| #include "GrContext.h"
|
| #include "GrDrawTargetCaps.h"
|
| #include "GrGpu.h"
|
| +#include "GrResourceKey.h"
|
| #include "GrTexture.h"
|
| #include "GrTexturePriv.h"
|
|
|
| @@ -122,7 +123,9 @@ GrTexture::GrTexture(GrGpu* gpu, bool isWrapped, const GrSurfaceDesc& desc)
|
| , fMipMapsStatus(kNotAllocated_MipMapsStatus) {
|
|
|
| if (!isWrapped) {
|
| - this->setScratchKey(GrTexturePriv::ComputeScratchKey(desc));
|
| + GrScratchKey key;
|
| + GrTexturePriv::ComputeScratchKey(desc, &key);
|
| + this->setScratchKey(key);
|
| }
|
| // only make sense if alloc size is pow2
|
| fShiftFixedX = 31 - SkCLZ(fDesc.fWidth);
|
| @@ -134,26 +137,26 @@ GrResourceKey GrTexturePriv::ComputeKey(const GrGpu* gpu,
|
| const GrSurfaceDesc& desc,
|
| const GrCacheID& cacheID) {
|
| GrResourceKey::ResourceFlags flags = get_texture_flags(gpu, params, desc);
|
| - return GrResourceKey(cacheID, ResourceType(), flags);
|
| + return GrResourceKey(cacheID, flags);
|
| }
|
|
|
| -GrResourceKey GrTexturePriv::ComputeScratchKey(const GrSurfaceDesc& desc) {
|
| - GrCacheID::Key idKey;
|
| - // Instead of a client-provided key of the texture contents we create a key from the
|
| - // descriptor.
|
| - GR_STATIC_ASSERT(sizeof(idKey) >= 16);
|
| - SkASSERT(desc.fHeight < (1 << 16));
|
| - SkASSERT(desc.fWidth < (1 << 16));
|
| - idKey.fData32[0] = (desc.fWidth) | (desc.fHeight << 16);
|
| - idKey.fData32[1] = desc.fConfig | desc.fSampleCnt << 16;
|
| - idKey.fData32[2] = desc.fFlags;
|
| - idKey.fData32[3] = resolve_origin(desc); // Only needs 2 bits actually
|
| - static const int kPadSize = sizeof(idKey) - 16;
|
| - GR_STATIC_ASSERT(kPadSize >= 0);
|
| - memset(idKey.fData8 + 16, 0, kPadSize);
|
| -
|
| - GrCacheID cacheID(GrResourceKey::ScratchDomain(), idKey);
|
| - return GrResourceKey(cacheID, ResourceType(), 0);
|
| +void GrTexturePriv::ComputeScratchKey(const GrSurfaceDesc& desc, GrScratchKey* key) {
|
| + static const GrScratchKey::ResourceType kType = GrScratchKey::GenerateResourceType();
|
| +
|
| + GrScratchKey::Builder builder(key, kType, 2);
|
| +
|
| + GrSurfaceOrigin origin = resolve_origin(desc);
|
| + uint32_t flags = desc.fFlags & ~kCheckAllocation_GrSurfaceFlag;
|
| +
|
| + SkASSERT(desc.fWidth <= SK_MaxU16);
|
| + SkASSERT(desc.fHeight <= SK_MaxU16);
|
| + SkASSERT(static_cast<int>(desc.fConfig) < (1 << 6));
|
| + SkASSERT(desc.fSampleCnt < (1 << 8));
|
| + SkASSERT(flags < (1 << 10));
|
| + SkASSERT(static_cast<int>(origin) < (1 << 8));
|
| +
|
| + builder[0] = desc.fWidth | (desc.fHeight << 16);
|
| + builder[1] = desc.fConfig | (desc.fSampleCnt << 6) | (flags << 14) | (origin << 24);
|
| }
|
|
|
| bool GrTexturePriv::NeedsResizing(const GrResourceKey& key) {
|
|
|