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

Side by Side Diff: src/gpu/SkGr.cpp

Issue 820683002: When bitmap is texture backed, don't download and reupload pixels (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: remove comment Created 6 years 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 unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2010 Google Inc. 2 * Copyright 2010 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "SkGr.h" 8 #include "SkGr.h"
9 9
10 #include "GrDrawTargetCaps.h" 10 #include "GrDrawTargetCaps.h"
(...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after
353 } 353 }
354 SkAutoLockPixels alp(*bitmap); 354 SkAutoLockPixels alp(*bitmap);
355 if (!bitmap->readyToDraw()) { 355 if (!bitmap->readyToDraw()) {
356 return NULL; 356 return NULL;
357 } 357 }
358 358
359 return sk_gr_allocate_texture(ctx, cache, params, origBitmap, desc, 359 return sk_gr_allocate_texture(ctx, cache, params, origBitmap, desc,
360 bitmap->getPixels(), bitmap->rowBytes()); 360 bitmap->getPixels(), bitmap->rowBytes());
361 } 361 }
362 362
363 static GrTexture* get_texture_backing_bmp(const SkBitmap& bitmap, const GrContex t* context,
364 const GrTextureParams* params) {
365 if (GrTexture* texture = bitmap.getTexture()) {
366 // Our texture-resizing-for-tiling used to upscale NPOT textures for til ing only works with
367 // content-key cached resources. Rather than invest in that legacy code path, we'll just
368 // take the horribly slow route of causing a cache miss which will cause the pixels to be
369 // read and reuploaded to a texture with a content key.
370 if (params && !context->getGpu()->caps()->npotTextureTileSupport() &&
371 (params->isTiled() || GrTextureParams::kMipMap_FilterMode == params- >filterMode())) {
372 return NULL;
373 }
374 return texture;
375 }
376 return NULL;
377 }
378
363 bool GrIsBitmapInCache(const GrContext* ctx, 379 bool GrIsBitmapInCache(const GrContext* ctx,
364 const SkBitmap& bitmap, 380 const SkBitmap& bitmap,
365 const GrTextureParams* params) { 381 const GrTextureParams* params) {
382 if (get_texture_backing_bmp(bitmap, ctx, params)) {
383 return true;
384 }
385
366 GrCacheID cacheID; 386 GrCacheID cacheID;
367 generate_bitmap_cache_id(bitmap, &cacheID); 387 generate_bitmap_cache_id(bitmap, &cacheID);
368 388
369 GrSurfaceDesc desc; 389 GrSurfaceDesc desc;
370 generate_bitmap_texture_desc(bitmap, &desc); 390 generate_bitmap_texture_desc(bitmap, &desc);
371 return ctx->isTextureInCache(desc, cacheID, params); 391 return ctx->isTextureInCache(desc, cacheID, params);
372 } 392 }
373 393
374 GrTexture* GrRefCachedBitmapTexture(GrContext* ctx, 394 GrTexture* GrRefCachedBitmapTexture(GrContext* ctx,
375 const SkBitmap& bitmap, 395 const SkBitmap& bitmap,
376 const GrTextureParams* params) { 396 const GrTextureParams* params) {
377 GrTexture* result = NULL; 397 GrTexture* result = get_texture_backing_bmp(bitmap, ctx, params);
398 if (result) {
399 return SkRef(result);
400 }
378 401
379 bool cache = !bitmap.isVolatile(); 402 bool cache = !bitmap.isVolatile();
380 403
381 if (cache) { 404 if (cache) {
382 // If the bitmap isn't changing try to find a cached copy first. 405 // If the bitmap isn't changing try to find a cached copy first.
383 406
384 GrCacheID cacheID; 407 GrCacheID cacheID;
385 generate_bitmap_cache_id(bitmap, &cacheID); 408 generate_bitmap_cache_id(bitmap, &cacheID);
386 409
387 GrSurfaceDesc desc; 410 GrSurfaceDesc desc;
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
546 if (shader->asFragmentProcessor(context, skPaint, viewM, NULL, &paintCol or, &fp) && fp) { 569 if (shader->asFragmentProcessor(context, skPaint, viewM, NULL, &paintCol or, &fp) && fp) {
547 grPaint->addColorProcessor(fp)->unref(); 570 grPaint->addColorProcessor(fp)->unref();
548 constantColor = false; 571 constantColor = false;
549 } 572 }
550 } 573 }
551 574
552 // The grcolor is automatically set when calling asFragmentProcessor. 575 // The grcolor is automatically set when calling asFragmentProcessor.
553 // If the shader can be seen as an effect it returns true and adds its effec t to the grpaint. 576 // If the shader can be seen as an effect it returns true and adds its effec t to the grpaint.
554 SkPaint2GrPaintNoShader(context, skPaint, paintColor, constantColor, grPaint ); 577 SkPaint2GrPaintNoShader(context, skPaint, paintColor, constantColor, grPaint );
555 } 578 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698