OpenCL implementation of FEImage SVG Filter.
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 28 Feb 2013 11:50:31 +0000 (11:50 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 28 Feb 2013 11:50:31 +0000 (11:50 +0000)
https://bugs.webkit.org/show_bug.cgi?id=110752

Patch by Tamas Czene <tczene@inf.u-szeged.hu> on 2013-02-28
Reviewed by Zoltan Herczeg.

The result of the image is uploaded to an OpenCL buffer.

* Target.pri:
* platform/graphics/gpu/opencl/OpenCLFEImage.cpp: Added.
(WebCore):
(WebCore::FEImage::platformApplyOpenCL):
* svg/graphics/filters/SVGFEImage.h:
(FEImage):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@144289 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/Target.pri
Source/WebCore/platform/graphics/gpu/opencl/OpenCLFEImage.cpp [new file with mode: 0644]
Source/WebCore/svg/graphics/filters/SVGFEImage.h

index 026760f..b5421fc 100644 (file)
@@ -1,3 +1,19 @@
+2013-02-28  Tamas Czene  <tczene@inf.u-szeged.hu>
+
+        OpenCL implementation of FEImage SVG Filter.
+        https://bugs.webkit.org/show_bug.cgi?id=110752
+
+        Reviewed by Zoltan Herczeg.
+
+        The result of the image is uploaded to an OpenCL buffer.
+
+        * Target.pri:
+        * platform/graphics/gpu/opencl/OpenCLFEImage.cpp: Added.
+        (WebCore):
+        (WebCore::FEImage::platformApplyOpenCL):
+        * svg/graphics/filters/SVGFEImage.h:
+        (FEImage):
+
 2013-02-28  Mike West  <mkwst@chromium.org>
 
         Web Inspector: Make it obvious where command line functions come from
index 34489b9..d607912 100644 (file)
@@ -4233,6 +4233,7 @@ contains(DEFINES, ENABLE_OPENCL=1) {
         platform/graphics/gpu/opencl/FilterContextOpenCL.cpp \
         platform/graphics/gpu/opencl/OpenCLFEColorMatrix.cpp \
         platform/graphics/gpu/opencl/OpenCLFEFlood.cpp \
+        platform/graphics/gpu/opencl/OpenCLFEImage.cpp \
         platform/graphics/gpu/opencl/OpenCLFEMerge.cpp \
         platform/graphics/gpu/opencl/OpenCLFESourceAlpha.cpp \
         platform/graphics/gpu/opencl/OpenCLFESourceGraphic.cpp \
diff --git a/Source/WebCore/platform/graphics/gpu/opencl/OpenCLFEImage.cpp b/Source/WebCore/platform/graphics/gpu/opencl/OpenCLFEImage.cpp
new file mode 100644 (file)
index 0000000..736a862
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2013 University of Szeged
+ * Copyright (C) 2013 Tamas Czene <tczene@inf.u-szeged.hu>
+ * 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 UNIVERSITY OF SZEGED ``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 UNIVERSITY OF SZEGED OR
+ * 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) && ENABLE(OPENCL)
+
+#include "FilterContextOpenCL.h"
+#include "SVGFEImage.h"
+#include "SVGFilter.h"
+#include "SharedBuffer.h"
+
+namespace WebCore {
+
+bool FEImage::platformApplyOpenCL()
+{
+    platformApplySoftware();
+    ImageBuffer* sourceImage = asImageBuffer();
+    if (sourceImage) {
+        RefPtr<Uint8ClampedArray> sourceImageData = sourceImage->getUnmultipliedImageData(IntRect(IntPoint(), sourceImage->internalSize()));
+        createOpenCLImageResult(sourceImageData->data());
+    }
+    return true;
+}
+
+} // namespace WebCore
+
+#endif // ENABLE(FILTERS) && ENABLE(OPENCL)
index 87e5837..46a853c 100644 (file)
@@ -39,6 +39,9 @@ public:
     static PassRefPtr<FEImage> createWithIRIReference(Filter*, Document*, const String&, const SVGPreserveAspectRatio&);
 
     virtual void platformApplySoftware();
+#if ENABLE(OPENCL)
+    virtual bool platformApplyOpenCL();
+#endif
     virtual void dump();
 
     virtual void determineAbsolutePaintRect();