Bug 1285692 - Acquire surface to allow FB completeness. - r=jrmuizel
MozReview-Commit-ID: H9IidhUqqw9
--- a/gfx/gl/GLScreenBuffer.cpp
+++ b/gfx/gl/GLScreenBuffer.cpp
@@ -940,19 +940,30 @@ ReadBuffer::Create(GLContext* gl,
gl->AttachBuffersToFB(colorTex, colorRB, depthRB, stencilRB, fb, target);
gl->mFBOMapping[fb] = surf;
UniquePtr<ReadBuffer> ret( new ReadBuffer(gl, fb, depthRB,
stencilRB, surf) );
GLenum err = localError.GetError();
MOZ_ASSERT_IF(err != LOCAL_GL_NO_ERROR, err == LOCAL_GL_OUT_OF_MEMORY);
- if (err || !gl->IsFramebufferComplete(fb)) {
- ret = nullptr;
+ if (err)
+ return nullptr;
+
+ const bool needsAcquire = !surf->IsProducerAcquired();
+ if (needsAcquire) {
+ surf->ProducerAcquire();
}
+ const bool isComplete = gl->IsFramebufferComplete(fb);
+ if (needsAcquire) {
+ surf->ProducerRelease();
+ }
+
+ if (!isComplete)
+ return nullptr;
return Move(ret);
}
ReadBuffer::~ReadBuffer()
{
if (!mGL->MakeCurrent())
return;