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&);
|
bool swapRAndB, const SkMatrix&);
|
||||||
const GrFragmentProcessor* createUPMToPMEffect(GrProcessorDataManager*, GrTexture*,
|
const GrFragmentProcessor* createUPMToPMEffect(GrProcessorDataManager*, GrTexture*,
|
||||||
bool swapRAndB, const SkMatrix&);
|
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
|
* This callback allows the resource cache to callback into the GrContext
|
||||||
|
@ -345,9 +345,14 @@ bool GrContext::writeSurfacePixels(GrSurface* surface,
|
|||||||
}
|
}
|
||||||
applyPremulToSrc = true;
|
applyPremulToSrc = true;
|
||||||
}
|
}
|
||||||
GrGpu::DrawPreference drawPreference = applyPremulToSrc ?
|
|
||||||
GrGpu::kCallerPrefersDraw_DrawPreference :
|
GrGpu::DrawPreference drawPreference = GrGpu::kNoDraw_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;
|
GrGpu::WritePixelTempDrawInfo tempDrawInfo;
|
||||||
if (!fGpu->getWritePixelsInfo(surface, width, height, rowBytes, srcConfig, &drawPreference,
|
if (!fGpu->getWritePixelsInfo(surface, width, height, rowBytes, srcConfig, &drawPreference,
|
||||||
&tempDrawInfo)) {
|
&tempDrawInfo)) {
|
||||||
@ -476,8 +481,13 @@ bool GrContext::readSurfacePixels(GrSurface* src,
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
GrGpu::DrawPreference drawPreference = unpremul ? GrGpu::kCallerPrefersDraw_DrawPreference :
|
GrGpu::DrawPreference drawPreference = GrGpu::kNoDraw_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;
|
GrGpu::ReadPixelTempDrawInfo tempDrawInfo;
|
||||||
if (!fGpu->getReadPixelsInfo(src, width, height, rowBytes, dstConfig, &drawPreference,
|
if (!fGpu->getReadPixelsInfo(src, width, height, rowBytes, dstConfig, &drawPreference,
|
||||||
&tempDrawInfo)) {
|
&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 {
|
void GrContext::getResourceCacheLimits(int* maxTextures, size_t* maxTextureBytes) const {
|
||||||
|
Loading…
Reference in New Issue
Block a user