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

Unified Diff: cc/surfaces/display.cc

Issue 2096843002: mus+ash: Enable Chrome HW rendering in mus+ash (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Update Created 4 years, 6 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 side-by-side diff with in-line comments
Download patch
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(

Powered by Google App Engine
This is Rietveld 408576698