Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1410)

Unified Diff: third_party/WebKit/Source/platform/graphics/gpu/DrawingBuffer.cpp

Issue 2365653005: Fix failing transferToImageBitmap layout tests and commit pixel test on Mac (Closed)
Patch Set: rebase Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698