FilterProcessingSSE2.cpp (4133B)
1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */ 3 /* This Source Code Form is subject to the terms of the Mozilla Public 4 * License, v. 2.0. If a copy of the MPL was not distributed with this 5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 6 7 #define SIMD_COMPILE_SSE2 8 9 #include "FilterProcessingSIMD-inl.h" 10 11 #ifndef USE_SSE2 12 static_assert( 13 false, "If this file is built, FilterProcessing.h should know about it!"); 14 #endif 15 16 namespace mozilla::gfx { 17 18 void FilterProcessing::ExtractAlpha_SSE2(const IntSize& size, 19 const uint8_t* sourceData, 20 int32_t sourceStride, 21 uint8_t* alphaData, 22 int32_t alphaStride) { 23 ExtractAlpha_SIMD<__m128i>(size, sourceData, sourceStride, alphaData, 24 alphaStride); 25 } 26 27 already_AddRefed<DataSourceSurface> FilterProcessing::ConvertToB8G8R8A8_SSE2( 28 SourceSurface* aSurface) { 29 return ConvertToB8G8R8A8_SIMD<__m128i>(aSurface); 30 } 31 32 already_AddRefed<DataSourceSurface> FilterProcessing::ApplyBlending_SSE2( 33 DataSourceSurface* aInput1, DataSourceSurface* aInput2, 34 BlendMode aBlendMode) { 35 return ApplyBlending_SIMD<__m128i, __m128i, __m128i>(aInput1, aInput2, 36 aBlendMode); 37 } 38 39 void FilterProcessing::ApplyMorphologyHorizontal_SSE2( 40 const uint8_t* aSourceData, int32_t aSourceStride, uint8_t* aDestData, 41 int32_t aDestStride, const IntRect& aDestRect, int32_t aRadius, 42 MorphologyOperator aOp) { 43 ApplyMorphologyHorizontal_SIMD<__m128i, __m128i>(aSourceData, aSourceStride, 44 aDestData, aDestStride, 45 aDestRect, aRadius, aOp); 46 } 47 48 void FilterProcessing::ApplyMorphologyVertical_SSE2( 49 const uint8_t* aSourceData, int32_t aSourceStride, uint8_t* aDestData, 50 int32_t aDestStride, const IntRect& aDestRect, int32_t aRadius, 51 MorphologyOperator aOp) { 52 ApplyMorphologyVertical_SIMD<__m128i, __m128i>(aSourceData, aSourceStride, 53 aDestData, aDestStride, 54 aDestRect, aRadius, aOp); 55 } 56 57 already_AddRefed<DataSourceSurface> FilterProcessing::ApplyColorMatrix_SSE2( 58 DataSourceSurface* aInput, const Matrix5x4& aMatrix) { 59 return ApplyColorMatrix_SIMD<__m128i, __m128i, __m128i>(aInput, aMatrix); 60 } 61 62 void FilterProcessing::ApplyComposition_SSE2(DataSourceSurface* aSource, 63 DataSourceSurface* aDest, 64 CompositeOperator aOperator) { 65 return ApplyComposition_SIMD<__m128i, __m128i, __m128i>(aSource, aDest, 66 aOperator); 67 } 68 69 void FilterProcessing::DoOpacityCalculation_SSE2( 70 const IntSize& aSize, uint8_t* aTargetData, int32_t aTargetStride, 71 const uint8_t* aSourceData, int32_t aSourceStride, Float aValue) { 72 DoOpacityCalculation_SIMD<__m128i, __m128i>( 73 aSize, aTargetData, aTargetStride, aSourceData, aSourceStride, aValue); 74 } 75 76 already_AddRefed<DataSourceSurface> FilterProcessing::RenderTurbulence_SSE2( 77 const IntSize& aSize, const Point& aOffset, const Size& aBaseFrequency, 78 int32_t aSeed, int aNumOctaves, TurbulenceType aType, bool aStitch, 79 const Rect& aTileRect) { 80 return RenderTurbulence_SIMD<__m128, __m128i, __m128i>( 81 aSize, aOffset, aBaseFrequency, aSeed, aNumOctaves, aType, aStitch, 82 aTileRect); 83 } 84 85 already_AddRefed<DataSourceSurface> 86 FilterProcessing::ApplyArithmeticCombine_SSE2(DataSourceSurface* aInput1, 87 DataSourceSurface* aInput2, 88 Float aK1, Float aK2, Float aK3, 89 Float aK4) { 90 return ApplyArithmeticCombine_SIMD<__m128i, __m128i, __m128i>( 91 aInput1, aInput2, aK1, aK2, aK3, aK4); 92 } 93 94 } // namespace mozilla::gfx