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

Side by Side Diff: gpu/command_buffer/client/mapped_memory.cc

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
Property Changes:
Added: svn:eol-style
+ LF
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "gpu/command_buffer/client/mapped_memory.h"
6 #include "gpu/command_buffer/client/cmd_buffer_helper.h"
7
8 namespace gpu {
9
10 MemoryChunk::MemoryChunk(
11 int32 shm_id, gpu::Buffer shm, CommandBufferHelper* helper)
12 : shm_id_(shm_id),
13 shm_(shm),
14 allocator_(shm.size, helper, shm.ptr) {
15 }
16
17 void* MappedMemoryManager::Alloc(
18 unsigned int size, int32* shm_id, unsigned int* shm_offset) {
19 DCHECK(shm_id);
20 DCHECK(shm_offset);
21 // See if any of the chucks can satisfy this request.
22 for (size_t ii = 0; ii < chunks_.size(); ++ii) {
23 MemoryChunk* chunk = chunks_[ii].get();
24 chunk->FreeUnused();
25 if (chunk->GetLargestFreeSizeWithoutWaiting() >= size) {
26 void* mem = chunk->Alloc(size);
27 DCHECK(mem);
28 *shm_id = chunk->shm_id();
29 *shm_offset = chunk->GetOffset(mem);
30 return mem;
31 }
32 }
33
34 // Make a new chunk to satisfy the request.
35 CommandBuffer* cmd_buf = helper_->command_buffer();
36 int32 id = cmd_buf->CreateTransferBuffer(size);
37 if (id == -1) {
38 return NULL;
39 }
40 gpu::Buffer shm = cmd_buf->GetTransferBuffer(id);
41 MemoryChunk::Ref mc(new MemoryChunk(id, shm, helper_));
42 chunks_.push_back(mc);
43 void* mem = mc->Alloc(size);
44 DCHECK(mem);
45 *shm_id = mc->shm_id();
46 *shm_offset = mc->GetOffset(mem);
47 return mem;
48 }
49
50 void MappedMemoryManager::Free(void* pointer) {
51 for (size_t ii = 0; ii < chunks_.size(); ++ii) {
52 MemoryChunk* chunk = chunks_[ii].get();
53 if (chunk->IsInChunk(pointer)) {
54 chunk->Free(pointer);
55 return;
56 }
57 }
58 NOTREACHED();
59 }
60
61 void MappedMemoryManager::FreePendingToken(void* pointer, int32 token) {
62 for (size_t ii = 0; ii < chunks_.size(); ++ii) {
63 MemoryChunk* chunk = chunks_[ii].get();
64 if (chunk->IsInChunk(pointer)) {
65 chunk->FreePendingToken(pointer, token);
66 return;
67 }
68 }
69 NOTREACHED();
70 }
71
72 } // namespace gpu
73
74
75
OLDNEW
« no previous file with comments | « gpu/command_buffer/client/mapped_memory.h ('k') | gpu/command_buffer/client/mapped_memory_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698