Index: src/gpu/SkGr.cpp |
diff --git a/src/gpu/SkGr.cpp b/src/gpu/SkGr.cpp |
index 8f9555ad52a2328eb804c1c10c3efb4487740415..ce4af0bfca8a13471b3c2218f42c2d7c31c8f750 100644 |
--- a/src/gpu/SkGr.cpp |
+++ b/src/gpu/SkGr.cpp |
@@ -38,33 +38,6 @@ |
# include "etc1.h" |
#endif |
-bool GrTextureUsageSupported(const GrCaps& caps, int width, int height, SkImageUsageType usage) { |
- if (caps.npotTextureTileSupport()) { |
- return true; |
- } |
- const bool is_pow2 = SkIsPow2(width) && SkIsPow2(height); |
- return is_pow2 || kUntiled_SkImageUsageType == usage; |
-} |
- |
-GrTextureParams GrImageUsageToTextureParams(SkImageUsageType usage) { |
- // Just need a params that will trigger the correct cache key / etc, since the usage doesn't |
- // tell us the specifics about filter level or specific tiling. |
- |
- const SkShader::TileMode tiles[] = { |
- SkShader::kClamp_TileMode, // kUntiled_SkImageUsageType |
- SkShader::kRepeat_TileMode, // kTiled_Unfiltered_SkImageUsageType |
- SkShader::kRepeat_TileMode, // kTiled_Filtered_SkImageUsageType |
- }; |
- |
- const GrTextureParams::FilterMode filters[] = { |
- GrTextureParams::kNone_FilterMode, // kUntiled_SkImageUsageType |
- GrTextureParams::kNone_FilterMode, // kTiled_Unfiltered_SkImageUsageType |
- GrTextureParams::kBilerp_FilterMode, // kTiled_Filtered_SkImageUsageType |
- }; |
- |
- return GrTextureParams(tiles[usage], filters[usage]); |
-} |
- |
/* Fill out buffer with the compressed format Ganesh expects from a colortable |
based bitmap. [palette (colortable) + indices]. |
@@ -124,35 +97,31 @@ static void build_index8_data(void* buffer, const SkBitmap& bitmap) { |
//////////////////////////////////////////////////////////////////////////////// |
-static void get_stretch(const GrContext* ctx, int width, int height, |
- const GrTextureParams* params, SkGrStretch* stretch) { |
+static void get_stretch(const GrCaps& caps, int width, int height, |
+ const GrTextureParams& params, SkGrStretch* stretch) { |
stretch->fType = SkGrStretch::kNone_Type; |
bool doStretch = false; |
- if (params && params->isTiled() && !ctx->caps()->npotTextureTileSupport() && |
+ if (params.isTiled() && !caps.npotTextureTileSupport() && |
(!SkIsPow2(width) || !SkIsPow2(height))) { |
doStretch = true; |
- stretch->fWidth = GrNextPow2(SkTMax(width, ctx->caps()->minTextureSize())); |
- stretch->fHeight = GrNextPow2(SkTMax(height, ctx->caps()->minTextureSize())); |
- } else if (width < ctx->caps()->minTextureSize() || height < ctx->caps()->minTextureSize()) { |
+ stretch->fWidth = GrNextPow2(SkTMax(width, caps.minTextureSize())); |
+ stretch->fHeight = GrNextPow2(SkTMax(height, caps.minTextureSize())); |
+ } else if (width < caps.minTextureSize() || height < caps.minTextureSize()) { |
// The small texture issues appear to be with tiling. Hence it seems ok to scale them |
// up using the GPU. If issues persist we may need to CPU-stretch. |
doStretch = true; |
- stretch->fWidth = SkTMax(width, ctx->caps()->minTextureSize()); |
- stretch->fHeight = SkTMax(height, ctx->caps()->minTextureSize()); |
+ stretch->fWidth = SkTMax(width, caps.minTextureSize()); |
+ stretch->fHeight = SkTMax(height, caps.minTextureSize()); |
} |
if (doStretch) { |
- if (params) { |
- switch(params->filterMode()) { |
- case GrTextureParams::kNone_FilterMode: |
- stretch->fType = SkGrStretch::kNearest_Type; |
- break; |
- case GrTextureParams::kBilerp_FilterMode: |
- case GrTextureParams::kMipMap_FilterMode: |
- stretch->fType = SkGrStretch::kBilerp_Type; |
- break; |
- } |
- } else { |
- stretch->fType = SkGrStretch::kBilerp_Type; |
+ switch(params.filterMode()) { |
+ case GrTextureParams::kNone_FilterMode: |
+ stretch->fType = SkGrStretch::kNearest_Type; |
+ break; |
+ case GrTextureParams::kBilerp_FilterMode: |
+ case GrTextureParams::kMipMap_FilterMode: |
+ stretch->fType = SkGrStretch::kBilerp_Type; |
+ break; |
} |
} else { |
stretch->fWidth = -1; |
@@ -190,26 +159,16 @@ static void make_unstretched_key(GrUniqueKey* key, uint32_t imageID, const SkIRe |
} |
void GrMakeKeyFromImageID(GrUniqueKey* key, uint32_t imageID, const SkIRect& subset, |
- const GrCaps& caps, SkImageUsageType usage) { |
- const SkGrStretch::Type stretches[] = { |
- SkGrStretch::kNone_Type, // kUntiled_SkImageUsageType |
- SkGrStretch::kNearest_Type, // kTiled_Unfiltered_SkImageUsageType |
- SkGrStretch::kBilerp_Type, // kTiled_Filtered_SkImageUsageType |
- }; |
- |
- if (!GrTextureUsageSupported(caps, subset.width(), subset.height(), usage)) { |
+ const GrCaps& caps, const GrTextureParams& params) { |
+ SkGrStretch stretch; |
+ get_stretch(caps, subset.width(), subset.height(), params, &stretch); |
+ if (SkGrStretch::kNone_Type != stretch.fType) { |
GrUniqueKey tmpKey; |
make_unstretched_key(&tmpKey, imageID, subset); |
- |
- SkGrStretch stretch; |
- stretch.fType = stretches[usage]; |
- stretch.fWidth = SkNextPow2(subset.width()); |
- stretch.fHeight = SkNextPow2(subset.height()); |
if (!GrMakeStretchedKey(tmpKey, stretch, key)) { |
- goto UNSTRETCHED; |
+ *key = tmpKey; |
} |
} else { |
- UNSTRETCHED: |
make_unstretched_key(key, imageID, subset); |
} |
} |
@@ -519,9 +478,9 @@ static SkBitmap stretch_on_cpu(const SkBitmap& bmp, const SkGrStretch& stretch) |
} |
bool GrIsImageInCache(const GrContext* ctx, uint32_t imageID, const SkIRect& subset, |
- GrTexture* nativeTexture, const GrTextureParams* params) { |
+ GrTexture* nativeTexture, const GrTextureParams& params) { |
SkGrStretch stretch; |
- get_stretch(ctx, subset.width(), subset.height(), params, &stretch); |
+ get_stretch(*ctx->caps(), subset.width(), subset.height(), params, &stretch); |
// Handle the case where the bitmap/image is explicitly texture backed. |
if (nativeTexture) { |
@@ -593,19 +552,10 @@ private: |
}; |
GrTexture* GrRefCachedBitmapTexture(GrContext* ctx, const SkBitmap& bitmap, |
- const GrTextureParams* params) { |
+ const GrTextureParams& params) { |
return Bitmap_GrTextureMaker(bitmap).refCachedTexture(ctx, params); |
} |
-// TODO: make this be the canonical signature, and turn the version that takes GrTextureParams* |
-// into a wrapper that contains the inverse of these tables. |
-GrTexture* GrRefCachedBitmapTexture(GrContext* ctx, |
- const SkBitmap& bitmap, |
- SkImageUsageType usage) { |
- GrTextureParams params = GrImageUsageToTextureParams(usage); |
- return GrRefCachedBitmapTexture(ctx, bitmap, ¶ms); |
-} |
- |
/////////////////////////////////////////////////////////////////////////////// |
// alphatype is ignore for now, but if GrPixelConfig is expanded to encompass |
@@ -928,14 +878,9 @@ GrTextureParams::FilterMode GrSkFilterQualityToGrFilterMode(SkFilterQuality pain |
//////////////////////////////////////////////////////////////////////////////////////////////// |
-GrTexture* GrTextureMaker::refCachedTexture(GrContext* ctx, SkImageUsageType usage) { |
- GrTextureParams params = GrImageUsageToTextureParams(usage); |
- return this->refCachedTexture(ctx, ¶ms); |
-} |
- |
-GrTexture* GrTextureMaker::refCachedTexture(GrContext* ctx, const GrTextureParams* params) { |
+GrTexture* GrTextureMaker::refCachedTexture(GrContext* ctx, const GrTextureParams& params) { |
SkGrStretch stretch; |
- get_stretch(ctx, this->width(), this->height(), params, &stretch); |
+ get_stretch(*ctx->caps(), this->width(), this->height(), params, &stretch); |
if (SkGrStretch::kNone_Type == stretch.fType) { |
return this->onRefUnstretchedTexture(ctx); |