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 #include "gpu/command_buffer/tests/gl_manager.h" | 5 #include "gpu/command_buffer/tests/gl_manager.h" |
6 | 6 |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/at_exit.h" | 9 #include "base/at_exit.h" |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
11 #include "gpu/command_buffer/client/gles2_implementation.h" | 11 #include "gpu/command_buffer/client/gles2_implementation.h" |
12 #include "gpu/command_buffer/client/gles2_lib.h" | 12 #include "gpu/command_buffer/client/gles2_lib.h" |
| 13 #include "gpu/command_buffer/client/gpu_memory_buffer_factory.h" |
13 #include "gpu/command_buffer/client/transfer_buffer.h" | 14 #include "gpu/command_buffer/client/transfer_buffer.h" |
14 #include "gpu/command_buffer/common/constants.h" | 15 #include "gpu/command_buffer/common/constants.h" |
15 #include "gpu/command_buffer/common/gles2_cmd_utils.h" | 16 #include "gpu/command_buffer/common/gles2_cmd_utils.h" |
16 #include "gpu/command_buffer/service/command_buffer_service.h" | 17 #include "gpu/command_buffer/service/command_buffer_service.h" |
17 #include "gpu/command_buffer/service/context_group.h" | 18 #include "gpu/command_buffer/service/context_group.h" |
18 #include "gpu/command_buffer/service/gl_context_virtual.h" | 19 #include "gpu/command_buffer/service/gl_context_virtual.h" |
19 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" | 20 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" |
20 #include "gpu/command_buffer/service/gpu_control_service.h" | 21 #include "gpu/command_buffer/service/gpu_control_service.h" |
21 #include "gpu/command_buffer/service/gpu_scheduler.h" | 22 #include "gpu/command_buffer/service/gpu_scheduler.h" |
22 #include "gpu/command_buffer/service/image_manager.h" | 23 #include "gpu/command_buffer/service/image_manager.h" |
(...skipping 14 matching lines...) Expand all Loading... |
37 : size(4, 4), | 38 : size(4, 4), |
38 share_group_manager(NULL), | 39 share_group_manager(NULL), |
39 share_mailbox_manager(NULL), | 40 share_mailbox_manager(NULL), |
40 virtual_manager(NULL), | 41 virtual_manager(NULL), |
41 bind_generates_resource(false), | 42 bind_generates_resource(false), |
42 lose_context_when_out_of_memory(false), | 43 lose_context_when_out_of_memory(false), |
43 context_lost_allowed(false), | 44 context_lost_allowed(false), |
44 image_manager(NULL) {} | 45 image_manager(NULL) {} |
45 | 46 |
46 GLManager::GLManager() | 47 GLManager::GLManager() |
47 : context_lost_allowed_(false) { | 48 : context_lost_allowed_(false), gpu_memory_buffer_factory_(NULL) { |
48 SetupBaseContext(); | 49 SetupBaseContext(); |
49 } | 50 } |
50 | 51 |
51 GLManager::~GLManager() { | 52 GLManager::~GLManager() { |
52 --use_count_; | 53 --use_count_; |
53 if (!use_count_) { | 54 if (!use_count_) { |
54 if (base_share_group_) { | 55 if (base_share_group_) { |
55 delete base_context_; | 56 delete base_context_; |
56 base_context_ = NULL; | 57 base_context_ = NULL; |
57 } | 58 } |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
164 ASSERT_TRUE(context_->MakeCurrent(surface_.get())); | 165 ASSERT_TRUE(context_->MakeCurrent(surface_.get())); |
165 | 166 |
166 ASSERT_TRUE(decoder_->Initialize( | 167 ASSERT_TRUE(decoder_->Initialize( |
167 surface_.get(), | 168 surface_.get(), |
168 context_.get(), | 169 context_.get(), |
169 true, | 170 true, |
170 options.size, | 171 options.size, |
171 ::gpu::gles2::DisallowedFeatures(), | 172 ::gpu::gles2::DisallowedFeatures(), |
172 attribs)) << "could not initialize decoder"; | 173 attribs)) << "could not initialize decoder"; |
173 | 174 |
174 gpu_control_.reset( | 175 gpu_control_service_.reset( |
175 new GpuControlService(decoder_->GetContextGroup()->image_manager(), | 176 new GpuControlService(decoder_->GetContextGroup()->image_manager(), |
176 options.gpu_memory_buffer_factory, | 177 decoder_->GetQueryManager())); |
177 decoder_->GetContextGroup()->mailbox_manager(), | 178 gpu_memory_buffer_factory_ = options.gpu_memory_buffer_factory; |
178 decoder_->GetQueryManager(), | |
179 decoder_->GetCapabilities())); | |
180 | 179 |
181 command_buffer_->SetPutOffsetChangeCallback( | 180 command_buffer_->SetPutOffsetChangeCallback( |
182 base::Bind(&GLManager::PumpCommands, base::Unretained(this))); | 181 base::Bind(&GLManager::PumpCommands, base::Unretained(this))); |
183 command_buffer_->SetGetBufferChangeCallback( | 182 command_buffer_->SetGetBufferChangeCallback( |
184 base::Bind(&GLManager::GetBufferChanged, base::Unretained(this))); | 183 base::Bind(&GLManager::GetBufferChanged, base::Unretained(this))); |
185 | 184 |
186 // Create the GLES2 helper, which writes the command buffer protocol. | 185 // Create the GLES2 helper, which writes the command buffer protocol. |
187 gles2_helper_.reset(new gles2::GLES2CmdHelper(command_buffer_.get())); | 186 gles2_helper_.reset(new gles2::GLES2CmdHelper(command_buffer_.get())); |
188 ASSERT_TRUE(gles2_helper_->Initialize(kCommandBufferSize)); | 187 ASSERT_TRUE(gles2_helper_->Initialize(kCommandBufferSize)); |
189 | 188 |
190 // Create a transfer buffer. | 189 // Create a transfer buffer. |
191 transfer_buffer_.reset(new TransferBuffer(gles2_helper_.get())); | 190 transfer_buffer_.reset(new TransferBuffer(gles2_helper_.get())); |
192 | 191 |
193 // Create the object exposing the OpenGL API. | 192 // Create the object exposing the OpenGL API. |
194 gles2_implementation_.reset( | 193 gles2_implementation_.reset( |
195 new gles2::GLES2Implementation(gles2_helper_.get(), | 194 new gles2::GLES2Implementation(gles2_helper_.get(), |
196 client_share_group, | 195 client_share_group, |
197 transfer_buffer_.get(), | 196 transfer_buffer_.get(), |
198 options.bind_generates_resource, | 197 options.bind_generates_resource, |
199 options.lose_context_when_out_of_memory, | 198 options.lose_context_when_out_of_memory, |
200 gpu_control_.get())); | 199 this)); |
201 | 200 |
202 ASSERT_TRUE(gles2_implementation_->Initialize( | 201 ASSERT_TRUE(gles2_implementation_->Initialize( |
203 kStartTransferBufferSize, | 202 kStartTransferBufferSize, |
204 kMinTransferBufferSize, | 203 kMinTransferBufferSize, |
205 kMaxTransferBufferSize, | 204 kMaxTransferBufferSize, |
206 gpu::gles2::GLES2Implementation::kNoLimit)) | 205 gpu::gles2::GLES2Implementation::kNoLimit)) |
207 << "Could not init GLES2Implementation"; | 206 << "Could not init GLES2Implementation"; |
208 | 207 |
209 MakeCurrent(); | 208 MakeCurrent(); |
210 } | 209 } |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
262 ::gpu::CommandBuffer::State state = command_buffer_->GetLastState(); | 261 ::gpu::CommandBuffer::State state = command_buffer_->GetLastState(); |
263 if (!context_lost_allowed_) { | 262 if (!context_lost_allowed_) { |
264 ASSERT_EQ(::gpu::error::kNoError, state.error); | 263 ASSERT_EQ(::gpu::error::kNoError, state.error); |
265 } | 264 } |
266 } | 265 } |
267 | 266 |
268 bool GLManager::GetBufferChanged(int32 transfer_buffer_id) { | 267 bool GLManager::GetBufferChanged(int32 transfer_buffer_id) { |
269 return gpu_scheduler_->SetGetBuffer(transfer_buffer_id); | 268 return gpu_scheduler_->SetGetBuffer(transfer_buffer_id); |
270 } | 269 } |
271 | 270 |
| 271 Capabilities GLManager::GetCapabilities() { |
| 272 return decoder_->GetCapabilities(); |
| 273 } |
| 274 |
| 275 gfx::GpuMemoryBuffer* GLManager::CreateGpuMemoryBuffer( |
| 276 size_t width, |
| 277 size_t height, |
| 278 unsigned internalformat, |
| 279 int32* id) { |
| 280 *id = -1; |
| 281 scoped_ptr<gfx::GpuMemoryBuffer> buffer( |
| 282 gpu_memory_buffer_factory_->CreateGpuMemoryBuffer( |
| 283 width, height, internalformat)); |
| 284 if (!buffer.get()) |
| 285 return NULL; |
| 286 |
| 287 static int32 next_id = 1; |
| 288 *id = next_id++; |
| 289 gpu_control_service_->RegisterGpuMemoryBuffer( |
| 290 *id, buffer->GetHandle(), width, height, internalformat); |
| 291 gfx::GpuMemoryBuffer* raw_buffer = buffer.get(); |
| 292 memory_buffers_.add(*id, buffer.Pass()); |
| 293 return raw_buffer; |
| 294 } |
| 295 |
| 296 void GLManager::DestroyGpuMemoryBuffer(int32 id) { |
| 297 memory_buffers_.erase(id); |
| 298 gpu_control_service_->UnregisterGpuMemoryBuffer(id); |
| 299 } |
| 300 |
| 301 uint32 GLManager::InsertSyncPoint() { |
| 302 NOTIMPLEMENTED(); |
| 303 return 0u; |
| 304 } |
| 305 |
| 306 void GLManager::SignalSyncPoint(uint32 sync_point, |
| 307 const base::Closure& callback) { |
| 308 NOTIMPLEMENTED(); |
| 309 } |
| 310 |
| 311 void GLManager::SignalQuery(uint32 query, const base::Closure& callback) { |
| 312 NOTIMPLEMENTED(); |
| 313 } |
| 314 |
| 315 void GLManager::SetSurfaceVisible(bool visible) { |
| 316 NOTIMPLEMENTED(); |
| 317 } |
| 318 |
| 319 void GLManager::SendManagedMemoryStats(const ManagedMemoryStats& stats) { |
| 320 NOTIMPLEMENTED(); |
| 321 } |
| 322 |
| 323 void GLManager::Echo(const base::Closure& callback) { |
| 324 NOTIMPLEMENTED(); |
| 325 } |
| 326 |
| 327 uint32 GLManager::CreateStreamTexture(uint32 texture_id) { |
| 328 NOTIMPLEMENTED(); |
| 329 return 0; |
| 330 } |
| 331 |
272 } // namespace gpu | 332 } // namespace gpu |
OLD | NEW |