gfx/2d/FilterProcessingSSE2.cpp

changeset 0
6474c204b198
     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

mercurial