Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(322)

Unified Diff: src/gpu/SkGr.cpp

Issue 1282363002: Use SkImageCacherator in SkImages (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: fix rob comments Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/gpu/SkGpuDevice.cpp ('k') | src/gpu/SkGrPriv.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/gpu/SkGr.cpp
diff --git a/src/gpu/SkGr.cpp b/src/gpu/SkGr.cpp
index a1821c32c3085d998dfe831c9133b261cd53e83a..471c9721cf55bd5357dc186a0f6f6f9ea3fd8cc5 100644
--- a/src/gpu/SkGr.cpp
+++ b/src/gpu/SkGr.cpp
@@ -155,21 +155,19 @@ static bool make_stretched_key(const GrUniqueKey& origKey, const Stretch& stretc
return false;
}
-static void make_unstretched_key(GrUniqueKey* key, uint32_t imageID,
- U16CPU width, U16CPU height, SkIPoint origin) {
- SkASSERT((uint16_t)width == width);
- SkASSERT((uint16_t)height == height);
+static void make_unstretched_key(GrUniqueKey* key, uint32_t imageID, const SkIRect& subset) {
+ SkASSERT(SkIsU16(subset.width()));
+ SkASSERT(SkIsU16(subset.height()));
static const GrUniqueKey::Domain kDomain = GrUniqueKey::GenerateDomain();
GrUniqueKey::Builder builder(key, kDomain, 4);
builder[0] = imageID;
- builder[1] = origin.fX;
- builder[2] = origin.fY;
- builder[3] = width | (height << 16);
+ builder[1] = subset.x();
+ builder[2] = subset.y();
+ builder[3] = subset.width() | (subset.height() << 16);
}
-void GrMakeKeyFromImageID(GrUniqueKey* key, uint32_t imageID,
- U16CPU width, U16CPU height, SkIPoint origin,
+void GrMakeKeyFromImageID(GrUniqueKey* key, uint32_t imageID, const SkIRect& subset,
const GrCaps& caps, SkImageUsageType usage) {
const Stretch::Type stretches[] = {
Stretch::kNone_Type, // kUntiled_SkImageUsageType
@@ -177,38 +175,31 @@ void GrMakeKeyFromImageID(GrUniqueKey* key, uint32_t imageID,
Stretch::kBilerp_Type, // kTiled_Filtered_SkImageUsageType
};
- const bool isPow2 = SkIsPow2(width) && SkIsPow2(height);
+ const bool isPow2 = SkIsPow2(subset.width()) && SkIsPow2(subset.height());
const bool needToStretch = !isPow2 &&
usage != kUntiled_SkImageUsageType &&
!caps.npotTextureTileSupport();
if (needToStretch) {
GrUniqueKey tmpKey;
- make_unstretched_key(&tmpKey, imageID, width, height, origin);
+ make_unstretched_key(&tmpKey, imageID, subset);
Stretch stretch;
stretch.fType = stretches[usage];
- stretch.fWidth = SkNextPow2(width);
- stretch.fHeight = SkNextPow2(height);
+ stretch.fWidth = SkNextPow2(subset.width());
+ stretch.fHeight = SkNextPow2(subset.height());
if (!make_stretched_key(tmpKey, stretch, key)) {
goto UNSTRETCHED;
}
} else {
UNSTRETCHED:
- make_unstretched_key(key, imageID, width, height, origin);
+ make_unstretched_key(key, imageID, subset);
}
}
-static void make_unstretched_key(const SkBitmap& bitmap, GrUniqueKey* key) {
- make_unstretched_key(key, bitmap.getGenerationID(), bitmap.width(), bitmap.height(),
- bitmap.pixelRefOrigin());
-}
-
-static void make_bitmap_keys(const SkBitmap& bitmap,
- const Stretch& stretch,
- GrUniqueKey* key,
- GrUniqueKey* stretchedKey) {
- make_unstretched_key(bitmap, key);
+static void make_image_keys(uint32_t imageID, const SkIRect& subset, const Stretch& stretch,
+ GrUniqueKey* key, GrUniqueKey* stretchedKey) {
+ make_unstretched_key(key, imageID, subset);
if (Stretch::kNone_Type != stretch.fType) {
make_stretched_key(*key, stretch, stretchedKey);
}
@@ -534,23 +525,17 @@ static GrTexture* create_bitmap_texture(GrContext* ctx,
return create_unstretched_bitmap_texture(ctx, bmp, unstretchedKey);
}
-bool GrIsBitmapInCache(const GrContext* ctx,
- const SkBitmap& bitmap,
- const GrTextureParams* params) {
+bool GrIsImageInCache(const GrContext* ctx, uint32_t imageID, const SkIRect& subset,
+ GrTexture* nativeTexture, const GrTextureParams* params) {
Stretch stretch;
- get_stretch(ctx, bitmap.width(), bitmap.height(), params, &stretch);
+ get_stretch(ctx, subset.width(), subset.height(), params, &stretch);
- // Handle the case where the bitmap is explicitly texture backed.
- GrTexture* texture = bitmap.getTexture();
- if (texture) {
+ // Handle the case where the bitmap/image is explicitly texture backed.
+ if (nativeTexture) {
if (Stretch::kNone_Type == stretch.fType) {
return true;
}
- // No keys for volatile bitmaps.
- if (bitmap.isVolatile()) {
- return false;
- }
- const GrUniqueKey& key = texture->getUniqueKey();
+ const GrUniqueKey& key = nativeTexture->getUniqueKey();
if (!key.isValid()) {
return false;
}
@@ -559,17 +544,21 @@ bool GrIsBitmapInCache(const GrContext* ctx,
return ctx->textureProvider()->existsTextureWithUniqueKey(stretchedKey);
}
- // We don't cache volatile bitmaps
- if (bitmap.isVolatile()) {
- return false;
- }
-
GrUniqueKey key, stretchedKey;
- make_bitmap_keys(bitmap, stretch, &key, &stretchedKey);
+ make_image_keys(imageID, subset, stretch, &key, &stretchedKey);
return ctx->textureProvider()->existsTextureWithUniqueKey(
(Stretch::kNone_Type == stretch.fType) ? key : stretchedKey);
}
+bool GrIsBitmapInCache(const GrContext* ctx, const SkBitmap& bitmap,
+ const GrTextureParams* params) {
+ if (bitmap.isVolatile()) {
+ return false; // we don't cache volatile bitmaps.
+ }
+ return GrIsImageInCache(ctx, bitmap.getGenerationID(), bitmap.getSubset(), bitmap.getTexture(),
+ params);
+}
+
GrTexture* GrRefCachedBitmapTexture(GrContext* ctx,
const SkBitmap& bitmap,
const GrTextureParams* params) {
@@ -602,7 +591,7 @@ GrTexture* GrRefCachedBitmapTexture(GrContext* ctx,
if (!bitmap.isVolatile()) {
// If the bitmap isn't changing try to find a cached copy first.
- make_bitmap_keys(bitmap, stretch, &key, &resizedKey);
+ make_image_keys(bitmap.getGenerationID(), bitmap.getSubset(), stretch, &key, &resizedKey);
result = ctx->textureProvider()->findAndRefTextureByUniqueKey(
resizedKey.isValid() ? resizedKey : key);
« no previous file with comments | « src/gpu/SkGpuDevice.cpp ('k') | src/gpu/SkGrPriv.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698