aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar bsalomon <bsalomon@google.com>2016-02-16 11:36:47 -0800
committerGravatar Commit bot <commit-bot@chromium.org>2016-02-16 11:36:47 -0800
commitbabafcc681de86801b15b4fe0ab856ce32048ff6 (patch)
tree321c3f86acf2a301ea283aa6e365a49e5c52008c /src
parent8e84a1ed07ad5d529d381d43302e597f31723076 (diff)
Workaround for bug in Tegra 3 when uploading to a render target
Diffstat (limited to 'src')
-rw-r--r--src/gpu/GrCaps.cpp1
-rw-r--r--src/gpu/GrGpu.cpp11
-rw-r--r--src/gpu/gl/GrGLCaps.cpp6
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;