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

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: fix more tests 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;
40 virtual bool OnMakeCurrent(gfx::GLContext* context) OVERRIDE; 38 virtual bool OnMakeCurrent(gfx::GLContext* context) OVERRIDE;
41 virtual unsigned int GetBackingFrameBufferObject() OVERRIDE; 39 virtual unsigned int GetBackingFrameBufferObject() OVERRIDE;
42 40
43 protected: 41 protected:
44 // ImageTransportSurface implementation 42 // ImageTransportSurface implementation
45 virtual void OnNewSurfaceACK(uint64 surface_id, 43 virtual void OnNewSurfaceACK(uint64 surface_handle,
46 TransportDIB::Handle shm_handle) OVERRIDE; 44 TransportDIB::Handle shm_handle) OVERRIDE;
47 virtual void OnBuffersSwappedACK() OVERRIDE; 45 virtual void OnBuffersSwappedACK() OVERRIDE;
48 virtual void OnPostSubBufferACK() OVERRIDE; 46 virtual void OnPostSubBufferACK() OVERRIDE;
49 virtual void OnResizeViewACK() OVERRIDE; 47 virtual void OnResizeViewACK() OVERRIDE;
50 virtual void OnResize(gfx::Size size) OVERRIDE; 48 virtual void OnResize(gfx::Size size) OVERRIDE;
51 49
52 private: 50 private:
53 virtual ~IOSurfaceImageTransportSurface() OVERRIDE; 51 virtual ~IOSurfaceImageTransportSurface() OVERRIDE;
54 52
55 uint32 fbo_id_; 53 uint32 fbo_id_;
56 GLuint texture_id_; 54 GLuint texture_id_;
57 55
58 base::mac::ScopedCFTypeRef<CFTypeRef> io_surface_; 56 base::mac::ScopedCFTypeRef<CFTypeRef> io_surface_;
59 57
60 // The id of |io_surface_| or 0 if that's NULL. 58 // The id of |io_surface_| or 0 if that's NULL.
61 uint64 io_surface_id_; 59 uint64 io_surface_handle_;
62 60
63 // Weak pointer to the context that this was last made current to. 61 // Weak pointer to the context that this was last made current to.
64 gfx::GLContext* context_; 62 gfx::GLContext* context_;
65 63
66 gfx::Size size_; 64 gfx::Size size_;
67 65
68 // Whether or not we've successfully made the surface current once. 66 // Whether or not we've successfully made the surface current once.
69 bool made_current_; 67 bool made_current_;
70 68
71 scoped_ptr<ImageTransportHelper> helper_; 69 scoped_ptr<ImageTransportHelper> helper_;
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;
95 virtual bool OnMakeCurrent(gfx::GLContext* context) OVERRIDE; 91 virtual bool OnMakeCurrent(gfx::GLContext* context) OVERRIDE;
96 virtual unsigned int GetBackingFrameBufferObject() OVERRIDE; 92 virtual unsigned int GetBackingFrameBufferObject() OVERRIDE;
97 93
98 protected: 94 protected:
99 // ImageTransportSurface implementation 95 // ImageTransportSurface implementation
100 virtual void OnBuffersSwappedACK() OVERRIDE; 96 virtual void OnBuffersSwappedACK() OVERRIDE;
101 virtual void OnPostSubBufferACK() OVERRIDE; 97 virtual void OnPostSubBufferACK() OVERRIDE;
102 virtual void OnNewSurfaceACK(uint64 surface_id, 98 virtual void OnNewSurfaceACK(uint64 surface_handle,
103 TransportDIB::Handle shm_handle) OVERRIDE; 99 TransportDIB::Handle shm_handle) OVERRIDE;
104 virtual void OnResizeViewACK() OVERRIDE; 100 virtual void OnResizeViewACK() OVERRIDE;
105 virtual void OnResize(gfx::Size size) OVERRIDE; 101 virtual void OnResize(gfx::Size size) OVERRIDE;
106 102
107 private: 103 private:
108 virtual ~TransportDIBImageTransportSurface() OVERRIDE; 104 virtual ~TransportDIBImageTransportSurface() OVERRIDE;
109 105
110 uint32 fbo_id_; 106 uint32 fbo_id_;
111 GLuint render_buffer_id_; 107 GLuint render_buffer_id_;
112 108
113 scoped_ptr<TransportDIB> shared_mem_; 109 scoped_ptr<TransportDIB> shared_mem_;
114 110
115 gfx::Size size_; 111 gfx::Size size_;
116 112
117 static uint32 next_id_; 113 static uint32 next_handle_;
118 114
119 // Whether or not we've successfully made the surface current once. 115 // Whether or not we've successfully made the surface current once.
120 bool made_current_; 116 bool made_current_;
121 117
122 scoped_ptr<ImageTransportHelper> helper_; 118 scoped_ptr<ImageTransportHelper> helper_;
123 119
124 DISALLOW_COPY_AND_ASSIGN(TransportDIBImageTransportSurface); 120 DISALLOW_COPY_AND_ASSIGN(TransportDIBImageTransportSurface);
125 }; 121 };
126 122
127 uint32 TransportDIBImageTransportSurface::next_id_ = 1; 123 uint32 TransportDIBImageTransportSurface::next_handle_ = 1;
128 124
129 void AddBooleanValue(CFMutableDictionaryRef dictionary, 125 void AddBooleanValue(CFMutableDictionaryRef dictionary,
130 const CFStringRef key, 126 const CFStringRef key,
131 bool value) { 127 bool value) {
132 CFDictionaryAddValue(dictionary, key, 128 CFDictionaryAddValue(dictionary, key,
133 (value ? kCFBooleanTrue : kCFBooleanFalse)); 129 (value ? kCFBooleanTrue : kCFBooleanFalse));
134 } 130 }
135 131
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_handle_(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 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
219 } 207 }
220 208
221 unsigned int IOSurfaceImageTransportSurface::GetBackingFrameBufferObject() { 209 unsigned int IOSurfaceImageTransportSurface::GetBackingFrameBufferObject() {
222 return fbo_id_; 210 return fbo_id_;
223 } 211 }
224 212
225 bool IOSurfaceImageTransportSurface::SwapBuffers() { 213 bool IOSurfaceImageTransportSurface::SwapBuffers() {
226 glFlush(); 214 glFlush();
227 215
228 GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params params; 216 GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params params;
229 params.surface_id = io_surface_id_; 217 params.surface_handle = io_surface_handle_;
230 helper_->SendAcceleratedSurfaceBuffersSwapped(params); 218 helper_->SendAcceleratedSurfaceBuffersSwapped(params);
231 219
232 helper_->SetScheduled(false); 220 helper_->SetScheduled(false);
233 return true; 221 return true;
234 } 222 }
235 223
236 bool IOSurfaceImageTransportSurface::PostSubBuffer( 224 bool IOSurfaceImageTransportSurface::PostSubBuffer(
237 int x, int y, int width, int height) { 225 int x, int y, int width, int height) {
238 glFlush(); 226 glFlush();
239 227
240 GpuHostMsg_AcceleratedSurfacePostSubBuffer_Params params; 228 GpuHostMsg_AcceleratedSurfacePostSubBuffer_Params params;
241 params.surface_id = io_surface_id_; 229 params.surface_handle = io_surface_handle_;
242 params.x = x; 230 params.x = x;
243 params.y = y; 231 params.y = y;
244 params.width = width; 232 params.width = width;
245 params.height = height; 233 params.height = height;
246 helper_->SendAcceleratedSurfacePostSubBuffer(params); 234 helper_->SendAcceleratedSurfacePostSubBuffer(params);
247 235
248 helper_->SetScheduled(false); 236 helper_->SetScheduled(false);
249 return true; 237 return true;
250 } 238 }
251 239
(...skipping 11 matching lines...) Expand all
263 251
264 void IOSurfaceImageTransportSurface::OnBuffersSwappedACK() { 252 void IOSurfaceImageTransportSurface::OnBuffersSwappedACK() {
265 helper_->SetScheduled(true); 253 helper_->SetScheduled(true);
266 } 254 }
267 255
268 void IOSurfaceImageTransportSurface::OnPostSubBufferACK() { 256 void IOSurfaceImageTransportSurface::OnPostSubBufferACK() {
269 helper_->SetScheduled(true); 257 helper_->SetScheduled(true);
270 } 258 }
271 259
272 void IOSurfaceImageTransportSurface::OnNewSurfaceACK( 260 void IOSurfaceImageTransportSurface::OnNewSurfaceACK(
273 uint64 surface_id, 261 uint64 surface_handle,
274 TransportDIB::Handle /* shm_handle */) { 262 TransportDIB::Handle /* shm_handle */) {
275 DCHECK_EQ(io_surface_id_, surface_id); 263 DCHECK_EQ(io_surface_handle_, surface_handle);
276 helper_->SetScheduled(true); 264 helper_->SetScheduled(true);
277 } 265 }
278 266
279 void IOSurfaceImageTransportSurface::OnResizeViewACK() { 267 void IOSurfaceImageTransportSurface::OnResizeViewACK() {
280 NOTREACHED(); 268 NOTREACHED();
281 } 269 }
282 270
283 void IOSurfaceImageTransportSurface::OnResize(gfx::Size size) { 271 void IOSurfaceImageTransportSurface::OnResize(gfx::Size size) {
284 IOSurfaceSupport* io_surface_support = IOSurfaceSupport::Initialize(); 272 IOSurfaceSupport* io_surface_support = IOSurfaceSupport::Initialize();
285 273
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
346 static_cast<CGLContextObj>(context_->GetHandle()), 334 static_cast<CGLContextObj>(context_->GetHandle()),
347 target, 335 target,
348 GL_RGBA, 336 GL_RGBA,
349 size_.width(), 337 size_.width(),
350 size_.height(), 338 size_.height(),
351 GL_BGRA, 339 GL_BGRA,
352 GL_UNSIGNED_INT_8_8_8_8_REV, 340 GL_UNSIGNED_INT_8_8_8_8_REV,
353 io_surface_.get(), 341 io_surface_.get(),
354 plane); 342 plane);
355 343
356 io_surface_id_ = io_surface_support->IOSurfaceGetID(io_surface_); 344 io_surface_handle_ = io_surface_support->IOSurfaceGetID(io_surface_);
357 glFlush(); 345 glFlush();
358 346
359 glBindTexture(target, previous_texture_id); 347 glBindTexture(target, previous_texture_id);
360 glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, previous_fbo_id); 348 glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, previous_fbo_id);
361 349
362 GpuHostMsg_AcceleratedSurfaceNew_Params params; 350 GpuHostMsg_AcceleratedSurfaceNew_Params params;
363 params.width = size_.width(); 351 params.width = size_.width();
364 params.height = size_.height(); 352 params.height = size_.height();
365 params.surface_id = io_surface_id_; 353 params.surface_handle = io_surface_handle_;
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, manager, 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 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
453 glReadPixels(0, 0, 434 glReadPixels(0, 0,
454 size_.width(), size_.height(), 435 size_.width(), size_.height(),
455 GL_BGRA, // This pixel format should have no conversion. 436 GL_BGRA, // This pixel format should have no conversion.
456 GL_UNSIGNED_INT_8_8_8_8_REV, 437 GL_UNSIGNED_INT_8_8_8_8_REV,
457 shared_mem_->memory()); 438 shared_mem_->memory());
458 glPixelStorei(GL_PACK_ALIGNMENT, current_alignment); 439 glPixelStorei(GL_PACK_ALIGNMENT, current_alignment);
459 440
460 glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, previous_fbo_id); 441 glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, previous_fbo_id);
461 442
462 GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params params; 443 GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params params;
463 params.surface_id = next_id_; 444 params.surface_handle = next_handle_;
464 helper_->SendAcceleratedSurfaceBuffersSwapped(params); 445 helper_->SendAcceleratedSurfaceBuffersSwapped(params);
465 446
466 helper_->SetScheduled(false); 447 helper_->SetScheduled(false);
467 return true; 448 return true;
468 } 449 }
469 450
470 bool TransportDIBImageTransportSurface::PostSubBuffer( 451 bool TransportDIBImageTransportSurface::PostSubBuffer(
471 int x, int y, int width, int height) { 452 int x, int y, int width, int height) {
472 DCHECK_NE(shared_mem_.get(), static_cast<void*>(NULL)); 453 DCHECK_NE(shared_mem_.get(), static_cast<void*>(NULL));
473 454
(...skipping 16 matching lines...) Expand all
490 GL_BGRA, // This pixel format should have no conversion. 471 GL_BGRA, // This pixel format should have no conversion.
491 GL_UNSIGNED_INT_8_8_8_8_REV, 472 GL_UNSIGNED_INT_8_8_8_8_REV,
492 &buffer[(x + y * size_.width()) * 4]); 473 &buffer[(x + y * size_.width()) * 4]);
493 474
494 glPixelStorei(GL_PACK_ALIGNMENT, current_alignment); 475 glPixelStorei(GL_PACK_ALIGNMENT, current_alignment);
495 glPixelStorei(GL_PACK_ROW_LENGTH, current_pack_row_length); 476 glPixelStorei(GL_PACK_ROW_LENGTH, current_pack_row_length);
496 477
497 glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, previous_fbo_id); 478 glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, previous_fbo_id);
498 479
499 GpuHostMsg_AcceleratedSurfacePostSubBuffer_Params params; 480 GpuHostMsg_AcceleratedSurfacePostSubBuffer_Params params;
500 params.surface_id = next_id_; 481 params.surface_handle = next_handle_;
501 params.x = x; 482 params.x = x;
502 params.y = y; 483 params.y = y;
503 params.width = width; 484 params.width = width;
504 params.height = height; 485 params.height = height;
505 helper_->SendAcceleratedSurfacePostSubBuffer(params); 486 helper_->SendAcceleratedSurfacePostSubBuffer(params);
506 487
507 helper_->SetScheduled(false); 488 helper_->SetScheduled(false);
508 return true; 489 return true;
509 } 490 }
510 491
(...skipping 11 matching lines...) Expand all
522 503
523 void TransportDIBImageTransportSurface::OnBuffersSwappedACK() { 504 void TransportDIBImageTransportSurface::OnBuffersSwappedACK() {
524 helper_->SetScheduled(true); 505 helper_->SetScheduled(true);
525 } 506 }
526 507
527 void TransportDIBImageTransportSurface::OnPostSubBufferACK() { 508 void TransportDIBImageTransportSurface::OnPostSubBufferACK() {
528 helper_->SetScheduled(true); 509 helper_->SetScheduled(true);
529 } 510 }
530 511
531 void TransportDIBImageTransportSurface::OnNewSurfaceACK( 512 void TransportDIBImageTransportSurface::OnNewSurfaceACK(
532 uint64 surface_id, 513 uint64 surface_handle,
533 TransportDIB::Handle shm_handle) { 514 TransportDIB::Handle shm_handle) {
534 helper_->SetScheduled(true); 515 helper_->SetScheduled(true);
535 516
536 shared_mem_.reset(TransportDIB::Map(shm_handle)); 517 shared_mem_.reset(TransportDIB::Map(shm_handle));
537 DCHECK_NE(shared_mem_.get(), static_cast<void*>(NULL)); 518 DCHECK_NE(shared_mem_.get(), static_cast<void*>(NULL));
538 } 519 }
539 520
540 void TransportDIBImageTransportSurface::OnResizeViewACK() { 521 void TransportDIBImageTransportSurface::OnResizeViewACK() {
541 NOTREACHED(); 522 NOTREACHED();
542 } 523 }
(...skipping 20 matching lines...) Expand all
563 GL_COLOR_ATTACHMENT0_EXT, 544 GL_COLOR_ATTACHMENT0_EXT,
564 GL_RENDERBUFFER_EXT, 545 GL_RENDERBUFFER_EXT,
565 render_buffer_id_); 546 render_buffer_id_);
566 547
567 glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, previous_renderbuffer_id); 548 glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, previous_renderbuffer_id);
568 glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, previous_fbo_id); 549 glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, previous_fbo_id);
569 550
570 GpuHostMsg_AcceleratedSurfaceNew_Params params; 551 GpuHostMsg_AcceleratedSurfaceNew_Params params;
571 params.width = size_.width(); 552 params.width = size_.width();
572 params.height = size_.height(); 553 params.height = size_.height();
573 params.surface_id = next_id_++; 554 params.surface_handle = next_handle_++;
574 params.create_transport_dib = true; 555 params.create_transport_dib = true;
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
« no previous file with comments | « content/common/gpu/image_transport_surface_linux.cc ('k') | content/common/gpu/image_transport_surface_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698