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

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

Issue 1888473002: Use transfer buffer for BatchAtlas texture copies Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Rebase to ToT Created 4 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 | « include/gpu/gl/GrGLTypes.h ('k') | src/gpu/GrBatchAtlas.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 2015 Google Inc. 2 * Copyright 2015 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 GrBatchAtlas_DEFINED 8 #ifndef GrBatchAtlas_DEFINED
9 #define GrBatchAtlas_DEFINED 9 #define GrBatchAtlas_DEFINED
10 10
11 #include "GrTexture.h" 11 #include "GrTexture.h"
12 #include "SkPoint.h" 12 #include "SkPoint.h"
13 #include "SkTDArray.h" 13 #include "SkTDArray.h"
14 #include "SkTInternalLList.h" 14 #include "SkTInternalLList.h"
15 15
16 #include "batches/GrDrawBatch.h" 16 #include "batches/GrDrawBatch.h"
17 17
18 class GrRectanizer; 18 class GrRectanizer;
19 class GrResourceProvider;
20 class GrBuffer;
19 21
20 struct GrBatchAtlasConfig { 22 struct GrBatchAtlasConfig {
21 int numPlotsX() const { return fWidth / fPlotWidth; } 23 int numPlotsX() const { return fWidth / fPlotWidth; }
22 int numPlotsY() const { return fHeight / fPlotWidth; } 24 int numPlotsY() const { return fHeight / fPlotWidth; }
23 int fWidth; 25 int fWidth;
24 int fHeight; 26 int fHeight;
25 int fLog2Width; 27 int fLog2Width;
26 int fLog2Height; 28 int fLog2Height;
27 int fPlotWidth; 29 int fPlotWidth;
28 int fPlotHeight; 30 int fPlotHeight;
29 }; 31 };
30 32
31 class GrBatchAtlas { 33 class GrBatchAtlas {
32 public: 34 public:
33 // An AtlasID is an opaque handle which callers can use to determine if the atlas contains 35 // An AtlasID is an opaque handle which callers can use to determine if the atlas contains
34 // a specific piece of data 36 // a specific piece of data
35 typedef uint64_t AtlasID; 37 typedef uint64_t AtlasID;
36 static const uint32_t kInvalidAtlasID = 0; 38 static const uint32_t kInvalidAtlasID = 0;
37 static const uint64_t kInvalidAtlasGeneration = 0; 39 static const uint64_t kInvalidAtlasGeneration = 0;
38 40
39 // A function pointer for use as a callback during eviction. Whenever GrBat chAtlas evicts a 41 // A function pointer for use as a callback during eviction. Whenever GrBat chAtlas evicts a
40 // specific AtlasID, it will call all of the registered listeners so they ca n optionally process 42 // specific AtlasID, it will call all of the registered listeners so they ca n optionally process
41 // the eviction 43 // the eviction
42 typedef void (*EvictionFunc)(GrBatchAtlas::AtlasID, void*); 44 typedef void (*EvictionFunc)(GrBatchAtlas::AtlasID, void*);
43 45
44 GrBatchAtlas(GrTexture*, int numPlotsX, int numPlotsY); 46 GrBatchAtlas(GrResourceProvider*, GrTexture*, int numPlotsX, int numPlotsY);
45 ~GrBatchAtlas(); 47 ~GrBatchAtlas();
46 48
47 // Adds a width x height subimage to the atlas. Upon success it returns 49 // Adds a width x height subimage to the atlas. Upon success it returns
48 // the containing GrPlot and absolute location in the backing texture. 50 // the containing GrPlot and absolute location in the backing texture.
49 // nullptr is returned if the subimage cannot fit in the atlas. 51 // nullptr is returned if the subimage cannot fit in the atlas.
50 // If provided, the image data will be written to the CPU-side backing bitma p. 52 // If provided, the image data will be written to the CPU-side backing bitma p.
51 // NOTE: If the client intends to refer to the atlas, they should immediatel y call 'setUseToken' 53 // NOTE: If the client intends to refer to the atlas, they should immediatel y call 'setUseToken'
52 // with the currentToken from the batch target, otherwise the next call to a ddToAtlas might 54 // with the currentToken from the batch target, otherwise the next call to a ddToAtlas might
53 // cause an eviction 55 // cause an eviction
54 bool addToAtlas(AtlasID*, GrDrawBatch::Target*, int width, int height, const void* image, 56 bool addToAtlas(AtlasID*, GrDrawBatch::Target*, int width, int height, const void* image,
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
165 // To manage the lifetime of a plot, we use two tokens. We use the last upload token to 167 // To manage the lifetime of a plot, we use two tokens. We use the last upload token to
166 // know when we can 'piggy back' uploads, ie if the last upload hasn't b een flushed to gpu, 168 // know when we can 'piggy back' uploads, ie if the last upload hasn't b een flushed to gpu,
167 // we don't need to issue a new upload even if we update the cpu backing store. We use 169 // we don't need to issue a new upload even if we update the cpu backing store. We use
168 // lastUse to determine when we can evict a plot from the cache, ie if t he last use has 170 // lastUse to determine when we can evict a plot from the cache, ie if t he last use has
169 // already flushed through the gpu then we can reuse the plot. 171 // already flushed through the gpu then we can reuse the plot.
170 GrBatchDrawToken lastUploadToken() const { return fLastUpload; } 172 GrBatchDrawToken lastUploadToken() const { return fLastUpload; }
171 GrBatchDrawToken lastUseToken() const { return fLastUse; } 173 GrBatchDrawToken lastUseToken() const { return fLastUse; }
172 void setLastUploadToken(GrBatchDrawToken batchToken) { fLastUpload = bat chToken; } 174 void setLastUploadToken(GrBatchDrawToken batchToken) { fLastUpload = bat chToken; }
173 void setLastUseToken(GrBatchDrawToken batchToken) { fLastUse = batchToke n; } 175 void setLastUseToken(GrBatchDrawToken batchToken) { fLastUse = batchToke n; }
174 176
175 void uploadToTexture(GrDrawBatch::WritePixelsFn&, GrTexture* texture); 177 void uploadToTexture(GrDrawBatch::WritePixelsFn&, GrDrawBatch::TransferP ixelsFn&,
178 GrTexture* texture);
176 void resetRects(); 179 void resetRects();
177 180
178 private: 181 private:
179 BatchPlot(int index, uint64_t genID, int offX, int offY, int width, int height, 182 BatchPlot(int index, uint64_t genID, int offX, int offY, int width, int height,
180 GrPixelConfig config); 183 GrPixelConfig config, GrResourceProvider* rp);
181 184
182 ~BatchPlot() override; 185 ~BatchPlot() override;
183 186
184 // Create a clone of this plot. The cloned plot will take the place of t he 187 // Create a clone of this plot. The cloned plot will take the place of t he
185 // current plot in the atlas. 188 // current plot in the atlas.
186 BatchPlot* clone() const { 189 BatchPlot* clone() const {
187 return new BatchPlot(fIndex, fGenID+1, fX, fY, fWidth, fHeight, fCon fig); 190 return new BatchPlot(fIndex, fGenID+1, fX, fY, fWidth, fHeight, fCon fig,
191 fResourceProvider);
188 } 192 }
189 193
190 static GrBatchAtlas::AtlasID CreateId(uint32_t index, uint64_t generatio n) { 194 static GrBatchAtlas::AtlasID CreateId(uint32_t index, uint64_t generatio n) {
191 SkASSERT(index < (1 << 16)); 195 SkASSERT(index < (1 << 16));
192 SkASSERT(generation < ((uint64_t)1 << 48)); 196 SkASSERT(generation < ((uint64_t)1 << 48));
193 return generation << 16 | index; 197 return generation << 16 | index;
194 } 198 }
195 199
200 // used to create transfer buffers
201 GrResourceProvider* fResourceProvider;
196 GrBatchDrawToken fLastUpload; 202 GrBatchDrawToken fLastUpload;
197 GrBatchDrawToken fLastUse; 203 GrBatchDrawToken fLastUse;
198 204
199 const uint32_t fIndex; 205 const uint32_t fIndex;
200 uint64_t fGenID; 206 uint64_t fGenID;
201 GrBatchAtlas::AtlasID fID; 207 GrBatchAtlas::AtlasID fID;
202 unsigned char* fData; 208 unsigned char* fDataPtr;
209 GrBuffer* fTransferBuffer;
210 GrFence fTransferFence;
203 const int fWidth; 211 const int fWidth;
204 const int fHeight; 212 const int fHeight;
205 const int fX; 213 const int fX;
206 const int fY; 214 const int fY;
207 GrRectanizer* fRects; 215 GrRectanizer* fRects;
208 const SkIPoint16 fOffset; // the offset of the plot in the b acking texture 216 const SkIPoint16 fOffset; // the offset of the plot in the b acking texture
209 const GrPixelConfig fConfig; 217 const GrPixelConfig fConfig;
210 const size_t fBytesPerPixel; 218 const size_t fBytesPerPixel;
211 SkIRect fDirtyRect; 219 SkIRect fDirtyRect;
212 SkDEBUGCODE(bool fDirty;) 220 SkDEBUGCODE(bool fDirty;)
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
253 }; 261 };
254 262
255 SkTDArray<EvictionData> fEvictionCallbacks; 263 SkTDArray<EvictionData> fEvictionCallbacks;
256 // allocated array of GrBatchPlots 264 // allocated array of GrBatchPlots
257 SkAutoTUnref<BatchPlot>* fPlotArray; 265 SkAutoTUnref<BatchPlot>* fPlotArray;
258 // LRU list of GrPlots (MRU at head - LRU at tail) 266 // LRU list of GrPlots (MRU at head - LRU at tail)
259 GrBatchPlotList fPlotList; 267 GrBatchPlotList fPlotList;
260 }; 268 };
261 269
262 #endif 270 #endif
OLDNEW
« no previous file with comments | « include/gpu/gl/GrGLTypes.h ('k') | src/gpu/GrBatchAtlas.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698