Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(849)

Unified Diff: skia/ext/convolver.cc

Issue 14929006: [MIPS] Added MIPS DSPr2 optimization for BGRAConvolve2D routine (Closed)
Patch Set: Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « skia/ext/convolver.h ('k') | skia/ext/convolver_mips_dspr2.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: skia/ext/convolver.cc
diff --git a/skia/ext/convolver.cc b/skia/ext/convolver.cc
index 2057b2219aa39ae6ea1fd28d2fc4671729dc2463..e3396cd1c5403a3beadd26bdb08cf5cb167c7cf3 100644
--- a/skia/ext/convolver.cc
+++ b/skia/ext/convolver.cc
@@ -7,6 +7,7 @@
#include "base/logging.h"
#include "skia/ext/convolver.h"
#include "skia/ext/convolver_SSE2.h"
+#include "skia/ext/convolver_mips_dspr2.h"
#include "third_party/skia/include/core/SkSize.h"
#include "third_party/skia/include/core/SkTypes.h"
@@ -344,10 +345,18 @@ typedef void (*Convolve4RowsHorizontally_pointer)(
const unsigned char* src_data[4],
const ConvolutionFilter1D& filter,
unsigned char* out_row[4]);
+#if SIMD_MIPS_DSPR2
+typedef void (*ConvolveHorizontally_pointer)(
+ const unsigned char* src_data,
+ const ConvolutionFilter1D& filter,
+ unsigned char* out_row,
+ bool has_alpha);
hubbe 2013/05/10 19:39:09 Just add "has_alpha" to all implementations instea
Stephen White 2013/05/10 20:31:26 +1 to that.
+#else
typedef void (*ConvolveHorizontally_pointer)(
const unsigned char* src_data,
const ConvolutionFilter1D& filter,
unsigned char* out_row);
+#endif
struct ConvolveProcs {
// This is how many extra pixels may be read by the
@@ -367,6 +376,10 @@ void SetupSIMD(ConvolveProcs *procs) {
procs->convolve_4rows_horizontally = &Convolve4RowsHorizontally_SSE2;
procs->convolve_horizontally = &ConvolveHorizontally_SSE2;
}
+#elif defined SIMD_MIPS_DSPR2
Stephen White 2013/05/10 20:31:26 You use "#if" above, but "#if defined" here. Plea
Stephen White 2013/05/13 14:08:43 Sorry, my mistake. This should be #elif defined(S
Teodora Novkovic 2013/05/13 16:23:06 Done.
Teodora Novkovic 2013/05/13 16:23:06 Done.
+ procs->extra_horizontal_reads = 3;
+ procs->convolve_vertically = &ConvolveVertically_mips_dspr2;
+ procs->convolve_horizontally = &ConvolveHorizontally_mips_dspr2;
#endif
}
@@ -462,9 +475,15 @@ void BGRAConvolve2D(const unsigned char* source_data,
if (simd.convolve_horizontally &&
next_x_row < last_filter_offset + last_filter_length -
avoid_simd_rows) {
+#if SIMD_MIPS_DSPR2
+ simd.convolve_horizontally(
+ &source_data[next_x_row * source_byte_row_stride],
+ filter_x, row_buffer.AdvanceRow(), source_has_alpha);
+#else
simd.convolve_horizontally(
&source_data[next_x_row * source_byte_row_stride],
filter_x, row_buffer.AdvanceRow());
+#endif
} else {
if (source_has_alpha) {
ConvolveHorizontally<true>(
« no previous file with comments | « skia/ext/convolver.h ('k') | skia/ext/convolver_mips_dspr2.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698