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

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

Issue 1261033005: Skip temp texture when config conversion test has already failed. (Closed) Base URL: https://skia.googlesource.com/skia.git@fix
Patch Set: Additional Comment Created 5 years, 4 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
« no previous file with comments | « include/gpu/GrContext.h ('k') | 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 #include "GrContext.h" 9 #include "GrContext.h"
10 10
(...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after
338 return false; 338 return false;
339 } 339 }
340 340
341 bool applyPremulToSrc = false; 341 bool applyPremulToSrc = false;
342 if (kUnpremul_PixelOpsFlag & pixelOpsFlags) { 342 if (kUnpremul_PixelOpsFlag & pixelOpsFlags) {
343 if (!GrPixelConfigIs8888(srcConfig)) { 343 if (!GrPixelConfigIs8888(srcConfig)) {
344 return false; 344 return false;
345 } 345 }
346 applyPremulToSrc = true; 346 applyPremulToSrc = true;
347 } 347 }
348 GrGpu::DrawPreference drawPreference = applyPremulToSrc ? 348
349 GrGpu::kCallerPrefersDraw_DrawPrefer ence : 349 GrGpu::DrawPreference drawPreference = GrGpu::kNoDraw_DrawPreference;
350 GrGpu::kNoDraw_DrawPreference; 350 // Don't prefer to draw for the conversion (and thereby access a texture fro m the cache) when
351 // we've already determined that there isn't a roundtrip preserving conversi on processor pair.
352 if (applyPremulToSrc && !this->didFailPMUPMConversionTest()) {
353 drawPreference = GrGpu::kCallerPrefersDraw_DrawPreference;
354 }
355
351 GrGpu::WritePixelTempDrawInfo tempDrawInfo; 356 GrGpu::WritePixelTempDrawInfo tempDrawInfo;
352 if (!fGpu->getWritePixelsInfo(surface, width, height, rowBytes, srcConfig, & drawPreference, 357 if (!fGpu->getWritePixelsInfo(surface, width, height, rowBytes, srcConfig, & drawPreference,
353 &tempDrawInfo)) { 358 &tempDrawInfo)) {
354 return false; 359 return false;
355 } 360 }
356 361
357 if (!(kDontFlush_PixelOpsFlag & pixelOpsFlags) && surface->surfacePriv().has PendingIO()) { 362 if (!(kDontFlush_PixelOpsFlag & pixelOpsFlags) && surface->surfacePriv().has PendingIO()) {
358 this->flush(); 363 this->flush();
359 } 364 }
360 365
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
469 if (!(kDontFlush_PixelOpsFlag & flags) && src->surfacePriv().hasPendingWrite ()) { 474 if (!(kDontFlush_PixelOpsFlag & flags) && src->surfacePriv().hasPendingWrite ()) {
470 this->flush(); 475 this->flush();
471 } 476 }
472 477
473 bool unpremul = SkToBool(kUnpremul_PixelOpsFlag & flags); 478 bool unpremul = SkToBool(kUnpremul_PixelOpsFlag & flags);
474 if (unpremul && !GrPixelConfigIs8888(dstConfig)) { 479 if (unpremul && !GrPixelConfigIs8888(dstConfig)) {
475 // The unpremul flag is only allowed for 8888 configs. 480 // The unpremul flag is only allowed for 8888 configs.
476 return false; 481 return false;
477 } 482 }
478 483
479 GrGpu::DrawPreference drawPreference = unpremul ? GrGpu::kCallerPrefersDraw_ DrawPreference : 484 GrGpu::DrawPreference drawPreference = GrGpu::kNoDraw_DrawPreference;
480 GrGpu::kNoDraw_DrawPrefere nce; 485 // Don't prefer to draw for the conversion (and thereby access a texture fro m the cache) when
486 // we've already determined that there isn't a roundtrip preserving conversi on processor pair.
487 if (unpremul && !this->didFailPMUPMConversionTest()) {
488 drawPreference = GrGpu::kCallerPrefersDraw_DrawPreference;
489 }
490
481 GrGpu::ReadPixelTempDrawInfo tempDrawInfo; 491 GrGpu::ReadPixelTempDrawInfo tempDrawInfo;
482 if (!fGpu->getReadPixelsInfo(src, width, height, rowBytes, dstConfig, &drawP reference, 492 if (!fGpu->getReadPixelsInfo(src, width, height, rowBytes, dstConfig, &drawP reference,
483 &tempDrawInfo)) { 493 &tempDrawInfo)) {
484 return false; 494 return false;
485 } 495 }
486 496
487 SkAutoTUnref<GrRenderTarget> rtToRead(SkSafeRef(src->asRenderTarget())); 497 SkAutoTUnref<GrRenderTarget> rtToRead(SkSafeRef(src->asRenderTarget()));
488 bool didTempDraw = false; 498 bool didTempDraw = false;
489 if (GrGpu::kNoDraw_DrawPreference != drawPreference) { 499 if (GrGpu::kNoDraw_DrawPreference != drawPreference) {
490 GrTextureProvider::ScratchTexMatch match = GrTextureProvider::kApprox_Sc ratchTexMatch; 500 GrTextureProvider::ScratchTexMatch match = GrTextureProvider::kApprox_Sc ratchTexMatch;
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after
712 GrConfigConversionEffect::PMConversion upmToPM = 722 GrConfigConversionEffect::PMConversion upmToPM =
713 static_cast<GrConfigConversionEffect::PMConversion>(fUPMToPMConversion); 723 static_cast<GrConfigConversionEffect::PMConversion>(fUPMToPMConversion);
714 if (GrConfigConversionEffect::kNone_PMConversion != upmToPM) { 724 if (GrConfigConversionEffect::kNone_PMConversion != upmToPM) {
715 return GrConfigConversionEffect::Create(procDataManager, texture, swapRA ndB, upmToPM, 725 return GrConfigConversionEffect::Create(procDataManager, texture, swapRA ndB, upmToPM,
716 matrix); 726 matrix);
717 } else { 727 } else {
718 return NULL; 728 return NULL;
719 } 729 }
720 } 730 }
721 731
732 bool GrContext::didFailPMUPMConversionTest() const {
733 // The PM<->UPM tests fail or succeed together so we only need to check one.
734 return fDidTestPMConversions &&
735 GrConfigConversionEffect::kNone_PMConversion == fPMToUPMConversion;
736 }
737
722 ////////////////////////////////////////////////////////////////////////////// 738 //////////////////////////////////////////////////////////////////////////////
723 739
724 void GrContext::getResourceCacheLimits(int* maxTextures, size_t* maxTextureBytes ) const { 740 void GrContext::getResourceCacheLimits(int* maxTextures, size_t* maxTextureBytes ) const {
725 if (maxTextures) { 741 if (maxTextures) {
726 *maxTextures = fResourceCache->getMaxResourceCount(); 742 *maxTextures = fResourceCache->getMaxResourceCount();
727 } 743 }
728 if (maxTextureBytes) { 744 if (maxTextureBytes) {
729 *maxTextureBytes = fResourceCache->getMaxResourceBytes(); 745 *maxTextureBytes = fResourceCache->getMaxResourceBytes();
730 } 746 }
731 } 747 }
732 748
733 void GrContext::setResourceCacheLimits(int maxTextures, size_t maxTextureBytes) { 749 void GrContext::setResourceCacheLimits(int maxTextures, size_t maxTextureBytes) {
734 fResourceCache->setLimits(maxTextures, maxTextureBytes); 750 fResourceCache->setLimits(maxTextures, maxTextureBytes);
735 } 751 }
736 752
737 ////////////////////////////////////////////////////////////////////////////// 753 //////////////////////////////////////////////////////////////////////////////
738 754
739 void GrContext::addGpuTraceMarker(const GrGpuTraceMarker* marker) { 755 void GrContext::addGpuTraceMarker(const GrGpuTraceMarker* marker) {
740 fGpu->addGpuTraceMarker(marker); 756 fGpu->addGpuTraceMarker(marker);
741 } 757 }
742 758
743 void GrContext::removeGpuTraceMarker(const GrGpuTraceMarker* marker) { 759 void GrContext::removeGpuTraceMarker(const GrGpuTraceMarker* marker) {
744 fGpu->removeGpuTraceMarker(marker); 760 fGpu->removeGpuTraceMarker(marker);
745 } 761 }
746 762
OLDNEW
« no previous file with comments | « include/gpu/GrContext.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698