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/service/context_group.h" | 5 #include "gpu/command_buffer/service/context_group.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <string> | 8 #include <string> |
9 | 9 |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 12 matching lines...) Expand all Loading... |
23 #include "ui/gl/gl_bindings.h" | 23 #include "ui/gl/gl_bindings.h" |
24 #include "ui/gl/gl_version_info.h" | 24 #include "ui/gl/gl_version_info.h" |
25 | 25 |
26 namespace gpu { | 26 namespace gpu { |
27 namespace gles2 { | 27 namespace gles2 { |
28 | 28 |
29 ContextGroup::ContextGroup( | 29 ContextGroup::ContextGroup( |
30 const scoped_refptr<MailboxManager>& mailbox_manager, | 30 const scoped_refptr<MailboxManager>& mailbox_manager, |
31 const scoped_refptr<MemoryTracker>& memory_tracker, | 31 const scoped_refptr<MemoryTracker>& memory_tracker, |
32 const scoped_refptr<ShaderTranslatorCache>& shader_translator_cache, | 32 const scoped_refptr<ShaderTranslatorCache>& shader_translator_cache, |
| 33 const scoped_refptr<FramebufferCompletenessCache>& |
| 34 framebuffer_completeness_cache, |
33 const scoped_refptr<FeatureInfo>& feature_info, | 35 const scoped_refptr<FeatureInfo>& feature_info, |
34 const scoped_refptr<SubscriptionRefSet>& subscription_ref_set, | 36 const scoped_refptr<SubscriptionRefSet>& subscription_ref_set, |
35 const scoped_refptr<ValueStateMap>& pending_valuebuffer_state, | 37 const scoped_refptr<ValueStateMap>& pending_valuebuffer_state, |
36 bool bind_generates_resource) | 38 bool bind_generates_resource) |
37 : context_type_(CONTEXT_TYPE_UNDEFINED), | 39 : context_type_(CONTEXT_TYPE_UNDEFINED), |
38 mailbox_manager_(mailbox_manager), | 40 mailbox_manager_(mailbox_manager), |
39 memory_tracker_(memory_tracker), | 41 memory_tracker_(memory_tracker), |
40 shader_translator_cache_(shader_translator_cache), | 42 shader_translator_cache_(shader_translator_cache), |
| 43 #if defined(OS_MACOSX) |
| 44 // Framebuffer completeness is not cacheable on OS X because of dynamic |
| 45 // graphics switching. |
| 46 // http://crbug.com/180876 |
| 47 // TODO(tobiasjs): determine whether GPU switching is possible |
| 48 // programmatically, rather than just hardcoding this behaviour |
| 49 // for OS X. |
| 50 framebuffer_completeness_cache_(NULL), |
| 51 #else |
| 52 framebuffer_completeness_cache_(framebuffer_completeness_cache), |
| 53 #endif |
41 subscription_ref_set_(subscription_ref_set), | 54 subscription_ref_set_(subscription_ref_set), |
42 pending_valuebuffer_state_(pending_valuebuffer_state), | 55 pending_valuebuffer_state_(pending_valuebuffer_state), |
43 enforce_gl_minimums_( | 56 enforce_gl_minimums_( |
44 base::CommandLine::InitializedForCurrentProcess() | 57 base::CommandLine::InitializedForCurrentProcess() |
45 ? base::CommandLine::ForCurrentProcess()->HasSwitch( | 58 ? base::CommandLine::ForCurrentProcess()->HasSwitch( |
46 switches::kEnforceGLMinimums) | 59 switches::kEnforceGLMinimums) |
47 : false), | 60 : false), |
48 bind_generates_resource_(bind_generates_resource), | 61 bind_generates_resource_(bind_generates_resource), |
49 max_vertex_attribs_(0u), | 62 max_vertex_attribs_(0u), |
50 max_texture_units_(0u), | 63 max_texture_units_(0u), |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
147 GetIntegerv(GL_MAX_COLOR_ATTACHMENTS_EXT, &max_color_attachments_); | 160 GetIntegerv(GL_MAX_COLOR_ATTACHMENTS_EXT, &max_color_attachments_); |
148 if (max_color_attachments_ < 1) | 161 if (max_color_attachments_ < 1) |
149 max_color_attachments_ = 1; | 162 max_color_attachments_ = 1; |
150 GetIntegerv(GL_MAX_DRAW_BUFFERS_ARB, &max_draw_buffers_); | 163 GetIntegerv(GL_MAX_DRAW_BUFFERS_ARB, &max_draw_buffers_); |
151 if (max_draw_buffers_ < 1) | 164 if (max_draw_buffers_ < 1) |
152 max_draw_buffers_ = 1; | 165 max_draw_buffers_ = 1; |
153 } | 166 } |
154 | 167 |
155 buffer_manager_.reset( | 168 buffer_manager_.reset( |
156 new BufferManager(memory_tracker_.get(), feature_info_.get())); | 169 new BufferManager(memory_tracker_.get(), feature_info_.get())); |
157 framebuffer_manager_.reset(new FramebufferManager( | 170 framebuffer_manager_.reset( |
158 max_draw_buffers_, max_color_attachments_, context_type)); | 171 new FramebufferManager(max_draw_buffers_, max_color_attachments_, |
| 172 context_type, framebuffer_completeness_cache_)); |
159 renderbuffer_manager_.reset(new RenderbufferManager( | 173 renderbuffer_manager_.reset(new RenderbufferManager( |
160 memory_tracker_.get(), max_renderbuffer_size, max_samples, | 174 memory_tracker_.get(), max_renderbuffer_size, max_samples, |
161 feature_info_.get())); | 175 feature_info_.get())); |
162 shader_manager_.reset(new ShaderManager()); | 176 shader_manager_.reset(new ShaderManager()); |
163 valuebuffer_manager_.reset( | 177 valuebuffer_manager_.reset( |
164 new ValuebufferManager(subscription_ref_set_.get(), | 178 new ValuebufferManager(subscription_ref_set_.get(), |
165 pending_valuebuffer_state_.get())); | 179 pending_valuebuffer_state_.get())); |
166 | 180 |
167 // Lookup GL things we need to know. | 181 // Lookup GL things we need to know. |
168 const GLint kGLES2RequiredMinimumVertexAttribs = 8u; | 182 const GLint kGLES2RequiredMinimumVertexAttribs = 8u; |
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
452 GLuint client_id, GLuint* service_id) const { | 466 GLuint client_id, GLuint* service_id) const { |
453 Buffer* buffer = buffer_manager_->GetBuffer(client_id); | 467 Buffer* buffer = buffer_manager_->GetBuffer(client_id); |
454 if (!buffer) | 468 if (!buffer) |
455 return false; | 469 return false; |
456 *service_id = buffer->service_id(); | 470 *service_id = buffer->service_id(); |
457 return true; | 471 return true; |
458 } | 472 } |
459 | 473 |
460 } // namespace gles2 | 474 } // namespace gles2 |
461 } // namespace gpu | 475 } // namespace gpu |
OLD | NEW |