Index: src/gpu/SkGr.cpp |
diff --git a/src/gpu/SkGr.cpp b/src/gpu/SkGr.cpp |
index a3972806f7c319df1160ca04980421bf3c97187f..9083860db84420fc0bac47c4edaaa2ce3185e189 100644 |
--- a/src/gpu/SkGr.cpp |
+++ b/src/gpu/SkGr.cpp |
@@ -86,25 +86,20 @@ static void build_index8_data(void* buffer, const SkBitmap& bitmap) { |
//////////////////////////////////////////////////////////////////////////////// |
-static void generate_bitmap_cache_id(const SkBitmap& bitmap, GrCacheID* id) { |
+static void generate_bitmap_key(const SkBitmap& bitmap, GrContentKey* key) { |
// Our id includes the offset, width, and height so that bitmaps created by extractSubset() |
// are unique. |
uint32_t genID = bitmap.getGenerationID(); |
SkIPoint origin = bitmap.pixelRefOrigin(); |
- int16_t width = SkToS16(bitmap.width()); |
- int16_t height = SkToS16(bitmap.height()); |
- |
- GrCacheID::Key key; |
- memcpy(key.fData8 + 0, &genID, 4); |
- memcpy(key.fData8 + 4, &origin.fX, 4); |
- memcpy(key.fData8 + 8, &origin.fY, 4); |
- memcpy(key.fData8 + 12, &width, 2); |
- memcpy(key.fData8 + 14, &height, 2); |
- static const size_t kKeyDataSize = 16; |
- memset(key.fData8 + kKeyDataSize, 0, sizeof(key) - kKeyDataSize); |
- GR_STATIC_ASSERT(sizeof(key) >= kKeyDataSize); |
- static const GrCacheID::Domain gBitmapTextureDomain = GrCacheID::GenerateDomain(); |
- id->reset(gBitmapTextureDomain, key); |
+ uint32_t width = SkToU16(bitmap.width()); |
+ uint32_t height = SkToU16(bitmap.height()); |
+ |
+ static const GrContentKey::Domain kDomain = GrContentKey::GenerateDomain(); |
+ GrContentKey::Builder builder(key, kDomain, 4); |
+ builder[0] = genID; |
+ builder[1] = origin.fX; |
+ builder[2] = origin.fY; |
+ builder[3] = width | (height << 16); |
} |
static void generate_bitmap_texture_desc(const SkBitmap& bitmap, GrSurfaceDesc* desc) { |
@@ -120,9 +115,9 @@ namespace { |
// When the SkPixelRef genID changes, invalidate a corresponding GrResource described by key. |
class GrResourceInvalidator : public SkPixelRef::GenIDChangeListener { |
public: |
- explicit GrResourceInvalidator(GrResourceKey key) : fKey(key) {} |
+ explicit GrResourceInvalidator(const GrContentKey& key) : fKey(key) {} |
private: |
- GrResourceKey fKey; |
+ GrContentKey fKey; |
void onChange() SK_OVERRIDE { |
const GrResourceInvalidatedMessage message = { fKey }; |
@@ -132,7 +127,7 @@ private: |
} // namespace |
-static void add_genID_listener(GrResourceKey key, SkPixelRef* pixelRef) { |
+static void add_genID_listener(const GrContentKey& key, SkPixelRef* pixelRef) { |
SkASSERT(pixelRef); |
pixelRef->addGenIDChangeListener(SkNEW_ARGS(GrResourceInvalidator, (key))); |
} |
@@ -147,11 +142,10 @@ static GrTexture* sk_gr_allocate_texture(GrContext* ctx, |
GrTexture* result; |
if (cache) { |
// This texture is likely to be used again so leave it in the cache |
- GrCacheID cacheID; |
- generate_bitmap_cache_id(bm, &cacheID); |
+ GrContentKey key; |
+ generate_bitmap_key(bm, &key); |
- GrResourceKey key; |
- result = ctx->createTexture(params, desc, cacheID, pixels, rowBytes, &key); |
+ result = ctx->createTexture(params, desc, key, pixels, rowBytes, &key); |
if (result) { |
add_genID_listener(key, bm.pixelRef()); |
} |
@@ -399,12 +393,12 @@ bool GrIsBitmapInCache(const GrContext* ctx, |
return true; |
} |
- GrCacheID cacheID; |
- generate_bitmap_cache_id(bitmap, &cacheID); |
+ GrContentKey key; |
+ generate_bitmap_key(bitmap, &key); |
GrSurfaceDesc desc; |
generate_bitmap_texture_desc(bitmap, &desc); |
- return ctx->isTextureInCache(desc, cacheID, params); |
+ return ctx->isTextureInCache(desc, key, params); |
} |
GrTexture* GrRefCachedBitmapTexture(GrContext* ctx, |
@@ -420,13 +414,13 @@ GrTexture* GrRefCachedBitmapTexture(GrContext* ctx, |
if (cache) { |
// If the bitmap isn't changing try to find a cached copy first. |
- GrCacheID cacheID; |
- generate_bitmap_cache_id(bitmap, &cacheID); |
+ GrContentKey key; |
+ generate_bitmap_key(bitmap, &key); |
GrSurfaceDesc desc; |
generate_bitmap_texture_desc(bitmap, &desc); |
- result = ctx->findAndRefTexture(desc, cacheID, params); |
+ result = ctx->findAndRefTexture(desc, key, params); |
} |
if (NULL == result) { |
result = sk_gr_create_bitmap_texture(ctx, cache, params, bitmap); |