Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(201)

Side by Side Diff: gpu/command_buffer/service/context_group.cc

Issue 816543004: Update from https://crrev.com/308996 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 14 matching lines...) Expand all
25 #include "ui/gl/gl_implementation.h" 25 #include "ui/gl/gl_implementation.h"
26 26
27 namespace gpu { 27 namespace gpu {
28 namespace gles2 { 28 namespace gles2 {
29 29
30 ContextGroup::ContextGroup( 30 ContextGroup::ContextGroup(
31 const scoped_refptr<MailboxManager>& mailbox_manager, 31 const scoped_refptr<MailboxManager>& mailbox_manager,
32 const scoped_refptr<MemoryTracker>& memory_tracker, 32 const scoped_refptr<MemoryTracker>& memory_tracker,
33 const scoped_refptr<ShaderTranslatorCache>& shader_translator_cache, 33 const scoped_refptr<ShaderTranslatorCache>& shader_translator_cache,
34 const scoped_refptr<FeatureInfo>& feature_info, 34 const scoped_refptr<FeatureInfo>& feature_info,
35 const scoped_refptr<SubscriptionRefSet>& subscription_ref_set,
35 const scoped_refptr<ValueStateMap>& pending_valuebuffer_state, 36 const scoped_refptr<ValueStateMap>& pending_valuebuffer_state,
36 bool bind_generates_resource) 37 bool bind_generates_resource)
37 : mailbox_manager_(mailbox_manager), 38 : mailbox_manager_(mailbox_manager),
38 memory_tracker_(memory_tracker), 39 memory_tracker_(memory_tracker),
39 shader_translator_cache_(shader_translator_cache), 40 shader_translator_cache_(shader_translator_cache),
41 subscription_ref_set_(subscription_ref_set),
40 pending_valuebuffer_state_(pending_valuebuffer_state), 42 pending_valuebuffer_state_(pending_valuebuffer_state),
41 enforce_gl_minimums_(CommandLine::ForCurrentProcess()->HasSwitch( 43 enforce_gl_minimums_(CommandLine::ForCurrentProcess()->HasSwitch(
42 switches::kEnforceGLMinimums)), 44 switches::kEnforceGLMinimums)),
43 bind_generates_resource_(bind_generates_resource), 45 bind_generates_resource_(bind_generates_resource),
44 max_vertex_attribs_(0u), 46 max_vertex_attribs_(0u),
45 max_texture_units_(0u), 47 max_texture_units_(0u),
46 max_texture_image_units_(0u), 48 max_texture_image_units_(0u),
47 max_vertex_texture_image_units_(0u), 49 max_vertex_texture_image_units_(0u),
48 max_fragment_uniform_vectors_(0u), 50 max_fragment_uniform_vectors_(0u),
49 max_varying_vectors_(0u), 51 max_varying_vectors_(0u),
50 max_vertex_uniform_vectors_(0u), 52 max_vertex_uniform_vectors_(0u),
51 max_color_attachments_(1u), 53 max_color_attachments_(1u),
52 max_draw_buffers_(1u), 54 max_draw_buffers_(1u),
53 program_cache_(NULL), 55 program_cache_(NULL),
54 feature_info_(feature_info), 56 feature_info_(feature_info),
55 draw_buffer_(GL_BACK) { 57 draw_buffer_(GL_BACK) {
56 { 58 {
57 if (!mailbox_manager_.get()) 59 if (!mailbox_manager_.get())
58 mailbox_manager_ = new MailboxManagerImpl; 60 mailbox_manager_ = new MailboxManagerImpl;
61 if (!subscription_ref_set_.get())
62 subscription_ref_set_ = new SubscriptionRefSet();
59 if (!pending_valuebuffer_state_.get()) 63 if (!pending_valuebuffer_state_.get())
60 pending_valuebuffer_state_ = new ValueStateMap(); 64 pending_valuebuffer_state_ = new ValueStateMap();
61 if (!feature_info.get()) 65 if (!feature_info.get())
62 feature_info_ = new FeatureInfo; 66 feature_info_ = new FeatureInfo;
63 TransferBufferManager* manager = new TransferBufferManager(); 67 TransferBufferManager* manager = new TransferBufferManager();
64 transfer_buffer_manager_.reset(manager); 68 transfer_buffer_manager_.reset(manager);
65 manager->Initialize(); 69 manager->Initialize();
66 } 70 }
67 } 71 }
68 72
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
121 125
122 buffer_manager_.reset( 126 buffer_manager_.reset(
123 new BufferManager(memory_tracker_.get(), feature_info_.get())); 127 new BufferManager(memory_tracker_.get(), feature_info_.get()));
124 framebuffer_manager_.reset( 128 framebuffer_manager_.reset(
125 new FramebufferManager(max_draw_buffers_, max_color_attachments_)); 129 new FramebufferManager(max_draw_buffers_, max_color_attachments_));
126 renderbuffer_manager_.reset(new RenderbufferManager( 130 renderbuffer_manager_.reset(new RenderbufferManager(
127 memory_tracker_.get(), max_renderbuffer_size, max_samples, 131 memory_tracker_.get(), max_renderbuffer_size, max_samples,
128 depth24_supported)); 132 depth24_supported));
129 shader_manager_.reset(new ShaderManager()); 133 shader_manager_.reset(new ShaderManager());
130 valuebuffer_manager_.reset( 134 valuebuffer_manager_.reset(
131 new ValuebufferManager(pending_valuebuffer_state_.get())); 135 new ValuebufferManager(subscription_ref_set_.get(),
136 pending_valuebuffer_state_.get()));
132 137
133 // Lookup GL things we need to know. 138 // Lookup GL things we need to know.
134 const GLint kGLES2RequiredMinimumVertexAttribs = 8u; 139 const GLint kGLES2RequiredMinimumVertexAttribs = 8u;
135 if (!QueryGLFeatureU( 140 if (!QueryGLFeatureU(
136 GL_MAX_VERTEX_ATTRIBS, kGLES2RequiredMinimumVertexAttribs, 141 GL_MAX_VERTEX_ATTRIBS, kGLES2RequiredMinimumVertexAttribs,
137 &max_vertex_attribs_)) { 142 &max_vertex_attribs_)) {
138 LOG(ERROR) << "ContextGroup::Initialize failed because too few " 143 LOG(ERROR) << "ContextGroup::Initialize failed because too few "
139 << "vertex attributes supported."; 144 << "vertex attributes supported.";
140 return false; 145 return false;
141 } 146 }
142 147
143 const GLuint kGLES2RequiredMinimumTextureUnits = 8u; 148 const GLuint kGLES2RequiredMinimumTextureUnits = 8u;
144 if (!QueryGLFeatureU( 149 if (!QueryGLFeatureU(
145 GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, kGLES2RequiredMinimumTextureUnits, 150 GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, kGLES2RequiredMinimumTextureUnits,
146 &max_texture_units_)) { 151 &max_texture_units_)) {
147 LOG(ERROR) << "ContextGroup::Initialize failed because too few " 152 LOG(ERROR) << "ContextGroup::Initialize failed because too few "
148 << "texture units supported."; 153 << "texture units supported.";
149 return false; 154 return false;
150 } 155 }
151 156
152 GLint max_texture_size = 0; 157 GLint max_texture_size = 0;
153 GLint max_cube_map_texture_size = 0; 158 GLint max_cube_map_texture_size = 0;
159 GLint max_rectangle_texture_size = 0;
154 const GLint kMinTextureSize = 2048; // GL actually says 64!?!? 160 const GLint kMinTextureSize = 2048; // GL actually says 64!?!?
155 const GLint kMinCubeMapSize = 256; // GL actually says 16!?!? 161 const GLint kMinCubeMapSize = 256; // GL actually says 16!?!?
156 if (!QueryGLFeature( 162 const GLint kMinRectangleTextureSize = 64;
157 GL_MAX_TEXTURE_SIZE, kMinTextureSize, &max_texture_size) || 163 if (!QueryGLFeature(GL_MAX_TEXTURE_SIZE, kMinTextureSize,
158 !QueryGLFeature( 164 &max_texture_size) ||
159 GL_MAX_CUBE_MAP_TEXTURE_SIZE, kMinCubeMapSize, 165 !QueryGLFeature(GL_MAX_CUBE_MAP_TEXTURE_SIZE, kMinCubeMapSize,
160 &max_cube_map_texture_size)) { 166 &max_cube_map_texture_size)) {
161 LOG(ERROR) << "ContextGroup::Initialize failed because maximum texture size" 167 LOG(ERROR) << "ContextGroup::Initialize failed because maximum "
162 << "is too small."; 168 << " texture size is too small.";
163 return false; 169 return false;
164 } 170 }
171 if (feature_info_->feature_flags().arb_texture_rectangle) {
172 if (!QueryGLFeature(GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB,
173 kMinRectangleTextureSize,
174 &max_rectangle_texture_size)) {
175 LOG(ERROR) << "ContextGroup::Initialize failed because maximum "
176 << "rectangle texture size is too small.";
177 return false;
178 }
179 }
165 180
166 if (feature_info_->workarounds().max_texture_size) { 181 if (feature_info_->workarounds().max_texture_size) {
167 max_texture_size = std::min( 182 max_texture_size = std::min(
168 max_texture_size, feature_info_->workarounds().max_texture_size); 183 max_texture_size,
184 feature_info_->workarounds().max_texture_size);
185 max_rectangle_texture_size = std::min(
186 max_rectangle_texture_size,
187 feature_info_->workarounds().max_texture_size);
169 } 188 }
170 if (feature_info_->workarounds().max_cube_map_texture_size) { 189 if (feature_info_->workarounds().max_cube_map_texture_size) {
171 max_cube_map_texture_size = std::min( 190 max_cube_map_texture_size = std::min(
172 max_cube_map_texture_size, 191 max_cube_map_texture_size,
173 feature_info_->workarounds().max_cube_map_texture_size); 192 feature_info_->workarounds().max_cube_map_texture_size);
174 } 193 }
175 194
176 texture_manager_.reset(new TextureManager(memory_tracker_.get(), 195 texture_manager_.reset(new TextureManager(memory_tracker_.get(),
177 feature_info_.get(), 196 feature_info_.get(),
178 max_texture_size, 197 max_texture_size,
179 max_cube_map_texture_size, 198 max_cube_map_texture_size,
199 max_rectangle_texture_size,
180 bind_generates_resource_)); 200 bind_generates_resource_));
181 texture_manager_->set_framebuffer_manager(framebuffer_manager_.get()); 201 texture_manager_->set_framebuffer_manager(framebuffer_manager_.get());
182 202
183 const GLint kMinTextureImageUnits = 8; 203 const GLint kMinTextureImageUnits = 8;
184 const GLint kMinVertexTextureImageUnits = 0; 204 const GLint kMinVertexTextureImageUnits = 0;
185 if (!QueryGLFeatureU( 205 if (!QueryGLFeatureU(
186 GL_MAX_TEXTURE_IMAGE_UNITS, kMinTextureImageUnits, 206 GL_MAX_TEXTURE_IMAGE_UNITS, kMinTextureImageUnits,
187 &max_texture_image_units_) || 207 &max_texture_image_units_) ||
188 !QueryGLFeatureU( 208 !QueryGLFeatureU(
189 GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS, kMinVertexTextureImageUnits, 209 GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS, kMinVertexTextureImageUnits,
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
383 GLenum pname, GLint min_required, uint32* v) { 403 GLenum pname, GLint min_required, uint32* v) {
384 uint32 value = 0; 404 uint32 value = 0;
385 GetIntegerv(pname, &value); 405 GetIntegerv(pname, &value);
386 bool result = CheckGLFeatureU(min_required, &value); 406 bool result = CheckGLFeatureU(min_required, &value);
387 *v = value; 407 *v = value;
388 return result; 408 return result;
389 } 409 }
390 410
391 } // namespace gles2 411 } // namespace gles2
392 } // namespace gpu 412 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/context_group.h ('k') | gpu/command_buffer/service/context_group_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698