| Index: gpu/command_buffer/service/in_process_command_buffer.cc
|
| diff --git a/gpu/command_buffer/service/in_process_command_buffer.cc b/gpu/command_buffer/service/in_process_command_buffer.cc
|
| index f9b81dbfab4434881e0f1e96bdf9656bbbf20183..f83cf17738104dbe09e07183f8db93e45fef1f87 100644
|
| --- a/gpu/command_buffer/service/in_process_command_buffer.cc
|
| +++ b/gpu/command_buffer/service/in_process_command_buffer.cc
|
| @@ -24,6 +24,7 @@
|
| #include "base/sequence_checker.h"
|
| #include "base/synchronization/condition_variable.h"
|
| #include "base/threading/thread.h"
|
| +#include "gpu/command_buffer/client/gpu_memory_buffer_factory.h"
|
| #include "gpu/command_buffer/service/command_buffer_service.h"
|
| #include "gpu/command_buffer/service/context_group.h"
|
| #include "gpu/command_buffer/service/gl_context_virtual.h"
|
| @@ -296,8 +297,11 @@ bool InProcessCommandBuffer::Initialize(
|
| base::Bind(&RunTaskWithResult<bool>, init_task, &result, &completion));
|
| completion.Wait();
|
|
|
| - if (result)
|
| + if (result) {
|
| capabilities_ = capabilities;
|
| + capabilities_.map_image =
|
| + capabilities_.map_image && g_gpu_memory_buffer_factory;
|
| + }
|
| return result;
|
| }
|
|
|
| @@ -409,15 +413,11 @@ bool InProcessCommandBuffer::InitializeOnGpuThread(
|
| DestroyOnGpuThread();
|
| return false;
|
| }
|
| + *params.capabilities = decoder_->GetCapabilities();
|
|
|
| gpu_control_.reset(
|
| new GpuControlService(decoder_->GetContextGroup()->image_manager(),
|
| - g_gpu_memory_buffer_factory,
|
| - decoder_->GetContextGroup()->mailbox_manager(),
|
| - decoder_->GetQueryManager(),
|
| - decoder_->GetCapabilities()));
|
| -
|
| - *params.capabilities = gpu_control_->GetCapabilities();
|
| + decoder_->GetQueryManager()));
|
|
|
| if (!params.is_offscreen) {
|
| decoder_->SetResizeCallback(base::Bind(
|
| @@ -609,16 +609,37 @@ gfx::GpuMemoryBuffer* InProcessCommandBuffer::CreateGpuMemoryBuffer(
|
| unsigned internalformat,
|
| int32* id) {
|
| CheckSequencedThread();
|
| - base::AutoLock lock(command_buffer_lock_);
|
| - return gpu_control_->CreateGpuMemoryBuffer(width,
|
| - height,
|
| - internalformat,
|
| - id);
|
| +
|
| + *id = -1;
|
| + linked_ptr<gfx::GpuMemoryBuffer> buffer =
|
| + make_linked_ptr(g_gpu_memory_buffer_factory->CreateGpuMemoryBuffer(
|
| + width, height, internalformat));
|
| + if (!buffer.get())
|
| + return NULL;
|
| +
|
| + static int32 next_id = 1;
|
| + *id = next_id++;
|
| +
|
| + base::Closure task = base::Bind(&GpuControlService::RegisterGpuMemoryBuffer,
|
| + base::Unretained(gpu_control_.get()),
|
| + *id,
|
| + buffer->GetHandle(),
|
| + width,
|
| + height,
|
| + internalformat);
|
| +
|
| + QueueTask(task);
|
| +
|
| + gpu_memory_buffers_[*id] = buffer;
|
| + return buffer.get();
|
| }
|
|
|
| void InProcessCommandBuffer::DestroyGpuMemoryBuffer(int32 id) {
|
| CheckSequencedThread();
|
| - base::Closure task = base::Bind(&GpuControl::DestroyGpuMemoryBuffer,
|
| + GpuMemoryBufferMap::iterator it = gpu_memory_buffers_.find(id);
|
| + if (it != gpu_memory_buffers_.end())
|
| + gpu_memory_buffers_.erase(it);
|
| + base::Closure task = base::Bind(&GpuControlService::UnregisterGpuMemoryBuffer,
|
| base::Unretained(gpu_control_.get()),
|
| id);
|
|
|
| @@ -667,7 +688,7 @@ void InProcessCommandBuffer::SignalSyncPointOnGpuThread(
|
| void InProcessCommandBuffer::SignalQuery(unsigned query,
|
| const base::Closure& callback) {
|
| CheckSequencedThread();
|
| - QueueTask(base::Bind(&GpuControl::SignalQuery,
|
| + QueueTask(base::Bind(&GpuControlService::SignalQuery,
|
| base::Unretained(gpu_control_.get()),
|
| query,
|
| WrapCallback(callback)));
|
|
|