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

Side by Side Diff: src/core/SkBitmapProcState.cpp

Issue 656913005: Revert of create shaderproc for nofilter-opaque-dx (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 6 years, 2 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 unified diff | Download patch
« no previous file with comments | « bench/BitmapBench.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2011 Google Inc. 2 * Copyright 2011 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "SkBitmapCache.h" 8 #include "SkBitmapCache.h"
9 #include "SkBitmapProcState.h" 9 #include "SkBitmapProcState.h"
10 #include "SkColorPriv.h" 10 #include "SkColorPriv.h"
(...skipping 12 matching lines...) Expand all
23 extern const SkBitmapProcState::SampleProc16 gSkBitmapProcStateSample16_neon[]; 23 extern const SkBitmapProcState::SampleProc16 gSkBitmapProcStateSample16_neon[];
24 extern const SkBitmapProcState::SampleProc32 gSkBitmapProcStateSample32_neon[]; 24 extern const SkBitmapProcState::SampleProc32 gSkBitmapProcStateSample32_neon[];
25 extern void S16_D16_filter_DX_neon(const SkBitmapProcState&, const uint32_t*, i nt, uint16_t*); 25 extern void S16_D16_filter_DX_neon(const SkBitmapProcState&, const uint32_t*, i nt, uint16_t*);
26 extern void Clamp_S16_D16_filter_DX_shaderproc_neon(const SkBitmapProcState&, i nt, int, uint16_t*, int); 26 extern void Clamp_S16_D16_filter_DX_shaderproc_neon(const SkBitmapProcState&, i nt, int, uint16_t*, int);
27 extern void Repeat_S16_D16_filter_DX_shaderproc_neon(const SkBitmapProcState&, int, int, uint16_t*, int); 27 extern void Repeat_S16_D16_filter_DX_shaderproc_neon(const SkBitmapProcState&, int, int, uint16_t*, int);
28 extern void SI8_opaque_D32_filter_DX_neon(const SkBitmapProcState&, const uint3 2_t*, int, SkPMColor*); 28 extern void SI8_opaque_D32_filter_DX_neon(const SkBitmapProcState&, const uint3 2_t*, int, SkPMColor*);
29 extern void SI8_opaque_D32_filter_DX_shaderproc_neon(const SkBitmapProcState&, int, int, uint32_t*, int); 29 extern void SI8_opaque_D32_filter_DX_shaderproc_neon(const SkBitmapProcState&, int, int, uint32_t*, int);
30 extern void Clamp_SI8_opaque_D32_filter_DX_shaderproc_neon(const SkBitmapProcSt ate&, int, int, uint32_t*, int); 30 extern void Clamp_SI8_opaque_D32_filter_DX_shaderproc_neon(const SkBitmapProcSt ate&, int, int, uint32_t*, int);
31 #endif 31 #endif
32 32
33 extern void Clamp_S32_opaque_D32_nofilter_DX_shaderproc(const SkBitmapProcState& , int, int, uint32_t*, int);
34
35 #define NAME_WRAP(x) x 33 #define NAME_WRAP(x) x
36 #include "SkBitmapProcState_filter.h" 34 #include "SkBitmapProcState_filter.h"
37 #include "SkBitmapProcState_procs.h" 35 #include "SkBitmapProcState_procs.h"
38 36
39 /////////////////////////////////////////////////////////////////////////////// 37 ///////////////////////////////////////////////////////////////////////////////
40 38
41 // true iff the matrix contains, at most, scale and translate elements 39 // true iff the matrix contains, at most, scale and translate elements
42 static bool matrix_only_scale_translate(const SkMatrix& m) { 40 static bool matrix_only_scale_translate(const SkMatrix& m) {
43 return m.getType() <= (SkMatrix::kScale_Mask | SkMatrix::kTranslate_Mask); 41 return m.getType() <= (SkMatrix::kScale_Mask | SkMatrix::kTranslate_Mask);
44 } 42 }
(...skipping 539 matching lines...) Expand 10 before | Expand all | Expand 10 after
584 // our special-case shaderprocs 582 // our special-case shaderprocs
585 if (SK_ARM_NEON_WRAP(S16_D16_filter_DX) == fSampleProc16) { 583 if (SK_ARM_NEON_WRAP(S16_D16_filter_DX) == fSampleProc16) {
586 if (clampClamp) { 584 if (clampClamp) {
587 fShaderProc16 = SK_ARM_NEON_WRAP(Clamp_S16_D16_filter_DX_shaderp roc); 585 fShaderProc16 = SK_ARM_NEON_WRAP(Clamp_S16_D16_filter_DX_shaderp roc);
588 } else if (SkShader::kRepeat_TileMode == fTileModeX && 586 } else if (SkShader::kRepeat_TileMode == fTileModeX &&
589 SkShader::kRepeat_TileMode == fTileModeY) { 587 SkShader::kRepeat_TileMode == fTileModeY) {
590 fShaderProc16 = SK_ARM_NEON_WRAP(Repeat_S16_D16_filter_DX_shader proc); 588 fShaderProc16 = SK_ARM_NEON_WRAP(Repeat_S16_D16_filter_DX_shader proc);
591 } 589 }
592 } else if (SK_ARM_NEON_WRAP(SI8_opaque_D32_filter_DX) == fSampleProc32 & & clampClamp) { 590 } else if (SK_ARM_NEON_WRAP(SI8_opaque_D32_filter_DX) == fSampleProc32 & & clampClamp) {
593 fShaderProc32 = SK_ARM_NEON_WRAP(Clamp_SI8_opaque_D32_filter_DX_shad erproc); 591 fShaderProc32 = SK_ARM_NEON_WRAP(Clamp_SI8_opaque_D32_filter_DX_shad erproc);
594 } else if (S32_opaque_D32_nofilter_DX == fSampleProc32 && clampClamp) {
595 fShaderProc32 = Clamp_S32_opaque_D32_nofilter_DX_shaderproc;
596 } 592 }
597 593
598 if (NULL == fShaderProc32) { 594 if (NULL == fShaderProc32) {
599 fShaderProc32 = this->chooseShaderProc32(); 595 fShaderProc32 = this->chooseShaderProc32();
600 } 596 }
601 } 597 }
602 598
603 // see if our platform has any accelerated overrides 599 // see if our platform has any accelerated overrides
604 this->platformProcs(); 600 this->platformProcs();
605 601
(...skipping 410 matching lines...) Expand 10 before | Expand all | Expand 10 after
1016 } else { 1012 } else {
1017 size >>= 2; 1013 size >>= 2;
1018 } 1014 }
1019 1015
1020 if (fFilterLevel != SkPaint::kNone_FilterLevel) { 1016 if (fFilterLevel != SkPaint::kNone_FilterLevel) {
1021 size >>= 1; 1017 size >>= 1;
1022 } 1018 }
1023 1019
1024 return size; 1020 return size;
1025 } 1021 }
1026
1027 ///////////////////////
1028
1029 void Clamp_S32_opaque_D32_nofilter_DX_shaderproc(const SkBitmapProcState& s, in t x, int y,
1030 SkPMColor* SK_RESTRICT dst, in t count) {
1031 SkASSERT((s.fInvType & ~(SkMatrix::kTranslate_Mask |
1032 SkMatrix::kScale_Mask)) == 0);
1033
1034 const unsigned maxX = s.fBitmap->width() - 1;
1035 SkFractionalInt fx;
1036 int dstY;
1037 {
1038 SkPoint pt;
1039 s.fInvProc(s.fInvMatrix, SkIntToScalar(x) + SK_ScalarHalf, SkIntToScalar (y) + SK_ScalarHalf,
1040 &pt);
1041 fx = SkScalarToFractionalInt(pt.fY);
1042 const unsigned maxY = s.fBitmap->height() - 1;
1043 dstY = SkClampMax(SkFractionalIntToInt(fx), maxY);
1044 fx = SkScalarToFractionalInt(pt.fX);
1045 }
1046
1047 const SkPMColor* SK_RESTRICT src = s.fBitmap->getAddr32(0, dstY);
1048 const SkFractionalInt dx = s.fInvSxFractionalInt;
1049
1050 // Check if we're safely inside [0...maxX] so no need to clamp each computed index.
1051 //
1052 if ((uint64_t)SkFractionalIntToInt(fx) <= maxX &&
1053 (uint64_t)SkFractionalIntToInt(fx + dx * (count - 1)) <= maxX)
1054 {
1055 int count4 = count >> 2;
1056 for (int i = 0; i < count4; ++i) {
1057 SkPMColor src0 = src[SkFractionalIntToInt(fx)]; fx += dx;
1058 SkPMColor src1 = src[SkFractionalIntToInt(fx)]; fx += dx;
1059 SkPMColor src2 = src[SkFractionalIntToInt(fx)]; fx += dx;
1060 SkPMColor src3 = src[SkFractionalIntToInt(fx)]; fx += dx;
1061 dst[0] = src0;
1062 dst[1] = src1;
1063 dst[2] = src2;
1064 dst[3] = src3;
1065 dst += 4;
1066 }
1067 for (int i = (count4 << 2); i < count; ++i) {
1068 unsigned index = SkFractionalIntToInt(fx);
1069 SkASSERT(index <= maxX);
1070 *dst++ = src[index];
1071 fx += dx;
1072 }
1073 } else {
1074 for (int i = 0; i < count; ++i) {
1075 dst[i] = src[SkClampMax(SkFractionalIntToInt(fx), maxX)];
1076 fx += dx;
1077 }
1078 }
1079 }
1080
OLDNEW
« no previous file with comments | « bench/BitmapBench.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698