diff options
author | epenner@chromium.org <epenner@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-02-13 08:21:31 +0000 |
---|---|---|
committer | epenner@chromium.org <epenner@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-02-13 08:21:31 +0000 |
commit | 3f1d4939ca115110c6c98abf37666c3f95c69ebf (patch) | |
tree | d576575eb01ea9b16c17e399841c2e40c6c7fd05 /cc/gl_renderer.cc | |
parent | ebbffaef9d3b317ab161683ebb13b63813e0b9f3 (diff) | |
download | chromium_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.cc | 13 |
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; } |