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

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: 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
« include/gpu/GrContext.h ('K') | « 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 if (applyPremulToSrc && !this->didFailPMUPMConversionTest()) {
351 drawPreference = GrGpu::kCallerPrefersDraw_DrawPreference;
352 }
353
351 GrGpu::WritePixelTempDrawInfo tempDrawInfo; 354 GrGpu::WritePixelTempDrawInfo tempDrawInfo;
352 if (!fGpu->getWritePixelsInfo(surface, width, height, rowBytes, srcConfig, & drawPreference, 355 if (!fGpu->getWritePixelsInfo(surface, width, height, rowBytes, srcConfig, & drawPreference,
353 &tempDrawInfo)) { 356 &tempDrawInfo)) {
354 return false; 357 return false;
355 } 358 }
356 359
357 if (!(kDontFlush_PixelOpsFlag & pixelOpsFlags) && surface->surfacePriv().has PendingIO()) { 360 if (!(kDontFlush_PixelOpsFlag & pixelOpsFlags) && surface->surfacePriv().has PendingIO()) {
358 this->flush(); 361 this->flush();
359 } 362 }
360 363
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
469 if (!(kDontFlush_PixelOpsFlag & flags) && src->surfacePriv().hasPendingWrite ()) { 472 if (!(kDontFlush_PixelOpsFlag & flags) && src->surfacePriv().hasPendingWrite ()) {
470 this->flush(); 473 this->flush();
471 } 474 }
472 475
473 bool unpremul = SkToBool(kUnpremul_PixelOpsFlag & flags); 476 bool unpremul = SkToBool(kUnpremul_PixelOpsFlag & flags);
474 if (unpremul && !GrPixelConfigIs8888(dstConfig)) { 477 if (unpremul && !GrPixelConfigIs8888(dstConfig)) {
475 // The unpremul flag is only allowed for 8888 configs. 478 // The unpremul flag is only allowed for 8888 configs.
476 return false; 479 return false;
477 } 480 }
478 481
479 GrGpu::DrawPreference drawPreference = unpremul ? GrGpu::kCallerPrefersDraw_ DrawPreference : 482 GrGpu::DrawPreference drawPreference = GrGpu::kNoDraw_DrawPreference;
480 GrGpu::kNoDraw_DrawPrefere nce; 483 if (unpremul && !this->didFailPMUPMConversionTest()) {
484 drawPreference = GrGpu::kCallerPrefersDraw_DrawPreference;
485 }
486
481 GrGpu::ReadPixelTempDrawInfo tempDrawInfo; 487 GrGpu::ReadPixelTempDrawInfo tempDrawInfo;
482 if (!fGpu->getReadPixelsInfo(src, width, height, rowBytes, dstConfig, &drawP reference, 488 if (!fGpu->getReadPixelsInfo(src, width, height, rowBytes, dstConfig, &drawP reference,
483 &tempDrawInfo)) { 489 &tempDrawInfo)) {
484 return false; 490 return false;
485 } 491 }
486 492
487 GrRenderTarget* rtToRead = src->asRenderTarget(); 493 GrRenderTarget* rtToRead = src->asRenderTarget();
488 bool didTempDraw = false; 494 bool didTempDraw = false;
489 if (GrGpu::kNoDraw_DrawPreference != drawPreference) { 495 if (GrGpu::kNoDraw_DrawPreference != drawPreference) {
490 GrTextureProvider::ScratchTexMatch match = GrTextureProvider::kApprox_Sc ratchTexMatch; 496 GrTextureProvider::ScratchTexMatch match = GrTextureProvider::kApprox_Sc ratchTexMatch;
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after
711 GrConfigConversionEffect::PMConversion upmToPM = 717 GrConfigConversionEffect::PMConversion upmToPM =
712 static_cast<GrConfigConversionEffect::PMConversion>(fUPMToPMConversion); 718 static_cast<GrConfigConversionEffect::PMConversion>(fUPMToPMConversion);
713 if (GrConfigConversionEffect::kNone_PMConversion != upmToPM) { 719 if (GrConfigConversionEffect::kNone_PMConversion != upmToPM) {
714 return GrConfigConversionEffect::Create(procDataManager, texture, swapRA ndB, upmToPM, 720 return GrConfigConversionEffect::Create(procDataManager, texture, swapRA ndB, upmToPM,
715 matrix); 721 matrix);
716 } else { 722 } else {
717 return NULL; 723 return NULL;
718 } 724 }
719 } 725 }
720 726
727 bool GrContext::didFailPMUPMConversionTest() const {
robertphillips 2015/07/29 12:35:05 // The PM<->UPM tests fail or succeed together so
bsalomon 2015/07/29 13:01:34 Done.
728 return fDidTestPMConversions &&
729 GrConfigConversionEffect::kNone_PMConversion == fPMToUPMConversion;
730 }
731
721 ////////////////////////////////////////////////////////////////////////////// 732 //////////////////////////////////////////////////////////////////////////////
722 733
723 void GrContext::getResourceCacheLimits(int* maxTextures, size_t* maxTextureBytes ) const { 734 void GrContext::getResourceCacheLimits(int* maxTextures, size_t* maxTextureBytes ) const {
724 if (maxTextures) { 735 if (maxTextures) {
725 *maxTextures = fResourceCache->getMaxResourceCount(); 736 *maxTextures = fResourceCache->getMaxResourceCount();
726 } 737 }
727 if (maxTextureBytes) { 738 if (maxTextureBytes) {
728 *maxTextureBytes = fResourceCache->getMaxResourceBytes(); 739 *maxTextureBytes = fResourceCache->getMaxResourceBytes();
729 } 740 }
730 } 741 }
731 742
732 void GrContext::setResourceCacheLimits(int maxTextures, size_t maxTextureBytes) { 743 void GrContext::setResourceCacheLimits(int maxTextures, size_t maxTextureBytes) {
733 fResourceCache->setLimits(maxTextures, maxTextureBytes); 744 fResourceCache->setLimits(maxTextures, maxTextureBytes);
734 } 745 }
735 746
736 ////////////////////////////////////////////////////////////////////////////// 747 //////////////////////////////////////////////////////////////////////////////
737 748
738 void GrContext::addGpuTraceMarker(const GrGpuTraceMarker* marker) { 749 void GrContext::addGpuTraceMarker(const GrGpuTraceMarker* marker) {
739 fGpu->addGpuTraceMarker(marker); 750 fGpu->addGpuTraceMarker(marker);
740 } 751 }
741 752
742 void GrContext::removeGpuTraceMarker(const GrGpuTraceMarker* marker) { 753 void GrContext::removeGpuTraceMarker(const GrGpuTraceMarker* marker) {
743 fGpu->removeGpuTraceMarker(marker); 754 fGpu->removeGpuTraceMarker(marker);
744 } 755 }
745 756
OLDNEW
« include/gpu/GrContext.h ('K') | « include/gpu/GrContext.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698