diff options
author | 2016-02-16 11:36:47 -0800 | |
---|---|---|
committer | 2016-02-16 11:36:47 -0800 | |
commit | babafcc681de86801b15b4fe0ab856ce32048ff6 (patch) | |
tree | 321c3f86acf2a301ea283aa6e365a49e5c52008c /src | |
parent | 8e84a1ed07ad5d529d381d43302e597f31723076 (diff) |
Workaround for bug in Tegra 3 when uploading to a render target
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1703603002
Review URL: https://codereview.chromium.org/1703603002
Diffstat (limited to 'src')
-rw-r--r-- | src/gpu/GrCaps.cpp | 1 | ||||
-rw-r--r-- | src/gpu/GrGpu.cpp | 11 | ||||
-rw-r--r-- | src/gpu/gl/GrGLCaps.cpp | 6 |
3 files changed, 14 insertions, 4 deletions
diff --git a/src/gpu/GrCaps.cpp b/src/gpu/GrCaps.cpp index 2568e567fc..4fb05c14a1 100644 --- a/src/gpu/GrCaps.cpp +++ b/src/gpu/GrCaps.cpp @@ -115,6 +115,7 @@ GrCaps::GrCaps(const GrContextOptions& options) { fDrawPathMasksToCompressedTextureSupport = options.fDrawPathToCompressedTexture; fGeometryBufferMapThreshold = options.fGeometryBufferMapThreshold; fUseDrawInsteadOfPartialRenderTargetWrite = options.fUseDrawInsteadOfPartialRenderTargetWrite; + fUseDrawInsteadOfAllRenderTargetWrites = false; fPreferVRAMUseOverFlushes = true; } diff --git a/src/gpu/GrGpu.cpp b/src/gpu/GrGpu.cpp index ab8e5cb535..39d190e052 100644 --- a/src/gpu/GrGpu.cpp +++ b/src/gpu/GrGpu.cpp @@ -280,10 +280,13 @@ bool GrGpu::getWritePixelsInfo(GrSurface* dstSurface, int width, int height, siz return false; } - if (this->caps()->useDrawInsteadOfPartialRenderTargetWrite() && - SkToBool(dstSurface->asRenderTarget()) && - (width < dstSurface->width() || height < dstSurface->height())) { - ElevateDrawPreference(drawPreference, kRequireDraw_DrawPreference); + if (SkToBool(dstSurface->asRenderTarget())) { + if (this->caps()->useDrawInsteadOfAllRenderTargetWrites()) { + ElevateDrawPreference(drawPreference, kRequireDraw_DrawPreference); + } else if (this->caps()->useDrawInsteadOfPartialRenderTargetWrite() && + (width < dstSurface->width() || height < dstSurface->height())) { + ElevateDrawPreference(drawPreference, kRequireDraw_DrawPreference); + } } if (!this->onGetWritePixelsInfo(dstSurface, width, height, rowBytes, srcConfig, drawPreference, diff --git a/src/gpu/gl/GrGLCaps.cpp b/src/gpu/gl/GrGLCaps.cpp index 6dc5ee8c4f..fd888d6c36 100644 --- a/src/gpu/gl/GrGLCaps.cpp +++ b/src/gpu/gl/GrGLCaps.cpp @@ -456,6 +456,12 @@ void GrGLCaps::init(const GrContextOptions& contextOptions, fUseDrawInsteadOfPartialRenderTargetWrite = true; } + // Texture uploads sometimes seem to be ignored to textures bound to FBOS on Tegra3. + if (kTegra3_GrGLRenderer == ctxInfo.renderer()) { + fUseDrawInsteadOfPartialRenderTargetWrite = true; + fUseDrawInsteadOfAllRenderTargetWrites = true; + } + #ifdef SK_BUILD_FOR_WIN // On ANGLE deferring flushes can lead to GPU starvation fPreferVRAMUseOverFlushes = !isANGLE; |