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

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

Issue 12475007: Reduce the minimum scratch size to 16, don't look for next pow2 larger sizes. (Closed) Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: Created 7 years, 9 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 unified diff | Download patch | Annotate | Revision Log
« 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 /* 2 /*
3 * Copyright 2011 Google Inc. 3 * Copyright 2011 Google Inc.
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 8
9 9
10 #include "GrContext.h" 10 #include "GrContext.h"
(...skipping 410 matching lines...) Expand 10 before | Expand all | Expand 10 after
421 } 421 }
422 422
423 GrTexture* GrContext::lockAndRefScratchTexture(const GrTextureDesc& inDesc, Scra tchTexMatch match) { 423 GrTexture* GrContext::lockAndRefScratchTexture(const GrTextureDesc& inDesc, Scra tchTexMatch match) {
424 GrTextureDesc desc = inDesc; 424 GrTextureDesc desc = inDesc;
425 425
426 GrAssert((desc.fFlags & kRenderTarget_GrTextureFlagBit) || 426 GrAssert((desc.fFlags & kRenderTarget_GrTextureFlagBit) ||
427 !(desc.fFlags & kNoStencil_GrTextureFlagBit)); 427 !(desc.fFlags & kNoStencil_GrTextureFlagBit));
428 428
429 if (kApprox_ScratchTexMatch == match) { 429 if (kApprox_ScratchTexMatch == match) {
430 // bin by pow2 with a reasonable min 430 // bin by pow2 with a reasonable min
431 static const int MIN_SIZE = 256; 431 static const int MIN_SIZE = 16;
432 desc.fWidth = GrMax(MIN_SIZE, GrNextPow2(desc.fWidth)); 432 desc.fWidth = GrMax(MIN_SIZE, GrNextPow2(desc.fWidth));
433 desc.fHeight = GrMax(MIN_SIZE, GrNextPow2(desc.fHeight)); 433 desc.fHeight = GrMax(MIN_SIZE, GrNextPow2(desc.fHeight));
434 } 434 }
435 435
436 // Renderable A8 targets are not universally supported (e.g., not on ANGLE) 436 // Renderable A8 targets are not universally supported (e.g., not on ANGLE)
437 GrAssert(this->isConfigRenderable(kAlpha_8_GrPixelConfig) || 437 GrAssert(this->isConfigRenderable(kAlpha_8_GrPixelConfig) ||
438 !(desc.fFlags & kRenderTarget_GrTextureFlagBit) || 438 !(desc.fFlags & kRenderTarget_GrTextureFlagBit) ||
439 (desc.fConfig != kAlpha_8_GrPixelConfig)); 439 (desc.fConfig != kAlpha_8_GrPixelConfig));
440 440
441 GrResource* resource = NULL; 441 GrResource* resource = NULL;
442 int origWidth = desc.fWidth; 442 int origWidth = desc.fWidth;
443 int origHeight = desc.fHeight; 443 int origHeight = desc.fHeight;
444 bool doubledW = false; 444 bool doubledW = false;
445 bool doubledH = false; 445 bool doubledH = false;
446 446
447 do { 447 do {
448 GrResourceKey key = GrTexture::ComputeScratchKey(desc); 448 GrResourceKey key = GrTexture::ComputeScratchKey(desc);
449 // Ensure we have exclusive access to the texture so future 'find' calls don't return it 449 // Ensure we have exclusive access to the texture so future 'find' calls don't return it
450 resource = fTextureCache->find(key, GrResourceCache::kHide_OwnershipFlag ); 450 resource = fTextureCache->find(key, GrResourceCache::kHide_OwnershipFlag );
451 if (NULL != resource) { 451 if (NULL != resource) {
452 resource->ref(); 452 resource->ref();
453 break; 453 break;
454 } 454 }
455 if (kExact_ScratchTexMatch == match) { 455 if (kExact_ScratchTexMatch == match) {
456 break; 456 break;
457 } 457 }
458 // We had a cache miss and we are in approx mode, relax the fit of the f lags... then try 458 // We had a cache miss and we are in approx mode, relax the fit of the f lags.
459 // doubling width... then the height.
460 459
461 // We no longer try to reuse textures that were previously used as rende r targets in 460 // We no longer try to reuse textures that were previously used as rende r targets in
462 // situations where no RT is needed; doing otherwise can confuse the vid eo driver and 461 // situations where no RT is needed; doing otherwise can confuse the vid eo driver and
463 // cause significant performance problems in some cases. 462 // cause significant performance problems in some cases.
464 if (desc.fFlags & kNoStencil_GrTextureFlagBit) { 463 if (desc.fFlags & kNoStencil_GrTextureFlagBit) {
465 desc.fFlags = desc.fFlags & ~kNoStencil_GrTextureFlagBit; 464 desc.fFlags = desc.fFlags & ~kNoStencil_GrTextureFlagBit;
466 } else if (!doubledW) {
467 desc.fFlags = inDesc.fFlags;
468 desc.fWidth *= 2;
469 doubledW = true;
470 } else if (!doubledH) {
471 desc.fFlags = inDesc.fFlags;
472 desc.fWidth = origWidth;
473 desc.fHeight *= 2;
474 doubledH = true;
475 } else { 465 } else {
476 break; 466 break;
477 } 467 }
478 468
479 } while (true); 469 } while (true);
480 470
481 if (NULL == resource) { 471 if (NULL == resource) {
482 desc.fFlags = inDesc.fFlags; 472 desc.fFlags = inDesc.fFlags;
483 desc.fWidth = origWidth; 473 desc.fWidth = origWidth;
484 desc.fHeight = origHeight; 474 desc.fHeight = origHeight;
(...skipping 1507 matching lines...) Expand 10 before | Expand all | Expand 10 after
1992 return srcTexture; 1982 return srcTexture;
1993 } 1983 }
1994 } 1984 }
1995 1985
1996 /////////////////////////////////////////////////////////////////////////////// 1986 ///////////////////////////////////////////////////////////////////////////////
1997 #if GR_CACHE_STATS 1987 #if GR_CACHE_STATS
1998 void GrContext::printCacheStats() const { 1988 void GrContext::printCacheStats() const {
1999 fTextureCache->printStats(); 1989 fTextureCache->printStats();
2000 } 1990 }
2001 #endif 1991 #endif
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