Index: content/common/gpu/gpu_command_buffer_stub.cc |
diff --git a/content/common/gpu/gpu_command_buffer_stub.cc b/content/common/gpu/gpu_command_buffer_stub.cc |
index d0ed3d1c42908ca3b99bd7de42dc60870fad4c93..c3f461351dbcea956c04378df53042fd52665b75 100644 |
--- a/content/common/gpu/gpu_command_buffer_stub.cc |
+++ b/content/common/gpu/gpu_command_buffer_stub.cc |
@@ -160,19 +160,6 @@ uint64_t GetCommandBufferID(int channel_id, int32_t route_id) { |
return (static_cast<uint64_t>(channel_id) << 32) | route_id; |
} |
-gfx::GLSurface::Format GetSurfaceFormatFromAttribute( |
- const gpu::gles2::ContextCreationAttribHelper& attrib, |
- bool use_virtualized_gl_context) { |
- gfx::GLSurface::Format format = gfx::GLSurface::SURFACE_DEFAULT; // ARGB8888 |
- if (!use_virtualized_gl_context && |
- attrib.red_size <= 5 && |
- attrib.green_size <= 6 && |
- attrib.blue_size <= 5 && |
- attrib.alpha_size == 0) { |
- format = gfx::GLSurface::SURFACE_RGB565; |
- } |
- return format; |
-} |
} // namespace |
GpuCommandBufferStub::GpuCommandBufferStub( |
@@ -250,8 +237,17 @@ GpuCommandBufferStub::GpuCommandBufferStub( |
// only a single context. See crbug.com/510243 for details. |
use_virtualized_gl_context_ |= mailbox_manager->UsesSync(); |
- surface_format_ = GetSurfaceFormatFromAttribute(attrib_parser, |
- use_virtualized_gl_context_); |
+#if defined(OS_ANDROID) |
+ if (attrib_parser.red_size <= 5 && |
+ attrib_parser.green_size <= 6 && |
+ attrib_parser.blue_size <= 5 && |
+ attrib_parser.alpha_size == 0) |
+ surface_format_ = gfx::GLSurface::SURFACE_RGB565; |
+ gfx::GLSurface* defaultOffscreenSurface = |
+ channel_->gpu_channel_manager()->GetDefaultOffscreenSurface(); |
+ if (surface_format_ != defaultOffscreenSurface->GetFormat()) |
+ use_virtualized_gl_context_ = false; |
+#endif |
if (offscreen && initial_size_.IsEmpty()) { |
// If we're an offscreen surface with zero width and/or height, set to a |
@@ -561,8 +557,9 @@ void GpuCommandBufferStub::OnInitialize( |
} |
scoped_refptr<gfx::GLContext> context; |
- if (use_virtualized_gl_context_ && channel_->share_group()) { |
- context = channel_->share_group()->GetSharedContext(); |
+ gfx::GLShareGroup* share_group = channel_->share_group(); |
+ if (use_virtualized_gl_context_ && share_group) { |
+ context = share_group->GetSharedContext(); |
if (!context.get()) { |
context = gfx::GLContext::CreateGLContext( |
channel_->share_group(), |
@@ -578,12 +575,10 @@ void GpuCommandBufferStub::OnInitialize( |
// This should be a non-virtual GL context. |
DCHECK(context->GetHandle()); |
context = new gpu::GLContextVirtual( |
- channel_->share_group(), context.get(), decoder_->AsWeakPtr()); |
+ share_group, context.get(), decoder_->AsWeakPtr()); |
if (!context->Initialize(surface_.get(), gpu_preference_)) { |
- // TODO(sievers): The real context created above for the default |
- // offscreen surface might not be compatible with this surface. |
- // Need to adjust at least GLX to be able to create the initial context |
- // with a config that is compatible with onscreen and offscreen surfaces. |
+ // The real context created above for the default offscreen surface |
+ // might not be compatible with this surface. |
context = NULL; |
DLOG(ERROR) << "Failed to initialize virtual GL context."; |
@@ -593,7 +588,7 @@ void GpuCommandBufferStub::OnInitialize( |
} |
if (!context.get()) { |
context = gfx::GLContext::CreateGLContext( |
- channel_->share_group(), surface_.get(), gpu_preference_); |
+ share_group, surface_.get(), gpu_preference_); |
} |
if (!context.get()) { |
DLOG(ERROR) << "Failed to create context."; |