Skip temp texture when config conversion test has already failed.
Review URL: https://codereview.chromium.org/1261033005
This commit is contained in:
parent
125960152d
commit
636e8024f8
@ -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
|
||||
|
@ -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 {
|
||||
|
Loading…
Reference in New Issue
Block a user