Index: third_party/WebKit/Source/platform/graphics/gpu/DrawingBuffer.cpp |
diff --git a/third_party/WebKit/Source/platform/graphics/gpu/DrawingBuffer.cpp b/third_party/WebKit/Source/platform/graphics/gpu/DrawingBuffer.cpp |
index 9d2600b8c18f6e8fe81c3b08743667ad1b5e65e2..3b361f746c2ebcadb469d079792daf0914daeaff 100644 |
--- a/third_party/WebKit/Source/platform/graphics/gpu/DrawingBuffer.cpp |
+++ b/third_party/WebKit/Source/platform/graphics/gpu/DrawingBuffer.cpp |
@@ -30,6 +30,7 @@ |
#include "platform/graphics/gpu/DrawingBuffer.h" |
+#include "gpu/command_buffer/client/gles2_interface.h" |
#include "platform/RuntimeEnabledFeatures.h" |
#include "platform/TraceEvent.h" |
#include "platform/graphics/GraphicsLayer.h" |
@@ -97,7 +98,8 @@ PassRefPtr<DrawingBuffer> DrawingBuffer::create(PassOwnPtr<WebGraphicsContext3D> |
return nullptr; |
} |
- OwnPtr<Extensions3DUtil> extensionsUtil = Extensions3DUtil::create(context.get()); |
+ gpu::gles2::GLES2Interface* gl = context->getGLES2Interface(); |
+ OwnPtr<Extensions3DUtil> extensionsUtil = Extensions3DUtil::create(context.get(), gl); |
if (!extensionsUtil->isValid()) { |
// This might be the first time we notice that the WebGraphicsContext3D is lost. |
return nullptr; |
@@ -118,7 +120,7 @@ PassRefPtr<DrawingBuffer> DrawingBuffer::create(PassOwnPtr<WebGraphicsContext3D> |
if (discardFramebufferSupported) |
extensionsUtil->ensureExtensionEnabled("GL_EXT_discard_framebuffer"); |
- RefPtr<DrawingBuffer> drawingBuffer = adoptRef(new DrawingBuffer(std::move(context), extensionsUtil.release(), multisampleSupported, discardFramebufferSupported, preserve, requestedAttributes)); |
+ RefPtr<DrawingBuffer> drawingBuffer = adoptRef(new DrawingBuffer(std::move(context), gl, extensionsUtil.release(), multisampleSupported, discardFramebufferSupported, preserve, requestedAttributes)); |
if (!drawingBuffer->initialize(size)) { |
drawingBuffer->beginDestruction(); |
return PassRefPtr<DrawingBuffer>(); |
@@ -131,12 +133,7 @@ void DrawingBuffer::forceNextDrawingBufferCreationToFail() |
shouldFailDrawingBufferCreationForTesting = true; |
} |
-DrawingBuffer::DrawingBuffer(PassOwnPtr<WebGraphicsContext3D> context, |
- PassOwnPtr<Extensions3DUtil> extensionsUtil, |
- bool multisampleExtensionSupported, |
- bool discardFramebufferSupported, |
- PreserveDrawingBuffer preserve, |
- WebGraphicsContext3D::Attributes requestedAttributes) |
+DrawingBuffer::DrawingBuffer(PassOwnPtr<WebGraphicsContext3D> context, gpu::gles2::GLES2Interface* gl, PassOwnPtr<Extensions3DUtil> extensionsUtil, bool multisampleExtensionSupported, bool discardFramebufferSupported, PreserveDrawingBuffer preserve, WebGraphicsContext3D::Attributes requestedAttributes) |
: m_preserveDrawingBuffer(preserve) |
, m_scissorEnabled(false) |
, m_texture2DBinding(0) |
@@ -144,6 +141,7 @@ DrawingBuffer::DrawingBuffer(PassOwnPtr<WebGraphicsContext3D> context, |
, m_readFramebufferBinding(0) |
, m_activeTextureUnit(GL_TEXTURE0) |
, m_context(std::move(context)) |
+ , m_gl(gl) |
, m_extensionsUtil(std::move(extensionsUtil)) |
, m_size(-1, -1) |
, m_requestedAttributes(requestedAttributes) |
@@ -320,7 +318,7 @@ bool DrawingBuffer::prepareMailbox(WebExternalTextureMailbox* outMailbox, WebExt |
void DrawingBuffer::mailboxReleased(const WebExternalTextureMailbox& mailbox, bool lostResource) |
{ |
- if (m_destructionInProgress || m_context->isContextLost() || lostResource || m_isHidden) { |
+ if (m_destructionInProgress || m_gl->GetGraphicsResetStatusKHR() != GL_NO_ERROR || lostResource || m_isHidden) { |
mailboxReleasedWithoutRecycling(mailbox); |
return; |
} |
@@ -444,7 +442,7 @@ void DrawingBuffer::deleteMailbox(const WebExternalTextureMailbox& mailbox) |
bool DrawingBuffer::initialize(const IntSize& size) |
{ |
- if (m_context->isContextLost()) { |
+ if (m_gl->GetGraphicsResetStatusKHR() != GL_NO_ERROR) { |
// Need to try to restore the context again later. |
return false; |
} |
@@ -490,7 +488,7 @@ bool DrawingBuffer::initialize(const IntSize& size) |
} |
m_actualAttributes.antialias = multisample(); |
- if (m_context->isContextLost()) { |
+ if (m_gl->GetGraphicsResetStatusKHR() != GL_NO_ERROR) { |
// It's possible that the drawing buffer allocation provokes a context loss, so check again just in case. http://crbug.com/512302 |
return false; |
} |