Skip to content

Commit 85e9f2e

Browse files
SconyPawel Lampe
authored andcommitted
Add missing feComposite filter's arithmetic operation implementation, fixes #1145
On ARM platforms having neon intrinsics ABI available the implementation of platfrom-specific arithmetic operation of feComposite filter was not hooked despite the fact that implementation was in place - it was probably missed during cherry-picking.
1 parent c3e9799 commit 85e9f2e

4 files changed

Lines changed: 12 additions & 9 deletions

File tree

Source/WebCore/platform/graphics/cpu/arm/filters/FECompositeArithmeticNEON.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
namespace WebCore {
3737

3838
template <int b1, int b4>
39-
inline void FEComposite::computeArithmeticPixelsNeon(const uint8_t* source, uint8_t* destination, unsigned pixelArrayLength, float k1, float k2, float k3, float k4)
39+
inline void FECompositeSoftwareApplier::computeArithmeticPixelsNeon(const uint8_t* source, uint8_t* destination, unsigned pixelArrayLength, float k1, float k2, float k3, float k4)
4040
{
4141
float32x4_t k1x4 = vdupq_n_f32(k1 / 255);
4242
float32x4_t k2x4 = vdupq_n_f32(k2);
@@ -67,7 +67,7 @@ inline void FEComposite::computeArithmeticPixelsNeon(const uint8_t* source, uint
6767
}
6868
}
6969

70-
inline void FEComposite::platformArithmeticNeon(const uint8_t* source, uint8_t* destination, unsigned pixelArrayLength, float k1, float k2, float k3, float k4)
70+
inline void FECompositeSoftwareApplier::platformArithmeticNeon(const uint8_t* source, uint8_t* destination, unsigned pixelArrayLength, float k1, float k2, float k3, float k4)
7171
{
7272
if (!k4) {
7373
if (!k1) {

Source/WebCore/platform/graphics/filters/FEComposite.h

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -73,13 +73,6 @@ class FEComposite : public FilterEffect {
7373

7474
WTF::TextStream& externalRepresentation(WTF::TextStream&, FilterRepresentation) const override;
7575

76-
#if HAVE(ARM_NEON_INTRINSICS)
77-
template <int b1, int b4>
78-
static inline void computeArithmeticPixelsNeon(const uint8_t* source, uint8_t* destination, unsigned pixelArrayLength, float k1, float k2, float k3, float k4);
79-
80-
static inline void platformArithmeticNeon(const uint8_t* source, uint8_t* destination, unsigned pixelArrayLength, float k1, float k2, float k3, float k4);
81-
#endif
82-
8376
CompositeOperationType m_type;
8477
float m_k1;
8578
float m_k2;

Source/WebCore/platform/graphics/filters/software/FECompositeSoftwareApplier.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
#include "config.h"
2626
#include "FECompositeSoftwareApplier.h"
2727

28+
#include "FECompositeArithmeticNEON.h"
2829
#include "FEComposite.h"
2930
#include "GraphicsContext.h"
3031
#include "ImageBuffer.h"
@@ -147,6 +148,8 @@ bool FECompositeSoftwareApplier::applyArithmetic(FilterImage& input, FilterImage
147148
ASSERT(length == destinationPixelBuffer->sizeInBytes());
148149
#if !HAVE(ARM_NEON_INTRINSICS)
149150
applyPlatformArithmetic(sourcePixelBytes, destinationPixelBytes, length, m_effect.k1(), m_effect.k2(), m_effect.k3(), m_effect.k4());
151+
#else
152+
platformArithmeticNeon(sourcePixelBytes, destinationPixelBytes, length, m_effect.k1(), m_effect.k2(), m_effect.k3(), m_effect.k4());
150153
#endif
151154
return true;
152155
}

Source/WebCore/platform/graphics/filters/software/FECompositeSoftwareApplier.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,13 @@ class FECompositeSoftwareApplier final : public FilterEffectConcreteApplier<FECo
5050

5151
bool applyArithmetic(FilterImage& input, FilterImage& input2, FilterImage& result) const;
5252
bool applyNonArithmetic(FilterImage& input, FilterImage& input2, FilterImage& result) const;
53+
54+
#if HAVE(ARM_NEON_INTRINSICS)
55+
template <int b1, int b4>
56+
static inline void computeArithmeticPixelsNeon(const uint8_t* source, uint8_t* destination, unsigned pixelArrayLength, float k1, float k2, float k3, float k4);
57+
58+
static inline void platformArithmeticNeon(const uint8_t* source, uint8_t* destination, unsigned pixelArrayLength, float k1, float k2, float k3, float k4);
59+
#endif
5360
};
5461

5562
} // namespace WebCore

0 commit comments

Comments
 (0)