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( |