Chromium Code Reviews| Index: cc/surfaces/display.cc |
| diff --git a/cc/surfaces/display.cc b/cc/surfaces/display.cc |
| index 3709cabb79530490977055028e80983d7c47b854..c129bdd73bec30d708d46c40786a222847631c24 100644 |
| --- a/cc/surfaces/display.cc |
| +++ b/cc/surfaces/display.cc |
| @@ -12,6 +12,7 @@ |
| #include "cc/debug/benchmark_instrumentation.h" |
| #include "cc/output/compositor_frame.h" |
| #include "cc/output/compositor_frame_ack.h" |
| +#include "cc/output/delegating_renderer.h" |
| #include "cc/output/direct_renderer.h" |
| #include "cc/output/gl_renderer.h" |
| #include "cc/output/renderer_settings.h" |
| @@ -158,13 +159,22 @@ void Display::InitializeRenderer() { |
| std::vector<unsigned>(static_cast<size_t>(gfx::BufferFormat::LAST) + 1, |
| GL_TEXTURE_2D))); |
| - if (output_surface_->context_provider()) { |
| + if (output_surface_->context_provider() && |
| + !output_surface_->capabilities().delegated_rendering) { |
| std::unique_ptr<GLRenderer> renderer = GLRenderer::Create( |
| this, &settings_, output_surface_.get(), resource_provider.get(), |
| texture_mailbox_deleter_.get(), settings_.highp_threshold_min); |
| if (!renderer) |
| return; |
| renderer_ = std::move(renderer); |
| + } else if (output_surface_->context_provider() && |
| + output_surface_->capabilities().delegated_rendering) { |
| + std::unique_ptr<DelegatingRenderer> renderer = DelegatingRenderer::Create( |
|
danakj
2016/06/27 18:48:39
I don't understand this, and am trying to do the o
danakj
2016/06/27 18:57:28
re: offline explanation.
I don't think there shou
|
| + this, &settings_, output_surface_.get(), resource_provider.get()); |
| + if (!renderer) |
| + return; |
| + renderer_ = std::move(renderer); |
| + |
| } else if (output_surface_->vulkan_context_provider()) { |
| #if defined(ENABLE_VULKAN) |
| std::unique_ptr<VulkanRenderer> renderer = VulkanRenderer::Create( |
| @@ -184,14 +194,19 @@ void Display::InitializeRenderer() { |
| return; |
| renderer_ = std::move(renderer); |
| } |
| - |
| - renderer_->SetEnlargePassTextureAmount(enlarge_texture_amount_); |
| - |
| resource_provider_ = std::move(resource_provider); |
| - // TODO(jbauman): Outputting an incomplete quad list doesn't work when using |
| - // overlays. |
| - bool output_partial_list = renderer_->Capabilities().using_partial_swap && |
| - !output_surface_->GetOverlayCandidateValidator(); |
| + |
| + bool output_partial_list = false; |
| + if (renderer_) { |
| + if (!output_surface_->capabilities().delegated_rendering) { |
| + static_cast<DirectRenderer*>(renderer_.get()) |
| + ->SetEnlargePassTextureAmount(enlarge_texture_amount_); |
| + } |
| + // TODO(jbauman): Outputting an incomplete quad list doesn't work when using |
| + // overlays. |
| + output_partial_list = renderer_->Capabilities().using_partial_swap && |
| + !output_surface_->GetOverlayCandidateValidator(); |
| + } |
| aggregator_.reset(new SurfaceAggregator( |
| surface_manager_, resource_provider_.get(), output_partial_list)); |
| aggregator_->set_output_is_secure(output_is_secure_); |
| @@ -330,8 +345,8 @@ void Display::DidSwapBuffers() { |
| void Display::DidSwapBuffersComplete() { |
| if (scheduler_) |
| scheduler_->DidSwapBuffersComplete(); |
| - if (renderer_) |
| - renderer_->SwapBuffersComplete(); |
| + if (renderer_ && !output_surface_->capabilities().delegated_rendering) |
| + static_cast<DirectRenderer*>(renderer_.get())->SwapBuffersComplete(); |
| } |
| void Display::CommitVSyncParameters(base::TimeTicks timebase, |
| @@ -342,8 +357,10 @@ void Display::CommitVSyncParameters(base::TimeTicks timebase, |
| void Display::DidReceiveTextureInUseResponses( |
| const gpu::TextureInUseResponses& responses) { |
| - if (renderer_) |
| - renderer_->DidReceiveTextureInUseResponses(responses); |
| + if (renderer_ && !output_surface_->capabilities().delegated_rendering) { |
| + static_cast<DirectRenderer*>(renderer_.get()) |
| + ->DidReceiveTextureInUseResponses(responses); |
| + } |
| } |
| void Display::SetBeginFrameSource(BeginFrameSource* source) { |
| @@ -370,7 +387,9 @@ void Display::SetNeedsRedrawRect(const gfx::Rect& damage_rect) { |
| } |
| void Display::ReclaimResources(const CompositorFrameAck* ack) { |
| - NOTREACHED(); |
| + DCHECK(output_surface_->capabilities().delegated_rendering); |
| + if (renderer_) |
| + renderer_->ReceiveSwapBuffersAck(*ack); |
| } |
| void Display::SetExternalTilePriorityConstraints( |