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

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

Issue 2104403003: pepper: parse context creation attrib list on the plugin side (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@gpu_pref_size_in_attrs
Patch Set: rebase 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 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
59 // Unset the client before the command_buffer_ is destroyed, similar to how 59 // Unset the client before the command_buffer_ is destroyed, similar to how
60 // WeakPtrFactory invalidates before it. 60 // WeakPtrFactory invalidates before it.
61 if (command_buffer_) 61 if (command_buffer_)
62 command_buffer_->SetGpuControlClient(nullptr); 62 command_buffer_->SetGpuControlClient(nullptr);
63 } 63 }
64 64
65 // static 65 // static
66 PP_Resource PPB_Graphics3D_Impl::CreateRaw( 66 PP_Resource PPB_Graphics3D_Impl::CreateRaw(
67 PP_Instance instance, 67 PP_Instance instance,
68 PP_Resource share_context, 68 PP_Resource share_context,
69 const int32_t* attrib_list, 69 const gpu::gles2::ContextCreationAttribHelper& attrib_helper,
70 gpu::Capabilities* capabilities, 70 gpu::Capabilities* capabilities,
71 base::SharedMemoryHandle* shared_state_handle, 71 base::SharedMemoryHandle* shared_state_handle,
72 gpu::CommandBufferId* command_buffer_id) { 72 gpu::CommandBufferId* command_buffer_id) {
73 PPB_Graphics3D_API* share_api = NULL; 73 PPB_Graphics3D_API* share_api = NULL;
74 if (share_context) { 74 if (share_context) {
75 EnterResourceNoLock<PPB_Graphics3D_API> enter(share_context, true); 75 EnterResourceNoLock<PPB_Graphics3D_API> enter(share_context, true);
76 if (enter.failed()) 76 if (enter.failed())
77 return 0; 77 return 0;
78 share_api = enter.object(); 78 share_api = enter.object();
79 } 79 }
80 scoped_refptr<PPB_Graphics3D_Impl> graphics_3d( 80 scoped_refptr<PPB_Graphics3D_Impl> graphics_3d(
81 new PPB_Graphics3D_Impl(instance)); 81 new PPB_Graphics3D_Impl(instance));
82 if (!graphics_3d->InitRaw(share_api, attrib_list, capabilities, 82 if (!graphics_3d->InitRaw(share_api, attrib_helper, capabilities,
83 shared_state_handle, command_buffer_id)) 83 shared_state_handle, command_buffer_id))
84 return 0; 84 return 0;
85 return graphics_3d->GetReference(); 85 return graphics_3d->GetReference();
86 } 86 }
87 87
88 PP_Bool PPB_Graphics3D_Impl::SetGetBuffer(int32_t transfer_buffer_id) { 88 PP_Bool PPB_Graphics3D_Impl::SetGetBuffer(int32_t transfer_buffer_id) {
89 GetCommandBuffer()->SetGetBuffer(transfer_buffer_id); 89 GetCommandBuffer()->SetGetBuffer(transfer_buffer_id);
90 return PP_TRUE; 90 return PP_TRUE;
91 } 91 }
92 92
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
202 } else { 202 } else {
203 // Wait for the command to complete on the GPU to allow for throttling. 203 // Wait for the command to complete on the GPU to allow for throttling.
204 command_buffer_->SignalSyncToken( 204 command_buffer_->SignalSyncToken(
205 sync_token, base::Bind(&PPB_Graphics3D_Impl::OnSwapBuffers, 205 sync_token, base::Bind(&PPB_Graphics3D_Impl::OnSwapBuffers,
206 weak_ptr_factory_.GetWeakPtr())); 206 weak_ptr_factory_.GetWeakPtr()));
207 } 207 }
208 208
209 return PP_OK_COMPLETIONPENDING; 209 return PP_OK_COMPLETIONPENDING;
210 } 210 }
211 211
212 bool PPB_Graphics3D_Impl::InitRaw(PPB_Graphics3D_API* share_context, 212 bool PPB_Graphics3D_Impl::InitRaw(
213 const int32_t* attrib_list, 213 PPB_Graphics3D_API* share_context,
214 gpu::Capabilities* capabilities, 214 const gpu::gles2::ContextCreationAttribHelper& requested_attribs,
215 base::SharedMemoryHandle* shared_state_handle, 215 gpu::Capabilities* capabilities,
216 gpu::CommandBufferId* command_buffer_id) { 216 base::SharedMemoryHandle* shared_state_handle,
217 gpu::CommandBufferId* command_buffer_id) {
217 PepperPluginInstanceImpl* plugin_instance = 218 PepperPluginInstanceImpl* plugin_instance =
218 HostGlobals::Get()->GetInstance(pp_instance()); 219 HostGlobals::Get()->GetInstance(pp_instance());
219 if (!plugin_instance) 220 if (!plugin_instance)
220 return false; 221 return false;
221 222
222 RenderView* render_view = plugin_instance->GetRenderView(); 223 RenderView* render_view = plugin_instance->GetRenderView();
223 if (!render_view) 224 if (!render_view)
224 return false; 225 return false;
225 226
226 const WebPreferences& prefs = render_view->GetWebkitPreferences(); 227 const WebPreferences& prefs = render_view->GetWebkitPreferences();
(...skipping 10 matching lines...) Expand all
237 RenderThreadImpl* render_thread = RenderThreadImpl::current(); 238 RenderThreadImpl* render_thread = RenderThreadImpl::current();
238 if (!render_thread) 239 if (!render_thread)
239 return false; 240 return false;
240 241
241 scoped_refptr<gpu::GpuChannelHost> channel = 242 scoped_refptr<gpu::GpuChannelHost> channel =
242 render_thread->EstablishGpuChannelSync( 243 render_thread->EstablishGpuChannelSync(
243 CAUSE_FOR_GPU_LAUNCH_PEPPERPLATFORMCONTEXT3DIMPL_INITIALIZE); 244 CAUSE_FOR_GPU_LAUNCH_PEPPERPLATFORMCONTEXT3DIMPL_INITIALIZE);
244 if (!channel) 245 if (!channel)
245 return false; 246 return false;
246 247
247 gpu::gles2::ContextCreationAttribHelper attrib_helper; 248 has_alpha_ = requested_attribs.alpha_size > 0;
248 std::vector<int32_t> attribs; 249
249 attrib_helper.gpu_preference = gl::PreferDiscreteGpu; 250 gpu::gles2::ContextCreationAttribHelper attrib_helper = requested_attribs;
250 // TODO(alokp): Change CommandBufferProxyImpl::Create()
251 // interface to accept width and height in the attrib_list so that
252 // we do not need to filter for width and height here.
253 if (attrib_list) {
254 for (const int32_t* attr = attrib_list; attr[0] != PP_GRAPHICS3DATTRIB_NONE;
255 attr += 2) {
256 switch (attr[0]) {
257 case PP_GRAPHICS3DATTRIB_WIDTH:
258 attrib_helper.offscreen_framebuffer_size.set_width(attr[1]);
259 break;
260 case PP_GRAPHICS3DATTRIB_HEIGHT:
261 attrib_helper.offscreen_framebuffer_size.set_height(attr[1]);
262 break;
263 case PP_GRAPHICS3DATTRIB_GPU_PREFERENCE:
264 attrib_helper.gpu_preference =
265 (attr[1] == PP_GRAPHICS3DATTRIB_GPU_PREFERENCE_LOW_POWER)
266 ? gl::PreferIntegratedGpu
267 : gl::PreferDiscreteGpu;
268 break;
269 case PP_GRAPHICS3DATTRIB_ALPHA_SIZE:
270 has_alpha_ = attr[1] > 0;
271 // fall-through
272 default:
273 attribs.push_back(attr[0]);
274 attribs.push_back(attr[1]);
275 break;
276 }
277 }
278 attribs.push_back(PP_GRAPHICS3DATTRIB_NONE);
279 }
280 if (!attrib_helper.Parse(attribs))
281 return false;
282 attrib_helper.should_use_native_gmb_for_backbuffer = use_image_chromium_; 251 attrib_helper.should_use_native_gmb_for_backbuffer = use_image_chromium_;
283 252
284 gpu::CommandBufferProxyImpl* share_buffer = NULL; 253 gpu::CommandBufferProxyImpl* share_buffer = NULL;
285 if (share_context) { 254 if (share_context) {
286 PPB_Graphics3D_Impl* share_graphics = 255 PPB_Graphics3D_Impl* share_graphics =
287 static_cast<PPB_Graphics3D_Impl*>(share_context); 256 static_cast<PPB_Graphics3D_Impl*>(share_context);
288 share_buffer = share_graphics->GetCommandBufferProxy(); 257 share_buffer = share_graphics->GetCommandBufferProxy();
289 } 258 }
290 259
291 command_buffer_ = gpu::CommandBufferProxyImpl::Create( 260 command_buffer_ = gpu::CommandBufferProxyImpl::Create(
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
387 if (!mailboxes_to_reuse_.empty()) { 356 if (!mailboxes_to_reuse_.empty()) {
388 gpu::Mailbox mailbox = mailboxes_to_reuse_.back(); 357 gpu::Mailbox mailbox = mailboxes_to_reuse_.back();
389 mailboxes_to_reuse_.pop_back(); 358 mailboxes_to_reuse_.pop_back();
390 return mailbox; 359 return mailbox;
391 } 360 }
392 361
393 return gpu::Mailbox::Generate(); 362 return gpu::Mailbox::Generate();
394 } 363 }
395 364
396 } // namespace content 365 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/pepper/ppb_graphics_3d_impl.h ('k') | content/renderer/pepper/resource_creation_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698