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

Side by Side Diff: src/effects/gradients/SkGradientShaderPriv.h

Issue 2343863002: Remove the unused 16-bit gradient cache (Closed)
Patch Set: Created 4 years, 3 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 | « src/effects/gradients/SkGradientShader.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 2012 Google Inc. 2 * Copyright 2012 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 #ifndef SkGradientShaderPriv_DEFINED 8 #ifndef SkGradientShaderPriv_DEFINED
9 #define SkGradientShaderPriv_DEFINED 9 #define SkGradientShaderPriv_DEFINED
10 10
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
110 SkColor fColorStorage[kStorageCount]; 110 SkColor fColorStorage[kStorageCount];
111 SkScalar fPosStorage[kStorageCount]; 111 SkScalar fPosStorage[kStorageCount];
112 SkMatrix fLocalMatrixStorage; 112 SkMatrix fLocalMatrixStorage;
113 SkAutoMalloc fDynamicStorage; 113 SkAutoMalloc fDynamicStorage;
114 }; 114 };
115 115
116 public: 116 public:
117 SkGradientShaderBase(const Descriptor& desc, const SkMatrix& ptsToUnit); 117 SkGradientShaderBase(const Descriptor& desc, const SkMatrix& ptsToUnit);
118 virtual ~SkGradientShaderBase(); 118 virtual ~SkGradientShaderBase();
119 119
120 // The cache is initialized on-demand when getCache16/32 is called. 120 // The cache is initialized on-demand when getCache32 is called.
121 class GradientShaderCache : public SkRefCnt { 121 class GradientShaderCache : public SkRefCnt {
122 public: 122 public:
123 GradientShaderCache(U8CPU alpha, bool dither, const SkGradientShaderBase & shader); 123 GradientShaderCache(U8CPU alpha, bool dither, const SkGradientShaderBase & shader);
124 ~GradientShaderCache(); 124 ~GradientShaderCache();
125 125
126 const uint16_t* getCache16();
127 const SkPMColor* getCache32(); 126 const SkPMColor* getCache32();
128 127
129 SkMallocPixelRef* getCache32PixelRef() const { return fCache32PixelRef; } 128 SkMallocPixelRef* getCache32PixelRef() const { return fCache32PixelRef; }
130 129
131 unsigned getAlpha() const { return fCacheAlpha; } 130 unsigned getAlpha() const { return fCacheAlpha; }
132 bool getDither() const { return fCacheDither; } 131 bool getDither() const { return fCacheDither; }
133 132
134 private: 133 private:
135 // Working pointers. If either is nullptr, we need to recompute the corr esponding 134 // Working pointer. If it's nullptr, we need to recompute the cache valu es.
136 // cache values.
137 uint16_t* fCache16;
138 SkPMColor* fCache32; 135 SkPMColor* fCache32;
139 136
140 uint16_t* fCache16Storage; // Storage for fCache16, allocated on demand.
141 SkMallocPixelRef* fCache32PixelRef; 137 SkMallocPixelRef* fCache32PixelRef;
142 const unsigned fCacheAlpha; // The alpha value we used when we computed the cache. 138 const unsigned fCacheAlpha; // The alpha value we used when we computed the cache.
143 // Larger than 8bits so we can sto re uninitialized 139 // Larger than 8bits so we can sto re uninitialized
144 // value. 140 // value.
145 const bool fCacheDither; // The dither flag used when we co mputed the cache. 141 const bool fCacheDither; // The dither flag used when we co mputed the cache.
146 142
147 const SkGradientShaderBase& fShader; 143 const SkGradientShaderBase& fShader;
148 144
149 // Make sure we only initialize the caches once. 145 // Make sure we only initialize the cache once.
150 SkOnce fCache16InitOnce, 146 SkOnce fCache32InitOnce;
151 fCache32InitOnce;
152 147
153 static void initCache16(GradientShaderCache* cache);
154 static void initCache32(GradientShaderCache* cache); 148 static void initCache32(GradientShaderCache* cache);
155 149
156 static void Build16bitCache(uint16_t[], SkColor c0, SkColor c1, int coun t, bool dither);
157 static void Build32bitCache(SkPMColor[], SkColor c0, SkColor c1, int cou nt, 150 static void Build32bitCache(SkPMColor[], SkColor c0, SkColor c1, int cou nt,
158 U8CPU alpha, uint32_t gradFlags, bool dither ); 151 U8CPU alpha, uint32_t gradFlags, bool dither );
159 }; 152 };
160 153
161 class GradientShaderBaseContext : public SkShader::Context { 154 class GradientShaderBaseContext : public SkShader::Context {
162 public: 155 public:
163 GradientShaderBaseContext(const SkGradientShaderBase& shader, const Cont extRec&); 156 GradientShaderBaseContext(const SkGradientShaderBase& shader, const Cont extRec&);
164 157
165 uint32_t getFlags() const override { return fFlags; } 158 uint32_t getFlags() const override { return fFlags; }
166 159
(...skipping 10 matching lines...) Expand all
177 typedef SkShader::Context INHERITED; 170 typedef SkShader::Context INHERITED;
178 }; 171 };
179 172
180 bool isOpaque() const override; 173 bool isOpaque() const override;
181 174
182 void getGradientTableBitmap(SkBitmap*) const; 175 void getGradientTableBitmap(SkBitmap*) const;
183 176
184 enum { 177 enum {
185 /// Seems like enough for visual accuracy. TODO: if pos[] deserves 178 /// Seems like enough for visual accuracy. TODO: if pos[] deserves
186 /// it, use a larger cache. 179 /// it, use a larger cache.
187 kCache16Bits = 8,
188 kCache16Count = (1 << kCache16Bits),
189 kCache16Shift = 16 - kCache16Bits,
190 kSqrt16Shift = 8 - kCache16Bits,
191
192 /// Seems like enough for visual accuracy. TODO: if pos[] deserves
193 /// it, use a larger cache.
194 kCache32Bits = 8, 180 kCache32Bits = 8,
195 kCache32Count = (1 << kCache32Bits), 181 kCache32Count = (1 << kCache32Bits),
196 kCache32Shift = 16 - kCache32Bits, 182 kCache32Shift = 16 - kCache32Bits,
197 kSqrt32Shift = 8 - kCache32Bits, 183 kSqrt32Shift = 8 - kCache32Bits,
198 184
199 /// This value is used to *read* the dither cache; it may be 0 185 /// This value is used to *read* the dither cache; it may be 0
200 /// if dithering is disabled. 186 /// if dithering is disabled.
201 kDitherStride32 = kCache32Count, 187 kDitherStride32 = kCache32Count,
202 kDitherStride16 = kCache16Count,
203 }; 188 };
204 189
205 uint32_t getGradFlags() const { return fGradFlags; } 190 uint32_t getGradFlags() const { return fGradFlags; }
206 191
207 protected: 192 protected:
208 class GradientShaderBase4fContext; 193 class GradientShaderBase4fContext;
209 194
210 SkGradientShaderBase(SkReadBuffer& ); 195 SkGradientShaderBase(SkReadBuffer& );
211 void flatten(SkWriteBuffer&) const override; 196 void flatten(SkWriteBuffer&) const override;
212 SK_TO_STRING_OVERRIDE() 197 SK_TO_STRING_OVERRIDE()
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
269 static inline int init_dither_toggle(int x, int y) { 254 static inline int init_dither_toggle(int x, int y) {
270 x &= 1; 255 x &= 1;
271 y = (y & 1) << 1; 256 y = (y & 1) << 1;
272 return (x | y) * SkGradientShaderBase::kDitherStride32; 257 return (x | y) * SkGradientShaderBase::kDitherStride32;
273 } 258 }
274 259
275 static inline int next_dither_toggle(int toggle) { 260 static inline int next_dither_toggle(int toggle) {
276 return toggle ^ SkGradientShaderBase::kDitherStride32; 261 return toggle ^ SkGradientShaderBase::kDitherStride32;
277 } 262 }
278 263
279 static inline int init_dither_toggle16(int x, int y) {
280 return ((x ^ y) & 1) * SkGradientShaderBase::kDitherStride16;
281 }
282
283 static inline int next_dither_toggle16(int toggle) {
284 return toggle ^ SkGradientShaderBase::kDitherStride16;
285 }
286
287 /////////////////////////////////////////////////////////////////////////////// 264 ///////////////////////////////////////////////////////////////////////////////
288 265
289 #if SK_SUPPORT_GPU 266 #if SK_SUPPORT_GPU
290 267
291 #include "GrCoordTransform.h" 268 #include "GrCoordTransform.h"
292 #include "GrFragmentProcessor.h" 269 #include "GrFragmentProcessor.h"
293 #include "glsl/GrGLSLFragmentProcessor.h" 270 #include "glsl/GrGLSLFragmentProcessor.h"
294 #include "glsl/GrGLSLProgramDataManager.h" 271 #include "glsl/GrGLSLProgramDataManager.h"
295 272
296 class GrInvariantOutput; 273 class GrInvariantOutput;
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
488 SkScalar fCachedYCoord; 465 SkScalar fCachedYCoord;
489 GrGLSLProgramDataManager::UniformHandle fColorsUni; 466 GrGLSLProgramDataManager::UniformHandle fColorsUni;
490 GrGLSLProgramDataManager::UniformHandle fFSYUni; 467 GrGLSLProgramDataManager::UniformHandle fFSYUni;
491 468
492 typedef GrGLSLFragmentProcessor INHERITED; 469 typedef GrGLSLFragmentProcessor INHERITED;
493 }; 470 };
494 471
495 #endif 472 #endif
496 473
497 #endif 474 #endif
OLDNEW
« no previous file with comments | « src/effects/gradients/SkGradientShader.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698