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

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

Issue 275903002: Factor GrTexture into public GrTexture and private GrTextureImpl. (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Move functions called by Chrome back to GrTexture Created 6 years, 7 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 | « include/gpu/GrTexture.h ('k') | src/gpu/GrTexture.cpp » ('j') | 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 219 matching lines...) Expand 10 before | Expand all | Expand 10 after
230 if (NULL != resourceBytes) { 230 if (NULL != resourceBytes) {
231 *resourceBytes = fResourceCache->getCachedResourceBytes(); 231 *resourceBytes = fResourceCache->getCachedResourceBytes();
232 } 232 }
233 } 233 }
234 234
235 //////////////////////////////////////////////////////////////////////////////// 235 ////////////////////////////////////////////////////////////////////////////////
236 236
237 GrTexture* GrContext::findAndRefTexture(const GrTextureDesc& desc, 237 GrTexture* GrContext::findAndRefTexture(const GrTextureDesc& desc,
238 const GrCacheID& cacheID, 238 const GrCacheID& cacheID,
239 const GrTextureParams* params) { 239 const GrTextureParams* params) {
240 GrResourceKey resourceKey = GrTexture::ComputeKey(fGpu, params, desc, cacheI D); 240 GrResourceKey resourceKey = GrTextureImpl::ComputeKey(fGpu, params, desc, ca cheID);
241 GrCacheable* resource = fResourceCache->find(resourceKey); 241 GrCacheable* resource = fResourceCache->find(resourceKey);
242 SkSafeRef(resource); 242 SkSafeRef(resource);
243 return static_cast<GrTexture*>(resource); 243 return static_cast<GrTexture*>(resource);
244 } 244 }
245 245
246 bool GrContext::isTextureInCache(const GrTextureDesc& desc, 246 bool GrContext::isTextureInCache(const GrTextureDesc& desc,
247 const GrCacheID& cacheID, 247 const GrCacheID& cacheID,
248 const GrTextureParams* params) const { 248 const GrTextureParams* params) const {
249 GrResourceKey resourceKey = GrTexture::ComputeKey(fGpu, params, desc, cacheI D); 249 GrResourceKey resourceKey = GrTextureImpl::ComputeKey(fGpu, params, desc, ca cheID);
250 return fResourceCache->hasKey(resourceKey); 250 return fResourceCache->hasKey(resourceKey);
251 } 251 }
252 252
253 void GrContext::addStencilBuffer(GrStencilBuffer* sb) { 253 void GrContext::addStencilBuffer(GrStencilBuffer* sb) {
254 ASSERT_OWNED_RESOURCE(sb); 254 ASSERT_OWNED_RESOURCE(sb);
255 255
256 GrResourceKey resourceKey = GrStencilBuffer::ComputeKey(sb->width(), 256 GrResourceKey resourceKey = GrStencilBuffer::ComputeKey(sb->width(),
257 sb->height(), 257 sb->height(),
258 sb->numSamples()); 258 sb->numSamples());
259 fResourceCache->addResource(resourceKey, sb); 259 fResourceCache->addResource(resourceKey, sb);
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
376 376
377 return texture; 377 return texture;
378 } 378 }
379 379
380 GrTexture* GrContext::createTexture(const GrTextureParams* params, 380 GrTexture* GrContext::createTexture(const GrTextureParams* params,
381 const GrTextureDesc& desc, 381 const GrTextureDesc& desc,
382 const GrCacheID& cacheID, 382 const GrCacheID& cacheID,
383 void* srcData, 383 void* srcData,
384 size_t rowBytes, 384 size_t rowBytes,
385 GrResourceKey* cacheKey) { 385 GrResourceKey* cacheKey) {
386 GrResourceKey resourceKey = GrTexture::ComputeKey(fGpu, params, desc, cacheI D); 386 GrResourceKey resourceKey = GrTextureImpl::ComputeKey(fGpu, params, desc, ca cheID);
387 387
388 GrTexture* texture; 388 GrTexture* texture;
389 if (GrTexture::NeedsResizing(resourceKey)) { 389 if (GrTextureImpl::NeedsResizing(resourceKey)) {
390 texture = this->createResizedTexture(desc, cacheID, 390 texture = this->createResizedTexture(desc, cacheID,
391 srcData, rowBytes, 391 srcData, rowBytes,
392 GrTexture::NeedsBilerp(resourceKey) ); 392 GrTextureImpl::NeedsBilerp(resource Key));
393 } else { 393 } else {
394 texture= fGpu->createTexture(desc, srcData, rowBytes); 394 texture= fGpu->createTexture(desc, srcData, rowBytes);
395 } 395 }
396 396
397 if (NULL != texture) { 397 if (NULL != texture) {
398 // Adding a resource could put us overbudget. Try to free up the 398 // Adding a resource could put us overbudget. Try to free up the
399 // necessary space before adding it. 399 // necessary space before adding it.
400 fResourceCache->purgeAsNeeded(1, texture->gpuMemorySize()); 400 fResourceCache->purgeAsNeeded(1, texture->gpuMemorySize());
401 fResourceCache->addResource(resourceKey, texture); 401 fResourceCache->addResource(resourceKey, texture);
402 402
403 if (NULL != cacheKey) { 403 if (NULL != cacheKey) {
404 *cacheKey = resourceKey; 404 *cacheKey = resourceKey;
405 } 405 }
406 } 406 }
407 407
408 return texture; 408 return texture;
409 } 409 }
410 410
411 static GrTexture* create_scratch_texture(GrGpu* gpu, 411 static GrTexture* create_scratch_texture(GrGpu* gpu,
412 GrResourceCache* resourceCache, 412 GrResourceCache* resourceCache,
413 const GrTextureDesc& desc) { 413 const GrTextureDesc& desc) {
414 GrTexture* texture = gpu->createTexture(desc, NULL, 0); 414 GrTexture* texture = gpu->createTexture(desc, NULL, 0);
415 if (NULL != texture) { 415 if (NULL != texture) {
416 GrResourceKey key = GrTexture::ComputeScratchKey(texture->desc()); 416 GrResourceKey key = GrTextureImpl::ComputeScratchKey(texture->desc());
417 // Adding a resource could put us overbudget. Try to free up the 417 // Adding a resource could put us overbudget. Try to free up the
418 // necessary space before adding it. 418 // necessary space before adding it.
419 resourceCache->purgeAsNeeded(1, texture->gpuMemorySize()); 419 resourceCache->purgeAsNeeded(1, texture->gpuMemorySize());
420 // Make the resource exclusive so future 'find' calls don't return it 420 // Make the resource exclusive so future 'find' calls don't return it
421 resourceCache->addResource(key, texture, GrResourceCache::kHide_Ownershi pFlag); 421 resourceCache->addResource(key, texture, GrResourceCache::kHide_Ownershi pFlag);
422 } 422 }
423 return texture; 423 return texture;
424 } 424 }
425 425
426 GrTexture* GrContext::lockAndRefScratchTexture(const GrTextureDesc& inDesc, Scra tchTexMatch match) { 426 GrTexture* GrContext::lockAndRefScratchTexture(const GrTextureDesc& inDesc, Scra tchTexMatch match) {
(...skipping 19 matching lines...) Expand all
446 static const int MIN_SIZE = 16; 446 static const int MIN_SIZE = 16;
447 desc.fWidth = SkTMax(MIN_SIZE, GrNextPow2(desc.fWidth)); 447 desc.fWidth = SkTMax(MIN_SIZE, GrNextPow2(desc.fWidth));
448 desc.fHeight = SkTMax(MIN_SIZE, GrNextPow2(desc.fHeight)); 448 desc.fHeight = SkTMax(MIN_SIZE, GrNextPow2(desc.fHeight));
449 } 449 }
450 450
451 GrCacheable* resource = NULL; 451 GrCacheable* resource = NULL;
452 int origWidth = desc.fWidth; 452 int origWidth = desc.fWidth;
453 int origHeight = desc.fHeight; 453 int origHeight = desc.fHeight;
454 454
455 do { 455 do {
456 GrResourceKey key = GrTexture::ComputeScratchKey(desc); 456 GrResourceKey key = GrTextureImpl::ComputeScratchKey(desc);
457 // Ensure we have exclusive access to the texture so future 'find' calls don't return it 457 // Ensure we have exclusive access to the texture so future 'find' calls don't return it
458 resource = fResourceCache->find(key, GrResourceCache::kHide_OwnershipFla g); 458 resource = fResourceCache->find(key, GrResourceCache::kHide_OwnershipFla g);
459 if (NULL != resource) { 459 if (NULL != resource) {
460 resource->ref(); 460 resource->ref();
461 break; 461 break;
462 } 462 }
463 if (kExact_ScratchTexMatch == match) { 463 if (kExact_ScratchTexMatch == match) {
464 break; 464 break;
465 } 465 }
466 // We had a cache miss and we are in approx mode, relax the fit of the f lags. 466 // We had a cache miss and we are in approx mode, relax the fit of the f lags.
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
536 // reusing scratch textures (in this code path) it would just be 536 // reusing scratch textures (in this code path) it would just be
537 // wasting time sitting in the cache. 537 // wasting time sitting in the cache.
538 fResourceCache->makeNonExclusive(texture->getCacheEntry()); 538 fResourceCache->makeNonExclusive(texture->getCacheEntry());
539 fResourceCache->deleteResource(texture->getCacheEntry()); 539 fResourceCache->deleteResource(texture->getCacheEntry());
540 } else { 540 } else {
541 // In this case (fRefCnt > 1 || defRefCnt > 0) but we don't really 541 // In this case (fRefCnt > 1 || defRefCnt > 0) but we don't really
542 // want to readd it to the cache (since it will never be reused). 542 // want to readd it to the cache (since it will never be reused).
543 // Instead, give up the cache's ref and leave the decision up to 543 // Instead, give up the cache's ref and leave the decision up to
544 // addExistingTextureToCache once its ref count reaches 0. For 544 // addExistingTextureToCache once its ref count reaches 0. For
545 // this to work we need to leave it in the exclusive list. 545 // this to work we need to leave it in the exclusive list.
546 texture->setFlag((GrTextureFlags) GrTexture::kReturnToCache_FlagBit) ; 546 texture->impl()->setFlag((GrTextureFlags) GrTextureImpl::kReturnToCa che_FlagBit);
547 // Give up the cache's ref to the texture 547 // Give up the cache's ref to the texture
548 texture->unref(); 548 texture->unref();
549 } 549 }
550 } 550 }
551 } 551 }
552 552
553 void GrContext::purgeCache() { 553 void GrContext::purgeCache() {
554 if (NULL != fResourceCache) { 554 if (NULL != fResourceCache) {
555 fResourceCache->purgeAsNeeded(); 555 fResourceCache->purgeAsNeeded();
556 } 556 }
(...skipping 1277 matching lines...) Expand 10 before | Expand all | Expand 10 after
1834 SkSafeRef(resource); 1834 SkSafeRef(resource);
1835 return resource; 1835 return resource;
1836 } 1836 }
1837 1837
1838 /////////////////////////////////////////////////////////////////////////////// 1838 ///////////////////////////////////////////////////////////////////////////////
1839 #if GR_CACHE_STATS 1839 #if GR_CACHE_STATS
1840 void GrContext::printCacheStats() const { 1840 void GrContext::printCacheStats() const {
1841 fResourceCache->printStats(); 1841 fResourceCache->printStats();
1842 } 1842 }
1843 #endif 1843 #endif
OLDNEW
« no previous file with comments | « include/gpu/GrTexture.h ('k') | src/gpu/GrTexture.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698