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

Side by Side Diff: skia/sgl/SkBitmapProcState_matrixProcs.cpp

Issue 20386: Fix the Facebook sidebar.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 11 years, 10 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 | Annotate | Revision Log
« no previous file with comments | « skia/sgl/SkBitmapProcState_matrix.h ('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 #include "SkBitmapProcState.h" 1 #include "SkBitmapProcState.h"
2 #include "SkPerspIter.h" 2 #include "SkPerspIter.h"
3 #include "SkShader.h" 3 #include "SkShader.h"
4 4
5 void decal_nofilter_scale(uint32_t dst[], SkFixed fx, SkFixed dx, int count); 5 void decal_nofilter_scale(uint32_t dst[], SkFixed fx, SkFixed dx, int count);
6 void decal_filter_scale(uint32_t dst[], SkFixed fx, SkFixed dx, int count); 6 void decal_filter_scale(uint32_t dst[], SkFixed fx, SkFixed dx, int count);
7 7
8 #ifdef SK_CPU_BENDIAN 8 #ifdef SK_CPU_BENDIAN
9 #define PACK_TWO_SHORTS(pri, sec) ((pri) << 16 | (sec)) 9 #define PACK_TWO_SHORTS(pri, sec) ((pri) << 16 | (sec))
10 #else 10 #else
(...skipping 10 matching lines...) Expand all
21 #else 21 #else
22 #define pack_two_shorts(pri, sec) PACK_TWO_SHORTS(pri, sec) 22 #define pack_two_shorts(pri, sec) PACK_TWO_SHORTS(pri, sec)
23 #endif 23 #endif
24 24
25 #define MAKENAME(suffix) ClampX_ClampY ## suffix 25 #define MAKENAME(suffix) ClampX_ClampY ## suffix
26 #define TILEX_PROCF(fx, max) SkClampMax((fx) >> 16, max) 26 #define TILEX_PROCF(fx, max) SkClampMax((fx) >> 16, max)
27 #define TILEY_PROCF(fy, max) SkClampMax((fy) >> 16, max) 27 #define TILEY_PROCF(fy, max) SkClampMax((fy) >> 16, max)
28 #define TILEX_LOW_BITS(fx, max) (((fx) >> 12) & 0xF) 28 #define TILEX_LOW_BITS(fx, max) (((fx) >> 12) & 0xF)
29 #define TILEY_LOW_BITS(fy, max) (((fy) >> 12) & 0xF) 29 #define TILEY_LOW_BITS(fy, max) (((fy) >> 12) & 0xF)
30 #define CHECK_FOR_DECAL 30 #define CHECK_FOR_DECAL
31 #define TILEX_TRANS(x, max) SkClampMax(x, max)
32 #define TILEY_TRANS(y, max) SkClampMax(y, max)
31 #include "SkBitmapProcState_matrix.h" 33 #include "SkBitmapProcState_matrix.h"
32 34
33 #define MAKENAME(suffix) RepeatX_RepeatY ## suffix 35 #define MAKENAME(suffix) RepeatX_RepeatY ## suffix
34 #define TILEX_PROCF(fx, max) (((fx) & 0xFFFF) * ((max) + 1) >> 16) 36 #define TILEX_PROCF(fx, max) (((fx) & 0xFFFF) * ((max) + 1) >> 16)
35 #define TILEY_PROCF(fy, max) (((fy) & 0xFFFF) * ((max) + 1) >> 16) 37 #define TILEY_PROCF(fy, max) (((fy) & 0xFFFF) * ((max) + 1) >> 16)
36 #define TILEX_LOW_BITS(fx, max) ((((fx) & 0xFFFF) * ((max) + 1) >> 12) & 0xF) 38 #define TILEX_LOW_BITS(fx, max) ((((fx) & 0xFFFF) * ((max) + 1) >> 12) & 0xF)
37 #define TILEY_LOW_BITS(fy, max) ((((fy) & 0xFFFF) * ((max) + 1) >> 12) & 0xF) 39 #define TILEY_LOW_BITS(fy, max) ((((fy) & 0xFFFF) * ((max) + 1) >> 12) & 0xF)
40 #define TILEX_TRANS(x, max) ((x) % ((max) + 1))
41 #define TILEY_TRANS(y, max) ((y) % ((max) + 1))
38 #include "SkBitmapProcState_matrix.h" 42 #include "SkBitmapProcState_matrix.h"
39 43
40 #define MAKENAME(suffix) GeneralXY ## suffix 44 #define MAKENAME(suffix) GeneralXY ## suffix
41 #define PREAMBLE(state) SkBitmapProcState::FixedTileProc tileProcX = (st ate).fTileProcX; \ 45 #define PREAMBLE(state) SkBitmapProcState::FixedTileProc tileProcX = (st ate).fTileProcX; \
42 SkBitmapProcState::FixedTileProc tileProcY = (st ate).fTileProcY 46 SkBitmapProcState::FixedTileProc tileProcY = (st ate).fTileProcY
43 #define PREAMBLE_PARAM_X , SkBitmapProcState::FixedTileProc tileProcX 47 #define PREAMBLE_PARAM_X , SkBitmapProcState::FixedTileProc tileProcX
44 #define PREAMBLE_PARAM_Y , SkBitmapProcState::FixedTileProc tileProcY 48 #define PREAMBLE_PARAM_Y , SkBitmapProcState::FixedTileProc tileProcY
45 #define PREAMBLE_ARG_X , tileProcX 49 #define PREAMBLE_ARG_X , tileProcX
46 #define PREAMBLE_ARG_Y , tileProcY 50 #define PREAMBLE_ARG_Y , tileProcY
47 #define TILEX_PROCF(fx, max) (tileProcX(fx) * ((max) + 1) >> 16) 51 #define TILEX_PROCF(fx, max) (tileProcX(fx, max) >> 16)
48 #define TILEY_PROCF(fy, max) (tileProcY(fy) * ((max) + 1) >> 16) 52 #define TILEY_PROCF(fy, max) (tileProcY(fy, max) >> 16)
49 #define TILEX_LOW_BITS(fx, max) ((tileProcX(fx) * ((max) + 1) >> 12) & 0xF) 53 #define TILEX_LOW_BITS(fx, max) ((tileProcX(fx, max) >> 14) & 0x3)
50 #define TILEY_LOW_BITS(fy, max) ((tileProcY(fy) * ((max) + 1) >> 12) & 0xF) 54 #define TILEY_LOW_BITS(fy, max) ((tileProcY(fy, max) >> 14) & 0x3)
55 #define PREAMBLE_TRANS(state) SkBitmapProcState::IntTileProc tileProcX = (stat e).iTileProcX; \
56 SkBitmapProcState::IntTileProc tileProcY = (stat e).iTileProcY
57 #define TILEX_TRANS(x, max) tileProcX(x, max)
58 #define TILEY_TRANS(y, max) tileProcY(y, max)
51 #include "SkBitmapProcState_matrix.h" 59 #include "SkBitmapProcState_matrix.h"
52 60
53 static inline U16CPU fixed_clamp(SkFixed x) 61
62
63 static inline SkFixed fixed_clamp(SkFixed x, int max)
54 { 64 {
55 #ifdef SK_CPU_HAS_CONDITIONAL_INSTR 65 #ifdef SK_CPU_HAS_CONDITIONAL_INSTR
56 if (x >> 16) 66 if (x >> 16)
57 x = 0xFFFF; 67 x = 0xFFFF;
58 if (x < 0) 68 if (x < 0)
59 x = 0; 69 x = 0;
60 #else 70 #else
61 if (x >> 16) 71 if (x >> 16)
62 { 72 {
63 if (x < 0) 73 if (x < 0)
64 x = 0; 74 x = 0;
65 else 75 else
66 x = 0xFFFF; 76 x = 0xFFFF;
67 } 77 }
68 #endif 78 #endif
69 return x; 79 return x * (max + 1);
70 } 80 }
71 81
72 static inline U16CPU fixed_repeat(SkFixed x) 82 static inline SkFixed fixed_repeat(SkFixed x, int max)
73 { 83 {
74 return x & 0xFFFF; 84 return (x & 0xFFFF) * (max + 1);
75 } 85 }
76 86
77 static inline U16CPU fixed_mirror(SkFixed x) 87 static inline SkFixed fixed_mirror(SkFixed x, int max)
78 { 88 {
79 SkFixed s = x << 15 >> 31; 89 SkFixed s = x << 15 >> 31;
80 // s is FFFFFFFF if we're on an odd interval, or 0 if an even interval 90 // s is FFFFFFFF if we're on an odd interval, or 0 if an even interval
81 return (x ^ s) & 0xFFFF; 91 x = ((x ^ s) & 0xFFFF) * (max + 1);
92 return s ? (x ^ 0xFFFF) : x;
82 } 93 }
83 94
84 static SkBitmapProcState::FixedTileProc choose_tile_proc(unsigned m) 95 static SkBitmapProcState::FixedTileProc choose_tile_proc(unsigned m)
85 { 96 {
86 if (SkShader::kClamp_TileMode == m) 97 if (SkShader::kClamp_TileMode == m)
87 return fixed_clamp; 98 return fixed_clamp;
88 if (SkShader::kRepeat_TileMode == m) 99 if (SkShader::kRepeat_TileMode == m)
89 return fixed_repeat; 100 return fixed_repeat;
90 SkASSERT(SkShader::kMirror_TileMode == m); 101 SkASSERT(SkShader::kMirror_TileMode == m);
91 return fixed_mirror; 102 return fixed_mirror;
92 } 103 }
93 104
105 static inline int int_clamp(int x, int max)
106 {
107 SkASSERT(max >= 0);
108
109 return SkClampMax(x, max);
110 }
111
112 static inline int int_repeat(int x, int max)
113 {
114 SkASSERT(max >= 0);
115
116 return x % (max + 1);
117 }
118
119 static inline int int_mirror(int x, int max)
120 {
121 SkASSERT(max >= 0);
122
123 int dx = x % (max + 1);
124 if (dx < 0)
125 dx = -dx - 1;
126
127 return (x / (max + 1) % 2) ? max - dx : dx;
128 }
129
130 static SkBitmapProcState::IntTileProc choose_int_tile_proc(unsigned m)
131 {
132 if (SkShader::kClamp_TileMode == m)
133 return int_clamp;
134 if (SkShader::kRepeat_TileMode == m)
135 return int_repeat;
136 SkASSERT(SkShader::kMirror_TileMode == m);
137 return int_mirror;
138 }
139
94 SkBitmapProcState::MatrixProc SkBitmapProcState::chooseMatrixProc() 140 SkBitmapProcState::MatrixProc SkBitmapProcState::chooseMatrixProc()
95 { 141 {
96 int index = 0; 142 int index = 0;
97 if (fDoFilter) 143 if (fDoFilter)
98 index = 1; 144 index = 1;
99 if (fInvType & SkMatrix::kPerspective_Mask) 145 if (fInvType & SkMatrix::kPerspective_Mask)
146 index |= 6;
147 else if (fInvType & SkMatrix::kAffine_Mask)
100 index |= 4; 148 index |= 4;
101 else if (fInvType & SkMatrix::kAffine_Mask) 149 else if (fInvType & SkMatrix::kScale_Mask)
102 index |= 2; 150 index |= 2;
103 151
104 if (SkShader::kClamp_TileMode == fTileModeX && 152 if (SkShader::kClamp_TileMode == fTileModeX &&
105 SkShader::kClamp_TileMode == fTileModeY) 153 SkShader::kClamp_TileMode == fTileModeY)
106 { 154 {
107 // clamp gets special version of filterOne 155 // clamp gets special version of filterOne
108 fFilterOneX = SK_Fixed1; 156 fFilterOneX = SK_Fixed1;
109 fFilterOneY = SK_Fixed1; 157 fFilterOneY = SK_Fixed1;
110 return ClampX_ClampY_Procs[index]; 158 return ClampX_ClampY_Procs[index];
111 } 159 }
112 160
113 // all remaining procs use this form for filterOne 161 // all remaining procs use this form for filterOne
114 fFilterOneX = SK_Fixed1 / fBitmap->width(); 162 fFilterOneX = SK_Fixed1 / fBitmap->width();
115 fFilterOneY = SK_Fixed1 / fBitmap->height(); 163 fFilterOneY = SK_Fixed1 / fBitmap->height();
116 164
117 if (SkShader::kRepeat_TileMode == fTileModeX && 165 if (SkShader::kRepeat_TileMode == fTileModeX &&
118 SkShader::kRepeat_TileMode == fTileModeY) 166 SkShader::kRepeat_TileMode == fTileModeY)
119 { 167 {
120 return RepeatX_RepeatY_Procs[index]; 168 return RepeatX_RepeatY_Procs[index];
121 } 169 }
122 170
123 // only general needs these procs 171 // only general needs these procs
124 fTileProcX = choose_tile_proc(fTileModeX); 172 fTileProcX = choose_tile_proc(fTileModeX);
125 fTileProcY = choose_tile_proc(fTileModeY); 173 fTileProcY = choose_tile_proc(fTileModeY);
174 iTileProcX = choose_int_tile_proc(fTileModeX);
175 iTileProcY = choose_int_tile_proc(fTileModeY);
126 return GeneralXY_Procs[index]; 176 return GeneralXY_Procs[index];
127 } 177 }
128 178
129 ////////////////////////////////////////////////////////////////////////////// 179 //////////////////////////////////////////////////////////////////////////////
130 180
131 void decal_nofilter_scale(uint32_t dst[], SkFixed fx, SkFixed dx, int count) 181 void decal_nofilter_scale(uint32_t dst[], SkFixed fx, SkFixed dx, int count)
132 { 182 {
133 int i; 183 int i;
134 184
135 for (i = (count >> 2); i > 0; --i) 185 for (i = (count >> 2); i > 0; --i)
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
190 while ((count -= width) >= 0) 240 while ((count -= width) >= 0)
191 for (i = 0; i < width; i++) 241 for (i = 0; i < width; i++)
192 *xx++ = SkToU16(i); 242 *xx++ = SkToU16(i);
193 243
194 // final cleanup run 244 // final cleanup run
195 count += width; 245 count += width;
196 for (i = 0; i < count; i++) 246 for (i = 0; i < count; i++)
197 *xx++ = SkToU16(i); 247 *xx++ = SkToU16(i);
198 } 248 }
199 249
OLDNEW
« no previous file with comments | « skia/sgl/SkBitmapProcState_matrix.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698