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

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

Issue 8513013: Plumb the partial swap though image transport. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Now with a few compile fixes (tested Win, Mac, Linux, and Aura) Created 9 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 // This conflicts with the defines in Xlib.h and must come first. 9 // This conflicts with the defines in Xlib.h and must come first.
10 #include "content/common/gpu/gpu_messages.h" 10 #include "content/common/gpu/gpu_messages.h"
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 EGLImageTransportSurface(GpuChannelManager* manager, 60 EGLImageTransportSurface(GpuChannelManager* manager,
61 int32 render_view_id, 61 int32 render_view_id,
62 int32 renderer_id, 62 int32 renderer_id,
63 int32 command_buffer_id); 63 int32 command_buffer_id);
64 64
65 // GLSurface implementation 65 // GLSurface implementation
66 virtual bool Initialize() OVERRIDE; 66 virtual bool Initialize() OVERRIDE;
67 virtual void Destroy() OVERRIDE; 67 virtual void Destroy() OVERRIDE;
68 virtual bool IsOffscreen() OVERRIDE; 68 virtual bool IsOffscreen() OVERRIDE;
69 virtual bool SwapBuffers() OVERRIDE; 69 virtual bool SwapBuffers() OVERRIDE;
70 virtual bool PostSubBuffer(int x, int y, int width, int height) OVERRIDE;
71 virtual std::string GetExtensions() OVERRIDE;
70 virtual gfx::Size GetSize() OVERRIDE; 72 virtual gfx::Size GetSize() OVERRIDE;
71 virtual bool OnMakeCurrent(gfx::GLContext* context) OVERRIDE; 73 virtual bool OnMakeCurrent(gfx::GLContext* context) OVERRIDE;
72 virtual unsigned int GetBackingFrameBufferObject() OVERRIDE; 74 virtual unsigned int GetBackingFrameBufferObject() OVERRIDE;
73 virtual void SetVisible(bool visible) OVERRIDE; 75 virtual void SetVisible(bool visible) OVERRIDE;
74 76
75 protected: 77 protected:
76 // ImageTransportSurface implementation 78 // ImageTransportSurface implementation
77 virtual void OnNewSurfaceACK( 79 virtual void OnNewSurfaceACK(
78 uint64 surface_id, TransportDIB::Handle surface_handle) OVERRIDE; 80 uint64 surface_id, TransportDIB::Handle surface_handle) OVERRIDE;
79 virtual void OnBuffersSwappedACK() OVERRIDE; 81 virtual void OnBuffersSwappedACK() OVERRIDE;
82 virtual void OnPostSubBufferACK() OVERRIDE;
80 virtual void OnResizeViewACK() OVERRIDE; 83 virtual void OnResizeViewACK() OVERRIDE;
81 virtual void OnResize(gfx::Size size) OVERRIDE; 84 virtual void OnResize(gfx::Size size) OVERRIDE;
82 85
83 private: 86 private:
84 virtual ~EGLImageTransportSurface() OVERRIDE; 87 virtual ~EGLImageTransportSurface() OVERRIDE;
85 void ReleaseSurface(scoped_refptr<EGLAcceleratedSurface>* surface); 88 void ReleaseSurface(scoped_refptr<EGLAcceleratedSurface>* surface);
86 89
87 uint32 fbo_id_; 90 uint32 fbo_id_;
88 91
89 scoped_refptr<EGLAcceleratedSurface> back_surface_; 92 scoped_refptr<EGLAcceleratedSurface> back_surface_;
(...skipping 14 matching lines...) Expand all
104 public: 107 public:
105 GLXImageTransportSurface(GpuChannelManager* manager, 108 GLXImageTransportSurface(GpuChannelManager* manager,
106 int32 render_view_id, 109 int32 render_view_id,
107 int32 renderer_id, 110 int32 renderer_id,
108 int32 command_buffer_id); 111 int32 command_buffer_id);
109 112
110 // gfx::GLSurface implementation: 113 // gfx::GLSurface implementation:
111 virtual bool Initialize() OVERRIDE; 114 virtual bool Initialize() OVERRIDE;
112 virtual void Destroy() OVERRIDE; 115 virtual void Destroy() OVERRIDE;
113 virtual bool SwapBuffers() OVERRIDE; 116 virtual bool SwapBuffers() OVERRIDE;
117 virtual bool PostSubBuffer(int x, int y, int width, int height) OVERRIDE;
114 virtual gfx::Size GetSize() OVERRIDE; 118 virtual gfx::Size GetSize() OVERRIDE;
115 virtual bool OnMakeCurrent(gfx::GLContext* context) OVERRIDE; 119 virtual bool OnMakeCurrent(gfx::GLContext* context) OVERRIDE;
116 virtual void SetVisible(bool visible) OVERRIDE; 120 virtual void SetVisible(bool visible) OVERRIDE;
117 121
118 protected: 122 protected:
119 // ImageTransportSurface implementation: 123 // ImageTransportSurface implementation:
120 virtual void OnNewSurfaceACK( 124 virtual void OnNewSurfaceACK(
121 uint64 surface_id, TransportDIB::Handle surface_handle) OVERRIDE; 125 uint64 surface_id, TransportDIB::Handle surface_handle) OVERRIDE;
122 virtual void OnBuffersSwappedACK() OVERRIDE; 126 virtual void OnBuffersSwappedACK() OVERRIDE;
127 virtual void OnPostSubBufferACK() OVERRIDE;
123 virtual void OnResizeViewACK() OVERRIDE; 128 virtual void OnResizeViewACK() OVERRIDE;
124 virtual void OnResize(gfx::Size size) OVERRIDE; 129 virtual void OnResize(gfx::Size size) OVERRIDE;
125 130
126 private: 131 private:
127 virtual ~GLXImageTransportSurface(); 132 virtual ~GLXImageTransportSurface();
128 133
129 // Tell the browser to release the surface. 134 // Tell the browser to release the surface.
130 void ReleaseSurface(); 135 void ReleaseSurface();
131 136
132 XID dummy_parent_; 137 XID dummy_parent_;
(...skipping 22 matching lines...) Expand all
155 OSMesaImageTransportSurface(GpuChannelManager* manager, 160 OSMesaImageTransportSurface(GpuChannelManager* manager,
156 int32 render_view_id, 161 int32 render_view_id,
157 int32 renderer_id, 162 int32 renderer_id,
158 int32 command_buffer_id); 163 int32 command_buffer_id);
159 164
160 // gfx::GLSurface implementation: 165 // gfx::GLSurface implementation:
161 virtual bool Initialize() OVERRIDE; 166 virtual bool Initialize() OVERRIDE;
162 virtual void Destroy() OVERRIDE; 167 virtual void Destroy() OVERRIDE;
163 virtual bool IsOffscreen() OVERRIDE; 168 virtual bool IsOffscreen() OVERRIDE;
164 virtual bool SwapBuffers() OVERRIDE; 169 virtual bool SwapBuffers() OVERRIDE;
170 virtual bool PostSubBuffer(int x, int y, int width, int height) OVERRIDE;
171 virtual std::string GetExtensions() OVERRIDE;
165 virtual gfx::Size GetSize() OVERRIDE; 172 virtual gfx::Size GetSize() OVERRIDE;
166 173
167 protected: 174 protected:
168 // ImageTransportSurface implementation: 175 // ImageTransportSurface implementation:
169 virtual void OnNewSurfaceACK( 176 virtual void OnNewSurfaceACK(
170 uint64 surface_id, TransportDIB::Handle surface_handle) OVERRIDE; 177 uint64 surface_id, TransportDIB::Handle surface_handle) OVERRIDE;
171 virtual void OnBuffersSwappedACK() OVERRIDE; 178 virtual void OnBuffersSwappedACK() OVERRIDE;
179 virtual void OnPostSubBufferACK() OVERRIDE;
172 virtual void OnResizeViewACK() OVERRIDE; 180 virtual void OnResizeViewACK() OVERRIDE;
173 virtual void OnResize(gfx::Size size) OVERRIDE; 181 virtual void OnResize(gfx::Size size) OVERRIDE;
174 182
175 private: 183 private:
176 virtual ~OSMesaImageTransportSurface(); 184 virtual ~OSMesaImageTransportSurface();
177 185
178 // Tell the browser to release the surface. 186 // Tell the browser to release the surface.
179 void ReleaseSurface(); 187 void ReleaseSurface();
180 188
181 scoped_ptr<TransportDIB> shared_mem_; 189 scoped_ptr<TransportDIB> shared_mem_;
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
356 glFramebufferTexture2DEXT(GL_FRAMEBUFFER, 364 glFramebufferTexture2DEXT(GL_FRAMEBUFFER,
357 GL_COLOR_ATTACHMENT0, 365 GL_COLOR_ATTACHMENT0,
358 GL_TEXTURE_2D, 366 GL_TEXTURE_2D,
359 back_surface_->texture(), 367 back_surface_->texture(),
360 0); 368 0);
361 } 369 }
362 helper_->SetScheduled(false); 370 helper_->SetScheduled(false);
363 return true; 371 return true;
364 } 372 }
365 373
374 bool EGLImageTransportSurface::PostSubBuffer(
375 int x, int y, int width, int height) {
376 NOTREACHED();
377 return false;
378 }
379
380 std::string EGLImageTransportSurface::GetExtensions() {
381 return GLSurface::GetExtensions();
382 }
383
366 gfx::Size EGLImageTransportSurface::GetSize() { 384 gfx::Size EGLImageTransportSurface::GetSize() {
367 return back_surface_->size(); 385 return back_surface_->size();
368 } 386 }
369 387
370 void EGLImageTransportSurface::OnNewSurfaceACK( 388 void EGLImageTransportSurface::OnNewSurfaceACK(
371 uint64 surface_id, TransportDIB::Handle /*surface_handle*/) { 389 uint64 surface_id, TransportDIB::Handle /*surface_handle*/) {
372 DCHECK_EQ(back_surface_->pixmap(), surface_id); 390 DCHECK_EQ(back_surface_->pixmap(), surface_id);
373 helper_->SetScheduled(true); 391 helper_->SetScheduled(true);
374 } 392 }
375 393
376 void EGLImageTransportSurface::OnBuffersSwappedACK() { 394 void EGLImageTransportSurface::OnBuffersSwappedACK() {
377 helper_->SetScheduled(true); 395 helper_->SetScheduled(true);
378 } 396 }
379 397
398 void EGLImageTransportSurface::OnPostSubBufferACK() {
399 NOTREACHED();
400 }
380 401
381 void EGLImageTransportSurface::OnResizeViewACK() { 402 void EGLImageTransportSurface::OnResizeViewACK() {
382 NOTREACHED(); 403 NOTREACHED();
383 } 404 }
384 405
385 GLXImageTransportSurface::GLXImageTransportSurface( 406 GLXImageTransportSurface::GLXImageTransportSurface(
386 GpuChannelManager* manager, 407 GpuChannelManager* manager,
387 int32 render_view_id, 408 int32 render_view_id,
388 int32 renderer_id, 409 int32 renderer_id,
389 int32 command_buffer_id) 410 int32 command_buffer_id)
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
506 } 527 }
507 528
508 GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params params; 529 GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params params;
509 params.surface_id = window_; 530 params.surface_id = window_;
510 helper_->SendAcceleratedSurfaceBuffersSwapped(params); 531 helper_->SendAcceleratedSurfaceBuffersSwapped(params);
511 532
512 helper_->SetScheduled(false); 533 helper_->SetScheduled(false);
513 return true; 534 return true;
514 } 535 }
515 536
537 bool GLXImageTransportSurface::PostSubBuffer(
538 int x, int y, int width, int height) {
539 gfx::NativeViewGLSurfaceGLX::PostSubBuffer(x, y, width, height);
540 glFlush();
541
542 if (needs_resize_) {
543 GpuHostMsg_AcceleratedSurfaceNew_Params params;
544 params.width = size_.width();
545 params.height = size_.height();
546 params.surface_id = window_;
547 helper_->SendAcceleratedSurfaceNew(params);
548 bound_ = true;
549 needs_resize_ = false;
550 }
551
552 GpuHostMsg_AcceleratedSurfacePostSubBuffer_Params params;
553 params.surface_id = window_;
554 params.x = x;
555 params.y = y;
556 params.width = width;
557 params.height = height;
558
559 helper_->SendAcceleratedSurfacePostSubBuffer(params);
560
561 helper_->SetScheduled(false);
562 return true;
563 }
564
516 gfx::Size GLXImageTransportSurface::GetSize() { 565 gfx::Size GLXImageTransportSurface::GetSize() {
517 return size_; 566 return size_;
518 } 567 }
519 568
520 bool GLXImageTransportSurface::OnMakeCurrent(gfx::GLContext* context) { 569 bool GLXImageTransportSurface::OnMakeCurrent(gfx::GLContext* context) {
521 if (made_current_) 570 if (made_current_)
522 return true; 571 return true;
523 572
524 // Check for driver support. 573 // Check for driver support.
525 Display* dpy = static_cast<Display*>(GetDisplay()); 574 Display* dpy = static_cast<Display*>(GetDisplay());
(...skipping 14 matching lines...) Expand all
540 } 589 }
541 590
542 void GLXImageTransportSurface::OnNewSurfaceACK( 591 void GLXImageTransportSurface::OnNewSurfaceACK(
543 uint64 surface_id, TransportDIB::Handle /*surface_handle*/) { 592 uint64 surface_id, TransportDIB::Handle /*surface_handle*/) {
544 } 593 }
545 594
546 void GLXImageTransportSurface::OnBuffersSwappedACK() { 595 void GLXImageTransportSurface::OnBuffersSwappedACK() {
547 helper_->SetScheduled(true); 596 helper_->SetScheduled(true);
548 } 597 }
549 598
599 void GLXImageTransportSurface::OnPostSubBufferACK() {
600 helper_->SetScheduled(true);
601 }
602
550 void GLXImageTransportSurface::OnResizeViewACK() { 603 void GLXImageTransportSurface::OnResizeViewACK() {
551 NOTREACHED(); 604 NOTREACHED();
552 } 605 }
553 606
554 OSMesaImageTransportSurface::OSMesaImageTransportSurface( 607 OSMesaImageTransportSurface::OSMesaImageTransportSurface(
555 GpuChannelManager* manager, 608 GpuChannelManager* manager,
556 int32 render_view_id, 609 int32 render_view_id,
557 int32 renderer_id, 610 int32 renderer_id,
558 int32 command_buffer_id) 611 int32 command_buffer_id)
559 : gfx::GLSurfaceOSMesa(OSMESA_RGBA, gfx::Size(1, 1)), 612 : gfx::GLSurfaceOSMesa(OSMESA_RGBA, gfx::Size(1, 1)),
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
641 memcpy(shared_mem_->memory(), GetHandle(), size_.GetArea() * 4); 694 memcpy(shared_mem_->memory(), GetHandle(), size_.GetArea() * 4);
642 695
643 GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params params; 696 GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params params;
644 params.surface_id = shared_id_; 697 params.surface_id = shared_id_;
645 helper_->SendAcceleratedSurfaceBuffersSwapped(params); 698 helper_->SendAcceleratedSurfaceBuffersSwapped(params);
646 699
647 helper_->SetScheduled(false); 700 helper_->SetScheduled(false);
648 return true; 701 return true;
649 } 702 }
650 703
704 bool OSMesaImageTransportSurface::PostSubBuffer(
705 int x, int y, int width, int height) {
706 NOTREACHED();
707 return false;
708 }
709
710 std::string OSMesaImageTransportSurface::GetExtensions() {
711 return GLSurface::GetExtensions();
712 }
713
651 void OSMesaImageTransportSurface::OnBuffersSwappedACK() { 714 void OSMesaImageTransportSurface::OnBuffersSwappedACK() {
652 helper_->SetScheduled(true); 715 helper_->SetScheduled(true);
653 } 716 }
654 717
718 void OSMesaImageTransportSurface::OnPostSubBufferACK() {
719 NOTREACHED();
720 }
721
655 gfx::Size OSMesaImageTransportSurface::GetSize() { 722 gfx::Size OSMesaImageTransportSurface::GetSize() {
656 return size_; 723 return size_;
657 } 724 }
658 725
659 } // namespace 726 } // namespace
660 727
661 // static 728 // static
662 scoped_refptr<gfx::GLSurface> ImageTransportSurface::CreateSurface( 729 scoped_refptr<gfx::GLSurface> ImageTransportSurface::CreateSurface(
663 GpuChannelManager* manager, 730 GpuChannelManager* manager,
664 int32 render_view_id, 731 int32 render_view_id,
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
701 command_buffer_id, 768 command_buffer_id,
702 surface.get()); 769 surface.get());
703 #endif 770 #endif
704 if (surface->Initialize()) 771 if (surface->Initialize())
705 return surface; 772 return surface;
706 else 773 else
707 return NULL; 774 return NULL;
708 } 775 }
709 776
710 #endif // defined(USE_GPU) 777 #endif // defined(USE_GPU)
OLDNEW
« no previous file with comments | « content/common/gpu/image_transport_surface.cc ('k') | content/common/gpu/image_transport_surface_mac.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698