Commit 7bf4cf43 authored by kylechar's avatar kylechar Committed by Commit Bot

Add supports_dc_video_overlays capability

This CL adds OutputSurface::Capabilities::supports_dc_video_overlays. In
a previous CL I added supports_dc_layers. This only indicates the
support for direct composition though, not direct composition video
overlays, so a second flag is necessary.

Bug: 1007055
Change-Id: I8b916f3051c595b3be98d639b26c04ac23bb977d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1822018
Commit-Queue: kylechar <kylechar@chromium.org>
Reviewed-by: default avatarSunny Sachanandani <sunnyps@chromium.org>
Cr-Commit-Position: refs/heads/master@{#699482}
parent 315dcd44
...@@ -291,7 +291,7 @@ DCLayerOverlay::~DCLayerOverlay() = default; ...@@ -291,7 +291,7 @@ DCLayerOverlay::~DCLayerOverlay() = default;
DCLayerOverlayProcessor::DCLayerOverlayProcessor( DCLayerOverlayProcessor::DCLayerOverlayProcessor(
const OutputSurface::Capabilities& capabilities, const OutputSurface::Capabilities& capabilities,
const RendererSettings& settings) const RendererSettings& settings)
: has_hw_overlay_support_(capabilities.supports_dc_layers), : has_hw_overlay_support_(capabilities.supports_dc_video_overlays),
show_debug_borders_(settings.show_dc_layer_debug_borders) {} show_debug_borders_(settings.show_dc_layer_debug_borders) {}
DCLayerOverlayProcessor::DCLayerOverlayProcessor() DCLayerOverlayProcessor::DCLayerOverlayProcessor()
......
...@@ -759,7 +759,8 @@ void DirectRenderer::UseRenderPass(const RenderPass* render_pass) { ...@@ -759,7 +759,8 @@ void DirectRenderer::UseRenderPass(const RenderPass* render_pass) {
current_frame()->current_render_pass = render_pass; current_frame()->current_render_pass = render_pass;
if (render_pass == current_frame()->root_render_pass) { if (render_pass == current_frame()->root_render_pass) {
BindFramebufferToOutputSurface(); BindFramebufferToOutputSurface();
output_surface_->SetDrawRectangle(current_frame()->root_damage_rect); if (supports_dc_layers_)
output_surface_->SetDrawRectangle(current_frame()->root_damage_rect);
InitializeViewport(current_frame(), render_pass->output_rect, InitializeViewport(current_frame(), render_pass->output_rect,
gfx::Rect(current_frame()->device_viewport_size), gfx::Rect(current_frame()->device_viewport_size),
current_frame()->device_viewport_size); current_frame()->device_viewport_size);
......
...@@ -66,8 +66,10 @@ class VIZ_SERVICE_EXPORT OutputSurface { ...@@ -66,8 +66,10 @@ class VIZ_SERVICE_EXPORT OutputSurface {
// on the current system transform. So the OS presentation engine can // on the current system transform. So the OS presentation engine can
// present buffers onto the screen directly. // present buffers onto the screen directly.
bool supports_pre_transform = false; bool supports_pre_transform = false;
// Whether this OutputSurface supports DC layer overlays. // Whether this OutputSurface supports direct composition layers.
bool supports_dc_layers = false; bool supports_dc_layers = false;
// Whether this OutputSurface supports direct composition video overlays.
bool supports_dc_video_overlays = false;
// Whether this OutputSurface should skip DrawAndSwap(). This is true for // Whether this OutputSurface should skip DrawAndSwap(). This is true for
// the unified display on Chrome OS. All drawing is handled by the physical // the unified display on Chrome OS. All drawing is handled by the physical
// displays so the unified display should skip that work. // displays so the unified display should skip that work.
......
...@@ -44,6 +44,8 @@ GLOutputSurface::GLOutputSurface( ...@@ -44,6 +44,8 @@ GLOutputSurface::GLOutputSurface(
context_capabilities.num_surface_buffers - 1; context_capabilities.num_surface_buffers - 1;
capabilities_.supports_gpu_vsync = context_capabilities.gpu_vsync; capabilities_.supports_gpu_vsync = context_capabilities.gpu_vsync;
capabilities_.supports_dc_layers = context_capabilities.dc_layers; capabilities_.supports_dc_layers = context_capabilities.dc_layers;
capabilities_.supports_dc_video_overlays =
context_capabilities.use_dc_overlays_for_video;
} }
GLOutputSurface::~GLOutputSurface() { GLOutputSurface::~GLOutputSurface() {
...@@ -71,8 +73,7 @@ void GLOutputSurface::BindFramebuffer() { ...@@ -71,8 +73,7 @@ void GLOutputSurface::BindFramebuffer() {
} }
void GLOutputSurface::SetDrawRectangle(const gfx::Rect& rect) { void GLOutputSurface::SetDrawRectangle(const gfx::Rect& rect) {
if (!context_provider_->ContextCapabilities().dc_layers) DCHECK(capabilities_.supports_dc_layers);
return;
if (set_draw_rectangle_for_frame_) if (set_draw_rectangle_for_frame_)
return; return;
......
...@@ -45,6 +45,7 @@ SkiaOutputDeviceGL::SkiaOutputDeviceGL( ...@@ -45,6 +45,7 @@ SkiaOutputDeviceGL::SkiaOutputDeviceGL(
capabilities_.max_frames_pending = gl_surface_->GetBufferCount() - 1; capabilities_.max_frames_pending = gl_surface_->GetBufferCount() - 1;
capabilities_.supports_gpu_vsync = gl_surface_->SupportsGpuVSync(); capabilities_.supports_gpu_vsync = gl_surface_->SupportsGpuVSync();
capabilities_.supports_dc_layers = gl_surface_->SupportsDCLayers(); capabilities_.supports_dc_layers = gl_surface_->SupportsDCLayers();
capabilities_.supports_dc_video_overlays = gl_surface_->UseOverlaysForVideo();
} }
void SkiaOutputDeviceGL::Initialize(GrContext* gr_context, void SkiaOutputDeviceGL::Initialize(GrContext* gr_context,
......
...@@ -147,6 +147,7 @@ void SkiaOutputSurfaceImpl::BindFramebuffer() { ...@@ -147,6 +147,7 @@ void SkiaOutputSurfaceImpl::BindFramebuffer() {
void SkiaOutputSurfaceImpl::SetDrawRectangle(const gfx::Rect& draw_rectangle) { void SkiaOutputSurfaceImpl::SetDrawRectangle(const gfx::Rect& draw_rectangle) {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
DCHECK(capabilities().supports_dc_layers);
DCHECK(!draw_rectangle_); DCHECK(!draw_rectangle_);
draw_rectangle_.emplace(draw_rectangle); draw_rectangle_.emplace(draw_rectangle);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment