OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2010 Google Inc. | 3 * Copyright 2010 Google Inc. |
4 * | 4 * |
5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
7 */ | 7 */ |
8 | 8 |
9 | 9 |
10 #include "GrBufferAllocPool.h" | 10 #include "GrBufferAllocPool.h" |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
124 size_t flushSize = block.fBuffer->gpuMemorySize() - block.fBytesFree
; | 124 size_t flushSize = block.fBuffer->gpuMemorySize() - block.fBytesFree
; |
125 this->flushCpuData(fBlocks.back(), flushSize); | 125 this->flushCpuData(fBlocks.back(), flushSize); |
126 } | 126 } |
127 fBufferPtr = NULL; | 127 fBufferPtr = NULL; |
128 } | 128 } |
129 VALIDATE(); | 129 VALIDATE(); |
130 } | 130 } |
131 | 131 |
132 #ifdef SK_DEBUG | 132 #ifdef SK_DEBUG |
133 void GrBufferAllocPool::validate(bool unusedBlockAllowed) const { | 133 void GrBufferAllocPool::validate(bool unusedBlockAllowed) const { |
| 134 bool wasDestroyed = false; |
134 if (fBufferPtr) { | 135 if (fBufferPtr) { |
135 SkASSERT(!fBlocks.empty()); | 136 SkASSERT(!fBlocks.empty()); |
136 if (fBlocks.back().fBuffer->isMapped()) { | 137 if (fBlocks.back().fBuffer->isMapped()) { |
137 GrGeometryBuffer* buf = fBlocks.back().fBuffer; | 138 GrGeometryBuffer* buf = fBlocks.back().fBuffer; |
138 SkASSERT(buf->mapPtr() == fBufferPtr); | 139 SkASSERT(buf->mapPtr() == fBufferPtr); |
139 } else { | 140 } else { |
140 SkASSERT(fCpuData.get() == fBufferPtr); | 141 SkASSERT(fCpuData.get() == fBufferPtr); |
141 } | 142 } |
142 } else { | 143 } else { |
143 SkASSERT(fBlocks.empty() || !fBlocks.back().fBuffer->isMapped()); | 144 SkASSERT(fBlocks.empty() || !fBlocks.back().fBuffer->isMapped()); |
144 } | 145 } |
145 size_t bytesInUse = 0; | 146 size_t bytesInUse = 0; |
146 for (int i = 0; i < fBlocks.count() - 1; ++i) { | 147 for (int i = 0; i < fBlocks.count() - 1; ++i) { |
147 SkASSERT(!fBlocks[i].fBuffer->isMapped()); | 148 SkASSERT(!fBlocks[i].fBuffer->isMapped()); |
148 } | 149 } |
149 for (int i = 0; i < fBlocks.count(); ++i) { | 150 for (int i = 0; !wasDestroyed && i < fBlocks.count(); ++i) { |
150 size_t bytes = fBlocks[i].fBuffer->gpuMemorySize() - fBlocks[i].fBytesFr
ee; | 151 if (fBlocks[i].fBuffer->wasDestroyed()) { |
151 bytesInUse += bytes; | 152 wasDestroyed = true; |
152 SkASSERT(bytes || unusedBlockAllowed); | 153 } else { |
| 154 size_t bytes = fBlocks[i].fBuffer->gpuMemorySize() - fBlocks[i].fByt
esFree; |
| 155 bytesInUse += bytes; |
| 156 SkASSERT(bytes || unusedBlockAllowed); |
| 157 } |
153 } | 158 } |
154 | 159 |
155 SkASSERT(bytesInUse == fBytesInUse); | 160 if (!wasDestroyed) { |
156 if (unusedBlockAllowed) { | 161 SkASSERT(bytesInUse == fBytesInUse); |
157 SkASSERT((fBytesInUse && !fBlocks.empty()) || | 162 if (unusedBlockAllowed) { |
158 (!fBytesInUse && (fBlocks.count() < 2))); | 163 SkASSERT((fBytesInUse && !fBlocks.empty()) || |
159 } else { | 164 (!fBytesInUse && (fBlocks.count() < 2))); |
160 SkASSERT((0 == fBytesInUse) == fBlocks.empty()); | 165 } else { |
| 166 SkASSERT((0 == fBytesInUse) == fBlocks.empty()); |
| 167 } |
161 } | 168 } |
162 } | 169 } |
163 #endif | 170 #endif |
164 | 171 |
165 void* GrBufferAllocPool::makeSpace(size_t size, | 172 void* GrBufferAllocPool::makeSpace(size_t size, |
166 size_t alignment, | 173 size_t alignment, |
167 const GrGeometryBuffer** buffer, | 174 const GrGeometryBuffer** buffer, |
168 size_t* offset) { | 175 size_t* offset) { |
169 VALIDATE(); | 176 VALIDATE(); |
170 | 177 |
(...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
461 return ptr; | 468 return ptr; |
462 } | 469 } |
463 | 470 |
464 int GrIndexBufferAllocPool::preallocatedBufferIndices() const { | 471 int GrIndexBufferAllocPool::preallocatedBufferIndices() const { |
465 return static_cast<int>(INHERITED::preallocatedBufferSize() / sizeof(uint16_
t)); | 472 return static_cast<int>(INHERITED::preallocatedBufferSize() / sizeof(uint16_
t)); |
466 } | 473 } |
467 | 474 |
468 int GrIndexBufferAllocPool::currentBufferIndices() const { | 475 int GrIndexBufferAllocPool::currentBufferIndices() const { |
469 return currentBufferItems(sizeof(uint16_t)); | 476 return currentBufferItems(sizeof(uint16_t)); |
470 } | 477 } |
OLD | NEW |