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

Side by Side Diff: gpu/command_buffer/client/fenced_allocator.h

Issue 2956005: Adds MapBufferSubData and MapTexSubImage2D.... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 10 years, 5 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // This file contains the definition of the FencedAllocator class. 5 // This file contains the definition of the FencedAllocator class.
6 6
7 #ifndef GPU_COMMAND_BUFFER_CLIENT_FENCED_ALLOCATOR_H_ 7 #ifndef GPU_COMMAND_BUFFER_CLIENT_FENCED_ALLOCATOR_H_
8 #define GPU_COMMAND_BUFFER_CLIENT_FENCED_ALLOCATOR_H_ 8 #define GPU_COMMAND_BUFFER_CLIENT_FENCED_ALLOCATOR_H_
9 9
10 #include <vector> 10 #include <vector>
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 // Parameters: 58 // Parameters:
59 // offset: the offset of the memory block to free. 59 // offset: the offset of the memory block to free.
60 void Free(Offset offset); 60 void Free(Offset offset);
61 61
62 // Frees a block of memory, pending the passage of a token. That memory won't 62 // Frees a block of memory, pending the passage of a token. That memory won't
63 // be re-allocated until the token has passed through the command stream. 63 // be re-allocated until the token has passed through the command stream.
64 // 64 //
65 // Parameters: 65 // Parameters:
66 // offset: the offset of the memory block to free. 66 // offset: the offset of the memory block to free.
67 // token: the token value to wait for before re-using the memory. 67 // token: the token value to wait for before re-using the memory.
68 void FreePendingToken(Offset offset, unsigned int token); 68 void FreePendingToken(Offset offset, int32 token);
69
70 // Frees any blocks pending a token for which the token has been read.
71 void FreeUnused();
69 72
70 // Gets the size of the largest free block that is available without waiting. 73 // Gets the size of the largest free block that is available without waiting.
71 unsigned int GetLargestFreeSize(); 74 unsigned int GetLargestFreeSize();
72 75
73 // Gets the size of the largest free block that can be allocated if the 76 // Gets the size of the largest free block that can be allocated if the
74 // caller can wait. Allocating a block of this size will succeed, but may 77 // caller can wait. Allocating a block of this size will succeed, but may
75 // block. 78 // block.
76 unsigned int GetLargestFreeOrPendingSize(); 79 unsigned int GetLargestFreeOrPendingSize();
77 80
78 // Checks for consistency inside the book-keeping structures. Used for 81 // Checks for consistency inside the book-keeping structures. Used for
79 // testing. 82 // testing.
80 bool CheckConsistency(); 83 bool CheckConsistency();
81 84
82 private: 85 private:
83 // Status of a block of memory, for book-keeping. 86 // Status of a block of memory, for book-keeping.
84 enum State { 87 enum State {
85 IN_USE, 88 IN_USE,
86 FREE, 89 FREE,
87 FREE_PENDING_TOKEN 90 FREE_PENDING_TOKEN
88 }; 91 };
89 92
90 // Book-keeping sturcture that describes a block of memory. 93 // Book-keeping sturcture that describes a block of memory.
91 struct Block { 94 struct Block {
92 State state; 95 State state;
93 Offset offset; 96 Offset offset;
94 unsigned int size; 97 unsigned int size;
95 unsigned int token; // token to wait for in the FREE_PENDING_TOKEN case. 98 int32 token; // token to wait for in the FREE_PENDING_TOKEN case.
96 }; 99 };
97 100
98 // Comparison functor for memory block sorting. 101 // Comparison functor for memory block sorting.
99 class OffsetCmp { 102 class OffsetCmp {
100 public: 103 public:
101 bool operator() (const Block &left, const Block &right) { 104 bool operator() (const Block &left, const Block &right) {
102 return left.offset < right.offset; 105 return left.offset < right.offset;
103 } 106 }
104 }; 107 };
105 108
106 typedef std::vector<Block> Container; 109 typedef std::vector<Block> Container;
107 typedef unsigned int BlockIndex; 110 typedef unsigned int BlockIndex;
108 111
109 static const unsigned int kUnusedToken = 0; 112 static const int32 kUnusedToken = 0;
110 113
111 // Gets the index of a memory block, given its offset. 114 // Gets the index of a memory block, given its offset.
112 BlockIndex GetBlockByOffset(Offset offset); 115 BlockIndex GetBlockByOffset(Offset offset);
113 116
114 // Collapse a free block with its neighbours if they are free. Returns the 117 // Collapse a free block with its neighbours if they are free. Returns the
115 // index of the collapsed block. 118 // index of the collapsed block.
116 // NOTE: this will invalidate block indices. 119 // NOTE: this will invalidate block indices.
117 BlockIndex CollapseFreeBlock(BlockIndex index); 120 BlockIndex CollapseFreeBlock(BlockIndex index);
118 121
119 // Waits for a FREE_PENDING_TOKEN block to be usable, and free it. Returns 122 // Waits for a FREE_PENDING_TOKEN block to be usable, and free it. Returns
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
182 DCHECK(pointer); 185 DCHECK(pointer);
183 allocator_.Free(GetOffset(pointer)); 186 allocator_.Free(GetOffset(pointer));
184 } 187 }
185 188
186 // Frees a block of memory, pending the passage of a token. That memory won't 189 // Frees a block of memory, pending the passage of a token. That memory won't
187 // be re-allocated until the token has passed through the command stream. 190 // be re-allocated until the token has passed through the command stream.
188 // 191 //
189 // Parameters: 192 // Parameters:
190 // pointer: the pointer to the memory block to free. 193 // pointer: the pointer to the memory block to free.
191 // token: the token value to wait for before re-using the memory. 194 // token: the token value to wait for before re-using the memory.
192 void FreePendingToken(void *pointer, unsigned int token) { 195 void FreePendingToken(void *pointer, int32 token) {
193 DCHECK(pointer); 196 DCHECK(pointer);
194 allocator_.FreePendingToken(GetOffset(pointer), token); 197 allocator_.FreePendingToken(GetOffset(pointer), token);
195 } 198 }
196 199
200 // Frees any blocks pending a token for which the token has been read.
201 void FreeUnused() {
202 allocator_.FreeUnused();
203 }
204
197 // Gets a pointer to a memory block given the base memory and the offset. 205 // Gets a pointer to a memory block given the base memory and the offset.
198 // It translates FencedAllocator::kInvalidOffset to NULL. 206 // It translates FencedAllocator::kInvalidOffset to NULL.
199 void *GetPointer(FencedAllocator::Offset offset) { 207 void *GetPointer(FencedAllocator::Offset offset) {
200 return (offset == FencedAllocator::kInvalidOffset) ? 208 return (offset == FencedAllocator::kInvalidOffset) ?
201 NULL : static_cast<char *>(base_) + offset; 209 NULL : static_cast<char *>(base_) + offset;
202 } 210 }
203 211
204 // Gets the offset to a memory block given the base memory and the address. 212 // Gets the offset to a memory block given the base memory and the address.
205 // It translates NULL to FencedAllocator::kInvalidOffset. 213 // It translates NULL to FencedAllocator::kInvalidOffset.
206 FencedAllocator::Offset GetOffset(void *pointer) { 214 FencedAllocator::Offset GetOffset(void *pointer) {
(...skipping 22 matching lines...) Expand all
229 237
230 private: 238 private:
231 FencedAllocator allocator_; 239 FencedAllocator allocator_;
232 void* base_; 240 void* base_;
233 DISALLOW_IMPLICIT_CONSTRUCTORS(FencedAllocatorWrapper); 241 DISALLOW_IMPLICIT_CONSTRUCTORS(FencedAllocatorWrapper);
234 }; 242 };
235 243
236 } // namespace gpu 244 } // namespace gpu
237 245
238 #endif // GPU_COMMAND_BUFFER_CLIENT_FENCED_ALLOCATOR_H_ 246 #endif // GPU_COMMAND_BUFFER_CLIENT_FENCED_ALLOCATOR_H_
OLDNEW
« no previous file with comments | « gpu/command_buffer/client/cmd_buffer_helper.h ('k') | gpu/command_buffer/client/fenced_allocator.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698