summaryrefslogtreecommitdiffstats
path: root/cc/gl_renderer.cc
diff options
context:
space:
mode:
authorepenner@chromium.org <epenner@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-02-13 08:21:31 +0000
committerepenner@chromium.org <epenner@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-02-13 08:21:31 +0000
commit3f1d4939ca115110c6c98abf37666c3f95c69ebf (patch)
treed576575eb01ea9b16c17e399841c2e40c6c7fd05 /cc/gl_renderer.cc
parentebbffaef9d3b317ab161683ebb13b63813e0b9f3 (diff)
downloadchromium_src-3f1d4939ca115110c6c98abf37666c3f95c69ebf.zip
chromium_src-3f1d4939ca115110c6c98abf37666c3f95c69ebf.tar.gz
chromium_src-3f1d4939ca115110c6c98abf37666c3f95c69ebf.tar.bz2
cc: Fix resource provider fences and add DCHECKs.
When I added the resource provider fence concept, I didn't extend the read-fence long enough (it currently only protects the current frame). This extends the read-lock for one frame. BUG=172995 Review URL: https://chromiumcodereview.appspot.com/12220095 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@182162 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'cc/gl_renderer.cc')
-rw-r--r--cc/gl_renderer.cc13
1 files changed, 8 insertions, 5 deletions
diff --git a/cc/gl_renderer.cc b/cc/gl_renderer.cc
index be0b9a6..9ea15ac 100644
--- a/cc/gl_renderer.cc
+++ b/cc/gl_renderer.cc
@@ -1324,11 +1324,6 @@ bool GLRenderer::swapBuffers()
TRACE_EVENT0("cc", "GLRenderer::swapBuffers");
// We're done! Time to swapbuffers!
- scoped_refptr<ResourceProvider::Fence> lastSwapFence = m_resourceProvider->getReadLockFence();
- if (lastSwapFence)
- static_cast<SimpleSwapFence*>(lastSwapFence.get())->setHasPassed();
- m_resourceProvider->setReadLockFence(new SimpleSwapFence());
-
if (m_capabilities.usingPartialSwap) {
// If supported, we can save significant bandwidth by only swapping the damaged/scissored region (clamped to the viewport)
m_swapBufferRect.Intersect(gfx::Rect(gfx::Point(), viewportSize()));
@@ -1342,6 +1337,14 @@ bool GLRenderer::swapBuffers()
m_swapBufferRect = gfx::Rect();
+ // We don't have real fences, so we mark read fences as passed
+ // assuming a double-buffered GPU pipeline. A texture can be
+ // written to after one full frame has past since it was last read.
+ if (m_lastSwapFence)
+ static_cast<SimpleSwapFence*>(m_lastSwapFence.get())->setHasPassed();
+ m_lastSwapFence = m_resourceProvider->getReadLockFence();
+ m_resourceProvider->setReadLockFence(new SimpleSwapFence());
+
return true;
}