WebKit Bugzilla
New
Browse
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
RESOLVED FIXED
49206
Add multisampling support to DrawingBuffer.
https://bugs.webkit.org/show_bug.cgi?id=49206
Summary
Add multisampling support to DrawingBuffer.
Chris Marrin
Reported
2010-11-08 14:07:53 PST
DrawingBuffer doesn't handle multisampling right now. This is needed to be able to do
https://bugs.webkit.org/show_bug.cgi?id=47379
.
Attachments
Patch
(20.03 KB, patch)
2010-11-08 17:43 PST
,
Chris Marrin
no flags
Details
Formatted Diff
Diff
Patch
(21.10 KB, patch)
2010-11-09 14:57 PST
,
Chris Marrin
no flags
Details
Formatted Diff
Diff
Patch
(22.43 KB, patch)
2010-11-10 10:48 PST
,
Chris Marrin
no flags
Details
Formatted Diff
Diff
Patch
(23.35 KB, patch)
2010-11-10 16:10 PST
,
Chris Marrin
no flags
Details
Formatted Diff
Diff
Patch
(25.41 KB, patch)
2010-11-11 14:26 PST
,
Chris Marrin
jamesr
: review+
Details
Formatted Diff
Diff
Show Obsolete
(4)
View All
Add attachment
proposed patch, testcase, etc.
Chris Marrin
Comment 1
2010-11-08 17:43:40 PST
Created
attachment 73320
[details]
Patch
Kenneth Russell
Comment 2
2010-11-08 17:48:22 PST
Comment on
attachment 73320
[details]
Patch Could you please make the Qt and Chromium ports compile by adding these virtuals to their implementations? Qt's is in platform/graphics/qt and Chromium's is in platform/graphics/chromium and WebKit/chromium/src. They can be no-ops with FIXMEs; the Chromium port should explicitly not claim support for them initially.
Early Warning System Bot
Comment 3
2010-11-08 17:53:25 PST
Attachment 73320
[details]
did not build on qt: Build output:
http://queues.webkit.org/results/5496034
Eric Seidel (no email)
Comment 4
2010-11-08 20:04:01 PST
Attachment 73320
[details]
did not build on chromium: Build output:
http://queues.webkit.org/results/5482039
Build Bot
Comment 5
2010-11-08 20:07:51 PST
Attachment 73320
[details]
did not build on win: Build output:
http://queues.webkit.org/results/5447048
Chris Marrin
Comment 6
2010-11-09 14:57:55 PST
Created
attachment 73427
[details]
Patch
Eric Seidel (no email)
Comment 7
2010-11-09 18:51:43 PST
Attachment 73427
[details]
did not build on chromium: Build output:
http://queues.webkit.org/results/5451064
Chris Marrin
Comment 8
2010-11-10 10:48:44 PST
Created
attachment 73507
[details]
Patch
WebKit Review Bot
Comment 9
2010-11-10 14:30:14 PST
Attachment 73507
[details]
did not build on chromium: Build output:
http://queues.webkit.org/results/5603005
Chris Marrin
Comment 10
2010-11-10 16:10:05 PST
Created
attachment 73552
[details]
Patch
James Robinson
Comment 11
2010-11-10 17:20:29 PST
Comment on
attachment 73552
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=73552&action=review
Looks pretty good to me. Left some comments, but nothing major. To reduce risk, could you set antialias to 'false' in SharedGraphicsContext3D::create() for now? That way we can land this and test it out a bit locally on various platforms/configs before changing the behavior of any DrawingBuffer clients.
> WebCore/platform/graphics/gpu/DrawingBuffer.cpp:114 > + // resize multisample FBO
This (and the other comments) should be written as sentences (Leading caps, trailing period).
> WebCore/platform/graphics/gpu/DrawingBuffer.cpp:119 > + int sampleCount = std::min(8, maxSampleCount);
I'm not sure why 8 is special here. Could this be a constant with a more descriptive name? Also, webkit style is to put a 'using namespace std' declaration at the top of the .cpp and just say min() here.
> WebCore/platform/graphics/gpu/DrawingBuffer.cpp:207 > + if (multisample()) > + m_context->bindFramebuffer(GraphicsContext3D::FRAMEBUFFER, m_multisampleFBO); > + > + // Initialize renderbuffers to 0. > + unsigned char colorMask[] = {true, true, true, true}, depthMask = true, stencilMask = true; > + unsigned char isScissorEnabled = false; > + unsigned char isDitherEnabled = false; > + unsigned long clearMask = GraphicsContext3D::COLOR_BUFFER_BIT; > + m_context->getBooleanv(GraphicsContext3D::COLOR_WRITEMASK, colorMask); > + m_context->colorMask(true, true, true, true); > + if (attributes.depth) { > + m_context->getBooleanv(GraphicsContext3D::DEPTH_WRITEMASK, &depthMask); > + m_context->depthMask(true); > + clearMask |= GraphicsContext3D::DEPTH_BUFFER_BIT; > + } > + if (attributes.stencil) { > + m_context->getBooleanv(GraphicsContext3D::STENCIL_WRITEMASK, &stencilMask); > + m_context->stencilMask(true); > + clearMask |= GraphicsContext3D::STENCIL_BUFFER_BIT; > + } > + isScissorEnabled = m_context->isEnabled(GraphicsContext3D::SCISSOR_TEST); > + m_context->disable(GraphicsContext3D::SCISSOR_TEST); > + isDitherEnabled = m_context->isEnabled(GraphicsContext3D::DITHER); > + m_context->disable(GraphicsContext3D::DITHER); > + > + m_context->clear(clearMask); > + > + m_context->colorMask(colorMask[0], colorMask[1], colorMask[2], colorMask[3]); > + if (attributes.depth) > + m_context->depthMask(depthMask); > + if (attributes.stencil) > + m_context->stencilMask(stencilMask); > + if (isScissorEnabled) > + m_context->enable(GraphicsContext3D::SCISSOR_TEST); > + else > + m_context->disable(GraphicsContext3D::SCISSOR_TEST); > + if (isDitherEnabled) > + m_context->enable(GraphicsContext3D::DITHER); > + else > + m_context->disable(GraphicsContext3D::DITHER); > + > + m_context->flush();
I think this would be useful to have this clearing logic as a separate utility function, if just to shorten up the reset() function a bit.
Eric Seidel (no email)
Comment 12
2010-11-10 17:21:12 PST
Attachment 73507
[details]
did not build on chromium: Build output:
http://queues.webkit.org/results/5529076
WebKit Review Bot
Comment 13
2010-11-11 10:42:44 PST
http://trac.webkit.org/changeset/71827
might have broken Leopard Intel Release (Tests) The following tests are not passing: media/video-played-collapse.html media/video-played-ranges-1.html media/video-played-reset.html
James Robinson
Comment 14
2010-11-11 11:14:17 PST
Sadly looks like this did break a bunch of canvas tests in chromium. I'll debug and update the bug when I figure out why.
Mihai Parparita
Comment 15
2010-11-11 12:12:03 PST
For the record, the rollout change was
http://trac.webkit.org/changeset/71839
James Robinson
Comment 16
2010-11-11 13:08:17 PST
Ah, as it turns out the DrawingBufferChromium changes weren't quite complete. In particular, the newly added fields on DrawingBuffer weren't initialized in the DrawingBufferChromium.cpp version of the constructor and the DrawingBufferChromium.cpp functions were not using m_colorBuffer when they should have been. I should have caught both of these issues in review - my bad. I'll update this bug with a patch that passes all tests on chromium.
Chris Marrin
Comment 17
2010-11-11 14:26:41 PST
Created
attachment 73662
[details]
Patch
James Robinson
Comment 18
2010-11-11 14:41:24 PST
Comment on
attachment 73662
[details]
Patch R=me Confirmed that this passes all gpu tests in fast/canvas and canvas/philip on chromium linux.
Chris Marrin
Comment 19
2010-11-11 14:43:34 PST
Committed
r71853
: <
http://trac.webkit.org/changeset/71853
>
Note
You need to
log in
before you can comment on or make changes to this bug.
Top of Page
Format For Printing
XML
Clone This Bug