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

Side by Side Diff: content/renderer/pepper/ppb_graphics_3d_impl.cc

Issue 2107783003: Pass initial size and GPU preference via context attributes (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: gyp fix Created 4 years, 5 months 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 "content/renderer/pepper/ppb_graphics_3d_impl.h" 5 #include "content/renderer/pepper/ppb_graphics_3d_impl.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/location.h" 9 #include "base/location.h"
10 #include "base/single_thread_task_runner.h" 10 #include "base/single_thread_task_runner.h"
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
218 RenderThreadImpl* render_thread = RenderThreadImpl::current(); 218 RenderThreadImpl* render_thread = RenderThreadImpl::current();
219 if (!render_thread) 219 if (!render_thread)
220 return false; 220 return false;
221 221
222 scoped_refptr<gpu::GpuChannelHost> channel = 222 scoped_refptr<gpu::GpuChannelHost> channel =
223 render_thread->EstablishGpuChannelSync( 223 render_thread->EstablishGpuChannelSync(
224 CAUSE_FOR_GPU_LAUNCH_PEPPERPLATFORMCONTEXT3DIMPL_INITIALIZE); 224 CAUSE_FOR_GPU_LAUNCH_PEPPERPLATFORMCONTEXT3DIMPL_INITIALIZE);
225 if (!channel) 225 if (!channel)
226 return false; 226 return false;
227 227
228 gfx::Size surface_size; 228 gpu::gles2::ContextCreationAttribHelper attrib_helper;
229 std::vector<int32_t> attribs; 229 std::vector<int32_t> attribs;
230 gl::GpuPreference gpu_preference = gl::PreferDiscreteGpu; 230 attrib_helper.gpu_preference = gl::PreferDiscreteGpu;
231 // TODO(alokp): Change CommandBufferProxyImpl::Create() 231 // TODO(alokp): Change CommandBufferProxyImpl::Create()
232 // interface to accept width and height in the attrib_list so that 232 // interface to accept width and height in the attrib_list so that
233 // we do not need to filter for width and height here. 233 // we do not need to filter for width and height here.
234 if (attrib_list) { 234 if (attrib_list) {
235 for (const int32_t* attr = attrib_list; attr[0] != PP_GRAPHICS3DATTRIB_NONE; 235 for (const int32_t* attr = attrib_list; attr[0] != PP_GRAPHICS3DATTRIB_NONE;
236 attr += 2) { 236 attr += 2) {
237 switch (attr[0]) { 237 switch (attr[0]) {
238 case PP_GRAPHICS3DATTRIB_WIDTH: 238 case PP_GRAPHICS3DATTRIB_WIDTH:
239 surface_size.set_width(attr[1]); 239 attrib_helper.offscreen_framebuffer_size.set_width(attr[1]);
240 break; 240 break;
241 case PP_GRAPHICS3DATTRIB_HEIGHT: 241 case PP_GRAPHICS3DATTRIB_HEIGHT:
242 surface_size.set_height(attr[1]); 242 attrib_helper.offscreen_framebuffer_size.set_height(attr[1]);
243 break; 243 break;
244 case PP_GRAPHICS3DATTRIB_GPU_PREFERENCE: 244 case PP_GRAPHICS3DATTRIB_GPU_PREFERENCE:
245 gpu_preference = 245 attrib_helper.gpu_preference =
246 (attr[1] == PP_GRAPHICS3DATTRIB_GPU_PREFERENCE_LOW_POWER) 246 (attr[1] == PP_GRAPHICS3DATTRIB_GPU_PREFERENCE_LOW_POWER)
247 ? gl::PreferIntegratedGpu 247 ? gl::PreferIntegratedGpu
248 : gl::PreferDiscreteGpu; 248 : gl::PreferDiscreteGpu;
249 break; 249 break;
250 case PP_GRAPHICS3DATTRIB_ALPHA_SIZE: 250 case PP_GRAPHICS3DATTRIB_ALPHA_SIZE:
251 has_alpha_ = attr[1] > 0; 251 has_alpha_ = attr[1] > 0;
252 // fall-through 252 // fall-through
253 default: 253 default:
254 attribs.push_back(attr[0]); 254 attribs.push_back(attr[0]);
255 attribs.push_back(attr[1]); 255 attribs.push_back(attr[1]);
256 break; 256 break;
257 } 257 }
258 } 258 }
259 attribs.push_back(PP_GRAPHICS3DATTRIB_NONE); 259 attribs.push_back(PP_GRAPHICS3DATTRIB_NONE);
260 } 260 }
261 gpu::gles2::ContextCreationAttribHelper attrib_helper;
262 if (!attrib_helper.Parse(attribs)) 261 if (!attrib_helper.Parse(attribs))
263 return false; 262 return false;
264 263
265 gpu::CommandBufferProxyImpl* share_buffer = NULL; 264 gpu::CommandBufferProxyImpl* share_buffer = NULL;
266 if (share_context) { 265 if (share_context) {
267 PPB_Graphics3D_Impl* share_graphics = 266 PPB_Graphics3D_Impl* share_graphics =
268 static_cast<PPB_Graphics3D_Impl*>(share_context); 267 static_cast<PPB_Graphics3D_Impl*>(share_context);
269 share_buffer = share_graphics->GetCommandBufferProxy(); 268 share_buffer = share_graphics->GetCommandBufferProxy();
270 } 269 }
271 270
272 command_buffer_ = gpu::CommandBufferProxyImpl::Create( 271 command_buffer_ = gpu::CommandBufferProxyImpl::Create(
273 std::move(channel), gpu::kNullSurfaceHandle, surface_size, share_buffer, 272 std::move(channel), gpu::kNullSurfaceHandle, share_buffer,
274 gpu::GPU_STREAM_DEFAULT, gpu::GpuStreamPriority::NORMAL, 273 gpu::GPU_STREAM_DEFAULT, gpu::GpuStreamPriority::NORMAL, attrib_helper,
275 attrib_helper, GURL::EmptyGURL(), gpu_preference, 274 GURL::EmptyGURL(), base::ThreadTaskRunnerHandle::Get());
276 base::ThreadTaskRunnerHandle::Get());
277 if (!command_buffer_) 275 if (!command_buffer_)
278 return false; 276 return false;
279 277
280 command_buffer_->SetGpuControlClient(this); 278 command_buffer_->SetGpuControlClient(this);
281 279
282 if (shared_state_handle) 280 if (shared_state_handle)
283 *shared_state_handle = command_buffer_->GetSharedStateHandle(); 281 *shared_state_handle = command_buffer_->GetSharedStateHandle();
284 if (capabilities) 282 if (capabilities)
285 *capabilities = command_buffer_->GetCapabilities(); 283 *capabilities = command_buffer_->GetCapabilities();
286 if (command_buffer_id) 284 if (command_buffer_id)
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
367 if (!mailboxes_to_reuse_.empty()) { 365 if (!mailboxes_to_reuse_.empty()) {
368 gpu::Mailbox mailbox = mailboxes_to_reuse_.back(); 366 gpu::Mailbox mailbox = mailboxes_to_reuse_.back();
369 mailboxes_to_reuse_.pop_back(); 367 mailboxes_to_reuse_.pop_back();
370 return mailbox; 368 return mailbox;
371 } 369 }
372 370
373 return gpu::Mailbox::Generate(); 371 return gpu::Mailbox::Generate();
374 } 372 }
375 373
376 } // namespace content 374 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/pepper/pepper_video_encoder_host.cc ('k') | content/renderer/render_thread_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698