Title: [125617] trunk
- Revision
- 125617
- Author
- [email protected]
- Date
- 2012-08-14 16:16:35 -0700 (Tue, 14 Aug 2012)
Log Message
Layout Test css3/filters/custom/custom-filter-animation.html is failing
https://bugs.webkit.org/show_bug.cgi?id=91769
Reviewed by Dean Jackson.
Source/WebCore:
Mountain Lion added support for accelerated filter animations, but CSS Shaders are still
rendered in software mode. The setFilters method is using PlatformCALayer::filtersCanBeComposited to check
if the filters can be handled in hardwawre, so I've reused that in the createFilterAnimationsFromKeyframes
to check if the animations can also run in hardware.
Also the GraphicsContext3D doesn't update its own internal m_boundFBO when a framebuffer is deleted,
so I've added that to the FECustomFilter. Otherwise, if the next framebuffer is created using the same
identifier, bindFramebuffer will just return without calling the glBindFramebuffer because of this optimization.
The documentation for glDeleteFramebuffer says that the bound framebuffer is unbound before deleting it.
This is not reproduceable from WebGL, because WebGLRenderingContext::deleteFramebuffer
already knows to unbind the framebuffer when needed. However, I'm also adding that in GraphicsContext3DOpenGLCommon.cpp
and efl/GraphicsContext3DPrivate.cpp, to make sure that m_boundFBO is not used for other purposes.
No new tests, this patch fixes a failing test.
* platform/graphics/ca/GraphicsLayerCA.cpp:
(WebCore::GraphicsLayerCA::createFilterAnimationsFromKeyframes):
* platform/graphics/efl/GraphicsContext3DPrivate.cpp:
(WebCore::GraphicsContext3DPrivate::deleteFramebuffer):
* platform/graphics/filters/FECustomFilter.cpp:
(WebCore::FECustomFilter::deleteRenderBuffers):
* platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
(WebCore::GraphicsContext3D::deleteFramebuffer):
LayoutTests:
The test should be passing on Mountain Lion now, so I'm removing it from the list.
* platform/mac/TestExpectations:
Modified Paths
Diff
Modified: trunk/LayoutTests/ChangeLog (125616 => 125617)
--- trunk/LayoutTests/ChangeLog 2012-08-14 22:47:27 UTC (rev 125616)
+++ trunk/LayoutTests/ChangeLog 2012-08-14 23:16:35 UTC (rev 125617)
@@ -1,3 +1,14 @@
+2012-08-14 Alexandru Chiculita <[email protected]>
+
+ Layout Test css3/filters/custom/custom-filter-animation.html is failing
+ https://bugs.webkit.org/show_bug.cgi?id=91769
+
+ Reviewed by Dean Jackson.
+
+ The test should be passing on Mountain Lion now, so I'm removing it from the list.
+
+ * platform/mac/TestExpectations:
+
2012-08-14 Mike West <[email protected]>
Tighten up parsing the 'script-nonce' CSP directive value.
Modified: trunk/LayoutTests/platform/mac/TestExpectations (125616 => 125617)
--- trunk/LayoutTests/platform/mac/TestExpectations 2012-08-14 22:47:27 UTC (rev 125616)
+++ trunk/LayoutTests/platform/mac/TestExpectations 2012-08-14 23:16:35 UTC (rev 125617)
@@ -337,9 +337,6 @@
// [Mac] REGRESSION (r122651): fast/text/descent-clip-in-scaled-page.html fails
BUGWK91552 : fast/text/descent-clip-in-scaled-page.html = IMAGE
-// Layout Test css3/filters/custom/custom-filter-animation.html is failing
-BUGWK84813 : css3/filters/custom/custom-filter-animation.html = TEXT
-
// Needs rebaseline after https://bugs.webkit.org/show_bug.cig?id=91969
BUGWK91969 : fast/dom/HTMLProgressElement/progress-bar-value-pseudo-element.html = TEXT
BUGWK91969 : fast/dom/HTMLProgressElement/progress-writing-mode.html = TEXT
Modified: trunk/Source/WebCore/ChangeLog (125616 => 125617)
--- trunk/Source/WebCore/ChangeLog 2012-08-14 22:47:27 UTC (rev 125616)
+++ trunk/Source/WebCore/ChangeLog 2012-08-14 23:16:35 UTC (rev 125617)
@@ -1,3 +1,35 @@
+2012-08-14 Alexandru Chiculita <[email protected]>
+
+ Layout Test css3/filters/custom/custom-filter-animation.html is failing
+ https://bugs.webkit.org/show_bug.cgi?id=91769
+
+ Reviewed by Dean Jackson.
+
+ Mountain Lion added support for accelerated filter animations, but CSS Shaders are still
+ rendered in software mode. The setFilters method is using PlatformCALayer::filtersCanBeComposited to check
+ if the filters can be handled in hardwawre, so I've reused that in the createFilterAnimationsFromKeyframes
+ to check if the animations can also run in hardware.
+
+ Also the GraphicsContext3D doesn't update its own internal m_boundFBO when a framebuffer is deleted,
+ so I've added that to the FECustomFilter. Otherwise, if the next framebuffer is created using the same
+ identifier, bindFramebuffer will just return without calling the glBindFramebuffer because of this optimization.
+
+ The documentation for glDeleteFramebuffer says that the bound framebuffer is unbound before deleting it.
+ This is not reproduceable from WebGL, because WebGLRenderingContext::deleteFramebuffer
+ already knows to unbind the framebuffer when needed. However, I'm also adding that in GraphicsContext3DOpenGLCommon.cpp
+ and efl/GraphicsContext3DPrivate.cpp, to make sure that m_boundFBO is not used for other purposes.
+
+ No new tests, this patch fixes a failing test.
+
+ * platform/graphics/ca/GraphicsLayerCA.cpp:
+ (WebCore::GraphicsLayerCA::createFilterAnimationsFromKeyframes):
+ * platform/graphics/efl/GraphicsContext3DPrivate.cpp:
+ (WebCore::GraphicsContext3DPrivate::deleteFramebuffer):
+ * platform/graphics/filters/FECustomFilter.cpp:
+ (WebCore::FECustomFilter::deleteRenderBuffers):
+ * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
+ (WebCore::GraphicsContext3D::deleteFramebuffer):
+
2012-08-14 Adam Barth <[email protected]>
Delete Frame::domWindow() and Frame::existingDOMWindow()
Modified: trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp (125616 => 125617)
--- trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp 2012-08-14 22:47:27 UTC (rev 125616)
+++ trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp 2012-08-14 23:16:35 UTC (rev 125617)
@@ -1957,6 +1957,10 @@
return false;
const FilterOperations* operations = static_cast<const FilterAnimationValue*>(valueList.at(listIndex))->value();
+ // Make sure the platform layer didn't fallback to using software filter compositing instead.
+ if (!PlatformCALayer::filtersCanBeComposited(*operations))
+ return false;
+
int numAnimations = operations->size();
// FIXME: We can't currently hardware animate shadows.
Modified: trunk/Source/WebCore/platform/graphics/efl/GraphicsContext3DPrivate.cpp (125616 => 125617)
--- trunk/Source/WebCore/platform/graphics/efl/GraphicsContext3DPrivate.cpp 2012-08-14 22:47:27 UTC (rev 125616)
+++ trunk/Source/WebCore/platform/graphics/efl/GraphicsContext3DPrivate.cpp 2012-08-14 23:16:35 UTC (rev 125617)
@@ -1081,6 +1081,11 @@
void GraphicsContext3DPrivate::deleteFramebuffer(Platform3DObject framebuffer)
{
makeContextCurrent();
+ if (framebuffer == m_boundFBO) {
+ // Make sure the framebuffer is not going to be used for drawing
+ // operations after it gets deleted.
+ bindFramebuffer(FRAMEBUFFER, 0);
+ }
m_api->glDeleteFramebuffers(1, &framebuffer);
}
Modified: trunk/Source/WebCore/platform/graphics/filters/FECustomFilter.cpp (125616 => 125617)
--- trunk/Source/WebCore/platform/graphics/filters/FECustomFilter.cpp 2012-08-14 22:47:27 UTC (rev 125616)
+++ trunk/Source/WebCore/platform/graphics/filters/FECustomFilter.cpp 2012-08-14 23:16:35 UTC (rev 125617)
@@ -108,6 +108,9 @@
return;
m_context->makeContextCurrent();
if (m_frameBuffer) {
+ // Make sure to unbind any framebuffer from the context first, otherwise
+ // some platforms might refuse to bind the same buffer id again.
+ m_context->bindFramebuffer(GraphicsContext3D::FRAMEBUFFER, 0);
m_context->deleteFramebuffer(m_frameBuffer);
m_frameBuffer = 0;
}
Modified: trunk/Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp (125616 => 125617)
--- trunk/Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp 2012-08-14 22:47:27 UTC (rev 125616)
+++ trunk/Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp 2012-08-14 23:16:35 UTC (rev 125617)
@@ -1322,6 +1322,11 @@
void GraphicsContext3D::deleteFramebuffer(Platform3DObject framebuffer)
{
makeContextCurrent();
+ if (framebuffer == m_boundFBO) {
+ // Make sure the framebuffer is not going to be used for drawing
+ // operations after it gets deleted.
+ bindFramebuffer(FRAMEBUFFER, 0);
+ }
glDeleteFramebuffersEXT(1, &framebuffer);
}
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes