tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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