| Index: components/mus/public/cpp/surfaces/surfaces_type_converters.cc
|
| diff --git a/components/mus/public/cpp/surfaces/surfaces_type_converters.cc b/components/mus/public/cpp/surfaces/surfaces_type_converters.cc
|
| index 7c6e6a5449e8ee3ae0ea6acfde3f2e304873f467..311fbad50bac30565295f44108748b0256c9cb4d 100644
|
| --- a/components/mus/public/cpp/surfaces/surfaces_type_converters.cc
|
| +++ b/components/mus/public/cpp/surfaces/surfaces_type_converters.cc
|
| @@ -27,339 +27,9 @@
|
|
|
| using cc::mojom::CompositorFrame;
|
| using cc::mojom::CompositorFramePtr;
|
| -using cc::mojom::DebugBorderQuadState;
|
| -using cc::mojom::DebugBorderQuadStatePtr;
|
| -using cc::mojom::DrawQuad;
|
| -using cc::mojom::DrawQuadPtr;
|
| -using cc::mojom::RenderPass;
|
| -using cc::mojom::RenderPassPtr;
|
| -using cc::mojom::RenderPassQuadState;
|
| -using cc::mojom::RenderPassQuadStatePtr;
|
| -using cc::mojom::SolidColorQuadState;
|
| -using cc::mojom::SolidColorQuadStatePtr;
|
| -using cc::mojom::SurfaceQuadState;
|
| -using cc::mojom::SurfaceQuadStatePtr;
|
| -using cc::mojom::TextureQuadState;
|
| -using cc::mojom::TextureQuadStatePtr;
|
| -using cc::mojom::TileQuadState;
|
| -using cc::mojom::TileQuadStatePtr;
|
| -using cc::mojom::YUVColorSpace;
|
| -using cc::mojom::YUVVideoQuadState;
|
| -using cc::mojom::YUVVideoQuadStatePtr;
|
|
|
| namespace mojo {
|
|
|
| -#define ASSERT_ENUM_VALUES_EQUAL(value) \
|
| - static_assert(cc::DrawQuad::value == static_cast<cc::DrawQuad::Material>( \
|
| - cc::mojom::Material::value), \
|
| - #value " enum value must match")
|
| -
|
| -ASSERT_ENUM_VALUES_EQUAL(DEBUG_BORDER);
|
| -ASSERT_ENUM_VALUES_EQUAL(PICTURE_CONTENT);
|
| -ASSERT_ENUM_VALUES_EQUAL(RENDER_PASS);
|
| -ASSERT_ENUM_VALUES_EQUAL(SOLID_COLOR);
|
| -ASSERT_ENUM_VALUES_EQUAL(STREAM_VIDEO_CONTENT);
|
| -ASSERT_ENUM_VALUES_EQUAL(SURFACE_CONTENT);
|
| -ASSERT_ENUM_VALUES_EQUAL(TEXTURE_CONTENT);
|
| -ASSERT_ENUM_VALUES_EQUAL(TILED_CONTENT);
|
| -ASSERT_ENUM_VALUES_EQUAL(YUV_VIDEO_CONTENT);
|
| -
|
| -static_assert(cc::YUVVideoDrawQuad::REC_601 ==
|
| - static_cast<cc::YUVVideoDrawQuad::ColorSpace>(
|
| - cc::mojom::YUVColorSpace::REC_601),
|
| - "REC_601 enum value must match");
|
| -// TODO(jamesr): Add REC_709 and JPEG to the YUVColorSpace enum upstream in
|
| -// mojo.
|
| -
|
| -namespace {
|
| -
|
| -bool ConvertDrawQuad(const DrawQuadPtr& input,
|
| - const cc::CompositorFrameMetadata& metadata,
|
| - cc::SharedQuadState* sqs,
|
| - cc::RenderPass* render_pass) {
|
| - switch (input->material) {
|
| - case cc::mojom::Material::DEBUG_BORDER: {
|
| - cc::DebugBorderDrawQuad* debug_border_quad =
|
| - render_pass->CreateAndAppendDrawQuad<cc::DebugBorderDrawQuad>();
|
| - debug_border_quad->SetAll(sqs, input->rect, input->opaque_rect,
|
| - input->visible_rect, input->needs_blending,
|
| - input->debug_border_quad_state->color,
|
| - input->debug_border_quad_state->width);
|
| - break;
|
| - }
|
| - case cc::mojom::Material::RENDER_PASS: {
|
| - cc::RenderPassDrawQuad* render_pass_quad =
|
| - render_pass->CreateAndAppendDrawQuad<cc::RenderPassDrawQuad>();
|
| - RenderPassQuadState* render_pass_quad_state =
|
| - input->render_pass_quad_state.get();
|
| - render_pass_quad->SetAll(sqs, input->rect, input->opaque_rect,
|
| - input->visible_rect, input->needs_blending,
|
| - render_pass_quad_state->render_pass_id,
|
| - render_pass_quad_state->mask_resource_id,
|
| - render_pass_quad_state->mask_uv_scale,
|
| - render_pass_quad_state->mask_texture_size,
|
| - render_pass_quad_state->filters,
|
| - render_pass_quad_state->filters_scale,
|
| - render_pass_quad_state->background_filters);
|
| - break;
|
| - }
|
| - case cc::mojom::Material::SOLID_COLOR: {
|
| - if (input->solid_color_quad_state.is_null())
|
| - return false;
|
| - cc::SolidColorDrawQuad* color_quad =
|
| - render_pass->CreateAndAppendDrawQuad<cc::SolidColorDrawQuad>();
|
| - color_quad->SetAll(
|
| - sqs, input->rect, input->opaque_rect, input->visible_rect,
|
| - input->needs_blending, input->solid_color_quad_state->color,
|
| - input->solid_color_quad_state->force_anti_aliasing_off);
|
| - break;
|
| - }
|
| - case cc::mojom::Material::SURFACE_CONTENT: {
|
| - if (input->surface_quad_state.is_null())
|
| - return false;
|
| -
|
| - cc::SurfaceDrawQuad* surface_quad =
|
| - render_pass->CreateAndAppendDrawQuad<cc::SurfaceDrawQuad>();
|
| - surface_quad->SetAll(
|
| - sqs, input->rect, input->opaque_rect, input->visible_rect,
|
| - input->needs_blending, input->surface_quad_state->surface);
|
| - break;
|
| - }
|
| - case cc::mojom::Material::TEXTURE_CONTENT: {
|
| - TextureQuadStatePtr& texture_quad_state =
|
| - input->texture_quad_state;
|
| - if (texture_quad_state.is_null() ||
|
| - texture_quad_state->vertex_opacity.is_null())
|
| - return false;
|
| - cc::TextureDrawQuad* texture_quad =
|
| - render_pass->CreateAndAppendDrawQuad<cc::TextureDrawQuad>();
|
| - texture_quad->SetAll(
|
| - sqs, input->rect, input->opaque_rect, input->visible_rect,
|
| - input->needs_blending, texture_quad_state->resource_id, gfx::Size(),
|
| - texture_quad_state->premultiplied_alpha,
|
| - texture_quad_state->uv_top_left, texture_quad_state->uv_bottom_right,
|
| - texture_quad_state->background_color,
|
| - &texture_quad_state->vertex_opacity.storage()[0],
|
| - texture_quad_state->y_flipped, texture_quad_state->nearest_neighbor,
|
| - texture_quad_state->secure_output_only);
|
| - break;
|
| - }
|
| - case cc::mojom::Material::TILED_CONTENT: {
|
| - TileQuadStatePtr& tile_state = input->tile_quad_state;
|
| - if (tile_state.is_null())
|
| - return false;
|
| - cc::TileDrawQuad* tile_quad =
|
| - render_pass->CreateAndAppendDrawQuad<cc::TileDrawQuad>();
|
| - tile_quad->SetAll(sqs, input->rect, input->opaque_rect,
|
| - input->visible_rect, input->needs_blending,
|
| - tile_state->resource_id, tile_state->tex_coord_rect,
|
| - tile_state->texture_size, tile_state->swizzle_contents,
|
| - tile_state->nearest_neighbor);
|
| - break;
|
| - }
|
| - case cc::mojom::Material::YUV_VIDEO_CONTENT: {
|
| - YUVVideoQuadStatePtr& yuv_state = input->yuv_video_quad_state;
|
| - if (yuv_state.is_null())
|
| - return false;
|
| - cc::YUVVideoDrawQuad* yuv_quad =
|
| - render_pass->CreateAndAppendDrawQuad<cc::YUVVideoDrawQuad>();
|
| - yuv_quad->SetAll(
|
| - sqs, input->rect, input->opaque_rect, input->visible_rect,
|
| - input->needs_blending, yuv_state->ya_tex_coord_rect,
|
| - yuv_state->uv_tex_coord_rect, yuv_state->ya_tex_size,
|
| - yuv_state->uv_tex_size, yuv_state->y_plane_resource_id,
|
| - yuv_state->u_plane_resource_id, yuv_state->v_plane_resource_id,
|
| - yuv_state->a_plane_resource_id,
|
| - static_cast<cc::YUVVideoDrawQuad::ColorSpace>(yuv_state->color_space),
|
| - yuv_state->resource_offset, yuv_state->resource_multiplier);
|
| - break;
|
| - }
|
| - default:
|
| - NOTREACHED() << "Unsupported material " << input->material;
|
| - return false;
|
| - }
|
| - return true;
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -// static
|
| -DrawQuadPtr TypeConverter<DrawQuadPtr, cc::DrawQuad>::Convert(
|
| - const cc::DrawQuad& input) {
|
| - DrawQuadPtr quad = DrawQuad::New();
|
| - quad->material = static_cast<cc::mojom::Material>(input.material);
|
| - quad->rect = input.rect;
|
| - quad->opaque_rect = input.opaque_rect;
|
| - quad->visible_rect = input.visible_rect;
|
| - quad->needs_blending = input.needs_blending;
|
| - // This is intentionally left set to an invalid value here. It's set when
|
| - // converting an entire pass since it's an index into the pass' shared quad
|
| - // state list.
|
| - quad->shared_quad_state_index = UINT32_MAX;
|
| - switch (input.material) {
|
| - case cc::DrawQuad::DEBUG_BORDER: {
|
| - const cc::DebugBorderDrawQuad* debug_border_quad =
|
| - cc::DebugBorderDrawQuad::MaterialCast(&input);
|
| - DebugBorderQuadStatePtr debug_border_state =
|
| - DebugBorderQuadState::New();
|
| - debug_border_state->color = debug_border_quad->color;
|
| - debug_border_state->width = debug_border_quad->width;
|
| - quad->debug_border_quad_state = std::move(debug_border_state);
|
| - break;
|
| - }
|
| - case cc::DrawQuad::RENDER_PASS: {
|
| - const cc::RenderPassDrawQuad* render_pass_quad =
|
| - cc::RenderPassDrawQuad::MaterialCast(&input);
|
| - RenderPassQuadStatePtr pass_state = RenderPassQuadState::New();
|
| - pass_state->render_pass_id = render_pass_quad->render_pass_id;
|
| - pass_state->mask_resource_id = render_pass_quad->mask_resource_id();
|
| - pass_state->mask_uv_scale = render_pass_quad->mask_uv_scale;
|
| - pass_state->mask_texture_size = render_pass_quad->mask_texture_size;
|
| - pass_state->filters = render_pass_quad->filters;
|
| - pass_state->filters_scale = render_pass_quad->filters_scale;
|
| - pass_state->background_filters = render_pass_quad->background_filters;
|
| - quad->render_pass_quad_state = std::move(pass_state);
|
| - break;
|
| - }
|
| - case cc::DrawQuad::SOLID_COLOR: {
|
| - const cc::SolidColorDrawQuad* color_quad =
|
| - cc::SolidColorDrawQuad::MaterialCast(&input);
|
| - SolidColorQuadStatePtr color_state = SolidColorQuadState::New();
|
| - color_state->color = color_quad->color;
|
| - color_state->force_anti_aliasing_off =
|
| - color_quad->force_anti_aliasing_off;
|
| - quad->solid_color_quad_state = std::move(color_state);
|
| - break;
|
| - }
|
| - case cc::DrawQuad::SURFACE_CONTENT: {
|
| - const cc::SurfaceDrawQuad* surface_quad =
|
| - cc::SurfaceDrawQuad::MaterialCast(&input);
|
| - SurfaceQuadStatePtr surface_state =
|
| - SurfaceQuadState::New();
|
| - surface_state->surface = surface_quad->surface_id;
|
| - quad->surface_quad_state = std::move(surface_state);
|
| - break;
|
| - }
|
| - case cc::DrawQuad::TEXTURE_CONTENT: {
|
| - const cc::TextureDrawQuad* texture_quad =
|
| - cc::TextureDrawQuad::MaterialCast(&input);
|
| - TextureQuadStatePtr texture_state = TextureQuadState::New();
|
| - texture_state->resource_id = texture_quad->resource_id();
|
| - texture_state->premultiplied_alpha = texture_quad->premultiplied_alpha;
|
| - texture_state->uv_top_left = texture_quad->uv_top_left;
|
| - texture_state->uv_bottom_right = texture_quad->uv_bottom_right;
|
| - texture_state->background_color = texture_quad->background_color;
|
| - Array<float> vertex_opacity(4);
|
| - for (size_t i = 0; i < 4; ++i) {
|
| - vertex_opacity[i] = texture_quad->vertex_opacity[i];
|
| - }
|
| - texture_state->vertex_opacity = std::move(vertex_opacity);
|
| - texture_state->y_flipped = texture_quad->y_flipped;
|
| - texture_state->secure_output_only = texture_quad->secure_output_only;
|
| - quad->texture_quad_state = std::move(texture_state);
|
| - break;
|
| - }
|
| - case cc::DrawQuad::TILED_CONTENT: {
|
| - const cc::TileDrawQuad* tile_quad =
|
| - cc::TileDrawQuad::MaterialCast(&input);
|
| - TileQuadStatePtr tile_state = TileQuadState::New();
|
| - tile_state->tex_coord_rect = tile_quad->tex_coord_rect;
|
| - tile_state->texture_size = tile_quad->texture_size;
|
| - tile_state->swizzle_contents = tile_quad->swizzle_contents;
|
| - tile_state->nearest_neighbor = tile_quad->nearest_neighbor;
|
| - tile_state->resource_id = tile_quad->resource_id();
|
| - quad->tile_quad_state = std::move(tile_state);
|
| - break;
|
| - }
|
| - case cc::DrawQuad::YUV_VIDEO_CONTENT: {
|
| - const cc::YUVVideoDrawQuad* yuv_quad =
|
| - cc::YUVVideoDrawQuad::MaterialCast(&input);
|
| - YUVVideoQuadStatePtr yuv_state = YUVVideoQuadState::New();
|
| - yuv_state->ya_tex_coord_rect = yuv_quad->ya_tex_coord_rect;
|
| - yuv_state->uv_tex_coord_rect = yuv_quad->uv_tex_coord_rect;
|
| - yuv_state->ya_tex_size = yuv_quad->ya_tex_size;
|
| - yuv_state->uv_tex_size = yuv_quad->uv_tex_size;
|
| - yuv_state->y_plane_resource_id = yuv_quad->y_plane_resource_id();
|
| - yuv_state->u_plane_resource_id = yuv_quad->u_plane_resource_id();
|
| - yuv_state->v_plane_resource_id = yuv_quad->v_plane_resource_id();
|
| - yuv_state->a_plane_resource_id = yuv_quad->a_plane_resource_id();
|
| - yuv_state->color_space =
|
| - static_cast<YUVColorSpace>(yuv_quad->color_space);
|
| - yuv_state->resource_offset = yuv_quad->resource_offset;
|
| - yuv_state->resource_multiplier = yuv_quad->resource_multiplier;
|
| - quad->yuv_video_quad_state = std::move(yuv_state);
|
| - break;
|
| - }
|
| -
|
| - default:
|
| - NOTREACHED() << "Unsupported material " << input.material;
|
| - }
|
| - return quad;
|
| -}
|
| -
|
| -// static
|
| -RenderPassPtr TypeConverter<RenderPassPtr, cc::RenderPass>::Convert(
|
| - const cc::RenderPass& input) {
|
| - RenderPassPtr pass = RenderPass::New();
|
| - pass->id = input.id;
|
| - pass->output_rect = input.output_rect;
|
| - pass->damage_rect = input.damage_rect;
|
| - pass->transform_to_root_target = input.transform_to_root_target;
|
| - pass->has_transparent_background = input.has_transparent_background;
|
| - Array<DrawQuadPtr> quads(input.quad_list.size());
|
| - const cc::SharedQuadState* last_sqs = nullptr;
|
| - cc::SharedQuadStateList::ConstIterator next_sqs_iter =
|
| - input.shared_quad_state_list.begin();
|
| - for (auto iter = input.quad_list.cbegin(); iter != input.quad_list.cend();
|
| - ++iter) {
|
| - const cc::DrawQuad& quad = **iter;
|
| - quads[iter.index()] = DrawQuad::From(quad);
|
| - if (quad.shared_quad_state != last_sqs) {
|
| - pass->shared_quad_states.AllocateAndCopyFrom(*next_sqs_iter);
|
| - last_sqs = *next_sqs_iter;
|
| - ++next_sqs_iter;
|
| - }
|
| - DCHECK_LE(next_sqs_iter.index() - 1, UINT32_MAX);
|
| - quads[iter.index()]->shared_quad_state_index =
|
| - static_cast<uint32_t>(next_sqs_iter.index() - 1);
|
| - }
|
| - // We should copy all shared quad states.
|
| - DCHECK_EQ(next_sqs_iter.index(), pass->shared_quad_states.size());
|
| - pass->quads = std::move(quads);
|
| - return pass;
|
| -}
|
| -
|
| -// static
|
| -std::unique_ptr<cc::RenderPass> ConvertToRenderPass(
|
| - const RenderPassPtr& input,
|
| - const cc::CompositorFrameMetadata& metadata) {
|
| - std::unique_ptr<cc::RenderPass> pass = cc::RenderPass::Create(
|
| - input->shared_quad_states.size(), input->quads.size());
|
| - pass->SetAll(input->id, input->output_rect, input->damage_rect,
|
| - input->transform_to_root_target,
|
| - input->has_transparent_background);
|
| - pass->shared_quad_state_list = std::move(input->shared_quad_states);
|
| - cc::SharedQuadStateList::Iterator sqs_iter =
|
| - pass->shared_quad_state_list.begin();
|
| - for (size_t i = 0; i < input->quads.size(); ++i) {
|
| - DrawQuadPtr quad = std::move(input->quads[i]);
|
| - while (quad->shared_quad_state_index > sqs_iter.index()) {
|
| - ++sqs_iter;
|
| - }
|
| - if (!ConvertDrawQuad(quad, metadata, *sqs_iter, pass.get()))
|
| - return std::unique_ptr<cc::RenderPass>();
|
| - }
|
| - return pass;
|
| -}
|
| -
|
| -// static
|
| -std::unique_ptr<cc::RenderPass>
|
| -TypeConverter<std::unique_ptr<cc::RenderPass>, RenderPassPtr>::Convert(
|
| - const RenderPassPtr& input) {
|
| - cc::CompositorFrameMetadata metadata;
|
| - return ConvertToRenderPass(input, metadata);
|
| -}
|
| -
|
| // static
|
| CompositorFramePtr
|
| TypeConverter<CompositorFramePtr, cc::CompositorFrame>::Convert(
|
| @@ -371,10 +41,9 @@ TypeConverter<CompositorFramePtr, cc::CompositorFrame>::Convert(
|
| mojo::Array<cc::TransferableResource>(frame_data->resource_list);
|
| frame->metadata = input.metadata;
|
| const cc::RenderPassList& pass_list = frame_data->render_pass_list;
|
| - frame->passes = Array<RenderPassPtr>::New(pass_list.size());
|
| - for (size_t i = 0; i < pass_list.size(); ++i) {
|
| - frame->passes[i] = RenderPass::From(*pass_list[i]);
|
| - }
|
| + std::vector<std::unique_ptr<cc::RenderPass>> copy;
|
| + cc::RenderPass::CopyAll(pass_list, ©);
|
| + frame->passes = std::move(copy);
|
| return frame;
|
| }
|
|
|
| @@ -387,11 +56,7 @@ std::unique_ptr<cc::CompositorFrame> ConvertToCompositorFrame(
|
| frame_data->resource_list = input->resources.PassStorage();
|
| frame_data->render_pass_list.reserve(input->passes.size());
|
| for (size_t i = 0; i < input->passes.size(); ++i) {
|
| - std::unique_ptr<cc::RenderPass> pass =
|
| - ConvertToRenderPass(input->passes[i], input->metadata);
|
| - if (!pass)
|
| - return std::unique_ptr<cc::CompositorFrame>();
|
| - frame_data->render_pass_list.push_back(std::move(pass));
|
| + frame_data->render_pass_list.push_back(std::move(input->passes[i]));
|
| }
|
| std::unique_ptr<cc::CompositorFrame> frame(new cc::CompositorFrame);
|
| cc::CompositorFrameMetadata metadata = input->metadata;
|
|
|