Diff
Modified: trunk/LayoutTests/ChangeLog (146453 => 146454)
--- trunk/LayoutTests/ChangeLog 2013-03-21 11:54:50 UTC (rev 146453)
+++ trunk/LayoutTests/ChangeLog 2013-03-21 12:16:35 UTC (rev 146454)
@@ -1,3 +1,16 @@
+2013-03-21 Stephen White <senorbla...@chromium.org>
+
+ [skia] feConvolveMatrix should use accelerated path
+ https://bugs.webkit.org/show_bug.cgi?id=112828
+
+ Reviewed by James Robinson.
+
+ * css3/filters/effect-reference-hw.html:
+ * css3/filters/effect-reference.html:
+ Add new test case for feConvolveMatrix as a reference filter.
+ * platform/chromium/TestExpectations:
+ Suppress failures until the test can be rebaselined.
+
2013-03-21 Sergey Ryazanov <se...@chromium.org>
Web Inspector: Track CSS error location information.
Modified: trunk/LayoutTests/css3/filters/effect-reference-hw.html (146453 => 146454)
--- trunk/LayoutTests/css3/filters/effect-reference-hw.html 2013-03-21 11:54:50 UTC (rev 146453)
+++ trunk/LayoutTests/css3/filters/effect-reference-hw.html 2013-03-21 12:16:35 UTC (rev 146454)
@@ -31,6 +31,9 @@
<filter id="offset" x="0%">
<feOffset dx="10" dy="10"/>
</filter>
+ <filter id="convolvematrix">
+ <feConvolveMatrix order="3 3" kernelMatrix="1 1 1 1 -7 1 1 1 1" bias ="0.3"/>
+ </filter>
</defs>
</svg>
<style>
@@ -47,3 +50,4 @@
<img style="-webkit-filter: url(#blend); filter: url(#blend);" src=""
<img style="-webkit-filter: url(#lighting); filter: url(#lighting);" src=""
<img style="-webkit-filter: url(#offset); filter: url(#offset);" src=""
+<img style="-webkit-filter: url(#convolvematrix); filter: url(#convolvematrix);" src=""
Modified: trunk/LayoutTests/css3/filters/effect-reference.html (146453 => 146454)
--- trunk/LayoutTests/css3/filters/effect-reference.html 2013-03-21 11:54:50 UTC (rev 146453)
+++ trunk/LayoutTests/css3/filters/effect-reference.html 2013-03-21 12:16:35 UTC (rev 146454)
@@ -31,6 +31,9 @@
<filter id="offset" x="0%">
<feOffset dx="10" dy="10"/>
</filter>
+ <filter id="convolvematrix">
+ <feConvolveMatrix order="3 3" kernelMatrix="1 1 1 1 -7 1 1 1 1" bias ="0.3"/>
+ </filter>
</defs>
</svg>
<style>
@@ -46,3 +49,4 @@
<img style="-webkit-filter: url(#blend); filter: url(#blend);" src=""
<img style="-webkit-filter: url(#lighting); filter: url(#lighting);" src=""
<img style="-webkit-filter: url(#offset); filter: url(#offset);" src=""
+<img style="-webkit-filter: url(#convolvematrix); filter: url(#convolvematrix);" src=""
Modified: trunk/LayoutTests/platform/chromium/TestExpectations (146453 => 146454)
--- trunk/LayoutTests/platform/chromium/TestExpectations 2013-03-21 11:54:50 UTC (rev 146453)
+++ trunk/LayoutTests/platform/chromium/TestExpectations 2013-03-21 12:16:35 UTC (rev 146454)
@@ -119,6 +119,10 @@
# Has been timing out intermittently for a long time.
webkit.org/b/101236 [ Debug ] css3/filters/custom/custom-filter-animation.html [ Pass Timeout ]
+# Needs rebaseline
+webkit.org/b/112828 css3/filters/effect-reference.html [ Failure ImageOnlyFailure Pass ]
+webkit.org/b/112828 css3/filters/effect-reference-hw.html [ Failure ImageOnlyFailure Pass ]
+
# Has been failing since r133544-133546
webkit.org/b/104282 [ Release ] fast/js/toString-and-valueOf-override.html [ Failure ]
Modified: trunk/Source/WebCore/ChangeLog (146453 => 146454)
--- trunk/Source/WebCore/ChangeLog 2013-03-21 11:54:50 UTC (rev 146453)
+++ trunk/Source/WebCore/ChangeLog 2013-03-21 12:16:35 UTC (rev 146454)
@@ -1,3 +1,21 @@
+2013-03-21 Stephen White <senorbla...@chromium.org>
+
+ [skia] feConvolveMatrix should use accelerated path
+ https://bugs.webkit.org/show_bug.cgi?id=112828
+
+ Reviewed by James Robinson.
+
+ Covered by layout tests css3/filters/effect-reference*.html.
+
+ * WebCore.gypi:
+ Add FEConvolveMatrixSkia.cpp to the build.
+ * platform/graphics/filters/FEConvolveMatrix.h:
+ Enable the skia accelerated path for feConvolveMatrix.
+ * platform/graphics/filters/skia/FEConvolveMatrixSkia.cpp:
+ (WebCore::FEConvolveMatrix::createImageFilter):
+ Implement building/conversion from FEConvolveMatrix to
+ SkMatrixConvolutionImageFilter.
+
2013-03-21 Kunihiko Sakamoto <ksakam...@chromium.org>
Refactoring: Reorganize datetime field element parameters
Modified: trunk/Source/WebCore/WebCore.gypi (146453 => 146454)
--- trunk/Source/WebCore/WebCore.gypi 2013-03-21 11:54:50 UTC (rev 146453)
+++ trunk/Source/WebCore/WebCore.gypi 2013-03-21 12:16:35 UTC (rev 146454)
@@ -4167,6 +4167,7 @@
'platform/graphics/filters/skia/FEBlendSkia.cpp',
'platform/graphics/filters/skia/FEColorMatrixSkia.cpp',
'platform/graphics/filters/skia/FEComponentTransferSkia.cpp',
+ 'platform/graphics/filters/skia/FEConvolveMatrixSkia.cpp',
'platform/graphics/filters/skia/FEGaussianBlurSkia.cpp',
'platform/graphics/filters/skia/FEMorphologySkia.cpp',
'platform/graphics/filters/skia/FELightingSkia.cpp',
Modified: trunk/Source/WebCore/platform/graphics/filters/FEConvolveMatrix.h (146453 => 146454)
--- trunk/Source/WebCore/platform/graphics/filters/FEConvolveMatrix.h 2013-03-21 11:54:50 UTC (rev 146453)
+++ trunk/Source/WebCore/platform/graphics/filters/FEConvolveMatrix.h 2013-03-21 12:16:35 UTC (rev 146454)
@@ -71,6 +71,9 @@
bool setPreserveAlpha(bool);
virtual void platformApplySoftware();
+#if USE(SKIA)
+ virtual SkImageFilter* createImageFilter(SkiaImageFilterBuilder*);
+#endif
virtual void dump();
virtual void determineAbsolutePaintRect() { setAbsolutePaintRect(enclosingIntRect(maxEffectRect())); }
Added: trunk/Source/WebCore/platform/graphics/filters/skia/FEConvolveMatrixSkia.cpp (0 => 146454)
--- trunk/Source/WebCore/platform/graphics/filters/skia/FEConvolveMatrixSkia.cpp (rev 0)
+++ trunk/Source/WebCore/platform/graphics/filters/skia/FEConvolveMatrixSkia.cpp 2013-03-21 12:16:35 UTC (rev 146454)
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2013 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+
+#if ENABLE(FILTERS)
+#include "FEConvolveMatrix.h"
+
+#include "SkMatrixConvolutionImageFilter.h"
+#include "SkiaImageFilterBuilder.h"
+#include <wtf/OwnArrayPtr.h>
+
+namespace {
+
+SkMatrixConvolutionImageFilter::TileMode toSkiaTileMode(WebCore::EdgeModeType edgeMode)
+{
+ switch (edgeMode) {
+ case WebCore::EDGEMODE_UNKNOWN:
+ case WebCore::EDGEMODE_DUPLICATE:
+ return SkMatrixConvolutionImageFilter::kClamp_TileMode;
+ case WebCore::EDGEMODE_WRAP:
+ return SkMatrixConvolutionImageFilter::kRepeat_TileMode;
+ case WebCore::EDGEMODE_NONE:
+ return SkMatrixConvolutionImageFilter::kClampToBlack_TileMode;
+ }
+}
+
+}; // unnamed namespace
+
+namespace WebCore {
+
+SkImageFilter* FEConvolveMatrix::createImageFilter(SkiaImageFilterBuilder* builder)
+{
+ SkAutoTUnref<SkImageFilter> input(builder->build(inputEffect(0)));
+
+ SkISize kernelSize(SkISize::Make(m_kernelSize.width(), m_kernelSize.height()));
+ int numElements = kernelSize.width() * kernelSize.height();
+ SkScalar gain = SkFloatToScalar(1.0f / m_divisor);
+ SkScalar bias = SkFloatToScalar(m_bias);
+ SkIPoint target = SkIPoint::Make(m_targetOffset.x(), m_targetOffset.y());
+ SkMatrixConvolutionImageFilter::TileMode tileMode = toSkiaTileMode(m_edgeMode);
+ bool convolveAlpha = !m_preserveAlpha;
+ OwnArrayPtr<SkScalar> kernel = adoptArrayPtr(new SkScalar[numElements]);
+ for (int i = 0; i < numElements; ++i)
+ kernel[i] = SkFloatToScalar(m_kernelMatrix[numElements - 1 - i]);
+ return new SkMatrixConvolutionImageFilter(kernelSize, kernel.get(), gain, bias, target, tileMode, convolveAlpha, input);
+}
+
+} // namespace WebCore
+
+#endif // ENABLE(FILTERS)