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

Side by Side Diff: content/common/gpu/image_transport_surface_mac.cc

Issue 9194005: gpu: reference target surfaces through a globally unique surface id. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 8 years, 11 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 | Annotate | Revision Log
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 #if defined(ENABLE_GPU) 5 #if defined(ENABLE_GPU)
6 6
7 #include "content/common/gpu/image_transport_surface.h" 7 #include "content/common/gpu/image_transport_surface.h"
8 8
9 #include "base/mac/scoped_cftyperef.h" 9 #include "base/mac/scoped_cftyperef.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
11 #include "content/common/gpu/gpu_messages.h" 11 #include "content/common/gpu/gpu_messages.h"
12 #include "ui/gfx/gl/gl_context.h" 12 #include "ui/gfx/gl/gl_context.h"
13 #include "ui/gfx/gl/gl_bindings.h" 13 #include "ui/gfx/gl/gl_bindings.h"
14 #include "ui/gfx/gl/gl_implementation.h" 14 #include "ui/gfx/gl/gl_implementation.h"
15 #include "ui/gfx/gl/gl_surface_cgl.h" 15 #include "ui/gfx/gl/gl_surface_cgl.h"
16 #include "ui/gfx/native_widget_types.h" 16 #include "ui/gfx/native_widget_types.h"
17 #include "ui/gfx/surface/io_surface_support_mac.h" 17 #include "ui/gfx/surface/io_surface_support_mac.h"
18 18
19 namespace { 19 namespace {
20 20
21 // We are backed by an offscreen surface for the purposes of creating 21 // We are backed by an offscreen surface for the purposes of creating
22 // a context, but use FBOs to render to texture backed IOSurface 22 // a context, but use FBOs to render to texture backed IOSurface
23 class IOSurfaceImageTransportSurface : public gfx::NoOpGLSurfaceCGL, 23 class IOSurfaceImageTransportSurface : public gfx::NoOpGLSurfaceCGL,
24 public ImageTransportSurface { 24 public ImageTransportSurface {
25 public: 25 public:
26 IOSurfaceImageTransportSurface(GpuChannelManager* manager, 26 IOSurfaceImageTransportSurface(GpuChannelManager* manager,
27 int32 render_view_id, 27 GpuCommandBufferStub* stub,
28 int32 client_id,
29 int32 command_buffer_id,
30 gfx::PluginWindowHandle handle); 28 gfx::PluginWindowHandle handle);
31 29
32 // GLSurface implementation 30 // GLSurface implementation
33 virtual bool Initialize() OVERRIDE; 31 virtual bool Initialize() OVERRIDE;
34 virtual void Destroy() OVERRIDE; 32 virtual void Destroy() OVERRIDE;
35 virtual bool IsOffscreen() OVERRIDE; 33 virtual bool IsOffscreen() OVERRIDE;
36 virtual bool SwapBuffers() OVERRIDE; 34 virtual bool SwapBuffers() OVERRIDE;
37 virtual bool PostSubBuffer(int x, int y, int width, int height) OVERRIDE; 35 virtual bool PostSubBuffer(int x, int y, int width, int height) OVERRIDE;
38 virtual std::string GetExtensions() OVERRIDE; 36 virtual std::string GetExtensions() OVERRIDE;
39 virtual gfx::Size GetSize() OVERRIDE; 37 virtual gfx::Size GetSize() OVERRIDE;
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 70
73 DISALLOW_COPY_AND_ASSIGN(IOSurfaceImageTransportSurface); 71 DISALLOW_COPY_AND_ASSIGN(IOSurfaceImageTransportSurface);
74 }; 72 };
75 73
76 // We are backed by an offscreen surface for the purposes of creating 74 // We are backed by an offscreen surface for the purposes of creating
77 // a context, but use FBOs to render to texture backed IOSurface 75 // a context, but use FBOs to render to texture backed IOSurface
78 class TransportDIBImageTransportSurface : public gfx::NoOpGLSurfaceCGL, 76 class TransportDIBImageTransportSurface : public gfx::NoOpGLSurfaceCGL,
79 public ImageTransportSurface { 77 public ImageTransportSurface {
80 public: 78 public:
81 TransportDIBImageTransportSurface(GpuChannelManager* manager, 79 TransportDIBImageTransportSurface(GpuChannelManager* manager,
82 int32 render_view_id, 80 GpuCommandBufferStub* stub,
83 int32 client_id,
84 int32 command_buffer_id,
85 gfx::PluginWindowHandle handle); 81 gfx::PluginWindowHandle handle);
86 82
87 // GLSurface implementation 83 // GLSurface implementation
88 virtual bool Initialize() OVERRIDE; 84 virtual bool Initialize() OVERRIDE;
89 virtual void Destroy() OVERRIDE; 85 virtual void Destroy() OVERRIDE;
90 virtual bool IsOffscreen() OVERRIDE; 86 virtual bool IsOffscreen() OVERRIDE;
91 virtual bool SwapBuffers() OVERRIDE; 87 virtual bool SwapBuffers() OVERRIDE;
92 virtual bool PostSubBuffer(int x, int y, int width, int height) OVERRIDE; 88 virtual bool PostSubBuffer(int x, int y, int width, int height) OVERRIDE;
93 virtual std::string GetExtensions() OVERRIDE; 89 virtual std::string GetExtensions() OVERRIDE;
94 virtual gfx::Size GetSize() OVERRIDE; 90 virtual gfx::Size GetSize() OVERRIDE;
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
136 void AddIntegerValue(CFMutableDictionaryRef dictionary, 132 void AddIntegerValue(CFMutableDictionaryRef dictionary,
137 const CFStringRef key, 133 const CFStringRef key,
138 int32 value) { 134 int32 value) {
139 base::mac::ScopedCFTypeRef<CFNumberRef> number( 135 base::mac::ScopedCFTypeRef<CFNumberRef> number(
140 CFNumberCreate(NULL, kCFNumberSInt32Type, &value)); 136 CFNumberCreate(NULL, kCFNumberSInt32Type, &value));
141 CFDictionaryAddValue(dictionary, key, number.get()); 137 CFDictionaryAddValue(dictionary, key, number.get());
142 } 138 }
143 139
144 IOSurfaceImageTransportSurface::IOSurfaceImageTransportSurface( 140 IOSurfaceImageTransportSurface::IOSurfaceImageTransportSurface(
145 GpuChannelManager* manager, 141 GpuChannelManager* manager,
146 int32 render_view_id, 142 GpuCommandBufferStub* stub,
147 int32 client_id,
148 int32 command_buffer_id,
149 gfx::PluginWindowHandle handle) 143 gfx::PluginWindowHandle handle)
150 : gfx::NoOpGLSurfaceCGL(gfx::Size(1, 1)), 144 : gfx::NoOpGLSurfaceCGL(gfx::Size(1, 1)),
151 fbo_id_(0), 145 fbo_id_(0),
152 texture_id_(0), 146 texture_id_(0),
153 io_surface_id_(0), 147 io_surface_id_(0),
154 context_(NULL), 148 context_(NULL),
155 made_current_(false) { 149 made_current_(false) {
156 helper_.reset(new ImageTransportHelper(this, 150 helper_.reset(new ImageTransportHelper(this, manager, stub, handle));
157 manager,
158 render_view_id,
159 client_id,
160 command_buffer_id,
161 handle));
162
163 } 151 }
164 152
165 IOSurfaceImageTransportSurface::~IOSurfaceImageTransportSurface() { 153 IOSurfaceImageTransportSurface::~IOSurfaceImageTransportSurface() {
166 Destroy(); 154 Destroy();
167 } 155 }
168 156
169 bool IOSurfaceImageTransportSurface::Initialize() { 157 bool IOSurfaceImageTransportSurface::Initialize() {
170 // Only support IOSurfaces if the GL implementation is the native desktop GL. 158 // Only support IOSurfaces if the GL implementation is the native desktop GL.
171 // IO surfaces will not work with, for example, OSMesa software renderer 159 // IO surfaces will not work with, for example, OSMesa software renderer
172 // GL contexts. 160 // GL contexts.
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
364 params.height = size_.height(); 352 params.height = size_.height();
365 params.surface_id = io_surface_id_; 353 params.surface_id = io_surface_id_;
366 params.create_transport_dib = false; 354 params.create_transport_dib = false;
367 helper_->SendAcceleratedSurfaceNew(params); 355 helper_->SendAcceleratedSurfaceNew(params);
368 356
369 helper_->SetScheduled(false); 357 helper_->SetScheduled(false);
370 } 358 }
371 359
372 TransportDIBImageTransportSurface::TransportDIBImageTransportSurface( 360 TransportDIBImageTransportSurface::TransportDIBImageTransportSurface(
373 GpuChannelManager* manager, 361 GpuChannelManager* manager,
374 int32 render_view_id, 362 GpuCommandBufferStub* stub,
375 int32 client_id,
376 int32 command_buffer_id,
377 gfx::PluginWindowHandle handle) 363 gfx::PluginWindowHandle handle)
378 : gfx::NoOpGLSurfaceCGL(gfx::Size(1, 1)), 364 : gfx::NoOpGLSurfaceCGL(gfx::Size(1, 1)),
379 fbo_id_(0), 365 fbo_id_(0),
380 render_buffer_id_(0), 366 render_buffer_id_(0),
381 made_current_(false) { 367 made_current_(false) {
382 helper_.reset(new ImageTransportHelper(this, 368 helper_.reset(new ImageTransportHelper(this, stub, handle));
383 manager,
384 render_view_id,
385 client_id,
386 command_buffer_id,
387 handle));
388 369
389 } 370 }
390 371
391 TransportDIBImageTransportSurface::~TransportDIBImageTransportSurface() { 372 TransportDIBImageTransportSurface::~TransportDIBImageTransportSurface() {
392 Destroy(); 373 Destroy();
393 } 374 }
394 375
395 bool TransportDIBImageTransportSurface::Initialize() { 376 bool TransportDIBImageTransportSurface::Initialize() {
396 if (!helper_->Initialize()) 377 if (!helper_->Initialize())
397 return false; 378 return false;
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
575 helper_->SendAcceleratedSurfaceNew(params); 556 helper_->SendAcceleratedSurfaceNew(params);
576 557
577 helper_->SetScheduled(false); 558 helper_->SetScheduled(false);
578 } 559 }
579 560
580 } // namespace 561 } // namespace
581 562
582 // static 563 // static
583 scoped_refptr<gfx::GLSurface> ImageTransportSurface::CreateSurface( 564 scoped_refptr<gfx::GLSurface> ImageTransportSurface::CreateSurface(
584 GpuChannelManager* manager, 565 GpuChannelManager* manager,
585 int32 render_view_id, 566 GpuCommandBufferStub* stub,
586 int32 client_id,
587 int32 command_buffer_id,
588 gfx::PluginWindowHandle handle) { 567 gfx::PluginWindowHandle handle) {
589 scoped_refptr<gfx::GLSurface> surface; 568 scoped_refptr<gfx::GLSurface> surface;
590 IOSurfaceSupport* io_surface_support = IOSurfaceSupport::Initialize(); 569 IOSurfaceSupport* io_surface_support = IOSurfaceSupport::Initialize();
591 570
592 switch (gfx::GetGLImplementation()) { 571 switch (gfx::GetGLImplementation()) {
593 case gfx::kGLImplementationDesktopGL: 572 case gfx::kGLImplementationDesktopGL:
594 case gfx::kGLImplementationAppleGL: 573 case gfx::kGLImplementationAppleGL:
595 if (!io_surface_support) { 574 if (!io_surface_support) {
596 surface = new TransportDIBImageTransportSurface(manager, 575 surface = new TransportDIBImageTransportSurface(manager, stub, handle);
597 render_view_id,
598 client_id,
599 command_buffer_id,
600 handle);
601 } else { 576 } else {
602 surface = new IOSurfaceImageTransportSurface(manager, 577 surface = new IOSurfaceImageTransportSurface(manager, stub, handle);
603 render_view_id,
604 client_id,
605 command_buffer_id,
606 handle);
607 } 578 }
608 break; 579 break;
609 default: 580 default:
610 NOTREACHED(); 581 NOTREACHED();
611 return NULL; 582 return NULL;
612 } 583 }
613 if (surface->Initialize()) 584 if (surface->Initialize())
614 return surface; 585 return surface;
615 else 586 else
616 return NULL; 587 return NULL;
617 } 588 }
618 589
619 #endif // defined(USE_GPU) 590 #endif // defined(USE_GPU)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698