Index: gpu/command_buffer/client/gl_in_process_context.cc |
diff --git a/gpu/command_buffer/client/gl_in_process_context.cc b/gpu/command_buffer/client/gl_in_process_context.cc |
index 3c19c4d22fb40d78453c75f8c10a6aea746dc552..d9a258eaf291a7be629fc2d9455be95d8b5c8af0 100644 |
--- a/gpu/command_buffer/client/gl_in_process_context.cc |
+++ b/gpu/command_buffer/client/gl_in_process_context.cc |
@@ -26,7 +26,6 @@ |
#include "gpu/command_buffer/client/transfer_buffer.h" |
#include "gpu/command_buffer/common/command_buffer.h" |
#include "gpu/command_buffer/common/constants.h" |
-#include "gpu/command_buffer/service/in_process_command_buffer.h" |
#include "ui/gfx/size.h" |
#include "ui/gl/gl_image.h" |
@@ -52,13 +51,16 @@ class GLInProcessContextImpl |
explicit GLInProcessContextImpl(); |
virtual ~GLInProcessContextImpl(); |
- bool Initialize(scoped_refptr<gfx::GLSurface> surface, |
- bool is_offscreen, |
- bool share_resources, |
- gfx::AcceleratedWidget window, |
- const gfx::Size& size, |
- const GLInProcessContextAttribs& attribs, |
- gfx::GpuPreference gpu_preference); |
+ bool Initialize( |
+ scoped_refptr<gfx::GLSurface> surface, |
+ bool is_offscreen, |
+ bool use_global_share_group, |
+ GLInProcessContext* share_context, |
+ gfx::AcceleratedWidget window, |
+ const gfx::Size& size, |
+ const GLInProcessContextAttribs& attribs, |
+ gfx::GpuPreference gpu_preference, |
+ const scoped_refptr<InProcessCommandBuffer::Service>& service); |
// GLInProcessContext implementation: |
virtual void SetContextLostCallback(const base::Closure& callback) OVERRIDE; |
@@ -120,11 +122,14 @@ void GLInProcessContextImpl::OnContextLost() { |
bool GLInProcessContextImpl::Initialize( |
scoped_refptr<gfx::GLSurface> surface, |
bool is_offscreen, |
- bool share_resources, |
+ bool use_global_share_group, |
+ GLInProcessContext* share_context, |
gfx::AcceleratedWidget window, |
const gfx::Size& size, |
const GLInProcessContextAttribs& attribs, |
- gfx::GpuPreference gpu_preference) { |
+ gfx::GpuPreference gpu_preference, |
+ const scoped_refptr<InProcessCommandBuffer::Service>& service) { |
+ DCHECK(!use_global_share_group || !share_context); |
DCHECK(size.width() >= 0 && size.height() >= 0); |
// Changes to these values should also be copied to |
@@ -184,12 +189,12 @@ bool GLInProcessContextImpl::Initialize( |
base::Closure wrapped_callback = |
base::Bind(&GLInProcessContextImpl::OnContextLost, AsWeakPtr()); |
- command_buffer_.reset(new InProcessCommandBuffer()); |
+ command_buffer_.reset(new InProcessCommandBuffer(service)); |
scoped_ptr<base::AutoLock> scoped_shared_context_lock; |
scoped_refptr<gles2::ShareGroup> share_group; |
InProcessCommandBuffer* share_command_buffer = NULL; |
- if (share_resources) { |
+ if (use_global_share_group) { |
scoped_shared_context_lock.reset( |
new base::AutoLock(g_all_shared_contexts_lock.Get())); |
for (std::set<GLInProcessContextImpl*>::const_iterator it = |
@@ -205,7 +210,15 @@ bool GLInProcessContextImpl::Initialize( |
break; |
} |
} |
+ } else if (share_context) { |
+ GLInProcessContextImpl* impl = |
+ static_cast<GLInProcessContextImpl*>(share_context); |
+ share_group = impl->gles2_implementation_->share_group(); |
+ share_command_buffer = impl->command_buffer_.get(); |
+ DCHECK(share_group); |
+ DCHECK(share_command_buffer); |
} |
+ |
if (!command_buffer_->Initialize(surface, |
is_offscreen, |
window, |
@@ -241,7 +254,7 @@ bool GLInProcessContextImpl::Initialize( |
free_everything_when_invisible, |
command_buffer_.get())); |
- if (share_resources) { |
+ if (use_global_share_group) { |
g_all_shared_contexts.Get().insert(this); |
scoped_shared_context_lock.reset(); |
} |
@@ -307,10 +320,12 @@ GLInProcessContext* GLInProcessContext::CreateContext( |
NULL /* surface */, |
is_offscreen, |
share_resources, |
+ NULL, |
window, |
size, |
attribs, |
- gpu_preference)) |
+ gpu_preference, |
+ scoped_refptr<InProcessCommandBuffer::Service>())) |
return NULL; |
return context.release(); |
@@ -319,7 +334,8 @@ GLInProcessContext* GLInProcessContext::CreateContext( |
// static |
GLInProcessContext* GLInProcessContext::CreateWithSurface( |
scoped_refptr<gfx::GLSurface> surface, |
- bool share_resources, |
+ scoped_refptr<gpu::InProcessCommandBuffer::Service> service, |
+ GLInProcessContext* share_context, |
const GLInProcessContextAttribs& attribs, |
gfx::GpuPreference gpu_preference) { |
scoped_ptr<GLInProcessContextImpl> context( |
@@ -327,11 +343,13 @@ GLInProcessContext* GLInProcessContext::CreateWithSurface( |
if (!context->Initialize( |
surface, |
surface->IsOffscreen(), |
- share_resources, |
+ false, |
+ share_context, |
gfx::kNullAcceleratedWidget, |
surface->GetSize(), |
attribs, |
- gpu_preference)) |
+ gpu_preference, |
+ service)) |
return NULL; |
return context.release(); |