1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/gfx/2d/FilterProcessingSSE2.cpp Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,112 @@ 1.4 +/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 2 -*- 1.5 + * This Source Code Form is subject to the terms of the Mozilla Public 1.6 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.7 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.8 + 1.9 +#define SIMD_COMPILE_SSE2 1.10 + 1.11 +#include "FilterProcessingSIMD-inl.h" 1.12 + 1.13 +#ifndef USE_SSE2 1.14 +static_assert(false, "If this file is built, FilterProcessing.h should know about it!"); 1.15 +#endif 1.16 + 1.17 +namespace mozilla { 1.18 +namespace gfx { 1.19 + 1.20 +void 1.21 +FilterProcessing::ExtractAlpha_SSE2(const IntSize& size, uint8_t* sourceData, int32_t sourceStride, uint8_t* alphaData, int32_t alphaStride) 1.22 +{ 1.23 + ExtractAlpha_SIMD<__m128i>(size, sourceData, sourceStride, alphaData, alphaStride); 1.24 +} 1.25 + 1.26 +TemporaryRef<DataSourceSurface> 1.27 +FilterProcessing::ConvertToB8G8R8A8_SSE2(SourceSurface* aSurface) 1.28 +{ 1.29 + return ConvertToB8G8R8A8_SIMD<__m128i>(aSurface); 1.30 +} 1.31 + 1.32 +TemporaryRef<DataSourceSurface> 1.33 +FilterProcessing::ApplyBlending_SSE2(DataSourceSurface* aInput1, DataSourceSurface* aInput2, 1.34 + BlendMode aBlendMode) 1.35 +{ 1.36 + return ApplyBlending_SIMD<__m128i,__m128i,__m128i>(aInput1, aInput2, aBlendMode); 1.37 +} 1.38 + 1.39 +void 1.40 +FilterProcessing::ApplyMorphologyHorizontal_SSE2(uint8_t* aSourceData, int32_t aSourceStride, 1.41 + uint8_t* aDestData, int32_t aDestStride, 1.42 + const IntRect& aDestRect, int32_t aRadius, 1.43 + MorphologyOperator aOp) 1.44 +{ 1.45 + ApplyMorphologyHorizontal_SIMD<__m128i,__m128i>( 1.46 + aSourceData, aSourceStride, aDestData, aDestStride, aDestRect, aRadius, aOp); 1.47 +} 1.48 + 1.49 +void 1.50 +FilterProcessing::ApplyMorphologyVertical_SSE2(uint8_t* aSourceData, int32_t aSourceStride, 1.51 + uint8_t* aDestData, int32_t aDestStride, 1.52 + const IntRect& aDestRect, int32_t aRadius, 1.53 + MorphologyOperator aOp) 1.54 +{ 1.55 + ApplyMorphologyVertical_SIMD<__m128i,__m128i>( 1.56 + aSourceData, aSourceStride, aDestData, aDestStride, aDestRect, aRadius, aOp); 1.57 +} 1.58 + 1.59 +TemporaryRef<DataSourceSurface> 1.60 +FilterProcessing::ApplyColorMatrix_SSE2(DataSourceSurface* aInput, const Matrix5x4 &aMatrix) 1.61 +{ 1.62 + return ApplyColorMatrix_SIMD<__m128i,__m128i,__m128i>(aInput, aMatrix); 1.63 +} 1.64 + 1.65 +void 1.66 +FilterProcessing::ApplyComposition_SSE2(DataSourceSurface* aSource, DataSourceSurface* aDest, 1.67 + CompositeOperator aOperator) 1.68 +{ 1.69 + return ApplyComposition_SIMD<__m128i,__m128i,__m128i>(aSource, aDest, aOperator); 1.70 +} 1.71 + 1.72 +void 1.73 +FilterProcessing::SeparateColorChannels_SSE2(const IntSize &size, uint8_t* sourceData, int32_t sourceStride, uint8_t* channel0Data, uint8_t* channel1Data, uint8_t* channel2Data, uint8_t* channel3Data, int32_t channelStride) 1.74 +{ 1.75 + SeparateColorChannels_SIMD<__m128i>(size, sourceData, sourceStride, channel0Data, channel1Data, channel2Data, channel3Data, channelStride); 1.76 +} 1.77 + 1.78 +void 1.79 +FilterProcessing::CombineColorChannels_SSE2(const IntSize &size, int32_t resultStride, uint8_t* resultData, int32_t channelStride, uint8_t* channel0Data, uint8_t* channel1Data, uint8_t* channel2Data, uint8_t* channel3Data) 1.80 +{ 1.81 + CombineColorChannels_SIMD<__m128i>(size, resultStride, resultData, channelStride, channel0Data, channel1Data, channel2Data, channel3Data); 1.82 +} 1.83 + 1.84 +void 1.85 +FilterProcessing::DoPremultiplicationCalculation_SSE2(const IntSize& aSize, 1.86 + uint8_t* aTargetData, int32_t aTargetStride, 1.87 + uint8_t* aSourceData, int32_t aSourceStride) 1.88 +{ 1.89 + DoPremultiplicationCalculation_SIMD<__m128i,__m128i,__m128i>(aSize, aTargetData, aTargetStride, aSourceData, aSourceStride); 1.90 +} 1.91 + 1.92 +void 1.93 +FilterProcessing::DoUnpremultiplicationCalculation_SSE2( 1.94 + const IntSize& aSize, 1.95 + uint8_t* aTargetData, int32_t aTargetStride, 1.96 + uint8_t* aSourceData, int32_t aSourceStride) 1.97 +{ 1.98 + DoUnpremultiplicationCalculation_SIMD<__m128i,__m128i>(aSize, aTargetData, aTargetStride, aSourceData, aSourceStride); 1.99 +} 1.100 + 1.101 +TemporaryRef<DataSourceSurface> 1.102 +FilterProcessing::RenderTurbulence_SSE2(const IntSize &aSize, const Point &aOffset, const Size &aBaseFrequency, 1.103 + int32_t aSeed, int aNumOctaves, TurbulenceType aType, bool aStitch, const Rect &aTileRect) 1.104 +{ 1.105 + return RenderTurbulence_SIMD<__m128,__m128i,__m128i>(aSize, aOffset, aBaseFrequency, aSeed, aNumOctaves, aType, aStitch, aTileRect); 1.106 +} 1.107 + 1.108 +TemporaryRef<DataSourceSurface> 1.109 +FilterProcessing::ApplyArithmeticCombine_SSE2(DataSourceSurface* aInput1, DataSourceSurface* aInput2, Float aK1, Float aK2, Float aK3, Float aK4) 1.110 +{ 1.111 + return ApplyArithmeticCombine_SIMD<__m128i,__m128i,__m128i>(aInput1, aInput2, aK1, aK2, aK3, aK4); 1.112 +} 1.113 + 1.114 +} // namespace mozilla 1.115 +} // namespace gfx