| 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
|
|
|