// Copyright 2011 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifdef UNSAFE_BUFFERS_BUILD // TODO(crbug.com/351564777): Remove this and convert code to safer constructs. #pragma allow_unsafe_buffers #endif #include <algorithm> #include "build/build_config.h" #include "skia/ext/convolver.h" #include "skia/ext/convolver_SSE2.h" #include "third_party/skia/include/core/SkTypes.h" #include <emmintrin.h> // ARCH_CPU_X86_FAMILY was defined in build/config.h namespace skia { // Convolves horizontally along a single row. The row data is given in // |src_data| and continues for the num_values() of the filter. void ConvolveHorizontally_SSE2(const unsigned char* src_data, const ConvolutionFilter1D& filter, unsigned char* out_row, bool /*has_alpha*/) { … } // Convolves horizontally along four rows. The row data is given in // |src_data| and continues for the num_values() of the filter. // The algorithm is almost same as |ConvolveHorizontally_SSE2|. Please // refer to that function for detailed comments. void Convolve4RowsHorizontally_SSE2(const unsigned char* src_data[4], const ConvolutionFilter1D& filter, unsigned char* out_row[4]) { … } // Does vertical convolution to produce one output row. The filter values and // length are given in the first two parameters. These are applied to each // of the rows pointed to in the |source_data_rows| array, with each row // being |pixel_width| wide. // // The output must have room for |pixel_width * 4| bytes. template<bool has_alpha> void ConvolveVertically_SSE2(const ConvolutionFilter1D::Fixed* filter_values, int filter_length, unsigned char* const* source_data_rows, int pixel_width, unsigned char* out_row) { … } void ConvolveVertically_SSE2(const ConvolutionFilter1D::Fixed* filter_values, int filter_length, unsigned char* const* source_data_rows, int pixel_width, unsigned char* out_row, bool has_alpha) { … } } // namespace skia