diff options
Diffstat (limited to 'src/gpu/GrStencilBuffer.cpp')
-rw-r--r-- | src/gpu/GrStencilBuffer.cpp | 38 |
1 files changed, 8 insertions, 30 deletions
diff --git a/src/gpu/GrStencilBuffer.cpp b/src/gpu/GrStencilBuffer.cpp index 5aa56e0717..be463a0ccf 100644 --- a/src/gpu/GrStencilBuffer.cpp +++ b/src/gpu/GrStencilBuffer.cpp @@ -7,35 +7,13 @@ */ #include "GrStencilBuffer.h" +#include "GrResourceKey.h" -#include "GrContext.h" -#include "GrGpu.h" -#include "GrResourceCache2.h" - -namespace { -// we should never have more than one stencil buffer with same combo of (width,height,samplecount) -void gen_cache_id(int width, int height, int sampleCnt, GrCacheID* cacheID) { - static const GrCacheID::Domain gStencilBufferDomain = GrResourceKey::ScratchDomain(); - GrCacheID::Key key; - uint32_t* keyData = key.fData32; - keyData[0] = width; - keyData[1] = height; - keyData[2] = sampleCnt; - memset(keyData + 3, 0, sizeof(key) - 3 * sizeof(uint32_t)); - GR_STATIC_ASSERT(sizeof(key) >= 3 * sizeof(uint32_t)); - cacheID->reset(gStencilBufferDomain, key); -} -} - -GrResourceKey GrStencilBuffer::ComputeKey(int width, - int height, - int sampleCnt) { - // All SBs are created internally to attach to RTs so they all use the same domain. - static const GrResourceKey::ResourceType gStencilBufferResourceType = - GrResourceKey::GenerateResourceType(); - GrCacheID id; - gen_cache_id(width, height, sampleCnt, &id); - - // we don't use any flags for SBs currently. - return GrResourceKey(id, gStencilBufferResourceType, 0); +void GrStencilBuffer::ComputeKey(int width, int height, int sampleCnt, GrScratchKey* key) { + static const GrScratchKey::ResourceType kType = GrScratchKey::GenerateResourceType(); + GrScratchKey::Builder builder(key, kType, 2); + SkASSERT(width <= SK_MaxU16); + SkASSERT(height <= SK_MaxU16); + builder[0] = width | (height << 16); + builder[1] = sampleCnt; } |