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

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

Issue 1126753003: Reduce the API surface of GrBufferAllocPool and its derivatives (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 5 years, 7 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 | src/gpu/GrBufferAllocPool.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 2010 Google Inc. 2 * Copyright 2010 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 GrBufferAllocPool_DEFINED 8 #ifndef GrBufferAllocPool_DEFINED
9 #define GrBufferAllocPool_DEFINED 9 #define GrBufferAllocPool_DEFINED
10 10
(...skipping 23 matching lines...) Expand all
34 * Call before drawing using buffers from the pool. 34 * Call before drawing using buffers from the pool.
35 */ 35 */
36 void unmap(); 36 void unmap();
37 37
38 /** 38 /**
39 * Invalidates all the data in the pool, unrefs non-preallocated buffers. 39 * Invalidates all the data in the pool, unrefs non-preallocated buffers.
40 */ 40 */
41 void reset(); 41 void reset();
42 42
43 /** 43 /**
44 * Gets the number of preallocated buffers that are yet to be used.
45 */
46 int preallocatedBuffersRemaining() const;
47
48 /**
49 * gets the number of preallocated buffers
50 */
51 int preallocatedBufferCount() const;
52
53 /**
54 * Frees data from makeSpaces in LIFO order. 44 * Frees data from makeSpaces in LIFO order.
55 */ 45 */
56 void putBack(size_t bytes); 46 void putBack(size_t bytes);
57 47
58 /**
59 * Gets the GrGpu that this pool is associated with.
60 */
61 GrGpu* getGpu() { return fGpu; }
62
63 protected: 48 protected:
64 /** 49 /**
65 * Used to determine what type of buffers to create. We could make the 50 * Used to determine what type of buffers to create. We could make the
66 * createBuffer a virtual except that we want to use it in the cons for 51 * createBuffer a virtual except that we want to use it in the cons for
67 * pre-allocated buffers. 52 * pre-allocated buffers.
68 */ 53 */
69 enum BufferType { 54 enum BufferType {
70 kVertex_BufferType, 55 kVertex_BufferType,
71 kIndex_BufferType, 56 kIndex_BufferType,
72 }; 57 };
(...skipping 11 matching lines...) Expand all
84 * is destroyed. 69 * is destroyed.
85 */ 70 */
86 GrBufferAllocPool(GrGpu* gpu, 71 GrBufferAllocPool(GrGpu* gpu,
87 BufferType bufferType, 72 BufferType bufferType,
88 size_t bufferSize = 0, 73 size_t bufferSize = 0,
89 int preallocBufferCnt = 0); 74 int preallocBufferCnt = 0);
90 75
91 virtual ~GrBufferAllocPool(); 76 virtual ~GrBufferAllocPool();
92 77
93 /** 78 /**
94 * Gets the size of the preallocated buffers.
95 *
96 * @return the size of preallocated buffers.
97 */
98 size_t preallocatedBufferSize() const {
99 return fPreallocBuffers.count() ? fMinBlockSize : 0;
100 }
101
102 /**
103 * Returns a block of memory to hold data. A buffer designated to hold the 79 * Returns a block of memory to hold data. A buffer designated to hold the
104 * data is given to the caller. The buffer may or may not be locked. The 80 * data is given to the caller. The buffer may or may not be locked. The
105 * returned ptr remains valid until any of the following: 81 * returned ptr remains valid until any of the following:
106 * *makeSpace is called again. 82 * *makeSpace is called again.
107 * *unmap is called. 83 * *unmap is called.
108 * *reset is called. 84 * *reset is called.
109 * *this object is destroyed. 85 * *this object is destroyed.
110 * 86 *
111 * Once unmap on the pool is called the data is guaranteed to be in the 87 * Once unmap on the pool is called the data is guaranteed to be in the
112 * buffer at the offset indicated by offset. Until that time it may be 88 * buffer at the offset indicated by offset. Until that time it may be
113 * in temporary storage and/or the buffer may be locked. 89 * in temporary storage and/or the buffer may be locked.
114 * 90 *
115 * @param size the amount of data to make space for 91 * @param size the amount of data to make space for
116 * @param alignment alignment constraint from start of buffer 92 * @param alignment alignment constraint from start of buffer
117 * @param buffer returns the buffer that will hold the data. 93 * @param buffer returns the buffer that will hold the data.
118 * @param offset returns the offset into buffer of the data. 94 * @param offset returns the offset into buffer of the data.
119 * @return pointer to where the client should write the data. 95 * @return pointer to where the client should write the data.
120 */ 96 */
121 void* makeSpace(size_t size, 97 void* makeSpace(size_t size,
122 size_t alignment, 98 size_t alignment,
123 const GrGeometryBuffer** buffer, 99 const GrGeometryBuffer** buffer,
124 size_t* offset); 100 size_t* offset);
125 101
126 /**
127 * Gets the number of items of a size that can be added to the current
128 * buffer without spilling to another buffer. If the pool has been reset, or
129 * the previous makeSpace completely exhausted a buffer then the returned
130 * size will be the size of the next available preallocated buffer, or zero
131 * if no preallocated buffer remains available. It is assumed that items
132 * should be itemSize-aligned from the start of a buffer.
133 *
134 * @return the number of items that would fit in the current buffer.
135 */
136 int currentBufferItems(size_t itemSize) const;
137
138 GrGeometryBuffer* createBuffer(size_t size); 102 GrGeometryBuffer* createBuffer(size_t size);
139 103
140 private: 104 private:
141
142 // The GrGpu must be able to clear the ref of pools it creates as members
143 friend class GrGpu;
144
145 struct BufferBlock { 105 struct BufferBlock {
146 size_t fBytesFree; 106 size_t fBytesFree;
147 GrGeometryBuffer* fBuffer; 107 GrGeometryBuffer* fBuffer;
148 }; 108 };
149 109
150 bool createBlock(size_t requestSize); 110 bool createBlock(size_t requestSize);
151 void destroyBlock(); 111 void destroyBlock();
152 void flushCpuData(const BufferBlock& block, size_t flushSize); 112 void flushCpuData(const BufferBlock& block, size_t flushSize);
153 #ifdef SK_DEBUG 113 #ifdef SK_DEBUG
154 void validate(bool unusedBlockAllowed = false) const; 114 void validate(bool unusedBlockAllowed = false) const;
(...skipping 19 matching lines...) Expand all
174 134
175 /** 135 /**
176 * A GrBufferAllocPool of vertex buffers 136 * A GrBufferAllocPool of vertex buffers
177 */ 137 */
178 class GrVertexBufferAllocPool : public GrBufferAllocPool { 138 class GrVertexBufferAllocPool : public GrBufferAllocPool {
179 public: 139 public:
180 /** 140 /**
181 * Constructor 141 * Constructor
182 * 142 *
183 * @param gpu The GrGpu used to create the vertex buffers. 143 * @param gpu The GrGpu used to create the vertex buffers.
184 * @param bufferSize The minimum size of created VBs This value 144 * @param bufferSize The minimum size of created VBs. This value
185 * will be clamped to some reasonable minimum. 145 * will be clamped to some reasonable minimum.
186 * @param preallocBufferCnt The pool will allocate this number of VBs at 146 * @param preallocBufferCnt The pool will allocate this number of VBs at
187 * bufferSize and keep them until it is 147 * bufferSize and keep them until it is
188 * destroyed. 148 * destroyed.
189 */ 149 */
190 GrVertexBufferAllocPool(GrGpu* gpu, size_t bufferSize = 0, int preallocBuffe rCnt = 0); 150 GrVertexBufferAllocPool(GrGpu* gpu, size_t bufferSize = 0, int preallocBuffe rCnt = 0);
191 151
192 /** 152 /**
193 * Returns a block of memory to hold vertices. A buffer designated to hold 153 * Returns a block of memory to hold vertices. A buffer designated to hold
194 * the vertices given to the caller. The buffer may or may not be locked. 154 * the vertices given to the caller. The buffer may or may not be locked.
(...skipping 13 matching lines...) Expand all
208 * vertices. 168 * vertices.
209 * @param startVertex returns the offset into buffer of the first vertex. 169 * @param startVertex returns the offset into buffer of the first vertex.
210 * In units of the size of a vertex from layout param. 170 * In units of the size of a vertex from layout param.
211 * @return pointer to first vertex. 171 * @return pointer to first vertex.
212 */ 172 */
213 void* makeSpace(size_t vertexSize, 173 void* makeSpace(size_t vertexSize,
214 int vertexCount, 174 int vertexCount,
215 const GrVertexBuffer** buffer, 175 const GrVertexBuffer** buffer,
216 int* startVertex); 176 int* startVertex);
217 177
218 /**
219 * Gets the number of vertices that can be added to the current VB without
220 * spilling to another VB. If the pool has been reset, or the previous
221 * makeSpace completely exhausted a VB then the returned number of vertices
222 * would fit in the next available preallocated buffer. If any makeSpace
223 * would force a new VB to be created the return value will be zero.
224 *
225 * @param the size of a vertex to compute space for.
226 * @return the number of vertices that would fit in the current buffer.
227 */
228 int currentBufferVertices(size_t vertexSize) const;
229
230 /**
231 * Gets the number of vertices that can fit in a preallocated vertex buffer .
232 * Zero if no preallocated buffers.
233 *
234 * @param the size of a vertex to compute space for.
235 *
236 * @return number of vertices that fit in one of the preallocated vertex
237 * buffers.
238 */
239 int preallocatedBufferVertices(size_t vertexSize) const;
240
241 private: 178 private:
242 typedef GrBufferAllocPool INHERITED; 179 typedef GrBufferAllocPool INHERITED;
243 }; 180 };
244 181
245 class GrIndexBuffer; 182 class GrIndexBuffer;
246 183
247 /** 184 /**
248 * A GrBufferAllocPool of index buffers 185 * A GrBufferAllocPool of index buffers
249 */ 186 */
250 class GrIndexBufferAllocPool : public GrBufferAllocPool { 187 class GrIndexBufferAllocPool : public GrBufferAllocPool {
251 public: 188 public:
252 /** 189 /**
253 * Constructor 190 * Constructor
254 * 191 *
255 * @param gpu The GrGpu used to create the index buffers. 192 * @param gpu The GrGpu used to create the index buffers.
256 * @param bufferSize The minimum size of created IBs This value 193 * @param bufferSize The minimum size of created IBs. This value
257 * will be clamped to some reasonable minimum. 194 * will be clamped to some reasonable minimum.
258 * @param preallocBufferCnt The pool will allocate this number of VBs at 195 * @param preallocBufferCnt The pool will allocate this number of VBs at
259 * bufferSize and keep them until it is 196 * bufferSize and keep them until it is
260 * destroyed. 197 * destroyed.
261 */ 198 */
262 GrIndexBufferAllocPool(GrGpu* gpu, 199 GrIndexBufferAllocPool(GrGpu* gpu,
263 size_t bufferSize = 0, 200 size_t bufferSize = 0,
264 int preallocBufferCnt = 0); 201 int preallocBufferCnt = 0);
265 202
266 /** 203 /**
(...skipping 11 matching lines...) Expand all
278 * 215 *
279 * @param indexCount number of indices to allocate space for 216 * @param indexCount number of indices to allocate space for
280 * @param buffer returns the index buffer that will hold the indices. 217 * @param buffer returns the index buffer that will hold the indices.
281 * @param startIndex returns the offset into buffer of the first index. 218 * @param startIndex returns the offset into buffer of the first index.
282 * @return pointer to first index. 219 * @return pointer to first index.
283 */ 220 */
284 void* makeSpace(int indexCount, 221 void* makeSpace(int indexCount,
285 const GrIndexBuffer** buffer, 222 const GrIndexBuffer** buffer,
286 int* startIndex); 223 int* startIndex);
287 224
288 /**
289 * Gets the number of indices that can be added to the current IB without
290 * spilling to another IB. If the pool has been reset, or the previous
291 * makeSpace completely exhausted a IB then the returned number of indices
292 * would fit in the next available preallocated buffer. If any makeSpace
293 * would force a new IB to be created the return value will be zero.
294 */
295 int currentBufferIndices() const;
296
297 /**
298 * Gets the number of indices that can fit in a preallocated index buffer.
299 * Zero if no preallocated buffers.
300 *
301 * @return number of indices that fit in one of the preallocated index
302 * buffers.
303 */
304 int preallocatedBufferIndices() const;
305
306 private: 225 private:
307 typedef GrBufferAllocPool INHERITED; 226 typedef GrBufferAllocPool INHERITED;
308 }; 227 };
309 228
310 #endif 229 #endif
OLDNEW
« no previous file with comments | « no previous file | src/gpu/GrBufferAllocPool.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698