| 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 ccbfb32a50455f2eed340f03c0a4739e9a22e503..2f949c901c2fb9be37a3d82973766fe96dfe525c 100644
|
| --- a/gpu/command_buffer/service/in_process_command_buffer.cc
|
| +++ b/gpu/command_buffer/service/in_process_command_buffer.cc
|
| @@ -22,10 +22,10 @@
|
| #include "base/message_loop/message_loop_proxy.h"
|
| #include "base/sequence_checker.h"
|
| #include "base/threading/thread.h"
|
| -#include "gpu/command_buffer/common/id_allocator.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"
|
| +#include "gpu/command_buffer/service/gpu_control_service.h"
|
| #include "gpu/command_buffer/service/gpu_scheduler.h"
|
| #include "gpu/command_buffer/service/image_manager.h"
|
| #include "gpu/command_buffer/service/transfer_buffer_manager.h"
|
| @@ -43,6 +43,7 @@ static base::LazyInstance<std::set<InProcessCommandBuffer*> >
|
|
|
| static bool g_use_virtualized_gl_context = false;
|
| static bool g_uses_explicit_scheduling = false;
|
| +static GpuMemoryBufferFactory* g_gpu_memory_buffer_factory = NULL;
|
|
|
| template <typename T>
|
| static void RunTaskWithResult(base::Callback<T(void)> task,
|
| @@ -390,6 +391,10 @@ bool InProcessCommandBuffer::InitializeOnGpuThread(
|
| &GpuScheduler::SetGetBuffer, base::Unretained(gpu_scheduler_.get())));
|
| command_buffer_ = command_buffer.Pass();
|
|
|
| + gpu_control_.reset(
|
| + new GpuControlService(decoder_->GetContextGroup()->image_manager(),
|
| + g_gpu_memory_buffer_factory));
|
| +
|
| decoder_->set_engine(gpu_scheduler_.get());
|
|
|
| if (!surface_) {
|
| @@ -496,55 +501,6 @@ void InProcessCommandBuffer::CheckSequencedThread() {
|
| sequence_checker_->CalledOnValidSequencedThread());
|
| }
|
|
|
| -unsigned int InProcessCommandBuffer::CreateImageForGpuMemoryBuffer(
|
| - gfx::GpuMemoryBufferHandle buffer,
|
| - gfx::Size size) {
|
| - CheckSequencedThread();
|
| - unsigned int image_id;
|
| - {
|
| - // TODO: ID allocation should go through CommandBuffer
|
| - base::AutoLock lock(command_buffer_lock_);
|
| - gles2::ContextGroup* group = decoder_->GetContextGroup();
|
| - image_id =
|
| - group->GetIdAllocator(gles2::id_namespaces::kImages)->AllocateID();
|
| - }
|
| - base::Closure image_task =
|
| - base::Bind(&InProcessCommandBuffer::CreateImageOnGpuThread,
|
| - base::Unretained(this), buffer, size, image_id);
|
| - QueueTask(image_task);
|
| - return image_id;
|
| -}
|
| -
|
| -void InProcessCommandBuffer::CreateImageOnGpuThread(
|
| - gfx::GpuMemoryBufferHandle buffer,
|
| - gfx::Size size,
|
| - unsigned int image_id) {
|
| - CheckSequencedThread();
|
| - scoped_refptr<gfx::GLImage> gl_image =
|
| - gfx::GLImage::CreateGLImageForGpuMemoryBuffer(buffer, size);
|
| - decoder_->GetContextGroup()->image_manager()->AddImage(gl_image, image_id);
|
| -}
|
| -
|
| -void InProcessCommandBuffer::RemoveImage(unsigned int image_id) {
|
| - CheckSequencedThread();
|
| - {
|
| - // TODO: ID allocation should go through CommandBuffer
|
| - base::AutoLock lock(command_buffer_lock_);
|
| - gles2::ContextGroup* group = decoder_->GetContextGroup();
|
| - group->GetIdAllocator(gles2::id_namespaces::kImages)->FreeID(image_id);
|
| - }
|
| - base::Closure image_manager_task =
|
| - base::Bind(&InProcessCommandBuffer::RemoveImageOnGpuThread,
|
| - base::Unretained(this),
|
| - image_id);
|
| - QueueTask(image_manager_task);
|
| -}
|
| -
|
| -void InProcessCommandBuffer::RemoveImageOnGpuThread(unsigned int image_id) {
|
| - CheckSequencedThread();
|
| - decoder_->GetContextGroup()->image_manager()->RemoveImage(image_id);
|
| -}
|
| -
|
| void InProcessCommandBuffer::OnContextLost() {
|
| CheckSequencedThread();
|
| if (!context_lost_callback_.is_null()) {
|
| @@ -680,6 +636,28 @@ void InProcessCommandBuffer::SignalSyncPoint(unsigned sync_point,
|
| QueueTask(WrapCallback(callback));
|
| }
|
|
|
| +gfx::GpuMemoryBuffer* InProcessCommandBuffer::CreateGpuMemoryBuffer(
|
| + size_t width,
|
| + size_t height,
|
| + unsigned internalformat,
|
| + int32* id) {
|
| + CheckSequencedThread();
|
| + base::AutoLock lock(command_buffer_lock_);
|
| + return gpu_control_->CreateGpuMemoryBuffer(width,
|
| + height,
|
| + internalformat,
|
| + id);
|
| +}
|
| +
|
| +void InProcessCommandBuffer::DestroyGpuMemoryBuffer(int32 id) {
|
| + CheckSequencedThread();
|
| + base::Closure task = base::Bind(&GpuControl::DestroyGpuMemoryBuffer,
|
| + base::Unretained(gpu_control_.get()),
|
| + id);
|
| +
|
| + QueueTask(task);
|
| +}
|
| +
|
| gpu::error::Error InProcessCommandBuffer::GetLastError() {
|
| CheckSequencedThread();
|
| return last_state_.error;
|
| @@ -753,4 +731,10 @@ void InProcessCommandBuffer::ProcessGpuWorkOnCurrentThread() {
|
| g_gpu_queue.Get().RunTasks();
|
| }
|
|
|
| +// static
|
| +void InProcessCommandBuffer::SetGpuMemoryBufferFactory(
|
| + GpuMemoryBufferFactory* factory) {
|
| + g_gpu_memory_buffer_factory = factory;
|
| +}
|
| +
|
| } // namespace gpu
|
|
|