OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 // A class to emulate GLES2 over command buffers. | 5 // A class to emulate GLES2 over command buffers. |
6 | 6 |
7 #include "gpu/command_buffer/client/gles2_implementation.h" | 7 #include "gpu/command_buffer/client/gles2_implementation.h" |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 #include <map> | 10 #include <map> |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
148 if (!transfer_buffer_->Initialize( | 148 if (!transfer_buffer_->Initialize( |
149 starting_transfer_buffer_size, | 149 starting_transfer_buffer_size, |
150 kStartingOffset, | 150 kStartingOffset, |
151 min_transfer_buffer_size, | 151 min_transfer_buffer_size, |
152 max_transfer_buffer_size, | 152 max_transfer_buffer_size, |
153 kAlignment, | 153 kAlignment, |
154 kSizeToFlush)) { | 154 kSizeToFlush)) { |
155 return false; | 155 return false; |
156 } | 156 } |
157 | 157 |
158 mapped_memory_.reset(new MappedMemoryManager(helper_, mapped_memory_limit)); | 158 MappedMemoryManagerSettings mapped_memory_settings; |
| 159 mapped_memory_settings.unused_memory_reclaim_limit = |
| 160 mapped_memory_limit; |
| 161 mapped_memory_settings.aggressive_reuse = false; |
| 162 mapped_memory_.reset(new MappedMemoryManager( |
| 163 helper_, mapped_memory_settings)); |
159 | 164 |
| 165 MappedMemoryManagerSettings transfer_buffer_memory_settings; |
| 166 transfer_buffer_memory_settings.unused_memory_reclaim_limit = |
| 167 mapped_memory_limit; |
| 168 transfer_buffer_memory_settings.aggressive_reuse = true; |
| 169 transfer_buffer_memory_.reset(new MappedMemoryManager( |
| 170 helper_, transfer_buffer_memory_settings)); |
| 171 |
| 172 // Set the chunk size of transfer buffer chunks. Let the generic memory |
| 173 // manager allocate chunks to be as small as possible, i.e. the default size |
| 174 // multiple 1. |
160 unsigned chunk_size = 2 * 1024 * 1024; | 175 unsigned chunk_size = 2 * 1024 * 1024; |
161 if (mapped_memory_limit != kNoLimit) { | 176 if (mapped_memory_limit != kNoLimit) { |
162 // Use smaller chunks if the client is very memory conscientious. | 177 // Use smaller chunks if the client is very memory conscientious. |
163 chunk_size = std::min(mapped_memory_limit / 4, chunk_size); | 178 chunk_size = std::min(mapped_memory_limit / 4, chunk_size); |
164 } | 179 } |
165 mapped_memory_->set_chunk_size_multiple(chunk_size); | 180 transfer_buffer_memory_->set_chunk_size_multiple(chunk_size); |
166 | 181 |
167 if (!QueryAndCacheStaticState()) | 182 if (!QueryAndCacheStaticState()) |
168 return false; | 183 return false; |
169 | 184 |
170 util_.set_num_compressed_texture_formats( | 185 util_.set_num_compressed_texture_formats( |
171 static_state_.int_state.num_compressed_texture_formats); | 186 static_state_.int_state.num_compressed_texture_formats); |
172 util_.set_num_shader_binary_formats( | 187 util_.set_num_shader_binary_formats( |
173 static_state_.int_state.num_shader_binary_formats); | 188 static_state_.int_state.num_shader_binary_formats); |
174 | 189 |
175 texture_units_.reset( | 190 texture_units_.reset( |
176 new TextureUnit[ | 191 new TextureUnit[ |
177 static_state_.int_state.max_combined_texture_image_units]); | 192 static_state_.int_state.max_combined_texture_image_units]); |
178 | 193 |
179 query_tracker_.reset(new QueryTracker(mapped_memory_.get())); | 194 query_tracker_.reset(new QueryTracker(mapped_memory_.get())); |
180 buffer_tracker_.reset(new BufferTracker(mapped_memory_.get())); | 195 buffer_tracker_.reset(new BufferTracker(transfer_buffer_memory_.get())); |
181 gpu_memory_buffer_tracker_.reset(new GpuMemoryBufferTracker(gpu_control_)); | 196 gpu_memory_buffer_tracker_.reset(new GpuMemoryBufferTracker(gpu_control_)); |
182 | 197 |
183 #if defined(GLES2_SUPPORT_CLIENT_SIDE_ARRAYS) | 198 #if defined(GLES2_SUPPORT_CLIENT_SIDE_ARRAYS) |
184 GetIdHandler(id_namespaces::kBuffers)->MakeIds( | 199 GetIdHandler(id_namespaces::kBuffers)->MakeIds( |
185 this, kClientSideArrayId, arraysize(reserved_ids_), &reserved_ids_[0]); | 200 this, kClientSideArrayId, arraysize(reserved_ids_), &reserved_ids_[0]); |
186 #endif | 201 #endif |
187 | 202 |
188 vertex_array_object_manager_.reset(new VertexArrayObjectManager( | 203 vertex_array_object_manager_.reset(new VertexArrayObjectManager( |
189 static_state_.int_state.max_vertex_attribs, | 204 static_state_.int_state.max_vertex_attribs, |
190 reserved_ids_[0], | 205 reserved_ids_[0], |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
297 int32 GLES2Implementation::GetResultShmId() { | 312 int32 GLES2Implementation::GetResultShmId() { |
298 return transfer_buffer_->GetShmId(); | 313 return transfer_buffer_->GetShmId(); |
299 } | 314 } |
300 | 315 |
301 uint32 GLES2Implementation::GetResultShmOffset() { | 316 uint32 GLES2Implementation::GetResultShmOffset() { |
302 return transfer_buffer_->GetResultOffset(); | 317 return transfer_buffer_->GetResultOffset(); |
303 } | 318 } |
304 | 319 |
305 void GLES2Implementation::FreeUnusedSharedMemory() { | 320 void GLES2Implementation::FreeUnusedSharedMemory() { |
306 mapped_memory_->FreeUnused(); | 321 mapped_memory_->FreeUnused(); |
| 322 transfer_buffer_memory_->FreeUnused(); |
307 } | 323 } |
308 | 324 |
309 void GLES2Implementation::FreeEverything() { | 325 void GLES2Implementation::FreeEverything() { |
310 WaitForCmd(); | 326 WaitForCmd(); |
311 query_tracker_->Shrink(); | 327 query_tracker_->Shrink(); |
312 FreeUnusedSharedMemory(); | 328 FreeUnusedSharedMemory(); |
313 transfer_buffer_->Free(); | 329 transfer_buffer_->Free(); |
314 helper_->FreeRingBuffer(); | 330 helper_->FreeRingBuffer(); |
315 } | 331 } |
316 | 332 |
(...skipping 3598 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3915 CheckGLError(); | 3931 CheckGLError(); |
3916 } | 3932 } |
3917 | 3933 |
3918 // Include the auto-generated part of this file. We split this because it means | 3934 // Include the auto-generated part of this file. We split this because it means |
3919 // we can easily edit the non-auto generated parts right here in this file | 3935 // we can easily edit the non-auto generated parts right here in this file |
3920 // instead of having to edit some template or the code generator. | 3936 // instead of having to edit some template or the code generator. |
3921 #include "gpu/command_buffer/client/gles2_implementation_impl_autogen.h" | 3937 #include "gpu/command_buffer/client/gles2_implementation_impl_autogen.h" |
3922 | 3938 |
3923 } // namespace gles2 | 3939 } // namespace gles2 |
3924 } // namespace gpu | 3940 } // namespace gpu |
OLD | NEW |