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

Side by Side Diff: src/gpu/GrLayerCache.h

Issue 790643009: Revert of Fix layer hoisting image filter corner cases (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 6 years 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/core/SkRecordDraw.cpp ('k') | src/gpu/GrLayerCache.cpp » ('j') | 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 2014 Google Inc. 2 * Copyright 2014 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 GrLayerCache_DEFINED 8 #ifndef GrLayerCache_DEFINED
9 #define GrLayerCache_DEFINED 9 #define GrLayerCache_DEFINED
10 10
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
137 const unsigned* fKey; 137 const unsigned* fKey;
138 const int fKeySize; 138 const int fKeySize;
139 bool fFreeKey; 139 bool fFreeKey;
140 }; 140 };
141 141
142 static const Key& GetKey(const GrCachedLayer& layer) { return layer.fKey; } 142 static const Key& GetKey(const GrCachedLayer& layer) { return layer.fKey; }
143 static uint32_t Hash(const Key& key) { return key.hash(); } 143 static uint32_t Hash(const Key& key) { return key.hash(); }
144 144
145 // GrCachedLayer proper 145 // GrCachedLayer proper
146 GrCachedLayer(uint32_t pictureID, unsigned start, unsigned stop, 146 GrCachedLayer(uint32_t pictureID, unsigned start, unsigned stop,
147 const SkIRect& srcIR, const SkIRect& dstIR, 147 const SkIRect& bounds, const SkMatrix& ctm,
148 const SkMatrix& ctm,
149 const unsigned* key, int keySize, 148 const unsigned* key, int keySize,
150 const SkPaint* paint) 149 const SkPaint* paint)
151 : fKey(pictureID, ctm, key, keySize, true) 150 : fKey(pictureID, ctm, key, keySize, true)
152 , fStart(start) 151 , fStart(start)
153 , fStop(stop) 152 , fStop(stop)
154 , fSrcIR(srcIR) 153 , fBounds(bounds)
155 , fDstIR(dstIR)
156 , fOffset(SkIPoint::Make(0, 0))
157 , fPaint(paint ? SkNEW_ARGS(SkPaint, (*paint)) : NULL) 154 , fPaint(paint ? SkNEW_ARGS(SkPaint, (*paint)) : NULL)
158 , fFilter(NULL) 155 , fFilter(NULL)
159 , fTexture(NULL) 156 , fTexture(NULL)
160 , fRect(SkIRect::MakeEmpty()) 157 , fRect(SkIRect::MakeEmpty())
161 , fPlot(NULL) 158 , fPlot(NULL)
162 , fUses(0) 159 , fUses(0)
163 , fLocked(false) { 160 , fLocked(false) {
164 SkASSERT(SK_InvalidGenID != pictureID); 161 SkASSERT(SK_InvalidGenID != pictureID);
165 162
166 if (fPaint) { 163 if (fPaint) {
167 if (fPaint->getImageFilter() && fPaint->getImageFilter()->canFilterI mageGPU()) { 164 fFilter = SkSafeRef(fPaint->getImageFilter());
168 fFilter = SkSafeRef(fPaint->getImageFilter()); 165 fPaint->setImageFilter(NULL);
169 fPaint->setImageFilter(NULL);
170 }
171 } 166 }
172 } 167 }
173 168
174 ~GrCachedLayer() { 169 ~GrCachedLayer() {
175 SkSafeUnref(fTexture); 170 SkSafeUnref(fTexture);
176 SkSafeUnref(fFilter); 171 SkSafeUnref(fFilter);
177 SkDELETE(fPaint); 172 SkDELETE(fPaint);
178 } 173 }
179 174
180 uint32_t pictureID() const { return fKey.pictureID(); } 175 uint32_t pictureID() const { return fKey.pictureID(); }
181 // TODO: remove these when GrCachedLayer & ReplacementInfo fuse 176 // TODO: remove these when GrCachedLayer & ReplacementInfo fuse
182 const unsigned* key() const { return fKey.key(); } 177 const unsigned* key() const { return fKey.key(); }
183 int keySize() const { return fKey.keySize(); } 178 int keySize() const { return fKey.keySize(); }
184 179
185 unsigned start() const { return fStart; } 180 unsigned start() const { return fStart; }
186 // TODO: make bound debug only 181 // TODO: make bound debug only
187 const SkIRect& srcIR() const { return fSrcIR; } 182 const SkIRect& bound() const { return fBounds; }
188 const SkIRect& dstIR() const { return fDstIR; }
189 unsigned stop() const { return fStop; } 183 unsigned stop() const { return fStop; }
190 void setTexture(GrTexture* texture, const SkIRect& rect) { 184 void setTexture(GrTexture* texture, const SkIRect& rect) {
191 SkRefCnt_SafeAssign(fTexture, texture); 185 SkRefCnt_SafeAssign(fTexture, texture);
192 fRect = rect; 186 fRect = rect;
193 } 187 }
194 GrTexture* texture() { return fTexture; } 188 GrTexture* texture() { return fTexture; }
195 const SkPaint* paint() const { return fPaint; } 189 const SkPaint* paint() const { return fPaint; }
196 const SkImageFilter* filter() const { return fFilter; } 190 const SkImageFilter* filter() const { return fFilter; }
197 const SkIRect& rect() const { return fRect; } 191 const SkIRect& rect() const { return fRect; }
198 192
199 void setOffset(const SkIPoint& offset) { fOffset = offset; }
200 const SkIPoint& offset() const { return fOffset; }
201
202 void setPlot(GrPlot* plot) { 193 void setPlot(GrPlot* plot) {
203 SkASSERT(NULL == plot || NULL == fPlot); 194 SkASSERT(NULL == plot || NULL == fPlot);
204 fPlot = plot; 195 fPlot = plot;
205 } 196 }
206 GrPlot* plot() { return fPlot; } 197 GrPlot* plot() { return fPlot; }
207 198
208 bool isAtlased() const { return SkToBool(fPlot); } 199 bool isAtlased() const { return SkToBool(fPlot); }
209 200
210 void setLocked(bool locked) { fLocked = locked; } 201 void setLocked(bool locked) { fLocked = locked; }
211 bool locked() const { return fLocked; } 202 bool locked() const { return fLocked; }
212 203
213 SkDEBUGCODE(const GrPlot* plot() const { return fPlot; }) 204 SkDEBUGCODE(const GrPlot* plot() const { return fPlot; })
214 SkDEBUGCODE(void validate(const GrTexture* backingTexture) const;) 205 SkDEBUGCODE(void validate(const GrTexture* backingTexture) const;)
215 206
216 private: 207 private:
217 const Key fKey; 208 const Key fKey;
218 209
219 // The "saveLayer" operation index of the cached layer 210 // The "saveLayer" operation index of the cached layer
220 const unsigned fStart; 211 const unsigned fStart;
221 // The final "restore" operation index of the cached layer 212 // The final "restore" operation index of the cached layer
222 const unsigned fStop; 213 const unsigned fStop;
223 214
224 // The layer's src rect (i.e., the portion of the source scene required 215 const SkIRect fBounds;
225 // for filtering).
226 const SkIRect fSrcIR;
227 // The layer's dest rect (i.e., where it will land in device space)
228 const SkIRect fDstIR;
229 // Offset sometimes required by image filters
230 SkIPoint fOffset;
231 216
232 // The paint used when dropping the layer down into the owning canvas. 217 // The paint used when dropping the layer down into the owning canvas.
233 // Can be NULL. This class makes a copy for itself. 218 // Can be NULL. This class makes a copy for itself.
234 SkPaint* fPaint; 219 SkPaint* fPaint;
235 220
236 // The imagefilter that needs to be applied to the layer prior to it being 221 // The imagefilter that needs to be applied to the layer prior to it being
237 // composited with the rest of the scene. 222 // composited with the rest of the scene.
238 const SkImageFilter* fFilter; 223 const SkImageFilter* fFilter;
239 224
240 // fTexture is a ref on the atlasing texture for atlased layers and a 225 // fTexture is a ref on the atlasing texture for atlased layers and a
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
284 ~GrLayerCache(); 269 ~GrLayerCache();
285 270
286 // As a cache, the GrLayerCache can be ordered to free up all its cached 271 // As a cache, the GrLayerCache can be ordered to free up all its cached
287 // elements by the GrContext 272 // elements by the GrContext
288 void freeAll(); 273 void freeAll();
289 274
290 GrCachedLayer* findLayer(uint32_t pictureID, const SkMatrix& ctm, 275 GrCachedLayer* findLayer(uint32_t pictureID, const SkMatrix& ctm,
291 const unsigned* key, int keySize); 276 const unsigned* key, int keySize);
292 GrCachedLayer* findLayerOrCreate(uint32_t pictureID, 277 GrCachedLayer* findLayerOrCreate(uint32_t pictureID,
293 int start, int stop, 278 int start, int stop,
294 const SkIRect& srcIR, 279 const SkIRect& bounds,
295 const SkIRect& dstIR,
296 const SkMatrix& initialMat, 280 const SkMatrix& initialMat,
297 const unsigned* key, int keySize, 281 const unsigned* key, int keySize,
298 const SkPaint* paint); 282 const SkPaint* paint);
299 283
300 // Attempt to place 'layer' in the atlas. Return true on success; false on f ailure. 284 // Attempt to place 'layer' in the atlas. Return true on success; false on f ailure.
301 // When true is returned, 'needsRendering' will indicate if the layer must b e (re)drawn. 285 // When true is returned, 'needsRendering' will indicate if the layer must b e (re)drawn.
302 // Additionally, the GPU resources will be locked. 286 // Additionally, the GPU resources will be locked.
303 bool tryToAtlas(GrCachedLayer* layer, const GrSurfaceDesc& desc, bool* needs Rendering); 287 bool tryToAtlas(GrCachedLayer* layer, const GrSurfaceDesc& desc, bool* needs Rendering);
304 288
305 // Attempt to lock the GPU resources required for a layer. Return true on su ccess; 289 // Attempt to lock the GPU resources required for a layer. Return true on su ccess;
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
369 // count for that plot. Similarly, once a rendering is complete all the 353 // count for that plot. Similarly, once a rendering is complete all the
370 // layers used in it decrement the lock count for the used plots. 354 // layers used in it decrement the lock count for the used plots.
371 // Plots with a 0 lock count are open for recycling/purging. 355 // Plots with a 0 lock count are open for recycling/purging.
372 int fPlotLocks[kNumPlotsX * kNumPlotsY]; 356 int fPlotLocks[kNumPlotsX * kNumPlotsY];
373 357
374 // Inform the cache that layer's cached image is not currently required 358 // Inform the cache that layer's cached image is not currently required
375 void unlock(GrCachedLayer* layer); 359 void unlock(GrCachedLayer* layer);
376 360
377 void initAtlas(); 361 void initAtlas();
378 GrCachedLayer* createLayer(uint32_t pictureID, int start, int stop, 362 GrCachedLayer* createLayer(uint32_t pictureID, int start, int stop,
379 const SkIRect& srcIR, const SkIRect& dstIR, 363 const SkIRect& bounds, const SkMatrix& initialMat ,
380 const SkMatrix& initialMat,
381 const unsigned* key, int keySize, 364 const unsigned* key, int keySize,
382 const SkPaint* paint); 365 const SkPaint* paint);
383 366
384 // Remove all the layers (and unlock any resources) associated with 'picture ID' 367 // Remove all the layers (and unlock any resources) associated with 'picture ID'
385 void purge(uint32_t pictureID); 368 void purge(uint32_t pictureID);
386 369
387 void purgePlot(GrPlot* plot); 370 void purgePlot(GrPlot* plot);
388 371
389 // Try to find a purgeable plot and clear it out. Return true if a plot 372 // Try to find a purgeable plot and clear it out. Return true if a plot
390 // was purged; false otherwise. 373 // was purged; false otherwise.
391 bool purgePlot(); 374 bool purgePlot();
392 375
393 void incPlotLock(int plotIdx) { ++fPlotLocks[plotIdx]; } 376 void incPlotLock(int plotIdx) { ++fPlotLocks[plotIdx]; }
394 void decPlotLock(int plotIdx) { 377 void decPlotLock(int plotIdx) {
395 SkASSERT(fPlotLocks[plotIdx] > 0); 378 SkASSERT(fPlotLocks[plotIdx] > 0);
396 --fPlotLocks[plotIdx]; 379 --fPlotLocks[plotIdx];
397 } 380 }
398 381
399 // for testing 382 // for testing
400 friend class TestingAccess; 383 friend class TestingAccess;
401 int numLayers() const { return fLayerHash.count(); } 384 int numLayers() const { return fLayerHash.count(); }
402 }; 385 };
403 386
404 #endif 387 #endif
OLDNEW
« no previous file with comments | « src/core/SkRecordDraw.cpp ('k') | src/gpu/GrLayerCache.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698