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;
DCLayerOverlayProcessor::DCLayerOverlayProcessor(
const OutputSurface::Capabilities& capabilities,
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) {}
DCLayerOverlayProcessor::DCLayerOverlayProcessor()
......
......@@ -759,7 +759,8 @@ void DirectRenderer::UseRenderPass(const RenderPass* render_pass) {
current_frame()->current_render_pass = render_pass;
if (render_pass == current_frame()->root_render_pass) {
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,
gfx::Rect(current_frame()->device_viewport_size),
current_frame()->device_viewport_size);
......
......@@ -66,8 +66,10 @@ class VIZ_SERVICE_EXPORT OutputSurface {
// on the current system transform. So the OS presentation engine can
// present buffers onto the screen directly.
bool supports_pre_transform = false;
// Whether this OutputSurface supports DC layer overlays.
// Whether this OutputSurface supports direct composition layers.
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
// the unified display on Chrome OS. All drawing is handled by the physical
// displays so the unified display should skip that work.
......
......@@ -44,6 +44,8 @@ GLOutputSurface::GLOutputSurface(
context_capabilities.num_surface_buffers - 1;
capabilities_.supports_gpu_vsync = context_capabilities.gpu_vsync;
capabilities_.supports_dc_layers = context_capabilities.dc_layers;
capabilities_.supports_dc_video_overlays =
context_capabilities.use_dc_overlays_for_video;
}
GLOutputSurface::~GLOutputSurface() {
......@@ -71,8 +73,7 @@ void GLOutputSurface::BindFramebuffer() {
}
void GLOutputSurface::SetDrawRectangle(const gfx::Rect& rect) {
if (!context_provider_->ContextCapabilities().dc_layers)
return;
DCHECK(capabilities_.supports_dc_layers);
if (set_draw_rectangle_for_frame_)
return;
......
......@@ -45,6 +45,7 @@ SkiaOutputDeviceGL::SkiaOutputDeviceGL(
capabilities_.max_frames_pending = gl_surface_->GetBufferCount() - 1;
capabilities_.supports_gpu_vsync = gl_surface_->SupportsGpuVSync();
capabilities_.supports_dc_layers = gl_surface_->SupportsDCLayers();
capabilities_.supports_dc_video_overlays = gl_surface_->UseOverlaysForVideo();
}
void SkiaOutputDeviceGL::Initialize(GrContext* gr_context,
......
......@@ -147,6 +147,7 @@ void SkiaOutputSurfaceImpl::BindFramebuffer() {
void SkiaOutputSurfaceImpl::SetDrawRectangle(const gfx::Rect& draw_rectangle) {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
DCHECK(capabilities().supports_dc_layers);
DCHECK(!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