Title: [146454] trunk
Revision
146454
Author
senorbla...@chromium.org
Date
2013-03-21 05:16:35 -0700 (Thu, 21 Mar 2013)

Log Message

[skia] feConvolveMatrix should use accelerated path
https://bugs.webkit.org/show_bug.cgi?id=112828

Reviewed by James Robinson.

Source/WebCore:

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.

LayoutTests:

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

Modified Paths

Added Paths

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)
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to