Skip temp texture when config conversion test has already failed.

Review URL: https://codereview.chromium.org/1261033005
This commit is contained in:
bsalomon 2015-07-29 06:08:46 -07:00 committed by Commit bot
parent 125960152d
commit 636e8024f8
2 changed files with 24 additions and 5 deletions

View File

@ -445,6 +445,9 @@ private:
bool swapRAndB, const SkMatrix&);
const GrFragmentProcessor* createUPMToPMEffect(GrProcessorDataManager*, GrTexture*,
bool swapRAndB, const SkMatrix&);
/** Returns true if we've already determined that createPMtoUPMEffect and createUPMToPMEffect
will fail. In such cases fall back to SW conversion. */
bool didFailPMUPMConversionTest() const;
/**
* This callback allows the resource cache to callback into the GrContext

View File

@ -345,9 +345,14 @@ bool GrContext::writeSurfacePixels(GrSurface* surface,
}
applyPremulToSrc = true;
}
GrGpu::DrawPreference drawPreference = applyPremulToSrc ?
GrGpu::kCallerPrefersDraw_DrawPreference :
GrGpu::kNoDraw_DrawPreference;
GrGpu::DrawPreference drawPreference = GrGpu::kNoDraw_DrawPreference;
// Don't prefer to draw for the conversion (and thereby access a texture from the cache) when
// we've already determined that there isn't a roundtrip preserving conversion processor pair.
if (applyPremulToSrc && !this->didFailPMUPMConversionTest()) {
drawPreference = GrGpu::kCallerPrefersDraw_DrawPreference;
}
GrGpu::WritePixelTempDrawInfo tempDrawInfo;
if (!fGpu->getWritePixelsInfo(surface, width, height, rowBytes, srcConfig, &drawPreference,
&tempDrawInfo)) {
@ -476,8 +481,13 @@ bool GrContext::readSurfacePixels(GrSurface* src,
return false;
}
GrGpu::DrawPreference drawPreference = unpremul ? GrGpu::kCallerPrefersDraw_DrawPreference :
GrGpu::kNoDraw_DrawPreference;
GrGpu::DrawPreference drawPreference = GrGpu::kNoDraw_DrawPreference;
// Don't prefer to draw for the conversion (and thereby access a texture from the cache) when
// we've already determined that there isn't a roundtrip preserving conversion processor pair.
if (unpremul && !this->didFailPMUPMConversionTest()) {
drawPreference = GrGpu::kCallerPrefersDraw_DrawPreference;
}
GrGpu::ReadPixelTempDrawInfo tempDrawInfo;
if (!fGpu->getReadPixelsInfo(src, width, height, rowBytes, dstConfig, &drawPreference,
&tempDrawInfo)) {
@ -719,6 +729,12 @@ const GrFragmentProcessor* GrContext::createUPMToPMEffect(GrProcessorDataManager
}
}
bool GrContext::didFailPMUPMConversionTest() const {
// The PM<->UPM tests fail or succeed together so we only need to check one.
return fDidTestPMConversions &&
GrConfigConversionEffect::kNone_PMConversion == fPMToUPMConversion;
}
//////////////////////////////////////////////////////////////////////////////
void GrContext::getResourceCacheLimits(int* maxTextures, size_t* maxTextureBytes) const {