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 0ecd0bcaad0e4888a1edf665677298341841127c..4c091582de49074dcaf4289d1c512f876f1bd962 100644 |
--- a/third_party/WebKit/Source/platform/graphics/gpu/DrawingBuffer.cpp |
+++ b/third_party/WebKit/Source/platform/graphics/gpu/DrawingBuffer.cpp |
@@ -90,7 +90,8 @@ static bool shouldFailDrawingBufferCreationForTesting = false; |
PassRefPtr<DrawingBuffer> DrawingBuffer::create(std::unique_ptr<WebGraphicsContext3DProvider> contextProvider, |
const IntSize& size, bool premultipliedAlpha, bool wantAlphaChannel, |
bool wantDepthBuffer, bool wantStencilBuffer, bool wantAntialiasing, |
- PreserveDrawingBuffer preserve, WebGLVersion webGLVersion) |
+ PreserveDrawingBuffer preserve, WebGLVersion webGLVersion, |
+ ChromiumImageUsage chromiumImageUsage) |
{ |
ASSERT(contextProvider); |
@@ -123,7 +124,7 @@ PassRefPtr<DrawingBuffer> DrawingBuffer::create(std::unique_ptr<WebGraphicsConte |
RefPtr<DrawingBuffer> drawingBuffer = adoptRef(new DrawingBuffer(std::move(contextProvider), std::move(extensionsUtil), |
discardFramebufferSupported, wantAlphaChannel, premultipliedAlpha, |
- preserve, webGLVersion, wantDepthBuffer, wantStencilBuffer)); |
+ preserve, webGLVersion, wantDepthBuffer, wantStencilBuffer, chromiumImageUsage)); |
if (!drawingBuffer->initialize(size, multisampleSupported)) { |
drawingBuffer->beginDestruction(); |
return PassRefPtr<DrawingBuffer>(); |
@@ -145,7 +146,8 @@ DrawingBuffer::DrawingBuffer( |
PreserveDrawingBuffer preserve, |
WebGLVersion webGLVersion, |
bool wantDepth, |
- bool wantStencil) |
+ bool wantStencil, |
+ ChromiumImageUsage chromiumImageUsage) |
: m_preserveDrawingBuffer(preserve) |
, m_webGLVersion(webGLVersion) |
, m_contextProvider(std::move(contextProvider)) |
@@ -157,6 +159,7 @@ DrawingBuffer::DrawingBuffer( |
, m_softwareRendering(m_contextProvider->isSoftwareRendering()) |
, m_wantDepth(wantDepth) |
, m_wantStencil(wantStencil) |
+ , m_chromiumImageUsage(chromiumImageUsage) |
{ |
memset(m_colorMask, 0, 4 * sizeof(GLboolean)); |
memset(m_clearColor, 0, 4 * sizeof(GLfloat)); |
@@ -232,7 +235,7 @@ bool DrawingBuffer::defaultBufferRequiresAlphaChannelToBePreserved() |
} |
bool rgbEmulation = contextProvider()->getCapabilities().emulate_rgb_buffer_with_rgba |
- || (RuntimeEnabledFeatures::webGLImageChromiumEnabled() && contextProvider()->getCapabilities().chromium_image_rgb_emulation); |
+ || (shouldUseChromiumImage() && contextProvider()->getCapabilities().chromium_image_rgb_emulation); |
return !m_wantAlphaChannel && rgbEmulation; |
} |
@@ -536,7 +539,7 @@ PassRefPtr<DrawingBuffer::MailboxInfo> DrawingBuffer::takeRecycledMailbox() |
// Creation of image backed mailboxes is very expensive, so be less |
// aggressive about pruning them. |
size_t cacheLimit = 1; |
- if (RuntimeEnabledFeatures::webGLImageChromiumEnabled()) |
+ if (shouldUseChromiumImage()) |
cacheLimit = 4; |
RefPtr<RecycledMailbox> recycled; |
@@ -1138,7 +1141,7 @@ void DrawingBuffer::clearChromiumImageAlpha(const TextureInfo& info) |
DrawingBuffer::TextureInfo DrawingBuffer::createTextureAndAllocateMemory(const IntSize& size) |
{ |
- if (!RuntimeEnabledFeatures::webGLImageChromiumEnabled()) |
+ if (!shouldUseChromiumImage()) |
return createDefaultTextureAndAllocateMemory(size); |
TextureParameters parameters = chromiumImageTextureParameters(); |
@@ -1171,7 +1174,7 @@ DrawingBuffer::TextureInfo DrawingBuffer::createDefaultTextureAndAllocateMemory( |
void DrawingBuffer::resizeTextureMemory(TextureInfo* info, const IntSize& size) |
{ |
ASSERT(info->textureId); |
- if (!RuntimeEnabledFeatures::webGLImageChromiumEnabled()) { |
+ if (!shouldUseChromiumImage()) { |
if (info->immutable) { |
DCHECK(m_storageTextureSupported); |
m_gl->DeleteTextures(1, &info->textureId); |
@@ -1231,7 +1234,7 @@ GLenum DrawingBuffer::getMultisampledRenderbufferFormat() |
DCHECK(wantExplicitResolve()); |
if (m_wantAlphaChannel) |
return GL_RGBA8_OES; |
- if (RuntimeEnabledFeatures::webGLImageChromiumEnabled() && contextProvider()->getCapabilities().chromium_image_rgb_emulation) |
+ if (shouldUseChromiumImage() && contextProvider()->getCapabilities().chromium_image_rgb_emulation) |
return GL_RGBA8_OES; |
if (contextProvider()->getCapabilities().disable_webgl_rgb_multisampling_usage) |
return GL_RGBA8_OES; |
@@ -1246,4 +1249,9 @@ void DrawingBuffer::restoreTextureBindings() |
m_gl->BindTexture(GL_TEXTURE_2D, m_texture2DBinding); |
} |
+bool DrawingBuffer::shouldUseChromiumImage() |
+{ |
+ return RuntimeEnabledFeatures::webGLImageChromiumEnabled() && m_chromiumImageUsage == AllowChromiumImage; |
+} |
+ |
} // namespace blink |