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

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

Issue 664783004: 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 | « no previous file | 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 11 matching lines...) Expand all
22 // These are defined in src/opts/SkBitmapProcState_arm_neon.cpp 22 // These are defined in src/opts/SkBitmapProcState_arm_neon.cpp
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 extern void Clamp_S32_opaque_D32_nofilter_DX_shaderproc(const SkBitmapProcState &, int, int, uint32_t*, int);
32 33
33 #define NAME_WRAP(x) x 34 #define NAME_WRAP(x) x
34 #include "SkBitmapProcState_filter.h" 35 #include "SkBitmapProcState_filter.h"
35 #include "SkBitmapProcState_procs.h" 36 #include "SkBitmapProcState_procs.h"
36 37
37 /////////////////////////////////////////////////////////////////////////////// 38 ///////////////////////////////////////////////////////////////////////////////
38 39
39 // true iff the matrix contains, at most, scale and translate elements 40 // true iff the matrix contains, at most, scale and translate elements
40 static bool matrix_only_scale_translate(const SkMatrix& m) { 41 static bool matrix_only_scale_translate(const SkMatrix& m) {
41 return m.getType() <= (SkMatrix::kScale_Mask | SkMatrix::kTranslate_Mask); 42 return m.getType() <= (SkMatrix::kScale_Mask | SkMatrix::kTranslate_Mask);
(...skipping 540 matching lines...) Expand 10 before | Expand all | Expand 10 after
582 // our special-case shaderprocs 583 // our special-case shaderprocs
583 if (SK_ARM_NEON_WRAP(S16_D16_filter_DX) == fSampleProc16) { 584 if (SK_ARM_NEON_WRAP(S16_D16_filter_DX) == fSampleProc16) {
584 if (clampClamp) { 585 if (clampClamp) {
585 fShaderProc16 = SK_ARM_NEON_WRAP(Clamp_S16_D16_filter_DX_shaderp roc); 586 fShaderProc16 = SK_ARM_NEON_WRAP(Clamp_S16_D16_filter_DX_shaderp roc);
586 } else if (SkShader::kRepeat_TileMode == fTileModeX && 587 } else if (SkShader::kRepeat_TileMode == fTileModeX &&
587 SkShader::kRepeat_TileMode == fTileModeY) { 588 SkShader::kRepeat_TileMode == fTileModeY) {
588 fShaderProc16 = SK_ARM_NEON_WRAP(Repeat_S16_D16_filter_DX_shader proc); 589 fShaderProc16 = SK_ARM_NEON_WRAP(Repeat_S16_D16_filter_DX_shader proc);
589 } 590 }
590 } else if (SK_ARM_NEON_WRAP(SI8_opaque_D32_filter_DX) == fSampleProc32 & & clampClamp) { 591 } else if (SK_ARM_NEON_WRAP(SI8_opaque_D32_filter_DX) == fSampleProc32 & & clampClamp) {
591 fShaderProc32 = SK_ARM_NEON_WRAP(Clamp_SI8_opaque_D32_filter_DX_shad erproc); 592 fShaderProc32 = SK_ARM_NEON_WRAP(Clamp_SI8_opaque_D32_filter_DX_shad erproc);
593 } else if (SK_ARM_NEON_WRAP(S32_opaque_D32_nofilter_DX) == fSampleProc32 && clampClamp) {
djsollen 2014/10/23 19:00:33 compile fails because S32_opaque_D32_nofilter_DX_n
reed1 2014/10/23 19:13:56 Done.
594 fShaderProc32 = Clamp_S32_opaque_D32_nofilter_DX_shaderproc;
592 } 595 }
593 596
594 if (NULL == fShaderProc32) { 597 if (NULL == fShaderProc32) {
595 fShaderProc32 = this->chooseShaderProc32(); 598 fShaderProc32 = this->chooseShaderProc32();
596 } 599 }
597 } 600 }
598 601
599 // see if our platform has any accelerated overrides 602 // see if our platform has any accelerated overrides
600 this->platformProcs(); 603 this->platformProcs();
601 604
(...skipping 410 matching lines...) Expand 10 before | Expand all | Expand 10 after
1012 } else { 1015 } else {
1013 size >>= 2; 1016 size >>= 2;
1014 } 1017 }
1015 1018
1016 if (fFilterLevel != SkPaint::kNone_FilterLevel) { 1019 if (fFilterLevel != SkPaint::kNone_FilterLevel) {
1017 size >>= 1; 1020 size >>= 1;
1018 } 1021 }
1019 1022
1020 return size; 1023 return size;
1021 } 1024 }
1025
1026 ///////////////////////
1027
1028 void Clamp_S32_opaque_D32_nofilter_DX_shaderproc(const SkBitmapProcState& s, in t x, int y,
1029 SkPMColor* SK_RESTRICT dst, in t count) {
1030 SkASSERT((s.fInvType & ~(SkMatrix::kTranslate_Mask |
1031 SkMatrix::kScale_Mask)) == 0);
1032
1033 const unsigned maxX = s.fBitmap->width() - 1;
1034 SkFractionalInt fx;
1035 int dstY;
1036 {
1037 SkPoint pt;
1038 s.fInvProc(s.fInvMatrix, SkIntToScalar(x) + SK_ScalarHalf, SkIntToScalar (y) + SK_ScalarHalf,
1039 &pt);
1040 fx = SkScalarToFractionalInt(pt.fY);
1041 const unsigned maxY = s.fBitmap->height() - 1;
1042 dstY = SkClampMax(SkFractionalIntToInt(fx), maxY);
1043 fx = SkScalarToFractionalInt(pt.fX);
1044 }
1045
1046 const SkPMColor* SK_RESTRICT src = s.fBitmap->getAddr32(0, dstY);
1047 const SkFractionalInt dx = s.fInvSxFractionalInt;
1048
1049 if ((unsigned)(fx >> 48) <= maxX && (unsigned)((fx + dx * (count - 1)) >> 48 ) <= maxX) {
mtklein 2014/10/23 19:05:45 Can't hurt to make this a little more readable? i
reed1 2014/10/23 19:13:56 Done.
1050 int count4 = count >> 2;
1051 for (int i = 0; i < count4; ++i) {
1052 SkPMColor src0 = src[SkFractionalIntToInt(fx)]; fx += dx;
1053 SkPMColor src1 = src[SkFractionalIntToInt(fx)]; fx += dx;
1054 SkPMColor src2 = src[SkFractionalIntToInt(fx)]; fx += dx;
1055 SkPMColor src3 = src[SkFractionalIntToInt(fx)]; fx += dx;
1056 dst[0] = src0;
1057 dst[1] = src1;
1058 dst[2] = src2;
1059 dst[3] = src3;
1060 dst += 4;
1061 }
1062 for (int i = (count4 << 2); i < count; ++i) {
1063 unsigned index = SkFractionalIntToInt(fx);
1064 SkASSERT(index <= maxX);
1065 *dst++ = src[index];
1066 fx += dx;
1067 }
1068 } else {
1069 for (int i = 0; i < count; ++i) {
1070 dst[i] = src[SkClampMax(SkFractionalIntToInt(fx), maxX)];
1071 fx += dx;
1072 }
1073 }
1074 }
1075
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698