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

Side by Side Diff: ui/gl/gl_surface_ozone.cc

Issue 1513283002: Add support to send optimal format as part of ScheduleOverlayPlane (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Update cmd_buffer_functions Created 5 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
« no previous file with comments | « ui/gl/gl_surface_overlay.cc ('k') | ui/ozone/demo/surfaceless_gl_renderer.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "ui/gl/gl_surface.h" 5 #include "ui/gl/gl_surface.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/callback.h" 8 #include "base/callback.h"
9 #include "base/location.h" 9 #include "base/location.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 public: 44 public:
45 GLSurfaceOzoneEGL(scoped_ptr<ui::SurfaceOzoneEGL> ozone_surface, 45 GLSurfaceOzoneEGL(scoped_ptr<ui::SurfaceOzoneEGL> ozone_surface,
46 AcceleratedWidget widget); 46 AcceleratedWidget widget);
47 47
48 // GLSurface: 48 // GLSurface:
49 bool Initialize() override; 49 bool Initialize() override;
50 bool Resize(const gfx::Size& size, float scale_factor) override; 50 bool Resize(const gfx::Size& size, float scale_factor) override;
51 gfx::SwapResult SwapBuffers() override; 51 gfx::SwapResult SwapBuffers() override;
52 bool ScheduleOverlayPlane(int z_order, 52 bool ScheduleOverlayPlane(int z_order,
53 OverlayTransform transform, 53 OverlayTransform transform,
54 gfx::BufferFormat storage_format,
54 GLImage* image, 55 GLImage* image,
55 const Rect& bounds_rect, 56 const Rect& bounds_rect,
56 const RectF& crop_rect) override; 57 const RectF& crop_rect,
58 bool handle_scaling) override;
57 59
58 private: 60 private:
59 using NativeViewGLSurfaceEGL::Initialize; 61 using NativeViewGLSurfaceEGL::Initialize;
60 62
61 ~GLSurfaceOzoneEGL() override; 63 ~GLSurfaceOzoneEGL() override;
62 64
63 bool ReinitializeNativeSurface(); 65 bool ReinitializeNativeSurface();
64 66
65 // The native surface. Deleting this is allowed to free the EGLNativeWindow. 67 // The native surface. Deleting this is allowed to free the EGLNativeWindow.
66 scoped_ptr<ui::SurfaceOzoneEGL> ozone_surface_; 68 scoped_ptr<ui::SurfaceOzoneEGL> ozone_surface_;
(...skipping 27 matching lines...) Expand all
94 gfx::SwapResult result = NativeViewGLSurfaceEGL::SwapBuffers(); 96 gfx::SwapResult result = NativeViewGLSurfaceEGL::SwapBuffers();
95 if (result != gfx::SwapResult::SWAP_ACK) 97 if (result != gfx::SwapResult::SWAP_ACK)
96 return result; 98 return result;
97 99
98 return ozone_surface_->OnSwapBuffers() ? gfx::SwapResult::SWAP_ACK 100 return ozone_surface_->OnSwapBuffers() ? gfx::SwapResult::SWAP_ACK
99 : gfx::SwapResult::SWAP_FAILED; 101 : gfx::SwapResult::SWAP_FAILED;
100 } 102 }
101 103
102 bool GLSurfaceOzoneEGL::ScheduleOverlayPlane(int z_order, 104 bool GLSurfaceOzoneEGL::ScheduleOverlayPlane(int z_order,
103 OverlayTransform transform, 105 OverlayTransform transform,
106 gfx::BufferFormat storage_format,
104 GLImage* image, 107 GLImage* image,
105 const Rect& bounds_rect, 108 const Rect& bounds_rect,
106 const RectF& crop_rect) { 109 const RectF& crop_rect,
107 return image->ScheduleOverlayPlane(widget_, z_order, transform, bounds_rect, 110 bool handle_scaling) {
108 crop_rect); 111 return image->ScheduleOverlayPlane(widget_, z_order, transform,
112 storage_format, bounds_rect,
113 crop_rect, handle_scaling);
109 } 114 }
110 115
111 GLSurfaceOzoneEGL::~GLSurfaceOzoneEGL() { 116 GLSurfaceOzoneEGL::~GLSurfaceOzoneEGL() {
112 Destroy(); // The EGL surface must be destroyed before SurfaceOzone. 117 Destroy(); // The EGL surface must be destroyed before SurfaceOzone.
113 } 118 }
114 119
115 bool GLSurfaceOzoneEGL::ReinitializeNativeSurface() { 120 bool GLSurfaceOzoneEGL::ReinitializeNativeSurface() {
116 scoped_ptr<ui::ScopedMakeCurrent> scoped_make_current; 121 scoped_ptr<ui::ScopedMakeCurrent> scoped_make_current;
117 GLContext* current_context = GLContext::GetCurrent(); 122 GLContext* current_context = GLContext::GetCurrent();
118 bool was_current = current_context && current_context->IsCurrent(this); 123 bool was_current = current_context && current_context->IsCurrent(this);
(...skipping 23 matching lines...) Expand all
142 public: 147 public:
143 GLSurfaceOzoneSurfaceless(scoped_ptr<ui::SurfaceOzoneEGL> ozone_surface, 148 GLSurfaceOzoneSurfaceless(scoped_ptr<ui::SurfaceOzoneEGL> ozone_surface,
144 AcceleratedWidget widget); 149 AcceleratedWidget widget);
145 150
146 // GLSurface: 151 // GLSurface:
147 bool Initialize() override; 152 bool Initialize() override;
148 bool Resize(const gfx::Size& size, float scale_factor) override; 153 bool Resize(const gfx::Size& size, float scale_factor) override;
149 gfx::SwapResult SwapBuffers() override; 154 gfx::SwapResult SwapBuffers() override;
150 bool ScheduleOverlayPlane(int z_order, 155 bool ScheduleOverlayPlane(int z_order,
151 OverlayTransform transform, 156 OverlayTransform transform,
157 gfx::BufferFormat storage_format,
152 GLImage* image, 158 GLImage* image,
153 const Rect& bounds_rect, 159 const Rect& bounds_rect,
154 const RectF& crop_rect) override; 160 const RectF& crop_rect,
161 bool handle_scaling) override;
155 bool IsOffscreen() override; 162 bool IsOffscreen() override;
156 VSyncProvider* GetVSyncProvider() override; 163 VSyncProvider* GetVSyncProvider() override;
157 bool SupportsAsyncSwap() override; 164 bool SupportsAsyncSwap() override;
158 bool SupportsPostSubBuffer() override; 165 bool SupportsPostSubBuffer() override;
159 gfx::SwapResult PostSubBuffer(int x, int y, int width, int height) override; 166 gfx::SwapResult PostSubBuffer(int x, int y, int width, int height) override;
160 void SwapBuffersAsync(const SwapCompletionCallback& callback) override; 167 void SwapBuffersAsync(const SwapCompletionCallback& callback) override;
161 void PostSubBufferAsync(int x, 168 void PostSubBufferAsync(int x,
162 int y, 169 int y,
163 int width, 170 int width,
164 int height, 171 int height,
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
256 glFinish(); 263 glFinish();
257 } 264 }
258 265
259 unsubmitted_frames_.back()->ScheduleOverlayPlanes(widget_); 266 unsubmitted_frames_.back()->ScheduleOverlayPlanes(widget_);
260 unsubmitted_frames_.back()->overlays.clear(); 267 unsubmitted_frames_.back()->overlays.clear();
261 268
262 return ozone_surface_->OnSwapBuffers() ? gfx::SwapResult::SWAP_ACK 269 return ozone_surface_->OnSwapBuffers() ? gfx::SwapResult::SWAP_ACK
263 : gfx::SwapResult::SWAP_FAILED; 270 : gfx::SwapResult::SWAP_FAILED;
264 } 271 }
265 272
266 bool GLSurfaceOzoneSurfaceless::ScheduleOverlayPlane(int z_order, 273 bool GLSurfaceOzoneSurfaceless::ScheduleOverlayPlane(
267 OverlayTransform transform, 274 int z_order, OverlayTransform transform,
268 GLImage* image, 275 gfx::BufferFormat storage_format, GLImage* image,
269 const Rect& bounds_rect, 276 const Rect& bounds_rect, const RectF& crop_rect,
270 const RectF& crop_rect) { 277 bool handle_scaling) {
271 unsubmitted_frames_.back()->overlays.push_back( 278 unsubmitted_frames_.back()->overlays.push_back(
272 GLSurfaceOverlay(z_order, transform, image, bounds_rect, crop_rect)); 279 GLSurfaceOverlay(z_order, transform, storage_format, image, bounds_rect,
280 crop_rect, handle_scaling));
273 return true; 281 return true;
274 } 282 }
275 283
276 bool GLSurfaceOzoneSurfaceless::IsOffscreen() { 284 bool GLSurfaceOzoneSurfaceless::IsOffscreen() {
277 return false; 285 return false;
278 } 286 }
279 287
280 VSyncProvider* GLSurfaceOzoneSurfaceless::GetVSyncProvider() { 288 VSyncProvider* GLSurfaceOzoneSurfaceless::GetVSyncProvider() {
281 return vsync_provider_.get(); 289 return vsync_provider_.get();
282 } 290 }
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after
477 CreatePixmaps(); 485 CreatePixmaps();
478 } 486 }
479 487
480 bool GLSurfaceOzoneSurfacelessSurfaceImpl::SupportsPostSubBuffer() { 488 bool GLSurfaceOzoneSurfacelessSurfaceImpl::SupportsPostSubBuffer() {
481 return false; 489 return false;
482 } 490 }
483 491
484 gfx::SwapResult GLSurfaceOzoneSurfacelessSurfaceImpl::SwapBuffers() { 492 gfx::SwapResult GLSurfaceOzoneSurfacelessSurfaceImpl::SwapBuffers() {
485 if (!images_[current_surface_]->ScheduleOverlayPlane( 493 if (!images_[current_surface_]->ScheduleOverlayPlane(
486 widget_, 0, OverlayTransform::OVERLAY_TRANSFORM_NONE, 494 widget_, 0, OverlayTransform::OVERLAY_TRANSFORM_NONE,
487 gfx::Rect(GetSize()), gfx::RectF(1, 1))) 495 gfx::BufferFormat::BGRX_8888, gfx::Rect(GetSize()),
496 gfx::RectF(1, 1), true)) {
488 return gfx::SwapResult::SWAP_FAILED; 497 return gfx::SwapResult::SWAP_FAILED;
498 }
489 gfx::SwapResult result = GLSurfaceOzoneSurfaceless::SwapBuffers(); 499 gfx::SwapResult result = GLSurfaceOzoneSurfaceless::SwapBuffers();
490 if (result != gfx::SwapResult::SWAP_ACK) 500 if (result != gfx::SwapResult::SWAP_ACK)
491 return result; 501 return result;
492 current_surface_ ^= 1; 502 current_surface_ ^= 1;
493 BindFramebuffer(); 503 BindFramebuffer();
494 return gfx::SwapResult::SWAP_ACK; 504 return gfx::SwapResult::SWAP_ACK;
495 } 505 }
496 506
497 void GLSurfaceOzoneSurfacelessSurfaceImpl::SwapBuffersAsync( 507 void GLSurfaceOzoneSurfacelessSurfaceImpl::SwapBuffersAsync(
498 const SwapCompletionCallback& callback) { 508 const SwapCompletionCallback& callback) {
499 if (!images_[current_surface_]->ScheduleOverlayPlane( 509 if (!images_[current_surface_]->ScheduleOverlayPlane(
500 widget_, 0, OverlayTransform::OVERLAY_TRANSFORM_NONE, 510 widget_, 0, OverlayTransform::OVERLAY_TRANSFORM_NONE,
501 gfx::Rect(GetSize()), gfx::RectF(1, 1))) { 511 gfx::BufferFormat::BGRX_8888, gfx::Rect(GetSize()),
512 gfx::RectF(1, 1), true)) {
502 callback.Run(gfx::SwapResult::SWAP_FAILED); 513 callback.Run(gfx::SwapResult::SWAP_FAILED);
503 return; 514 return;
504 } 515 }
505 GLSurfaceOzoneSurfaceless::SwapBuffersAsync(callback); 516 GLSurfaceOzoneSurfaceless::SwapBuffersAsync(callback);
506 current_surface_ ^= 1; 517 current_surface_ ^= 1;
507 BindFramebuffer(); 518 BindFramebuffer();
508 } 519 }
509 520
510 void GLSurfaceOzoneSurfacelessSurfaceImpl::Destroy() { 521 void GLSurfaceOzoneSurfacelessSurfaceImpl::Destroy() {
511 if (!context_) 522 if (!context_)
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
701 } 712 }
702 } 713 }
703 714
704 EGLNativeDisplayType GetPlatformDefaultEGLNativeDisplay() { 715 EGLNativeDisplayType GetPlatformDefaultEGLNativeDisplay() {
705 return ui::OzonePlatform::GetInstance() 716 return ui::OzonePlatform::GetInstance()
706 ->GetSurfaceFactoryOzone() 717 ->GetSurfaceFactoryOzone()
707 ->GetNativeDisplay(); 718 ->GetNativeDisplay();
708 } 719 }
709 720
710 } // namespace gfx 721 } // namespace gfx
OLDNEW
« no previous file with comments | « ui/gl/gl_surface_overlay.cc ('k') | ui/ozone/demo/surfaceless_gl_renderer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698