| 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> |
| 11 #include <queue> | 11 #include <queue> |
| 12 #include <set> | 12 #include <set> |
| 13 #include <limits> | 13 #include <limits> |
| 14 #include <stdio.h> | 14 #include <stdio.h> |
| 15 #include <string.h> | 15 #include <string.h> |
| 16 #include <GLES2/gl2ext.h> | 16 #include <GLES2/gl2ext.h> |
| 17 #include <GLES2/gl2extchromium.h> | 17 #include <GLES2/gl2extchromium.h> |
| 18 #include "gpu/command_buffer/client/buffer_tracker.h" | 18 #include "gpu/command_buffer/client/buffer_tracker.h" |
| 19 #include "gpu/command_buffer/client/gpu_memory_buffer_tracker.h" | 19 #include "gpu/command_buffer/client/gpu_memory_buffer_tracker.h" |
| 20 #include "gpu/command_buffer/client/mapped_memory.h" | |
| 21 #include "gpu/command_buffer/client/program_info_manager.h" | 20 #include "gpu/command_buffer/client/program_info_manager.h" |
| 22 #include "gpu/command_buffer/client/query_tracker.h" | 21 #include "gpu/command_buffer/client/query_tracker.h" |
| 23 #include "gpu/command_buffer/client/transfer_buffer.h" | 22 #include "gpu/command_buffer/client/transfer_buffer.h" |
| 24 #include "gpu/command_buffer/client/vertex_array_object_manager.h" | 23 #include "gpu/command_buffer/client/vertex_array_object_manager.h" |
| 25 #include "gpu/command_buffer/common/gles2_cmd_utils.h" | 24 #include "gpu/command_buffer/common/gles2_cmd_utils.h" |
| 26 #include "gpu/command_buffer/common/trace_event.h" | 25 #include "gpu/command_buffer/common/trace_event.h" |
| 27 #include "ui/gfx/gpu_memory_buffer.h" | 26 #include "ui/gfx/gpu_memory_buffer.h" |
| 28 | 27 |
| 29 #if defined(__native_client__) && !defined(GLES2_SUPPORT_CLIENT_SIDE_ARRAYS) | 28 #if defined(__native_client__) && !defined(GLES2_SUPPORT_CLIENT_SIDE_ARRAYS) |
| 30 #define GLES2_SUPPORT_CLIENT_SIDE_ARRAYS | 29 #define GLES2_SUPPORT_CLIENT_SIDE_ARRAYS |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 126 | 125 |
| 127 share_group_ = | 126 share_group_ = |
| 128 (share_group ? share_group : new ShareGroup(bind_generates_resource)); | 127 (share_group ? share_group : new ShareGroup(bind_generates_resource)); |
| 129 | 128 |
| 130 memset(&reserved_ids_, 0, sizeof(reserved_ids_)); | 129 memset(&reserved_ids_, 0, sizeof(reserved_ids_)); |
| 131 } | 130 } |
| 132 | 131 |
| 133 bool GLES2Implementation::Initialize( | 132 bool GLES2Implementation::Initialize( |
| 134 unsigned int starting_transfer_buffer_size, | 133 unsigned int starting_transfer_buffer_size, |
| 135 unsigned int min_transfer_buffer_size, | 134 unsigned int min_transfer_buffer_size, |
| 136 unsigned int max_transfer_buffer_size) { | 135 unsigned int max_transfer_buffer_size, |
| 136 unsigned int mapped_memory_limit) { |
| 137 GPU_DCHECK_GE(starting_transfer_buffer_size, min_transfer_buffer_size); | 137 GPU_DCHECK_GE(starting_transfer_buffer_size, min_transfer_buffer_size); |
| 138 GPU_DCHECK_LE(starting_transfer_buffer_size, max_transfer_buffer_size); | 138 GPU_DCHECK_LE(starting_transfer_buffer_size, max_transfer_buffer_size); |
| 139 GPU_DCHECK_GE(min_transfer_buffer_size, kStartingOffset); | 139 GPU_DCHECK_GE(min_transfer_buffer_size, kStartingOffset); |
| 140 | 140 |
| 141 if (!transfer_buffer_->Initialize( | 141 if (!transfer_buffer_->Initialize( |
| 142 starting_transfer_buffer_size, | 142 starting_transfer_buffer_size, |
| 143 kStartingOffset, | 143 kStartingOffset, |
| 144 min_transfer_buffer_size, | 144 min_transfer_buffer_size, |
| 145 max_transfer_buffer_size, | 145 max_transfer_buffer_size, |
| 146 kAlignment, | 146 kAlignment, |
| 147 kSizeToFlush)) { | 147 kSizeToFlush)) { |
| 148 return false; | 148 return false; |
| 149 } | 149 } |
| 150 | 150 |
| 151 mapped_memory_.reset(new MappedMemoryManager(helper_)); | 151 mapped_memory_.reset(new MappedMemoryManager(helper_, mapped_memory_limit)); |
| 152 SetSharedMemoryChunkSizeMultiple(1024 * 1024 * 2); | 152 mapped_memory_->set_chunk_size_multiple(2 * 1024 * 1024); |
| 153 | 153 |
| 154 if (!QueryAndCacheStaticState()) | 154 if (!QueryAndCacheStaticState()) |
| 155 return false; | 155 return false; |
| 156 | 156 |
| 157 util_.set_num_compressed_texture_formats( | 157 util_.set_num_compressed_texture_formats( |
| 158 static_state_.int_state.num_compressed_texture_formats); | 158 static_state_.int_state.num_compressed_texture_formats); |
| 159 util_.set_num_shader_binary_formats( | 159 util_.set_num_shader_binary_formats( |
| 160 static_state_.int_state.num_shader_binary_formats); | 160 static_state_.int_state.num_shader_binary_formats); |
| 161 | 161 |
| 162 texture_units_.reset( | 162 texture_units_.reset( |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 282 } | 282 } |
| 283 | 283 |
| 284 int32 GLES2Implementation::GetResultShmId() { | 284 int32 GLES2Implementation::GetResultShmId() { |
| 285 return transfer_buffer_->GetShmId(); | 285 return transfer_buffer_->GetShmId(); |
| 286 } | 286 } |
| 287 | 287 |
| 288 uint32 GLES2Implementation::GetResultShmOffset() { | 288 uint32 GLES2Implementation::GetResultShmOffset() { |
| 289 return transfer_buffer_->GetResultOffset(); | 289 return transfer_buffer_->GetResultOffset(); |
| 290 } | 290 } |
| 291 | 291 |
| 292 void GLES2Implementation::SetSharedMemoryChunkSizeMultiple( | |
| 293 unsigned int multiple) { | |
| 294 mapped_memory_->set_chunk_size_multiple(multiple); | |
| 295 } | |
| 296 | |
| 297 void GLES2Implementation::FreeUnusedSharedMemory() { | 292 void GLES2Implementation::FreeUnusedSharedMemory() { |
| 298 mapped_memory_->FreeUnused(); | 293 mapped_memory_->FreeUnused(); |
| 299 } | 294 } |
| 300 | 295 |
| 301 void GLES2Implementation::FreeEverything() { | 296 void GLES2Implementation::FreeEverything() { |
| 302 WaitForCmd(); | 297 WaitForCmd(); |
| 303 query_tracker_->Shrink(); | 298 query_tracker_->Shrink(); |
| 304 FreeUnusedSharedMemory(); | 299 FreeUnusedSharedMemory(); |
| 305 transfer_buffer_->Free(); | 300 transfer_buffer_->Free(); |
| 306 helper_->FreeRingBuffer(); | 301 helper_->FreeRingBuffer(); |
| (...skipping 3515 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3822 CheckGLError(); | 3817 CheckGLError(); |
| 3823 } | 3818 } |
| 3824 | 3819 |
| 3825 // Include the auto-generated part of this file. We split this because it means | 3820 // Include the auto-generated part of this file. We split this because it means |
| 3826 // we can easily edit the non-auto generated parts right here in this file | 3821 // we can easily edit the non-auto generated parts right here in this file |
| 3827 // instead of having to edit some template or the code generator. | 3822 // instead of having to edit some template or the code generator. |
| 3828 #include "gpu/command_buffer/client/gles2_implementation_impl_autogen.h" | 3823 #include "gpu/command_buffer/client/gles2_implementation_impl_autogen.h" |
| 3829 | 3824 |
| 3830 } // namespace gles2 | 3825 } // namespace gles2 |
| 3831 } // namespace gpu | 3826 } // namespace gpu |
| OLD | NEW |