From f4be79d79cd8b94643149584c7f108b606614b2f Mon Sep 17 00:00:00 2001 From: Dan Field Date: Mon, 27 Mar 2023 16:07:24 -0700 Subject: [PATCH 01/19] More generic path tessellation for strokes --- ci/licenses_golden/licenses_flutter | 12 +- impeller/BUILD.gn | 4 + impeller/fixtures/BUILD.gn | 6 +- .../{golden_heart.h => golden_paths.h} | 58 +++++- impeller/geometry/geometry_unittests.cc | 4 + impeller/geometry/path.cc | 47 +++-- impeller/geometry/path.h | 2 +- impeller/geometry/path_component.cc | 50 ++++- impeller/geometry/path_component.h | 54 ++++-- impeller/playground/BUILD.gn | 2 +- .../backend/metal/playground_impl_mtl.mm | 37 ++-- impeller/renderer/BUILD.gn | 46 +++-- impeller/renderer/compute_pass.h | 1 - impeller/renderer/tessellation/BUILD.gn | 46 +++++ .../compute_subgroup_unittests.cc | 127 +++++++++++- .../tessellation/compute_tessellator.cc | 183 ++++++++++++++++++ .../tessellation/compute_tessellator.h | 75 +++++++ .../renderer/tessellation/path_polyline.comp | 172 ++++++++++++++++ .../tessellation}/stroke.comp | 5 +- impeller/tools/impeller.gni | 4 +- .../platform/android/platform_view_android.cc | 13 +- shell/platform/windows/BUILD.gn | 2 - shell/platform/windows/fixtures/main.dart | 61 ------ .../windows/flutter_windows_engine.cc | 23 +-- .../platform/windows/flutter_windows_engine.h | 10 - .../flutter_windows_engine_unittests.cc | 87 --------- shell/platform/windows/platform_handler.cc | 71 ++----- shell/platform/windows/platform_handler.h | 27 +-- .../windows/platform_handler_unittests.cc | 10 +- .../windows/testing/engine_modifier.h | 4 - .../windows/windows_lifecycle_manager.cc | 120 ------------ .../windows/windows_lifecycle_manager.h | 37 ---- 32 files changed, 880 insertions(+), 520 deletions(-) rename impeller/fixtures/{golden_heart.h => golden_paths.h} (85%) create mode 100644 impeller/renderer/tessellation/BUILD.gn rename impeller/renderer/{ => tessellation}/compute_subgroup_unittests.cc (71%) create mode 100644 impeller/renderer/tessellation/compute_tessellator.cc create mode 100644 impeller/renderer/tessellation/compute_tessellator.h create mode 100644 impeller/renderer/tessellation/path_polyline.comp rename impeller/{fixtures => renderer/tessellation}/stroke.comp (88%) delete mode 100644 shell/platform/windows/windows_lifecycle_manager.cc delete mode 100644 shell/platform/windows/windows_lifecycle_manager.h diff --git a/ci/licenses_golden/licenses_flutter b/ci/licenses_golden/licenses_flutter index 06a15477f6de0..9a42989c417ab 100644 --- a/ci/licenses_golden/licenses_flutter +++ b/ci/licenses_golden/licenses_flutter @@ -1528,6 +1528,10 @@ ORIGIN: ../../../flutter/impeller/renderer/snapshot.cc + ../../../flutter/LICENS ORIGIN: ../../../flutter/impeller/renderer/snapshot.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/surface.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/surface.h + ../../../flutter/LICENSE +ORIGIN: ../../../flutter/impeller/renderer/tessellation/compute_tessellator.cc + ../../../flutter/LICENSE +ORIGIN: ../../../flutter/impeller/renderer/tessellation/compute_tessellator.h + ../../../flutter/LICENSE +ORIGIN: ../../../flutter/impeller/renderer/tessellation/path_polyline.comp + ../../../flutter/LICENSE +ORIGIN: ../../../flutter/impeller/renderer/tessellation/stroke.comp + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/texture.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/texture.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/texture_descriptor.cc + ../../../flutter/LICENSE @@ -3087,8 +3091,6 @@ ORIGIN: ../../../flutter/shell/platform/windows/window_binding_handler_delegate. ORIGIN: ../../../flutter/shell/platform/windows/window_proc_delegate_manager.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/shell/platform/windows/window_proc_delegate_manager.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/shell/platform/windows/window_state.h + ../../../flutter/LICENSE -ORIGIN: ../../../flutter/shell/platform/windows/windows_lifecycle_manager.cc + ../../../flutter/LICENSE -ORIGIN: ../../../flutter/shell/platform/windows/windows_lifecycle_manager.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/shell/platform/windows/windows_proc_table.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/shell/platform/windows/windows_proc_table.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/shell/platform/windows/windows_registry.cc + ../../../flutter/LICENSE @@ -4068,6 +4070,10 @@ FILE: ../../../flutter/impeller/renderer/snapshot.cc FILE: ../../../flutter/impeller/renderer/snapshot.h FILE: ../../../flutter/impeller/renderer/surface.cc FILE: ../../../flutter/impeller/renderer/surface.h +FILE: ../../../flutter/impeller/renderer/tessellation/compute_tessellator.cc +FILE: ../../../flutter/impeller/renderer/tessellation/compute_tessellator.h +FILE: ../../../flutter/impeller/renderer/tessellation/path_polyline.comp +FILE: ../../../flutter/impeller/renderer/tessellation/stroke.comp FILE: ../../../flutter/impeller/renderer/texture.cc FILE: ../../../flutter/impeller/renderer/texture.h FILE: ../../../flutter/impeller/renderer/texture_descriptor.cc @@ -5648,8 +5654,6 @@ FILE: ../../../flutter/shell/platform/windows/window_binding_handler_delegate.h FILE: ../../../flutter/shell/platform/windows/window_proc_delegate_manager.cc FILE: ../../../flutter/shell/platform/windows/window_proc_delegate_manager.h FILE: ../../../flutter/shell/platform/windows/window_state.h -FILE: ../../../flutter/shell/platform/windows/windows_lifecycle_manager.cc -FILE: ../../../flutter/shell/platform/windows/windows_lifecycle_manager.h FILE: ../../../flutter/shell/platform/windows/windows_proc_table.cc FILE: ../../../flutter/shell/platform/windows/windows_proc_table.h FILE: ../../../flutter/shell/platform/windows/windows_registry.cc diff --git a/impeller/BUILD.gn b/impeller/BUILD.gn index af76525a5855d..85741e99033d0 100644 --- a/impeller/BUILD.gn +++ b/impeller/BUILD.gn @@ -91,6 +91,10 @@ impeller_component("impeller_unittests") { "typographer:typographer_unittests", ] } + + if (impeller_enable_compute) { + deps += [ "renderer/tessellation:compute_tessellation_unittests" ] + } } if (impeller_supports_rendering) { diff --git a/impeller/fixtures/BUILD.gn b/impeller/fixtures/BUILD.gn index 8dee5288196f8..5e149172081a9 100644 --- a/impeller/fixtures/BUILD.gn +++ b/impeller/fixtures/BUILD.gn @@ -5,7 +5,7 @@ import("//flutter/impeller/tools/impeller.gni") import("//flutter/testing/testing.gni") -if (impeller_enable_vulkan || impeller_enable_metal) { +if (impeller_enable_compute) { impeller_shaders("shader_subgroup_fixtures") { enable_opengles = false name = "subgroup_fixtures" @@ -16,7 +16,6 @@ if (impeller_enable_vulkan || impeller_enable_metal) { shaders = [ "cubic_to_quads.comp", "quad_polyline.comp", - "stroke.comp", ] } } @@ -103,7 +102,6 @@ test_fixtures("file_fixtures") { "sa%m#ple.vert", "stage1.comp", "stage2.comp", - "stroke.comp", "struct_def_bug.vert", "table_mountain_nx.png", "table_mountain_ny.png", @@ -137,7 +135,7 @@ group("fixtures") { ":shader_fixtures", ] - if (impeller_enable_vulkan || impeller_enable_metal) { + if (impeller_enable_compute) { public_deps += [ ":shader_subgroup_fixtures" ] } } diff --git a/impeller/fixtures/golden_heart.h b/impeller/fixtures/golden_paths.h similarity index 85% rename from impeller/fixtures/golden_heart.h rename to impeller/fixtures/golden_paths.h index 2325c1ea6ad0b..d292cff926445 100644 --- a/impeller/fixtures/golden_heart.h +++ b/impeller/fixtures/golden_paths.h @@ -315,7 +315,61 @@ std::vector golden_heart_vertices = { {163.155, 22.7357}, {155.704, 20.5285}, {155.546, 21.5159}, {155.673, 20.5245}, {155.577, 21.5199}, {147.924, 19.7793}, {147.828, 20.7747}, {147.893, 19.7773}, {147.858, 20.7767}, - {140.018, 19.5003}, {139.982, 20.4997}, {140, 20}, - {140, 20}}; + {140.018, 19.5003}, {139.982, 20.4997}, {140.018, 19.5003}, + {139.982, 20.4997}}; + +std::vector golden_cubic_and_quad_points = { + {139.982, 19.5003}, {140.018, 20.4997}, {131.747, 19.8026}, + {131.783, 20.802}, {131.715, 19.8048}, {131.815, 20.7998}, + {123.622, 20.6102}, {123.721, 21.6053}, {123.59, 20.6145}, + {123.753, 21.601}, {115.652, 21.9306}, {115.816, 22.9171}, + {115.619, 21.9372}, {115.848, 22.9105}, {107.85, 23.7687}, + {108.08, 24.742}, {107.817, 23.7777}, {108.113, 24.733}, + {100.23, 26.1264}, {100.526, 27.0817}, {100.197, 26.1378}, + {100.558, 27.0703}, {92.8037, 29.0025}, {93.165, 29.935}, + {92.7736, 29.0154}, {93.1952, 29.9221}, {85.708, 32.3003}, + {86.1296, 33.2071}, {85.68, 32.3144}, {86.1576, 33.193}, + {78.8865, 36.008}, {79.3641, 36.8865}, {78.8588, 36.0242}, + {79.3918, 36.8703}, {72.3485, 40.125}, {72.8815, 40.9711}, + {72.3216, 40.1432}, {72.9084, 40.9529}, {66.1045, 44.6479}, + {66.6913, 45.4577}, {66.0788, 44.6679}, {66.717, 45.4378}, + {60.1632, 49.5711}, {60.8014, 50.341}, {60.139, 49.5924}, + {60.8255, 50.3196}, {54.5317, 54.8864}, {55.2183, 55.6136}, + {54.5094, 54.909}, {55.2406, 55.591}, {49.254, 60.5436}, + {49.9853, 61.2257}, {49.2329, 60.5677}, {50.0063, 61.2016}, + {44.3684, 66.5025}, {45.1418, 67.1364}, {44.3488, 66.5281}, + {45.1614, 67.1108}, {39.8827, 72.7564}, {40.6954, 73.3391}, + {39.8648, 72.7832}, {40.7133, 73.3123}, {35.8029, 79.297}, + {36.6515, 79.8261}, {35.7869, 79.3246}, {36.6675, 79.7985}, + {32.1328, 86.1144}, {33.0134, 86.5883}, {32.1188, 86.1424}, + {33.0273, 86.5603}, {28.8739, 93.1973}, {29.7824, 93.6152}, + {28.8613, 93.2272}, {29.795, 93.5853}, {26.0399, 100.583}, + {26.9736, 100.941}, {26.0288, 100.615}, {26.9847, 100.908}, + {23.7144, 108.15}, {24.6704, 108.444}, {23.7056, 108.183}, + {24.6792, 108.411}, {21.9002, 115.886}, {22.8738, 116.115}, + {21.8937, 115.919}, {22.8804, 116.082}, {20.5962, 123.779}, + {21.5828, 123.942}, {20.592, 123.812}, {21.5871, 123.91}, + {19.7985, 131.816}, {20.7936, 131.914}, {19.7964, 131.847}, + {20.7957, 131.883}, {19.5003, 139.982}, {20.4997, 140.018}, + {20.2883, 140.409}, {19.7117, 139.591}, {29.9421, 133.595}, + {29.3655, 132.778}, {29.9544, 133.586}, {29.3532, 132.787}, + {39.1905, 126.639}, {38.5894, 125.839}, {39.2039, 126.628}, + {38.576, 125.85}, {47.9822, 119.545}, {47.3542, 118.767}, + {47.9968, 119.533}, {47.3396, 118.779}, {56.2739, 112.316}, + {55.6167, 111.562}, {56.2898, 112.302}, {55.6008, 111.577}, + {64.0197, 104.952}, {63.3307, 104.228}, {64.0369, 104.935}, + {63.3134, 104.245}, {71.1714, 97.4578}, {70.4479, 96.7675}, + {71.1899, 97.4373}, {70.4294, 96.7879}, {77.6791, 89.8381}, + {76.9187, 89.1887}, {77.6987, 89.8137}, {76.8991, 89.2131}, + {83.4923, 82.1009}, {82.6928, 81.5003}, {83.5125, 82.0718}, + {82.6725, 81.5293}, {88.5609, 74.2563}, {87.7209, 73.7138}, + {88.5812, 74.2221}, {87.7007, 73.748}, {92.8369, 66.3173}, + {91.9564, 65.8432}, {92.8562, 66.2772}, {91.9371, 65.8833}, + {96.2756, 58.299}, {95.3564, 57.9051}, {96.2927, 58.253}, + {95.3393, 57.951}, {98.8374, 50.2196}, {97.8841, 49.9176}, + {98.8508, 50.1681}, {97.8708, 49.969}, {100.49, 42.0995}, + {99.51, 41.9005}, {100.49, 42.0995}, {99.51, 41.9005}, +}; + } // namespace testing } // namespace impeller diff --git a/impeller/geometry/geometry_unittests.cc b/impeller/geometry/geometry_unittests.cc index 191d944952d79..0b1e963571e4c 100644 --- a/impeller/geometry/geometry_unittests.cc +++ b/impeller/geometry/geometry_unittests.cc @@ -589,6 +589,10 @@ TEST(GeometryTest, SimplePath) { .AddCubicComponent({300, 300}, {400, 400}, {500, 500}, {600, 600}); ASSERT_EQ(path.GetComponentCount(), 4u); + ASSERT_EQ(path.GetComponentCount(Path::ComponentType::kLinear), 1u); + ASSERT_EQ(path.GetComponentCount(Path::ComponentType::kQuadratic), 1u); + ASSERT_EQ(path.GetComponentCount(Path::ComponentType::kCubic), 1u); + ASSERT_EQ(path.GetComponentCount(Path::ComponentType::kContour), 1u); path.EnumerateComponents( [](size_t index, const LinearPathComponent& linear) { diff --git a/impeller/geometry/path.cc b/impeller/geometry/path.cc index b6d97433fe648..5121e8e045cae 100644 --- a/impeller/geometry/path.cc +++ b/impeller/geometry/path.cc @@ -5,9 +5,9 @@ #include "impeller/geometry/path.h" #include +#include #include "impeller/geometry/path_component.h" -#include "path_component.h" namespace impeller { @@ -29,7 +29,19 @@ std::tuple Path::Polyline::GetContourPointBounds( return std::make_tuple(start_index, end_index); } -size_t Path::GetComponentCount() const { +size_t Path::GetComponentCount(std::optional type) const { + if (type.has_value()) { + switch (type.value()) { + case ComponentType::kLinear: + return linears_.size(); + case ComponentType::kQuadratic: + return quads_.size(); + case ComponentType::kCubic: + return cubics_.size(); + case ComponentType::kContour: + return contours_.size(); + } + } return components_.size(); } @@ -243,10 +255,9 @@ Path::Polyline Path::CreatePolyline(Scalar scale) const { } }; - auto get_path_component = - [this](size_t component_i) -> std::optional { + auto get_path_component = [this](size_t component_i) -> PathComponentVariant { if (component_i >= components_.size()) { - return std::nullopt; + return std::monostate{}; } const auto& component = components_[component_i]; switch (component.type) { @@ -257,18 +268,20 @@ Path::Polyline Path::CreatePolyline(Scalar scale) const { case ComponentType::kCubic: return &cubics_[component.index]; case ComponentType::kContour: - return std::nullopt; + return std::monostate{}; } }; auto compute_contour_start_direction = [&get_path_component](size_t current_path_component_index) { size_t next_component_index = current_path_component_index + 1; - while (get_path_component(next_component_index).has_value()) { - auto next_component = - get_path_component(next_component_index).value(); - if (next_component->GetStartDirection().has_value()) { - return next_component->GetStartDirection().value(); + while (!std::holds_alternative( + get_path_component(next_component_index))) { + auto next_component = get_path_component(next_component_index); + auto maybe_vector = + std::visit(PathComponentStartDirectionVisitor(), next_component); + if (maybe_vector.has_value()) { + return maybe_vector.value(); } else { next_component_index++; } @@ -293,11 +306,13 @@ Path::Polyline Path::CreatePolyline(Scalar scale) const { contour.end_direction = Vector2(0, 1); size_t previous_index = previous_path_component_index.value(); - while (get_path_component(previous_index).has_value()) { - auto previous_path_component = get_path_component(previous_index).value(); - if (previous_path_component->GetEndDirection().has_value()) { - contour.end_direction = - previous_path_component->GetEndDirection().value(); + while (!std::holds_alternative( + get_path_component(previous_index))) { + auto previous_component = get_path_component(previous_index); + auto maybe_vector = + std::visit(PathComponentEndDirectionVisitor(), previous_component); + if (maybe_vector.has_value()) { + contour.end_direction = maybe_vector.value(); break; } else { if (previous_index == 0) { diff --git a/impeller/geometry/path.h b/impeller/geometry/path.h index 0c4cf6939950a..1f3c14659b84d 100644 --- a/impeller/geometry/path.h +++ b/impeller/geometry/path.h @@ -77,7 +77,7 @@ class Path { ~Path(); - size_t GetComponentCount() const; + size_t GetComponentCount(std::optional type = {}) const; void SetFillType(FillType fill); diff --git a/impeller/geometry/path_component.cc b/impeller/geometry/path_component.cc index da0a6aae0889e..7414d3ebbca47 100644 --- a/impeller/geometry/path_component.cc +++ b/impeller/geometry/path_component.cc @@ -8,8 +8,6 @@ namespace impeller { -PathComponent::~PathComponent() = default; - /* * Based on: https://en.wikipedia.org/wiki/B%C3%A9zier_curve#Specific_cases */ @@ -345,4 +343,52 @@ std::optional CubicPathComponent::GetEndDirection() const { return std::nullopt; } +std::optional PathComponentStartDirectionVisitor::operator()( + const LinearPathComponent* component) { + if (!component) { + return std::nullopt; + } + return component->GetStartDirection(); +} + +std::optional PathComponentStartDirectionVisitor::operator()( + const QuadraticPathComponent* component) { + if (!component) { + return std::nullopt; + } + return component->GetStartDirection(); +} + +std::optional PathComponentStartDirectionVisitor::operator()( + const CubicPathComponent* component) { + if (!component) { + return std::nullopt; + } + return component->GetStartDirection(); +} + +std::optional PathComponentEndDirectionVisitor::operator()( + const LinearPathComponent* component) { + if (!component) { + return std::nullopt; + } + return component->GetEndDirection(); +} + +std::optional PathComponentEndDirectionVisitor::operator()( + const QuadraticPathComponent* component) { + if (!component) { + return std::nullopt; + } + return component->GetEndDirection(); +} + +std::optional PathComponentEndDirectionVisitor::operator()( + const CubicPathComponent* component) { + if (!component) { + return std::nullopt; + } + return component->GetEndDirection(); +} + } // namespace impeller diff --git a/impeller/geometry/path_component.h b/impeller/geometry/path_component.h index 3c339ee013cee..c2a808cf18d2a 100644 --- a/impeller/geometry/path_component.h +++ b/impeller/geometry/path_component.h @@ -4,6 +4,8 @@ #pragma once +#include +#include #include #include "impeller/geometry/point.h" @@ -22,14 +24,7 @@ namespace impeller { // points for the given scale. static constexpr Scalar kDefaultCurveTolerance = .1f; -struct PathComponent { - virtual ~PathComponent(); - - virtual std::optional GetStartDirection() const = 0; - virtual std::optional GetEndDirection() const = 0; -}; - -struct LinearPathComponent : public PathComponent { +struct LinearPathComponent { Point p1; Point p2; @@ -47,12 +42,12 @@ struct LinearPathComponent : public PathComponent { return p1 == other.p1 && p2 == other.p2; } - std::optional GetStartDirection() const override; + std::optional GetStartDirection() const; - std::optional GetEndDirection() const override; + std::optional GetEndDirection() const; }; -struct QuadraticPathComponent : public PathComponent { +struct QuadraticPathComponent { Point p1; Point cp; Point p2; @@ -87,12 +82,12 @@ struct QuadraticPathComponent : public PathComponent { return p1 == other.p1 && cp == other.cp && p2 == other.p2; } - std::optional GetStartDirection() const override; + std::optional GetStartDirection() const; - std::optional GetEndDirection() const override; + std::optional GetEndDirection() const; }; -struct CubicPathComponent : public PathComponent { +struct CubicPathComponent { Point p1; Point cp1; Point cp2; @@ -131,9 +126,9 @@ struct CubicPathComponent : public PathComponent { p2 == other.p2; } - std::optional GetStartDirection() const override; + std::optional GetStartDirection() const; - std::optional GetEndDirection() const override; + std::optional GetEndDirection() const; private: QuadraticPathComponent Lower() const; @@ -153,4 +148,31 @@ struct ContourComponent { } }; +using PathComponentVariant = std::variant; + +struct PathComponentStartDirectionVisitor { + std::optional operator()(const LinearPathComponent* component); + std::optional operator()(const QuadraticPathComponent* component); + std::optional operator()(const CubicPathComponent* component); + std::optional operator()(std::monostate monostate) { + return std::nullopt; + } +}; + +struct PathComponentEndDirectionVisitor { + std::optional operator()(const LinearPathComponent* component); + std::optional operator()(const QuadraticPathComponent* component); + std::optional operator()(const CubicPathComponent* component); + std::optional operator()(std::monostate monostate) { + return std::nullopt; + } +}; + +static_assert(!std::is_polymorphic::value); +static_assert(!std::is_polymorphic::value); +static_assert(!std::is_polymorphic::value); + } // namespace impeller diff --git a/impeller/playground/BUILD.gn b/impeller/playground/BUILD.gn index 53bcfc518171f..5b9f24a5c42ca 100644 --- a/impeller/playground/BUILD.gn +++ b/impeller/playground/BUILD.gn @@ -54,7 +54,7 @@ impeller_component("playground") { "//third_party/imgui:imgui_glfw", ] - if (impeller_enable_vulkan || impeller_enable_metal) { + if (impeller_enable_compute) { public_deps += [ "../fixtures:shader_subgroup_fixtures" ] } diff --git a/impeller/playground/backend/metal/playground_impl_mtl.mm b/impeller/playground/backend/metal/playground_impl_mtl.mm index 2418d1dae7c9a..a0d9e997d3ade 100644 --- a/impeller/playground/backend/metal/playground_impl_mtl.mm +++ b/impeller/playground/backend/metal/playground_impl_mtl.mm @@ -25,6 +25,7 @@ #include "impeller/renderer/backend/metal/surface_mtl.h" #include "impeller/renderer/backend/metal/texture_mtl.h" #include "impeller/scene/shaders/mtl/scene_shaders.h" +#include "impeller/tessellator/mtl/tessellation_shaders.h" namespace impeller { @@ -34,23 +35,25 @@ static std::vector> ShaderLibraryMappingsForPlayground() { - return { - std::make_shared(impeller_entity_shaders_data, - impeller_entity_shaders_length), - std::make_shared(impeller_modern_shaders_data, - impeller_modern_shaders_length), - std::make_shared( - impeller_framebuffer_blend_shaders_data, - impeller_framebuffer_blend_shaders_length), - std::make_shared(impeller_fixtures_shaders_data, - impeller_fixtures_shaders_length), - std::make_shared( - impeller_subgroup_fixtures_shaders_data, - impeller_subgroup_fixtures_shaders_length), - std::make_shared(impeller_imgui_shaders_data, - impeller_imgui_shaders_length), - std::make_shared(impeller_scene_shaders_data, - impeller_scene_shaders_length), + return {std::make_shared( + impeller_entity_shaders_data, impeller_entity_shaders_length), + std::make_shared( + impeller_modern_shaders_data, impeller_modern_shaders_length), + std::make_shared( + impeller_framebuffer_blend_shaders_data, + impeller_framebuffer_blend_shaders_length), + std::make_shared( + impeller_fixtures_shaders_data, impeller_fixtures_shaders_length), + std::make_shared( + impeller_subgroup_fixtures_shaders_data, + impeller_subgroup_fixtures_shaders_length), + std::make_shared(impeller_imgui_shaders_data, + impeller_imgui_shaders_length), + std::make_shared(impeller_scene_shaders_data, + impeller_scene_shaders_length), + std::make_shared( + impeller_tessellation_shaders_data, + impeller_tessellation_shaders_length) }; } diff --git a/impeller/renderer/BUILD.gn b/impeller/renderer/BUILD.gn index 792fc8ed85ff9..75a269a180744 100644 --- a/impeller/renderer/BUILD.gn +++ b/impeller/renderer/BUILD.gn @@ -4,6 +4,23 @@ import("//flutter/impeller/tools/impeller.gni") +impeller_component("buffer") { + sources = [ + "buffer.cc", + "buffer.h", + "buffer_view.cc", + "buffer_view.h", + "host_buffer.cc", + "host_buffer.h", + "platform.cc", + "platform.h", + "range.cc", + "range.h", + "vertex_buffer.cc", + "vertex_buffer.h", + ] +} + impeller_component("renderer") { sources = [ "allocator.cc", @@ -12,10 +29,6 @@ impeller_component("renderer") { "blit_command.h", "blit_pass.cc", "blit_pass.h", - "buffer.cc", - "buffer.h", - "buffer_view.cc", - "buffer_view.h", "command.cc", "command.h", "command_buffer.cc", @@ -41,8 +54,6 @@ impeller_component("renderer") { "formats.h", "gpu_tracer.cc", "gpu_tracer.h", - "host_buffer.cc", - "host_buffer.h", "pipeline.cc", "pipeline.h", "pipeline_builder.cc", @@ -51,10 +62,6 @@ impeller_component("renderer") { "pipeline_descriptor.h", "pipeline_library.cc", "pipeline_library.h", - "platform.cc", - "platform.h", - "range.cc", - "range.h", "render_pass.cc", "render_pass.h", "render_target.cc", @@ -83,8 +90,6 @@ impeller_component("renderer") { "texture.h", "texture_descriptor.cc", "texture_descriptor.h", - "vertex_buffer.cc", - "vertex_buffer.h", "vertex_buffer_builder.cc", "vertex_buffer_builder.h", "vertex_descriptor.cc", @@ -92,6 +97,7 @@ impeller_component("renderer") { ] public_deps = [ + ":buffer", "../base", "../geometry", "../image", @@ -99,6 +105,10 @@ impeller_component("renderer") { "../tessellator", ] + if (impeller_enable_compute) { + public_deps += [ "./tessellation" ] + } + deps = [ "//flutter/fml" ] } @@ -112,20 +122,16 @@ impeller_component("renderer_unittests") { "renderer_unittests.cc", ] - if (impeller_enable_vulkan || impeller_enable_metal) { - sources += [ - "compute_subgroup_unittests.cc", - "compute_unittests.cc", - ] - } - deps = [ ":renderer", - "../entity", "../fixtures", "../playground:playground_test", "//flutter/testing:testing_lib", ] + + if (impeller_enable_compute) { + sources += [ "compute_unittests.cc" ] + } } test_fixtures("renderer_dart_fixtures") { diff --git a/impeller/renderer/compute_pass.h b/impeller/renderer/compute_pass.h index 88135a0201a49..996e55bb7ecb6 100644 --- a/impeller/renderer/compute_pass.h +++ b/impeller/renderer/compute_pass.h @@ -7,7 +7,6 @@ #include #include -#include "command_buffer.h" #include "impeller/renderer/compute_command.h" #include "impeller/renderer/device_buffer.h" #include "impeller/renderer/texture.h" diff --git a/impeller/renderer/tessellation/BUILD.gn b/impeller/renderer/tessellation/BUILD.gn new file mode 100644 index 0000000000000..88bf11c7235b0 --- /dev/null +++ b/impeller/renderer/tessellation/BUILD.gn @@ -0,0 +1,46 @@ +# Copyright 2013 The Flutter Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import("//flutter/impeller/tools/impeller.gni") + +if (impeller_enable_compute) { + impeller_shaders("tessellation_shaders") { + enable_opengles = false + name = "tessellation" + + if (is_ios) { + metal_version = "2.4" + } else if (is_mac) { + metal_version = "2.1" + } + + shaders = [ + "stroke.comp", + "path_polyline.comp", + ] + } + + impeller_component("tessellation") { + sources = [ + "compute_tessellator.cc", + "compute_tessellator.h", + ] + + public_deps = [ ":tessellation_shaders" ] + } + + impeller_component("compute_tessellation_unittests") { + testonly = true + sources = [ "compute_subgroup_unittests.cc" ] + + deps = [ + ":tessellation_shaders", + "../", + "../../entity", + "../../fixtures", + "../../playground:playground_test", + "//flutter/testing:testing_lib", + ] + } +} diff --git a/impeller/renderer/compute_subgroup_unittests.cc b/impeller/renderer/tessellation/compute_subgroup_unittests.cc similarity index 71% rename from impeller/renderer/compute_subgroup_unittests.cc rename to impeller/renderer/tessellation/compute_subgroup_unittests.cc index dd5a1324eaeaa..20794e56a8699 100644 --- a/impeller/renderer/compute_subgroup_unittests.cc +++ b/impeller/renderer/tessellation/compute_subgroup_unittests.cc @@ -4,6 +4,7 @@ #include +#include "compute_tessellator.h" #include "flutter/fml/synchronization/waitable_event.h" #include "flutter/fml/time/time_point.h" #include "flutter/testing/testing.h" @@ -11,13 +12,13 @@ #include "impeller/base/strings.h" #include "impeller/entity/contents/content_context.h" #include "impeller/fixtures/cubic_to_quads.comp.h" -#include "impeller/fixtures/golden_heart.h" +#include "impeller/fixtures/golden_paths.h" #include "impeller/fixtures/quad_polyline.comp.h" #include "impeller/fixtures/sample.comp.h" #include "impeller/fixtures/stage1.comp.h" #include "impeller/fixtures/stage2.comp.h" -#include "impeller/fixtures/stroke.comp.h" #include "impeller/geometry/path.h" +#include "impeller/geometry/path_builder.h" #include "impeller/geometry/path_component.h" #include "impeller/playground/compute_playground_test.h" #include "impeller/renderer/command_buffer.h" @@ -26,12 +27,130 @@ #include "impeller/renderer/formats.h" #include "impeller/renderer/pipeline_library.h" #include "impeller/renderer/render_pass.h" +#include "impeller/renderer/tessellation/compute_tessellator.h" +#include "impeller/renderer/tessellation/path_polyline.comp.h" +#include "impeller/renderer/tessellation/stroke.comp.h" namespace impeller { namespace testing { using ComputeSubgroupTest = ComputePlaygroundTest; INSTANTIATE_COMPUTE_SUITE(ComputeSubgroupTest); +TEST_P(ComputeSubgroupTest, QuadAndCubicInOnePath) { + using SS = StrokeComputeShader; + + auto context = GetContext(); + ASSERT_TRUE(context); + ASSERT_TRUE(context->GetDeviceCapabilities().SupportsComputeSubgroups()); + + auto vertex_buffer = CreateHostVisibleDeviceBuffer>( + context, "VertexBuffer"); + auto vertex_buffer_count = + CreateHostVisibleDeviceBuffer(context, + "VertexBufferCount"); + + auto path = PathBuilder{} + .AddCubicCurve({140, 20}, {73, 20}, {20, 74}, {20, 140}) + .AddQuadraticCurve({20, 140}, {93, 90}, {100, 42}) + .TakePath(); + + auto tessellator = ComputeTessellator{}; + + fml::AutoResetWaitableEvent latch; + + auto status = tessellator.Tessellate( + path, context, vertex_buffer->AsBufferView(), + vertex_buffer_count->AsBufferView(), + [&latch](CommandBuffer::Status status) { + EXPECT_EQ(status, CommandBuffer::Status::kCompleted); + latch.Signal(); + }); + + ASSERT_EQ(status, ComputeTessellator::Status::kOk); + + auto callback = [&](RenderPass& pass) -> bool { + ContentContext renderer(context); + if (!renderer.IsValid()) { + return false; + } + + using VS = SolidFillPipeline::VertexShader; + using FS = SolidFillPipeline::FragmentShader; + + Command cmd; + cmd.label = "Draw Stroke"; + cmd.stencil_reference = 0; + + ContentContextOptions options; + options.sample_count = pass.GetRenderTarget().GetSampleCount(); + options.color_attachment_pixel_format = + pass.GetRenderTarget().GetRenderTargetPixelFormat(); + options.has_stencil_attachment = + pass.GetRenderTarget().GetStencilAttachment().has_value(); + options.blend_mode = BlendMode::kSourceIn; + options.primitive_type = PrimitiveType::kTriangleStrip; + options.stencil_compare = CompareFunction::kEqual; + options.stencil_operation = StencilOperation::kIncrementClamp; + + cmd.pipeline = renderer.GetSolidFillPipeline(options); + + auto count = reinterpret_cast( + vertex_buffer_count->AsBufferView().contents) + ->count; + auto& host_buffer = pass.GetTransientsBuffer(); + std::vector indices(count); + std::iota(std::begin(indices), std::end(indices), 0); + + VertexBuffer render_vertex_buffer{ + .vertex_buffer = vertex_buffer->AsBufferView(), + .index_buffer = host_buffer.Emplace( + indices.data(), count * sizeof(uint16_t), alignof(uint16_t)), + .index_count = count, + .index_type = IndexType::k16bit}; + cmd.BindVertices(render_vertex_buffer); + + VS::FrameInfo frame_info; + auto world_matrix = Matrix::MakeScale(GetContentScale()); + frame_info.mvp = + Matrix::MakeOrthographic(pass.GetRenderTargetSize()) * world_matrix; + VS::BindFrameInfo(cmd, + pass.GetTransientsBuffer().EmplaceUniform(frame_info)); + + FS::FragInfo frag_info; + frag_info.color = Color::Red().Premultiply(); + FS::BindFragInfo(cmd, pass.GetTransientsBuffer().EmplaceUniform(frag_info)); + + if (!pass.AddCommand(std::move(cmd))) { + return false; + } + + return true; + }; + ASSERT_TRUE(OpenPlaygroundHere(callback)); + + // The latch is down here because it's expected that on Metal the backend will + // take care of synchronizing the buffer between the compute and render pass + // usages, since it's not MTLHeap allocated. + // However, if playgrounds are disabled, no render pass actually gets + // submitted and we need to do a CPU latch here. + latch.Wait(); + + auto vertex_count = reinterpret_cast( + vertex_buffer_count->AsBufferView().contents) + ->count; + EXPECT_EQ(vertex_count, golden_cubic_and_quad_points.size()); + auto vertex_buffer_data = reinterpret_cast*>( + vertex_buffer->AsBufferView().contents); + for (size_t i = 0; i < vertex_count; i++) { + EXPECT_LT(std::abs(golden_cubic_and_quad_points[i].x - + vertex_buffer_data->position[i].x), + 1e-3); + EXPECT_LT(std::abs(golden_cubic_and_quad_points[i].y - + vertex_buffer_data->position[i].y), + 1e-3); + } +} + TEST_P(ComputeSubgroupTest, HeartCubicsToStrokeVertices) { using CS = CubicToQuadsComputeShader; using QS = QuadPolylineComputeShader; @@ -206,7 +325,7 @@ TEST_P(ComputeSubgroupTest, HeartCubicsToStrokeVertices) { Command cmd; cmd.label = "Draw Stroke"; - cmd.stencil_reference = 0; // entity.GetStencilDepth(); + cmd.stencil_reference = 0; ContentContextOptions options; options.sample_count = pass.GetRenderTarget().GetSampleCount(); @@ -214,7 +333,7 @@ TEST_P(ComputeSubgroupTest, HeartCubicsToStrokeVertices) { pass.GetRenderTarget().GetRenderTargetPixelFormat(); options.has_stencil_attachment = pass.GetRenderTarget().GetStencilAttachment().has_value(); - options.blend_mode = BlendMode::kSourceIn; // entity.GetBlendMode(); + options.blend_mode = BlendMode::kSourceIn; options.primitive_type = PrimitiveType::kTriangleStrip; options.stencil_compare = CompareFunction::kEqual; options.stencil_operation = StencilOperation::kIncrementClamp; diff --git a/impeller/renderer/tessellation/compute_tessellator.cc b/impeller/renderer/tessellation/compute_tessellator.cc new file mode 100644 index 0000000000000..df7927b0b6e69 --- /dev/null +++ b/impeller/renderer/tessellation/compute_tessellator.cc @@ -0,0 +1,183 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "impeller/renderer/tessellation/compute_tessellator.h" + +#include "compute_tessellator.h" +#include "impeller/renderer/command_buffer.h" +#include "impeller/renderer/pipeline_library.h" +#include "impeller/renderer/tessellation/path_polyline.comp.h" +#include "impeller/renderer/tessellation/stroke.comp.h" + +namespace impeller { + +ComputeTessellator::ComputeTessellator() = default; +ComputeTessellator::~ComputeTessellator() = default; + +template +static std::shared_ptr CreateDeviceBuffer( + std::shared_ptr context, + const std::string& label) { + DeviceBufferDescriptor desc; + desc.storage_mode = StorageMode::kDevicePrivate; + desc.size = sizeof(T); + auto buffer = context->GetResourceAllocator()->CreateBuffer(desc); + buffer->SetLabel(label); + return buffer; +} + +ComputeTessellator& ComputeTessellator::SetStyle(Style value) { + style_ = value; + return *this; +} + +ComputeTessellator& ComputeTessellator::SetStrokeWidth(Scalar value) { + stroke_width_ = value; + return *this; +} + +ComputeTessellator& ComputeTessellator::SetStrokeJoin(Join value) { + stroke_join_ = value; + return *this; +} +ComputeTessellator& ComputeTessellator::SetStrokeCap(Cap value) { + stroke_cap_ = value; + return *this; +} +ComputeTessellator& ComputeTessellator::SetMiterLimit(Scalar value) { + miter_limit_ = value; + return *this; +} +ComputeTessellator& ComputeTessellator::SetCubicAccuracy(Scalar value) { + cubic_accuracy_ = value; + return *this; +} +ComputeTessellator& ComputeTessellator::SetQuadraticTolerance(Scalar value) { + quad_tolerance_ = value; + return *this; +} + +ComputeTessellator::Status ComputeTessellator::Tessellate( + const Path& path, + std::shared_ptr context, + BufferView vertex_buffer, + BufferView vertex_buffer_count, + const CommandBuffer::CompletionCallback& callback) const { + FML_DCHECK(style_ == Style::kStroke); + using PS = PathPolylineComputeShader; + using SS = StrokeComputeShader; + + auto cubic_count = path.GetComponentCount(Path::ComponentType::kCubic); + auto quad_count = path.GetComponentCount(Path::ComponentType::kQuadratic) + + (cubic_count * 10); + auto line_count = + path.GetComponentCount(Path::ComponentType::kLinear) + (quad_count * 10); + if (cubic_count > kMaxCubicCount || quad_count > kMaxQuadCount || + line_count > kMaxLineCount) { + return Status::kTooManyComponents; + } + PS::Cubics cubics{.count = 0}; + PS::Quads quads{.count = 0}; + PS::Lines lines{.count = 0}; + PS::Components components{.count = 0}; + PS::Config config{.cubic_accuracy = cubic_accuracy_, + .quad_tolerance = quad_tolerance_}; + + path.EnumerateComponents( + [&lines, &components](size_t index, const LinearPathComponent& linear) { + lines.data[lines.count] = {linear.p1, linear.p2}; + components.data[components.count++] = {lines.count++, 2}; + }, + [&quads, &components](size_t index, const QuadraticPathComponent& quad) { + quads.data[quads.count] = {quad.p1, quad.cp, quad.p2}; + components.data[components.count++] = {quads.count++, 3}; + }, + [&cubics, &components](size_t index, const CubicPathComponent& cubic) { + cubics.data[cubics.count] = {cubic.p1, cubic.cp1, cubic.cp2, cubic.p2}; + components.data[components.count++] = {cubics.count++, 4}; + }, + [](size_t index, const ContourComponent& contour) {}); + + auto polyline_buffer = + CreateDeviceBuffer>(context, "Polyline"); + + auto cmd_buffer = context->CreateCommandBuffer(); + auto pass = cmd_buffer->CreateComputePass(); + FML_DCHECK(pass && pass->IsValid()); + + { + using PathPolylinePipelineBuilder = ComputePipelineBuilder; + auto pipeline_desc = + PathPolylinePipelineBuilder::MakeDefaultPipelineDescriptor(*context); + FML_DCHECK(pipeline_desc.has_value()); + auto compute_pipeline = + context->GetPipelineLibrary()->GetPipeline(pipeline_desc).Get(); + FML_DCHECK(compute_pipeline); + + pass->SetGridSize(ISize(line_count, 1)); + pass->SetThreadGroupSize(ISize(line_count, 1)); + + ComputeCommand cmd; + cmd.label = "PathToPolyline"; + cmd.pipeline = compute_pipeline; + + PS::BindConfig(cmd, pass->GetTransientsBuffer().EmplaceUniform(config)); + PS::BindCubics(cmd, + pass->GetTransientsBuffer().EmplaceStorageBuffer(cubics)); + PS::BindQuads(cmd, pass->GetTransientsBuffer().EmplaceStorageBuffer(quads)); + PS::BindLines(cmd, pass->GetTransientsBuffer().EmplaceStorageBuffer(lines)); + PS::BindComponents( + cmd, pass->GetTransientsBuffer().EmplaceStorageBuffer(components)); + PS::BindPolyline(cmd, polyline_buffer->AsBufferView()); + + if (!pass->AddCommand(std::move(cmd))) { + return Status::kCommandInvalid; + } + } + + { + using StrokePipelineBuilder = ComputePipelineBuilder; + auto pipeline_desc = + StrokePipelineBuilder::MakeDefaultPipelineDescriptor(*context); + FML_DCHECK(pipeline_desc.has_value()); + auto compute_pipeline = + context->GetPipelineLibrary()->GetPipeline(pipeline_desc).Get(); + FML_DCHECK(compute_pipeline); + + pass->SetGridSize(ISize(line_count, 1)); + pass->SetThreadGroupSize(ISize(line_count, 1)); + + ComputeCommand cmd; + cmd.label = "Compute Stroke"; + cmd.pipeline = compute_pipeline; + + SS::Config config{ + .width = stroke_width_, + .cap = static_cast(stroke_cap_), + .join = static_cast(stroke_join_), + .miter_limit = miter_limit_, + }; + SS::BindConfig(cmd, pass->GetTransientsBuffer().EmplaceUniform(config)); + + SS::BindPolyline(cmd, polyline_buffer->AsBufferView()); + SS::BindVertexBufferCount(cmd, vertex_buffer_count); + SS::BindVertexBuffer(cmd, vertex_buffer); + + if (!pass->AddCommand(std::move(cmd))) { + return Status::kCommandInvalid; + } + } + + if (!pass->EncodeCommands()) { + return Status::kCommandInvalid; + } + + if (!cmd_buffer->SubmitCommands(callback)) { + return Status::kCommandInvalid; + } + + return Status::kOk; +} + +} // namespace impeller diff --git a/impeller/renderer/tessellation/compute_tessellator.h b/impeller/renderer/tessellation/compute_tessellator.h new file mode 100644 index 0000000000000..711b1540c9490 --- /dev/null +++ b/impeller/renderer/tessellation/compute_tessellator.h @@ -0,0 +1,75 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#pragma once + +#include "flutter/fml/macros.h" +#include "impeller/entity/geometry.h" +#include "impeller/geometry/path.h" +#include "impeller/renderer/buffer_view.h" +#include "impeller/renderer/command_buffer.h" +#include "impeller/renderer/context.h" + +namespace impeller { + +//------------------------------------------------------------------------------ +/// @brief A utility that generates triangles of the specified fill type +/// given a polyline. This happens on the CPU. +/// +class ComputeTessellator { + public: + ComputeTessellator(); + + ~ComputeTessellator(); + + static constexpr size_t kMaxCubicCount = 256; + static constexpr size_t kMaxQuadCount = 512; + static constexpr size_t kMaxLineCount = 1024; + static constexpr size_t kMaxComponentCount = + kMaxCubicCount + kMaxQuadCount + kMaxLineCount; + + enum class Status { + kCommandInvalid, + kTooManyComponents, + kOk, + }; + + enum class Style { + kStroke, + // TODO(dnfield): Implement kFill. + }; + + ComputeTessellator& SetStyle(Style value); + ComputeTessellator& SetStrokeWidth(Scalar value); + ComputeTessellator& SetStrokeJoin(Join value); + ComputeTessellator& SetStrokeCap(Cap value); + ComputeTessellator& SetMiterLimit(Scalar value); + ComputeTessellator& SetCubicAccuracy(Scalar value); + ComputeTessellator& SetQuadraticTolerance(Scalar value); + + //---------------------------------------------------------------------------- + /// @brief Generates triangles from the path. + /// + /// @return A buffer view that will be filled with the tessellation result. + /// + Status Tessellate( + const Path& path, + std::shared_ptr context, + BufferView vertex_buffer, + BufferView vertex_buffer_count, + const CommandBuffer::CompletionCallback& callback = nullptr) const; + + private: + Style style_ = Style::kStroke; + Scalar stroke_width_ = 1.0f; + Cap stroke_cap_ = Cap::kButt; + Join stroke_join_ = Join::kMiter; + Scalar miter_limit_ = 4.0f; + Scalar cubic_accuracy_ = kDefaultCurveTolerance; + Scalar quad_tolerance_ = .1f; + + FML_DISALLOW_COPY_AND_ASSIGN(ComputeTessellator); +}; + +} // namespace impeller diff --git a/impeller/renderer/tessellation/path_polyline.comp b/impeller/renderer/tessellation/path_polyline.comp new file mode 100644 index 0000000000000..cb854952afdd7 --- /dev/null +++ b/impeller/renderer/tessellation/path_polyline.comp @@ -0,0 +1,172 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +#extension GL_KHR_shader_subgroup_arithmetic : enable + +layout(local_size_x = 512, local_size_y = 1) in; +layout(std430) buffer; + +#include + +layout(binding = 0) readonly buffer Cubics { + uint count; + CubicData data[]; +} +cubics; + +layout(binding = 1) buffer Quads { + uint count; + QuadData data[]; +} +quads; + +layout(binding = 2) buffer Lines { + uint count; + LineData data[]; +} +lines; + +layout(binding = 3) buffer Components { + uint count; + PathComponent data[]; +} +components; + +layout(binding = 4) buffer Polyline { + uint count; + vec2 data[]; +} +polyline; + +uniform Config { + float cubic_accuracy; + float quad_tolerance; +} +config; + +shared uvec2 cubic_ranges[512]; +shared uvec2 quad_ranges[512]; +shared uint scratch_count[512]; +shared uint scratch_sum[512]; + +uint ComputePosition(uint index) { + if (index < gl_SubgroupSize) { + return scratch_sum[index]; + } + int position = -1; + uint sum = scratch_sum[index]; + do { + position += int(gl_SubgroupSize); + sum += scratch_sum[position]; + } while (position < index); + return sum; +} + +void ProcessCubic(uint ident) { + CubicData cubic; + uint quad_count = 0; + if (ident < cubics.count) { + cubic = cubics.data[ident]; + quad_count = EstimateQuadraticCount(cubic, config.cubic_accuracy); + scratch_count[ident] = quad_count; + } + + barrier(); + + if (quad_count == 0) { + return; + } + + scratch_sum[ident] = subgroupExclusiveAdd(scratch_count[ident]); + + uint offset = ComputePosition(ident) + quads.count; + atomicAdd(quads.count, quad_count); + + cubic_ranges[ident] = uvec2(offset, quad_count); + for (uint i = 0; i < quad_count; i++) { + quads.data[offset + i] = GenerateQuadraticFromCubic(cubic, i, quad_count); + } +} + +void ProcessQuad(uint ident) { + QuadData quad; + QuadDecomposition decomposition; + if (ident < quads.count) { + quad = quads.data[ident]; + decomposition = DecomposeQuad(quad, config.quad_tolerance); + scratch_count[ident] = decomposition.line_count; + } + + barrier(); + + if (decomposition.line_count == 0) { + return; + } + + scratch_sum[ident] = subgroupExclusiveAdd(scratch_count[ident]); + + uint offset = ComputePosition(ident) + lines.count; + atomicAdd(lines.count, decomposition.line_count); + quad_ranges[ident] = uvec2(offset, decomposition.line_count); + + vec2 last_point = quad.p1; + for (uint i = 1; i < decomposition.line_count; i++) { + LineData line = + LineData(last_point, GenerateLineFromQuad(quad, i, decomposition)); + last_point = line.p2; + lines.data[offset + i - 1] = line; + } + lines.data[offset + decomposition.line_count - 1] = + LineData(last_point, quad.p2); +} + +void ProcessLine(uint ident) { + if (ident == lines.count) { + atomicAdd(polyline.count, lines.count + 1); + } + + PathComponent component; + uvec2 range = uvec2(0, 0); + if (ident < components.count) { + component = components.data[ident]; + if (component.count == 4) { + // Determine location in quads + uvec2 quad_range = cubic_ranges[component.index]; + range.x = quad_ranges[quad_range.x].x; + range.y = quad_ranges[quad_range.x + quad_range.y - 1].x + + quad_ranges[quad_range.x + quad_range.y - 1].y - range.x; + } else if (component.count == 3) { + range = quad_ranges[component.index]; + } else if (component.count == 2) { + range = uvec2(component.index, 1); + } + + scratch_count[ident] = range.y; + } + barrier(); + + if (ident < components.count) { + scratch_sum[ident] = subgroupExclusiveAdd(scratch_count[ident]); + + uint offset = ComputePosition(ident); + polyline.data[offset] = lines.data[range.x].p1; + for (uint i = 0; i < range.y; i++) { + polyline.data[offset + i + 1] = lines.data[range.x + i].p2; + } + } +} + +void main() { + uint ident = gl_GlobalInvocationID.x; + // Turn each cubic into quads. + ProcessCubic(ident); + barrier(); + + // Turn each quad into lines. + ProcessQuad(ident); + barrier(); + + // Copy lines to the output buffer. + ProcessLine(ident); + barrier(); +} diff --git a/impeller/fixtures/stroke.comp b/impeller/renderer/tessellation/stroke.comp similarity index 88% rename from impeller/fixtures/stroke.comp rename to impeller/renderer/tessellation/stroke.comp index 7f5453cd0cd62..0090c0af7336d 100644 --- a/impeller/fixtures/stroke.comp +++ b/impeller/renderer/tessellation/stroke.comp @@ -42,6 +42,7 @@ vec2 compute_offset(uint index) { void main() { uint ident = gl_GlobalInvocationID.x; if (ident >= polyline.count || ident == 0) { + // This is ok because there is no barrier() below. return; } @@ -56,8 +57,8 @@ void main() { // TODO(dnfield): Implement other cap/join mechanisms. if (ident == polyline.count - 1) { - vertex_buffer.position[index * 4 + 4] = vec2(140, 20); - vertex_buffer.position[index * 4 + 5] = vec2(140, 20); + vertex_buffer.position[index * 4 + 4] = polyline.data[ident] + offset; + vertex_buffer.position[index * 4 + 5] = polyline.data[ident] - offset; atomicAdd(vertex_buffer_count.count, 2); } } diff --git a/impeller/tools/impeller.gni b/impeller/tools/impeller.gni index c9a46c15a2511..5c51c0612882e 100644 --- a/impeller/tools/impeller.gni +++ b/impeller/tools/impeller.gni @@ -46,6 +46,8 @@ declare_args() { impeller_supports_rendering = impeller_enable_metal || impeller_enable_opengles || impeller_enable_vulkan + + impeller_enable_compute = impeller_enable_vulkan || impeller_enable_metal } # ------------------------------------------------------------------------------ @@ -388,7 +390,7 @@ template("impellerc_reflect") { ]) deps = [ - "//flutter/impeller/renderer", + "//flutter/impeller/renderer:buffer", impellerc_invocation, ] } diff --git a/shell/platform/android/platform_view_android.cc b/shell/platform/android/platform_view_android.cc index 1b9d440a2d4bd..d0c337fd0a82b 100644 --- a/shell/platform/android/platform_view_android.cc +++ b/shell/platform/android/platform_view_android.cc @@ -46,15 +46,16 @@ std::unique_ptr AndroidSurfaceFactoryImpl::CreateSurface() { jni_facade_); case AndroidRenderingAPI::kOpenGLES: if (enable_impeller_) { -// TODO(kaushikiska@): Enable this after wiring a preference for Vulkan backend. -#if false + // TODO(kaushikiska@): Enable this after wiring a preference for Vulkan + // backend. #if false return std::make_unique(android_context_, jni_facade_); -#else - return std::make_unique(android_context_, - jni_facade_); -#endif + // #else + // return + // std::make_unique(android_context_, + // jni_facade_); + // #endif } else { return std::make_unique(android_context_, jni_facade_); diff --git a/shell/platform/windows/BUILD.gn b/shell/platform/windows/BUILD.gn index db9053a34e453..1f7a850b07135 100644 --- a/shell/platform/windows/BUILD.gn +++ b/shell/platform/windows/BUILD.gn @@ -103,8 +103,6 @@ source_set("flutter_windows_source") { "window_proc_delegate_manager.cc", "window_proc_delegate_manager.h", "window_state.h", - "windows_lifecycle_manager.cc", - "windows_lifecycle_manager.h", "windows_proc_table.cc", "windows_proc_table.h", "windows_registry.cc", diff --git a/shell/platform/windows/fixtures/main.dart b/shell/platform/windows/fixtures/main.dart index c9794f68d89ab..1e8d5a9e278cc 100644 --- a/shell/platform/windows/fixtures/main.dart +++ b/shell/platform/windows/fixtures/main.dart @@ -6,7 +6,6 @@ import 'dart:async'; import 'dart:io' as io; import 'dart:typed_data' show ByteData, Uint8List; import 'dart:ui' as ui; -import 'dart:convert'; // Signals a waiting latch in the native test. @pragma('vm:external-name', 'Signal') @@ -87,66 +86,6 @@ void alertPlatformChannel() async { ui.PlatformDispatcher.instance.sendPlatformMessage('flutter/accessibility', byteData, (ByteData? _){}); } -@pragma('vm:entry-point') -void exitTestExit() async { - final Completer closed = Completer(); - ui.channelBuffers.setListener('flutter/platform', (ByteData? data, ui.PlatformMessageResponseCallback callback) async { - final String jsonString = json.encode(>[{'response': 'exit'}]); - final ByteData responseData = ByteData.sublistView(Uint8List.fromList(utf8.encode(jsonString))); - callback(responseData); - closed.complete(data); - }); - await closed.future; - - // From here down, nothing should be called, because the application will have already been closed. - final Completer exited = Completer(); - final String jsonString = json.encode({ - 'method': 'System.exitApplication', - 'args': { - 'type': 'required', 'exitCode': 0 - } - }); - ui.PlatformDispatcher.instance.sendPlatformMessage( - 'flutter/platform', - ByteData.sublistView( - Uint8List.fromList(utf8.encode(jsonString)) - ), - (ByteData? reply) { - exited.complete(reply); - }); - await exited.future; -} - -@pragma('vm:entry-point') -void exitTestCancel() async { - final Completer closed = Completer(); - ui.channelBuffers.setListener('flutter/platform', (ByteData? data, ui.PlatformMessageResponseCallback callback) async { - final String jsonString = json.encode(>[{'response': 'cancel'}]); - final ByteData responseData = ByteData.sublistView(Uint8List.fromList(utf8.encode(jsonString))); - callback(responseData); - closed.complete(data); - }); - await closed.future; - - // Because the request was canceled, the below shall execute. - final Completer exited = Completer(); - final String jsonString = json.encode({ - 'method': 'System.exitApplication', - 'args': { - 'type': 'required', 'exitCode': 0 - } - }); - ui.PlatformDispatcher.instance.sendPlatformMessage( - 'flutter/platform', - ByteData.sublistView( - Uint8List.fromList(utf8.encode(jsonString)) - ), - (ByteData? reply) { - exited.complete(reply); - }); - await exited.future; -} - @pragma('vm:entry-point') void customEntrypoint() {} diff --git a/shell/platform/windows/flutter_windows_engine.cc b/shell/platform/windows/flutter_windows_engine.cc index 0a0bbbe94cd90..b49e6ece3b611 100644 --- a/shell/platform/windows/flutter_windows_engine.cc +++ b/shell/platform/windows/flutter_windows_engine.cc @@ -161,8 +161,7 @@ FlutterWindowsEngine::FlutterWindowsEngine( std::unique_ptr registry) : project_(std::make_unique(project)), aot_data_(nullptr, nullptr), - windows_registry_(std::move(registry)), - lifecycle_manager_(std::make_unique(this)) { + windows_registry_(std::move(registry)) { embedder_api_.struct_size = sizeof(FlutterEngineProcTable); FlutterEngineGetProcAddresses(&embedder_api_); @@ -204,17 +203,6 @@ FlutterWindowsEngine::FlutterWindowsEngine( std::make_unique(this, gl_procs_); surface_manager_ = AngleSurfaceManager::Create(); window_proc_delegate_manager_ = std::make_unique(); - window_proc_delegate_manager_->RegisterTopLevelWindowProcDelegate( - [](HWND hwnd, UINT msg, WPARAM wpar, LPARAM lpar, void* user_data, - LRESULT* result) { - BASE_DCHECK(user_data); - FlutterWindowsEngine* that = - static_cast(user_data); - BASE_DCHECK(that->lifecycle_manager_); - return that->lifecycle_manager_->WindowProc(hwnd, msg, wpar, lpar, - result); - }, - static_cast(this)); // Set up internal channels. // TODO: Replace this with an embedder.h API. See @@ -763,13 +751,4 @@ void FlutterWindowsEngine::HandleAccessibilityMessage( reinterpret_cast(""), 0); } -void FlutterWindowsEngine::RequestApplicationQuit(ExitType exit_type, - UINT exit_code) { - platform_handler_->RequestAppExit(exit_type, exit_code); -} - -void FlutterWindowsEngine::OnQuit(UINT exit_code) { - lifecycle_manager_->Quit(exit_code); -} - } // namespace flutter diff --git a/shell/platform/windows/flutter_windows_engine.h b/shell/platform/windows/flutter_windows_engine.h index e4964041ffbea..01de0d39f2026 100644 --- a/shell/platform/windows/flutter_windows_engine.h +++ b/shell/platform/windows/flutter_windows_engine.h @@ -35,7 +35,6 @@ #include "flutter/shell/platform/windows/text_input_plugin.h" #include "flutter/shell/platform/windows/window_proc_delegate_manager.h" #include "flutter/shell/platform/windows/window_state.h" -#include "flutter/shell/platform/windows/windows_lifecycle_manager.h" #include "flutter/shell/platform/windows/windows_registry.h" #include "third_party/rapidjson/include/rapidjson/document.h" @@ -255,12 +254,6 @@ class FlutterWindowsEngine { // Updates accessibility, e.g. switch to high contrast mode void UpdateAccessibilityFeatures(FlutterAccessibilityFeature flags); - // Called when the application quits in response to a quit request. - void OnQuit(UINT exit_code); - - // Called when a WM_CLOSE message is received. - void RequestApplicationQuit(ExitType exit_type, UINT exit_code); - protected: // Creates the keyboard key handler. // @@ -402,9 +395,6 @@ class FlutterWindowsEngine { // Wrapper providing Windows registry access. std::unique_ptr windows_registry_; - // Handler for top level window messages. - std::unique_ptr lifecycle_manager_; - FML_DISALLOW_COPY_AND_ASSIGN(FlutterWindowsEngine); }; diff --git a/shell/platform/windows/flutter_windows_engine_unittests.cc b/shell/platform/windows/flutter_windows_engine_unittests.cc index d007a9f38edca..7a503aae7b3a7 100644 --- a/shell/platform/windows/flutter_windows_engine_unittests.cc +++ b/shell/platform/windows/flutter_windows_engine_unittests.cc @@ -618,92 +618,5 @@ TEST_F(FlutterWindowsEngineTest, AlertPlatformMessage) { } } -class MockWindowsLifecycleManager : public WindowsLifecycleManager { - public: - MockWindowsLifecycleManager(FlutterWindowsEngine* engine) - : WindowsLifecycleManager(engine) {} - virtual ~MockWindowsLifecycleManager() {} - - MOCK_CONST_METHOD1(Quit, void(UINT)); -}; - -TEST_F(FlutterWindowsEngineTest, TestExit) { - FlutterWindowsEngineBuilder builder{GetContext()}; - builder.SetDartEntrypoint("exitTestExit"); - bool finished = false; - bool did_call = false; - - std::unique_ptr engine = builder.Build(); - - EngineModifier modifier(engine.get()); - modifier.embedder_api().RunsAOTCompiledDartCode = []() { return false; }; - auto handler = std::make_unique(engine.get()); - ON_CALL(*handler, Quit).WillByDefault([&finished](UINT exit_code) { - finished = exit_code == 0; - }); - EXPECT_CALL(*handler, Quit).Times(1); - modifier.SetLifecycleManager(std::move(handler)); - - auto binary_messenger = - std::make_unique(engine->messenger()); - binary_messenger->SetMessageHandler( - "flutter/platform", [&did_call](const uint8_t* message, - size_t message_size, BinaryReply reply) { - did_call = true; - char response[] = ""; - reply(reinterpret_cast(response), 0); - }); - - engine->Run(); - - engine->window_proc_delegate_manager()->OnTopLevelWindowProc(0, WM_CLOSE, 0, - 0); - - while (!finished) { - engine->task_runner()->ProcessTasks(); - } - - EXPECT_FALSE(did_call); -} - -TEST_F(FlutterWindowsEngineTest, TestExitCancel) { - FlutterWindowsEngineBuilder builder{GetContext()}; - builder.SetDartEntrypoint("exitTestCancel"); - bool finished = false; - bool did_call = false; - - std::unique_ptr engine = builder.Build(); - - EngineModifier modifier(engine.get()); - modifier.embedder_api().RunsAOTCompiledDartCode = []() { return false; }; - auto handler = std::make_unique(engine.get()); - ON_CALL(*handler, Quit).WillByDefault([&finished](int64_t exit_code) { - finished = true; - }); - EXPECT_CALL(*handler, Quit).Times(0); - modifier.SetLifecycleManager(std::move(handler)); - - auto binary_messenger = - std::make_unique(engine->messenger()); - binary_messenger->SetMessageHandler( - "flutter/platform", [&did_call](const uint8_t* message, - size_t message_size, BinaryReply reply) { - did_call = true; - char response[] = ""; - reply(reinterpret_cast(response), 0); - }); - - engine->Run(); - - engine->window_proc_delegate_manager()->OnTopLevelWindowProc(0, WM_CLOSE, 0, - 0); - - while (!did_call) { - engine->task_runner()->ProcessTasks(); - } - - EXPECT_FALSE(finished); -} - } // namespace testing } // namespace flutter diff --git a/shell/platform/windows/platform_handler.cc b/shell/platform/windows/platform_handler.cc index cec1daf25a872..a33710becbf9d 100644 --- a/shell/platform/windows/platform_handler.cc +++ b/shell/platform/windows/platform_handler.cc @@ -28,6 +28,8 @@ static constexpr char kPlaySoundMethod[] = "SystemSound.play"; static constexpr char kExitCodeKey[] = "exitCode"; static constexpr char kExitTypeKey[] = "type"; +static constexpr char kExitTypeCancelable[] = "cancelable"; +static constexpr char kExitTypeRequired[] = "required"; static constexpr char kExitResponseKey[] = "response"; static constexpr char kExitResponseCancel[] = "cancel"; @@ -42,10 +44,6 @@ static constexpr char kValueKey[] = "value"; static constexpr int kAccessDeniedErrorCode = 5; static constexpr int kErrorSuccess = 0; -static constexpr char kExitRequestError[] = "ExitApplication error"; -static constexpr char kInvalidExitRequestMessage[] = - "Invalid application exit request"; - namespace flutter { namespace { @@ -207,16 +205,6 @@ int ScopedClipboard::SetString(const std::wstring string) { } // namespace -static ExitType StringToExitType(const std::string& string) { - if (string.compare(PlatformHandler::kExitTypeRequired) == 0) { - return ExitType::required; - } else if (string.compare(PlatformHandler::kExitTypeCancelable) == 0) { - return ExitType::cancelable; - } - FML_LOG(ERROR) << string << " is not recognized as a valid exit type."; - return ExitType::required; -} - PlatformHandler::PlatformHandler( BinaryMessenger* messenger, FlutterWindowsEngine* engine, @@ -366,12 +354,12 @@ void PlatformHandler::SystemSoundPlay( } void PlatformHandler::SystemExitApplication( - ExitType exit_type, - UINT exit_code, + const std::string& exit_type, + int64_t exit_code, std::unique_ptr> result) { rapidjson::Document result_doc; result_doc.SetObject(); - if (exit_type == ExitType::required) { + if (exit_type.compare(kExitTypeRequired) == 0) { QuitApplication(exit_code); result_doc.GetObjectW().AddMember(kExitResponseKey, kExitResponseExit, result_doc.GetAllocator()); @@ -384,12 +372,8 @@ void PlatformHandler::SystemExitApplication( } } -// Indicates whether an exit request may be canceled by the framework. -// These values must be kept in sync with ExitType in platform_handler.h -static constexpr const char* kExitTypeNames[] = { - PlatformHandler::kExitTypeRequired, PlatformHandler::kExitTypeCancelable}; - -void PlatformHandler::RequestAppExit(ExitType exit_type, UINT exit_code) { +void PlatformHandler::RequestAppExit(const std::string& exit_type, + int64_t exit_code) { auto callback = std::make_unique>( [this, exit_code](const rapidjson::Document* response) { RequestAppExitSuccess(response, exit_code); @@ -397,31 +381,21 @@ void PlatformHandler::RequestAppExit(ExitType exit_type, UINT exit_code) { nullptr, nullptr); auto args = std::make_unique(); args->SetObject(); - args->GetObjectW().AddMember( - kExitTypeKey, std::string(kExitTypeNames[static_cast(exit_type)]), - args->GetAllocator()); + args->GetObjectW().AddMember(kExitTypeKey, exit_type, args->GetAllocator()); channel_->InvokeMethod(kRequestAppExitMethod, std::move(args), std::move(callback)); } void PlatformHandler::RequestAppExitSuccess(const rapidjson::Document* result, - UINT exit_code) { - rapidjson::Value::ConstMemberIterator itr = - result->FindMember(kExitResponseKey); - if (itr == result->MemberEnd() || !itr->value.IsString()) { - FML_LOG(ERROR) << "Application request response did not contain a valid " - "response value"; - return; - } - const std::string& exit_type = itr->value.GetString(); - + int64_t exit_code) { + const std::string& exit_type = result[0][kExitResponseKey].GetString(); if (exit_type.compare(kExitResponseExit) == 0) { QuitApplication(exit_code); } } -void PlatformHandler::QuitApplication(UINT exit_code) { - engine_->OnQuit(exit_code); +void PlatformHandler::QuitApplication(int64_t exit_code) { + PostQuitMessage(exit_code); } void PlatformHandler::HandleMethodCall( @@ -430,24 +404,9 @@ void PlatformHandler::HandleMethodCall( const std::string& method = method_call.method_name(); if (method.compare(kExitApplicationMethod) == 0) { const rapidjson::Value& arguments = method_call.arguments()[0]; - - rapidjson::Value::ConstMemberIterator itr = - arguments.FindMember(kExitTypeKey); - if (itr == arguments.MemberEnd() || !itr->value.IsString()) { - result->Error(kExitRequestError, kInvalidExitRequestMessage); - return; - } - const std::string& exit_type = itr->value.GetString(); - - itr = arguments.FindMember(kExitCodeKey); - if (itr == arguments.MemberEnd() || !itr->value.IsInt()) { - result->Error(kExitRequestError, kInvalidExitRequestMessage); - return; - } - UINT exit_code = arguments[kExitCodeKey].GetInt(); - - SystemExitApplication(StringToExitType(exit_type), exit_code, - std::move(result)); + const std::string& exit_type = arguments[kExitTypeKey].GetString(); + int64_t exit_code = arguments[kExitCodeKey].GetInt64(); + SystemExitApplication(exit_type, exit_code, std::move(result)); } else if (method.compare(kGetClipboardDataMethod) == 0) { // Only one string argument is expected. const rapidjson::Value& format = method_call.arguments()[0]; diff --git a/shell/platform/windows/platform_handler.h b/shell/platform/windows/platform_handler.h index f5eb9f2021e04..096378db4f414 100644 --- a/shell/platform/windows/platform_handler.h +++ b/shell/platform/windows/platform_handler.h @@ -22,13 +22,6 @@ namespace flutter { class FlutterWindowsEngine; class ScopedClipboardInterface; -// Indicates whether an exit request may be canceled by the framework. -// These values must be kept in sync with kExitTypeNames in platform_handler.cc -enum class ExitType { - required, - cancelable, -}; - // Handler for internal system channels. class PlatformHandler { public: @@ -40,14 +33,6 @@ class PlatformHandler { virtual ~PlatformHandler(); - // String values used for encoding/decoding exit requests. - static constexpr char kExitTypeCancelable[] = "cancelable"; - static constexpr char kExitTypeRequired[] = "required"; - - // Send a request to the framework to test if a cancelable exit request - // should be canceled or honored. - virtual void RequestAppExit(ExitType exit_type, UINT exit_code); - protected: // Gets plain text from the clipboard and provides it to |result| as the // value in a dictionary with the given |key|. @@ -72,17 +57,21 @@ class PlatformHandler { // Handle a request from the framework to exit the application. virtual void SystemExitApplication( - ExitType exit_type, - UINT exit_code, + const std::string& exit_type, + int64_t exit_code, std::unique_ptr> result); // Actually quit the application with the provided exit code. - virtual void QuitApplication(UINT exit_code); + virtual void QuitApplication(int64_t exit_code); + + // Send a request to the framework to test if a cancelable exit request + // should be canceled or honored. + virtual void RequestAppExit(const std::string& exit_type, int64_t exit_code); // Callback from when the cancelable exit request response request is // answered by the framework. virtual void RequestAppExitSuccess(const rapidjson::Document* result, - UINT exit_code); + int64_t exit_code); // A error type to use for error responses. static constexpr char kClipboardError[] = "Clipboard error"; diff --git a/shell/platform/windows/platform_handler_unittests.cc b/shell/platform/windows/platform_handler_unittests.cc index eb879569b3d82..85d4f5a9a9713 100644 --- a/shell/platform/windows/platform_handler_unittests.cc +++ b/shell/platform/windows/platform_handler_unittests.cc @@ -82,7 +82,7 @@ class MockPlatformHandler : public PlatformHandler { void(const std::string&, std::unique_ptr>)); - MOCK_METHOD1(QuitApplication, void(UINT exit_code)); + MOCK_METHOD1(QuitApplication, void(int64_t exit_code)); private: FML_DISALLOW_COPY_AND_ASSIGN(MockPlatformHandler); @@ -483,7 +483,7 @@ TEST_F(PlatformHandlerTest, PlaySystemSound) { TEST_F(PlatformHandlerTest, SystemExitApplicationRequired) { use_headless_engine(); - UINT exit_code = 0; + int exit_code = -1; TestBinaryMessenger messenger([](const std::string& channel, const uint8_t* message, size_t size, @@ -491,7 +491,7 @@ TEST_F(PlatformHandlerTest, SystemExitApplicationRequired) { MockPlatformHandler platform_handler(&messenger, engine()); ON_CALL(platform_handler, QuitApplication) - .WillByDefault([&exit_code](UINT ec) { exit_code = ec; }); + .WillByDefault([&exit_code](int ec) { exit_code = ec; }); EXPECT_CALL(platform_handler, QuitApplication).Times(1); std::string result = SimulatePlatformMessage( @@ -524,7 +524,7 @@ TEST_F(PlatformHandlerTest, SystemExitApplicationCancelableCancel) { TEST_F(PlatformHandlerTest, SystemExitApplicationCancelableExit) { use_headless_engine(); bool called_cancel = false; - UINT exit_code = 0; + int exit_code = -1; TestBinaryMessenger messenger( [&called_cancel](const std::string& channel, const uint8_t* message, @@ -536,7 +536,7 @@ TEST_F(PlatformHandlerTest, SystemExitApplicationCancelableExit) { MockPlatformHandler platform_handler(&messenger, engine()); ON_CALL(platform_handler, QuitApplication) - .WillByDefault([&exit_code](UINT ec) { exit_code = ec; }); + .WillByDefault([&exit_code](int ec) { exit_code = ec; }); EXPECT_CALL(platform_handler, QuitApplication).Times(1); std::string result = SimulatePlatformMessage( diff --git a/shell/platform/windows/testing/engine_modifier.h b/shell/platform/windows/testing/engine_modifier.h index ee355c0b5b973..f49362ba6d6ae 100644 --- a/shell/platform/windows/testing/engine_modifier.h +++ b/shell/platform/windows/testing/engine_modifier.h @@ -66,10 +66,6 @@ class EngineModifier { // restart. This resets the keyboard's state if it exists. void Restart() { engine_->OnPreEngineRestart(); } - void SetLifecycleManager(std::unique_ptr&& handler) { - engine_->lifecycle_manager_ = std::move(handler); - } - private: FlutterWindowsEngine* engine_; diff --git a/shell/platform/windows/windows_lifecycle_manager.cc b/shell/platform/windows/windows_lifecycle_manager.cc deleted file mode 100644 index c8e85487a3251..0000000000000 --- a/shell/platform/windows/windows_lifecycle_manager.cc +++ /dev/null @@ -1,120 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "windows_lifecycle_manager.h" - -#include -#include -#include -#include - -#include "flutter/shell/platform/windows/flutter_windows_engine.h" - -namespace flutter { - -WindowsLifecycleManager::WindowsLifecycleManager(FlutterWindowsEngine* engine) - : engine_(engine) {} - -WindowsLifecycleManager::~WindowsLifecycleManager() {} - -void WindowsLifecycleManager::Quit(UINT exit_code) const { - ::PostQuitMessage(exit_code); -} - -bool WindowsLifecycleManager::WindowProc(HWND hwnd, - UINT msg, - WPARAM wpar, - LPARAM lpar, - LRESULT* result) { - switch (msg) { - case WM_CLOSE: - if (IsLastWindowOfProcess()) { - engine_->RequestApplicationQuit(ExitType::cancelable, 0); - } - return true; - } - return false; -} - -class ThreadSnapshot { - public: - ThreadSnapshot() { - thread_snapshot_ = ::CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0); - } - ~ThreadSnapshot() { - if (thread_snapshot_ != INVALID_HANDLE_VALUE) { - ::CloseHandle(thread_snapshot_); - } - } - - std::optional GetFirstThread() { - if (thread_snapshot_ == INVALID_HANDLE_VALUE) { - FML_LOG(ERROR) << "Failed to get thread snapshot"; - return std::nullopt; - } - THREADENTRY32 thread; - thread.dwSize = sizeof(thread); - if (!::Thread32First(thread_snapshot_, &thread)) { - DWORD error_num = ::GetLastError(); - char msg[256]; - ::FormatMessageA( - FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, - error_num, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), msg, 256, - nullptr); - FML_LOG(ERROR) << "Failed to get thread(" << error_num << "): " << msg; - return std::nullopt; - } - return thread; - } - - bool GetNextThread(THREADENTRY32& thread) { - if (thread_snapshot_ == INVALID_HANDLE_VALUE) { - return false; - } - return ::Thread32Next(thread_snapshot_, &thread); - } - - private: - HANDLE thread_snapshot_; -}; - -static int64_t NumWindowsForThread(const THREADENTRY32& thread) { - int64_t num_windows = 0; - ::EnumThreadWindows( - thread.th32ThreadID, - [](HWND hwnd, LPARAM lparam) { - int64_t* windows_ptr = reinterpret_cast(lparam); - if (::GetParent(hwnd) == nullptr) { - (*windows_ptr)++; - } - return *windows_ptr <= 1 ? TRUE : FALSE; - }, - reinterpret_cast(&num_windows)); - return num_windows; -} - -bool WindowsLifecycleManager::IsLastWindowOfProcess() { - DWORD pid = ::GetCurrentProcessId(); - ThreadSnapshot thread_snapshot; - std::optional first_thread = thread_snapshot.GetFirstThread(); - if (!first_thread.has_value()) { - FML_LOG(ERROR) << "No first thread found"; - return true; - } - - int num_windows = 0; - THREADENTRY32 thread = *first_thread; - do { - if (thread.th32OwnerProcessID == pid) { - num_windows += NumWindowsForThread(thread); - if (num_windows > 1) { - return false; - } - } - } while (thread_snapshot.GetNextThread(thread)); - - return num_windows <= 1; -} - -} // namespace flutter diff --git a/shell/platform/windows/windows_lifecycle_manager.h b/shell/platform/windows/windows_lifecycle_manager.h deleted file mode 100644 index 7f45277543219..0000000000000 --- a/shell/platform/windows/windows_lifecycle_manager.h +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef FLUTTER_SHELL_PLATFORM_WINDOWS_WINDOWS_LIFECYCLE_MANAGER_H_ -#define FLUTTER_SHELL_PLATFORM_WINDOWS_WINDOWS_LIFECYCLE_MANAGER_H_ - -#include - -#include - -namespace flutter { - -class FlutterWindowsEngine; - -/// A manager for lifecycle events of the top-level window. -/// -/// Currently handles the following events: -/// WM_CLOSE -class WindowsLifecycleManager { - public: - WindowsLifecycleManager(FlutterWindowsEngine* engine); - virtual ~WindowsLifecycleManager(); - - virtual void Quit(UINT exit_code) const; - - bool WindowProc(HWND hwnd, UINT msg, WPARAM w, LPARAM l, LRESULT* result); - - private: - bool IsLastWindowOfProcess(); - - FlutterWindowsEngine* engine_; -}; - -} // namespace flutter - -#endif // FLUTTER_SHELL_PLATFORM_WINDOWS_WINDOWS_LIFECYCLE_MANAGER_H_ From fd73fa673f59868cde7c37140c2b5f245fd292de Mon Sep 17 00:00:00 2001 From: Dan Field Date: Mon, 27 Mar 2023 16:13:43 -0700 Subject: [PATCH 02/19] revert unintended changes --- ci/licenses_golden/licenses_flutter | 4 + .../platform/android/platform_view_android.cc | 13 +- shell/platform/windows/BUILD.gn | 2 + shell/platform/windows/fixtures/main.dart | 61 +++++++++ .../windows/flutter_windows_engine.cc | 23 +++- .../platform/windows/flutter_windows_engine.h | 10 ++ .../flutter_windows_engine_unittests.cc | 87 +++++++++++++ shell/platform/windows/platform_handler.cc | 71 ++++++++--- shell/platform/windows/platform_handler.h | 27 ++-- .../windows/platform_handler_unittests.cc | 10 +- .../windows/testing/engine_modifier.h | 4 + .../windows/windows_lifecycle_manager.cc | 120 ++++++++++++++++++ .../windows/windows_lifecycle_manager.h | 37 ++++++ 13 files changed, 433 insertions(+), 36 deletions(-) create mode 100644 shell/platform/windows/windows_lifecycle_manager.cc create mode 100644 shell/platform/windows/windows_lifecycle_manager.h diff --git a/ci/licenses_golden/licenses_flutter b/ci/licenses_golden/licenses_flutter index c3b90da74a4ca..484b31c71a509 100644 --- a/ci/licenses_golden/licenses_flutter +++ b/ci/licenses_golden/licenses_flutter @@ -3114,6 +3114,8 @@ ORIGIN: ../../../flutter/shell/platform/windows/window_binding_handler_delegate. ORIGIN: ../../../flutter/shell/platform/windows/window_proc_delegate_manager.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/shell/platform/windows/window_proc_delegate_manager.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/shell/platform/windows/window_state.h + ../../../flutter/LICENSE +ORIGIN: ../../../flutter/shell/platform/windows/windows_lifecycle_manager.cc + ../../../flutter/LICENSE +ORIGIN: ../../../flutter/shell/platform/windows/windows_lifecycle_manager.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/shell/platform/windows/windows_proc_table.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/shell/platform/windows/windows_proc_table.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/shell/platform/windows/windows_registry.cc + ../../../flutter/LICENSE @@ -5700,6 +5702,8 @@ FILE: ../../../flutter/shell/platform/windows/window_binding_handler_delegate.h FILE: ../../../flutter/shell/platform/windows/window_proc_delegate_manager.cc FILE: ../../../flutter/shell/platform/windows/window_proc_delegate_manager.h FILE: ../../../flutter/shell/platform/windows/window_state.h +FILE: ../../../flutter/shell/platform/windows/windows_lifecycle_manager.cc +FILE: ../../../flutter/shell/platform/windows/windows_lifecycle_manager.h FILE: ../../../flutter/shell/platform/windows/windows_proc_table.cc FILE: ../../../flutter/shell/platform/windows/windows_proc_table.h FILE: ../../../flutter/shell/platform/windows/windows_registry.cc diff --git a/shell/platform/android/platform_view_android.cc b/shell/platform/android/platform_view_android.cc index d0c337fd0a82b..1b9d440a2d4bd 100644 --- a/shell/platform/android/platform_view_android.cc +++ b/shell/platform/android/platform_view_android.cc @@ -46,16 +46,15 @@ std::unique_ptr AndroidSurfaceFactoryImpl::CreateSurface() { jni_facade_); case AndroidRenderingAPI::kOpenGLES: if (enable_impeller_) { - // TODO(kaushikiska@): Enable this after wiring a preference for Vulkan - // backend. #if false +// TODO(kaushikiska@): Enable this after wiring a preference for Vulkan backend. +#if false return std::make_unique(android_context_, jni_facade_); - // #else - // return - // std::make_unique(android_context_, - // jni_facade_); - // #endif +#else + return std::make_unique(android_context_, + jni_facade_); +#endif } else { return std::make_unique(android_context_, jni_facade_); diff --git a/shell/platform/windows/BUILD.gn b/shell/platform/windows/BUILD.gn index 1f7a850b07135..db9053a34e453 100644 --- a/shell/platform/windows/BUILD.gn +++ b/shell/platform/windows/BUILD.gn @@ -103,6 +103,8 @@ source_set("flutter_windows_source") { "window_proc_delegate_manager.cc", "window_proc_delegate_manager.h", "window_state.h", + "windows_lifecycle_manager.cc", + "windows_lifecycle_manager.h", "windows_proc_table.cc", "windows_proc_table.h", "windows_registry.cc", diff --git a/shell/platform/windows/fixtures/main.dart b/shell/platform/windows/fixtures/main.dart index 1e8d5a9e278cc..c9794f68d89ab 100644 --- a/shell/platform/windows/fixtures/main.dart +++ b/shell/platform/windows/fixtures/main.dart @@ -6,6 +6,7 @@ import 'dart:async'; import 'dart:io' as io; import 'dart:typed_data' show ByteData, Uint8List; import 'dart:ui' as ui; +import 'dart:convert'; // Signals a waiting latch in the native test. @pragma('vm:external-name', 'Signal') @@ -86,6 +87,66 @@ void alertPlatformChannel() async { ui.PlatformDispatcher.instance.sendPlatformMessage('flutter/accessibility', byteData, (ByteData? _){}); } +@pragma('vm:entry-point') +void exitTestExit() async { + final Completer closed = Completer(); + ui.channelBuffers.setListener('flutter/platform', (ByteData? data, ui.PlatformMessageResponseCallback callback) async { + final String jsonString = json.encode(>[{'response': 'exit'}]); + final ByteData responseData = ByteData.sublistView(Uint8List.fromList(utf8.encode(jsonString))); + callback(responseData); + closed.complete(data); + }); + await closed.future; + + // From here down, nothing should be called, because the application will have already been closed. + final Completer exited = Completer(); + final String jsonString = json.encode({ + 'method': 'System.exitApplication', + 'args': { + 'type': 'required', 'exitCode': 0 + } + }); + ui.PlatformDispatcher.instance.sendPlatformMessage( + 'flutter/platform', + ByteData.sublistView( + Uint8List.fromList(utf8.encode(jsonString)) + ), + (ByteData? reply) { + exited.complete(reply); + }); + await exited.future; +} + +@pragma('vm:entry-point') +void exitTestCancel() async { + final Completer closed = Completer(); + ui.channelBuffers.setListener('flutter/platform', (ByteData? data, ui.PlatformMessageResponseCallback callback) async { + final String jsonString = json.encode(>[{'response': 'cancel'}]); + final ByteData responseData = ByteData.sublistView(Uint8List.fromList(utf8.encode(jsonString))); + callback(responseData); + closed.complete(data); + }); + await closed.future; + + // Because the request was canceled, the below shall execute. + final Completer exited = Completer(); + final String jsonString = json.encode({ + 'method': 'System.exitApplication', + 'args': { + 'type': 'required', 'exitCode': 0 + } + }); + ui.PlatformDispatcher.instance.sendPlatformMessage( + 'flutter/platform', + ByteData.sublistView( + Uint8List.fromList(utf8.encode(jsonString)) + ), + (ByteData? reply) { + exited.complete(reply); + }); + await exited.future; +} + @pragma('vm:entry-point') void customEntrypoint() {} diff --git a/shell/platform/windows/flutter_windows_engine.cc b/shell/platform/windows/flutter_windows_engine.cc index d3c9332f78eaf..7a652c2145fce 100644 --- a/shell/platform/windows/flutter_windows_engine.cc +++ b/shell/platform/windows/flutter_windows_engine.cc @@ -161,7 +161,8 @@ FlutterWindowsEngine::FlutterWindowsEngine( std::unique_ptr registry) : project_(std::make_unique(project)), aot_data_(nullptr, nullptr), - windows_registry_(std::move(registry)) { + windows_registry_(std::move(registry)), + lifecycle_manager_(std::make_unique(this)) { embedder_api_.struct_size = sizeof(FlutterEngineProcTable); FlutterEngineGetProcAddresses(&embedder_api_); @@ -203,6 +204,17 @@ FlutterWindowsEngine::FlutterWindowsEngine( std::make_unique(this, gl_procs_); surface_manager_ = AngleSurfaceManager::Create(); window_proc_delegate_manager_ = std::make_unique(); + window_proc_delegate_manager_->RegisterTopLevelWindowProcDelegate( + [](HWND hwnd, UINT msg, WPARAM wpar, LPARAM lpar, void* user_data, + LRESULT* result) { + BASE_DCHECK(user_data); + FlutterWindowsEngine* that = + static_cast(user_data); + BASE_DCHECK(that->lifecycle_manager_); + return that->lifecycle_manager_->WindowProc(hwnd, msg, wpar, lpar, + result); + }, + static_cast(this)); // Set up internal channels. // TODO: Replace this with an embedder.h API. See @@ -750,4 +762,13 @@ void FlutterWindowsEngine::HandleAccessibilityMessage( reinterpret_cast(""), 0); } +void FlutterWindowsEngine::RequestApplicationQuit(ExitType exit_type, + UINT exit_code) { + platform_handler_->RequestAppExit(exit_type, exit_code); +} + +void FlutterWindowsEngine::OnQuit(UINT exit_code) { + lifecycle_manager_->Quit(exit_code); +} + } // namespace flutter diff --git a/shell/platform/windows/flutter_windows_engine.h b/shell/platform/windows/flutter_windows_engine.h index 01de0d39f2026..e4964041ffbea 100644 --- a/shell/platform/windows/flutter_windows_engine.h +++ b/shell/platform/windows/flutter_windows_engine.h @@ -35,6 +35,7 @@ #include "flutter/shell/platform/windows/text_input_plugin.h" #include "flutter/shell/platform/windows/window_proc_delegate_manager.h" #include "flutter/shell/platform/windows/window_state.h" +#include "flutter/shell/platform/windows/windows_lifecycle_manager.h" #include "flutter/shell/platform/windows/windows_registry.h" #include "third_party/rapidjson/include/rapidjson/document.h" @@ -254,6 +255,12 @@ class FlutterWindowsEngine { // Updates accessibility, e.g. switch to high contrast mode void UpdateAccessibilityFeatures(FlutterAccessibilityFeature flags); + // Called when the application quits in response to a quit request. + void OnQuit(UINT exit_code); + + // Called when a WM_CLOSE message is received. + void RequestApplicationQuit(ExitType exit_type, UINT exit_code); + protected: // Creates the keyboard key handler. // @@ -395,6 +402,9 @@ class FlutterWindowsEngine { // Wrapper providing Windows registry access. std::unique_ptr windows_registry_; + // Handler for top level window messages. + std::unique_ptr lifecycle_manager_; + FML_DISALLOW_COPY_AND_ASSIGN(FlutterWindowsEngine); }; diff --git a/shell/platform/windows/flutter_windows_engine_unittests.cc b/shell/platform/windows/flutter_windows_engine_unittests.cc index f0d9492d423aa..f71de735f789f 100644 --- a/shell/platform/windows/flutter_windows_engine_unittests.cc +++ b/shell/platform/windows/flutter_windows_engine_unittests.cc @@ -619,5 +619,92 @@ TEST_F(FlutterWindowsEngineTest, AlertPlatformMessage) { } } +class MockWindowsLifecycleManager : public WindowsLifecycleManager { + public: + MockWindowsLifecycleManager(FlutterWindowsEngine* engine) + : WindowsLifecycleManager(engine) {} + virtual ~MockWindowsLifecycleManager() {} + + MOCK_CONST_METHOD1(Quit, void(UINT)); +}; + +TEST_F(FlutterWindowsEngineTest, TestExit) { + FlutterWindowsEngineBuilder builder{GetContext()}; + builder.SetDartEntrypoint("exitTestExit"); + bool finished = false; + bool did_call = false; + + std::unique_ptr engine = builder.Build(); + + EngineModifier modifier(engine.get()); + modifier.embedder_api().RunsAOTCompiledDartCode = []() { return false; }; + auto handler = std::make_unique(engine.get()); + ON_CALL(*handler, Quit).WillByDefault([&finished](UINT exit_code) { + finished = exit_code == 0; + }); + EXPECT_CALL(*handler, Quit).Times(1); + modifier.SetLifecycleManager(std::move(handler)); + + auto binary_messenger = + std::make_unique(engine->messenger()); + binary_messenger->SetMessageHandler( + "flutter/platform", [&did_call](const uint8_t* message, + size_t message_size, BinaryReply reply) { + did_call = true; + char response[] = ""; + reply(reinterpret_cast(response), 0); + }); + + engine->Run(); + + engine->window_proc_delegate_manager()->OnTopLevelWindowProc(0, WM_CLOSE, 0, + 0); + + while (!finished) { + engine->task_runner()->ProcessTasks(); + } + + EXPECT_FALSE(did_call); +} + +TEST_F(FlutterWindowsEngineTest, TestExitCancel) { + FlutterWindowsEngineBuilder builder{GetContext()}; + builder.SetDartEntrypoint("exitTestCancel"); + bool finished = false; + bool did_call = false; + + std::unique_ptr engine = builder.Build(); + + EngineModifier modifier(engine.get()); + modifier.embedder_api().RunsAOTCompiledDartCode = []() { return false; }; + auto handler = std::make_unique(engine.get()); + ON_CALL(*handler, Quit).WillByDefault([&finished](int64_t exit_code) { + finished = true; + }); + EXPECT_CALL(*handler, Quit).Times(0); + modifier.SetLifecycleManager(std::move(handler)); + + auto binary_messenger = + std::make_unique(engine->messenger()); + binary_messenger->SetMessageHandler( + "flutter/platform", [&did_call](const uint8_t* message, + size_t message_size, BinaryReply reply) { + did_call = true; + char response[] = ""; + reply(reinterpret_cast(response), 0); + }); + + engine->Run(); + + engine->window_proc_delegate_manager()->OnTopLevelWindowProc(0, WM_CLOSE, 0, + 0); + + while (!did_call) { + engine->task_runner()->ProcessTasks(); + } + + EXPECT_FALSE(finished); +} + } // namespace testing } // namespace flutter diff --git a/shell/platform/windows/platform_handler.cc b/shell/platform/windows/platform_handler.cc index a33710becbf9d..cec1daf25a872 100644 --- a/shell/platform/windows/platform_handler.cc +++ b/shell/platform/windows/platform_handler.cc @@ -28,8 +28,6 @@ static constexpr char kPlaySoundMethod[] = "SystemSound.play"; static constexpr char kExitCodeKey[] = "exitCode"; static constexpr char kExitTypeKey[] = "type"; -static constexpr char kExitTypeCancelable[] = "cancelable"; -static constexpr char kExitTypeRequired[] = "required"; static constexpr char kExitResponseKey[] = "response"; static constexpr char kExitResponseCancel[] = "cancel"; @@ -44,6 +42,10 @@ static constexpr char kValueKey[] = "value"; static constexpr int kAccessDeniedErrorCode = 5; static constexpr int kErrorSuccess = 0; +static constexpr char kExitRequestError[] = "ExitApplication error"; +static constexpr char kInvalidExitRequestMessage[] = + "Invalid application exit request"; + namespace flutter { namespace { @@ -205,6 +207,16 @@ int ScopedClipboard::SetString(const std::wstring string) { } // namespace +static ExitType StringToExitType(const std::string& string) { + if (string.compare(PlatformHandler::kExitTypeRequired) == 0) { + return ExitType::required; + } else if (string.compare(PlatformHandler::kExitTypeCancelable) == 0) { + return ExitType::cancelable; + } + FML_LOG(ERROR) << string << " is not recognized as a valid exit type."; + return ExitType::required; +} + PlatformHandler::PlatformHandler( BinaryMessenger* messenger, FlutterWindowsEngine* engine, @@ -354,12 +366,12 @@ void PlatformHandler::SystemSoundPlay( } void PlatformHandler::SystemExitApplication( - const std::string& exit_type, - int64_t exit_code, + ExitType exit_type, + UINT exit_code, std::unique_ptr> result) { rapidjson::Document result_doc; result_doc.SetObject(); - if (exit_type.compare(kExitTypeRequired) == 0) { + if (exit_type == ExitType::required) { QuitApplication(exit_code); result_doc.GetObjectW().AddMember(kExitResponseKey, kExitResponseExit, result_doc.GetAllocator()); @@ -372,8 +384,12 @@ void PlatformHandler::SystemExitApplication( } } -void PlatformHandler::RequestAppExit(const std::string& exit_type, - int64_t exit_code) { +// Indicates whether an exit request may be canceled by the framework. +// These values must be kept in sync with ExitType in platform_handler.h +static constexpr const char* kExitTypeNames[] = { + PlatformHandler::kExitTypeRequired, PlatformHandler::kExitTypeCancelable}; + +void PlatformHandler::RequestAppExit(ExitType exit_type, UINT exit_code) { auto callback = std::make_unique>( [this, exit_code](const rapidjson::Document* response) { RequestAppExitSuccess(response, exit_code); @@ -381,21 +397,31 @@ void PlatformHandler::RequestAppExit(const std::string& exit_type, nullptr, nullptr); auto args = std::make_unique(); args->SetObject(); - args->GetObjectW().AddMember(kExitTypeKey, exit_type, args->GetAllocator()); + args->GetObjectW().AddMember( + kExitTypeKey, std::string(kExitTypeNames[static_cast(exit_type)]), + args->GetAllocator()); channel_->InvokeMethod(kRequestAppExitMethod, std::move(args), std::move(callback)); } void PlatformHandler::RequestAppExitSuccess(const rapidjson::Document* result, - int64_t exit_code) { - const std::string& exit_type = result[0][kExitResponseKey].GetString(); + UINT exit_code) { + rapidjson::Value::ConstMemberIterator itr = + result->FindMember(kExitResponseKey); + if (itr == result->MemberEnd() || !itr->value.IsString()) { + FML_LOG(ERROR) << "Application request response did not contain a valid " + "response value"; + return; + } + const std::string& exit_type = itr->value.GetString(); + if (exit_type.compare(kExitResponseExit) == 0) { QuitApplication(exit_code); } } -void PlatformHandler::QuitApplication(int64_t exit_code) { - PostQuitMessage(exit_code); +void PlatformHandler::QuitApplication(UINT exit_code) { + engine_->OnQuit(exit_code); } void PlatformHandler::HandleMethodCall( @@ -404,9 +430,24 @@ void PlatformHandler::HandleMethodCall( const std::string& method = method_call.method_name(); if (method.compare(kExitApplicationMethod) == 0) { const rapidjson::Value& arguments = method_call.arguments()[0]; - const std::string& exit_type = arguments[kExitTypeKey].GetString(); - int64_t exit_code = arguments[kExitCodeKey].GetInt64(); - SystemExitApplication(exit_type, exit_code, std::move(result)); + + rapidjson::Value::ConstMemberIterator itr = + arguments.FindMember(kExitTypeKey); + if (itr == arguments.MemberEnd() || !itr->value.IsString()) { + result->Error(kExitRequestError, kInvalidExitRequestMessage); + return; + } + const std::string& exit_type = itr->value.GetString(); + + itr = arguments.FindMember(kExitCodeKey); + if (itr == arguments.MemberEnd() || !itr->value.IsInt()) { + result->Error(kExitRequestError, kInvalidExitRequestMessage); + return; + } + UINT exit_code = arguments[kExitCodeKey].GetInt(); + + SystemExitApplication(StringToExitType(exit_type), exit_code, + std::move(result)); } else if (method.compare(kGetClipboardDataMethod) == 0) { // Only one string argument is expected. const rapidjson::Value& format = method_call.arguments()[0]; diff --git a/shell/platform/windows/platform_handler.h b/shell/platform/windows/platform_handler.h index 096378db4f414..f5eb9f2021e04 100644 --- a/shell/platform/windows/platform_handler.h +++ b/shell/platform/windows/platform_handler.h @@ -22,6 +22,13 @@ namespace flutter { class FlutterWindowsEngine; class ScopedClipboardInterface; +// Indicates whether an exit request may be canceled by the framework. +// These values must be kept in sync with kExitTypeNames in platform_handler.cc +enum class ExitType { + required, + cancelable, +}; + // Handler for internal system channels. class PlatformHandler { public: @@ -33,6 +40,14 @@ class PlatformHandler { virtual ~PlatformHandler(); + // String values used for encoding/decoding exit requests. + static constexpr char kExitTypeCancelable[] = "cancelable"; + static constexpr char kExitTypeRequired[] = "required"; + + // Send a request to the framework to test if a cancelable exit request + // should be canceled or honored. + virtual void RequestAppExit(ExitType exit_type, UINT exit_code); + protected: // Gets plain text from the clipboard and provides it to |result| as the // value in a dictionary with the given |key|. @@ -57,21 +72,17 @@ class PlatformHandler { // Handle a request from the framework to exit the application. virtual void SystemExitApplication( - const std::string& exit_type, - int64_t exit_code, + ExitType exit_type, + UINT exit_code, std::unique_ptr> result); // Actually quit the application with the provided exit code. - virtual void QuitApplication(int64_t exit_code); - - // Send a request to the framework to test if a cancelable exit request - // should be canceled or honored. - virtual void RequestAppExit(const std::string& exit_type, int64_t exit_code); + virtual void QuitApplication(UINT exit_code); // Callback from when the cancelable exit request response request is // answered by the framework. virtual void RequestAppExitSuccess(const rapidjson::Document* result, - int64_t exit_code); + UINT exit_code); // A error type to use for error responses. static constexpr char kClipboardError[] = "Clipboard error"; diff --git a/shell/platform/windows/platform_handler_unittests.cc b/shell/platform/windows/platform_handler_unittests.cc index 85d4f5a9a9713..eb879569b3d82 100644 --- a/shell/platform/windows/platform_handler_unittests.cc +++ b/shell/platform/windows/platform_handler_unittests.cc @@ -82,7 +82,7 @@ class MockPlatformHandler : public PlatformHandler { void(const std::string&, std::unique_ptr>)); - MOCK_METHOD1(QuitApplication, void(int64_t exit_code)); + MOCK_METHOD1(QuitApplication, void(UINT exit_code)); private: FML_DISALLOW_COPY_AND_ASSIGN(MockPlatformHandler); @@ -483,7 +483,7 @@ TEST_F(PlatformHandlerTest, PlaySystemSound) { TEST_F(PlatformHandlerTest, SystemExitApplicationRequired) { use_headless_engine(); - int exit_code = -1; + UINT exit_code = 0; TestBinaryMessenger messenger([](const std::string& channel, const uint8_t* message, size_t size, @@ -491,7 +491,7 @@ TEST_F(PlatformHandlerTest, SystemExitApplicationRequired) { MockPlatformHandler platform_handler(&messenger, engine()); ON_CALL(platform_handler, QuitApplication) - .WillByDefault([&exit_code](int ec) { exit_code = ec; }); + .WillByDefault([&exit_code](UINT ec) { exit_code = ec; }); EXPECT_CALL(platform_handler, QuitApplication).Times(1); std::string result = SimulatePlatformMessage( @@ -524,7 +524,7 @@ TEST_F(PlatformHandlerTest, SystemExitApplicationCancelableCancel) { TEST_F(PlatformHandlerTest, SystemExitApplicationCancelableExit) { use_headless_engine(); bool called_cancel = false; - int exit_code = -1; + UINT exit_code = 0; TestBinaryMessenger messenger( [&called_cancel](const std::string& channel, const uint8_t* message, @@ -536,7 +536,7 @@ TEST_F(PlatformHandlerTest, SystemExitApplicationCancelableExit) { MockPlatformHandler platform_handler(&messenger, engine()); ON_CALL(platform_handler, QuitApplication) - .WillByDefault([&exit_code](int ec) { exit_code = ec; }); + .WillByDefault([&exit_code](UINT ec) { exit_code = ec; }); EXPECT_CALL(platform_handler, QuitApplication).Times(1); std::string result = SimulatePlatformMessage( diff --git a/shell/platform/windows/testing/engine_modifier.h b/shell/platform/windows/testing/engine_modifier.h index f49362ba6d6ae..ee355c0b5b973 100644 --- a/shell/platform/windows/testing/engine_modifier.h +++ b/shell/platform/windows/testing/engine_modifier.h @@ -66,6 +66,10 @@ class EngineModifier { // restart. This resets the keyboard's state if it exists. void Restart() { engine_->OnPreEngineRestart(); } + void SetLifecycleManager(std::unique_ptr&& handler) { + engine_->lifecycle_manager_ = std::move(handler); + } + private: FlutterWindowsEngine* engine_; diff --git a/shell/platform/windows/windows_lifecycle_manager.cc b/shell/platform/windows/windows_lifecycle_manager.cc new file mode 100644 index 0000000000000..c8e85487a3251 --- /dev/null +++ b/shell/platform/windows/windows_lifecycle_manager.cc @@ -0,0 +1,120 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "windows_lifecycle_manager.h" + +#include +#include +#include +#include + +#include "flutter/shell/platform/windows/flutter_windows_engine.h" + +namespace flutter { + +WindowsLifecycleManager::WindowsLifecycleManager(FlutterWindowsEngine* engine) + : engine_(engine) {} + +WindowsLifecycleManager::~WindowsLifecycleManager() {} + +void WindowsLifecycleManager::Quit(UINT exit_code) const { + ::PostQuitMessage(exit_code); +} + +bool WindowsLifecycleManager::WindowProc(HWND hwnd, + UINT msg, + WPARAM wpar, + LPARAM lpar, + LRESULT* result) { + switch (msg) { + case WM_CLOSE: + if (IsLastWindowOfProcess()) { + engine_->RequestApplicationQuit(ExitType::cancelable, 0); + } + return true; + } + return false; +} + +class ThreadSnapshot { + public: + ThreadSnapshot() { + thread_snapshot_ = ::CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0); + } + ~ThreadSnapshot() { + if (thread_snapshot_ != INVALID_HANDLE_VALUE) { + ::CloseHandle(thread_snapshot_); + } + } + + std::optional GetFirstThread() { + if (thread_snapshot_ == INVALID_HANDLE_VALUE) { + FML_LOG(ERROR) << "Failed to get thread snapshot"; + return std::nullopt; + } + THREADENTRY32 thread; + thread.dwSize = sizeof(thread); + if (!::Thread32First(thread_snapshot_, &thread)) { + DWORD error_num = ::GetLastError(); + char msg[256]; + ::FormatMessageA( + FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, + error_num, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), msg, 256, + nullptr); + FML_LOG(ERROR) << "Failed to get thread(" << error_num << "): " << msg; + return std::nullopt; + } + return thread; + } + + bool GetNextThread(THREADENTRY32& thread) { + if (thread_snapshot_ == INVALID_HANDLE_VALUE) { + return false; + } + return ::Thread32Next(thread_snapshot_, &thread); + } + + private: + HANDLE thread_snapshot_; +}; + +static int64_t NumWindowsForThread(const THREADENTRY32& thread) { + int64_t num_windows = 0; + ::EnumThreadWindows( + thread.th32ThreadID, + [](HWND hwnd, LPARAM lparam) { + int64_t* windows_ptr = reinterpret_cast(lparam); + if (::GetParent(hwnd) == nullptr) { + (*windows_ptr)++; + } + return *windows_ptr <= 1 ? TRUE : FALSE; + }, + reinterpret_cast(&num_windows)); + return num_windows; +} + +bool WindowsLifecycleManager::IsLastWindowOfProcess() { + DWORD pid = ::GetCurrentProcessId(); + ThreadSnapshot thread_snapshot; + std::optional first_thread = thread_snapshot.GetFirstThread(); + if (!first_thread.has_value()) { + FML_LOG(ERROR) << "No first thread found"; + return true; + } + + int num_windows = 0; + THREADENTRY32 thread = *first_thread; + do { + if (thread.th32OwnerProcessID == pid) { + num_windows += NumWindowsForThread(thread); + if (num_windows > 1) { + return false; + } + } + } while (thread_snapshot.GetNextThread(thread)); + + return num_windows <= 1; +} + +} // namespace flutter diff --git a/shell/platform/windows/windows_lifecycle_manager.h b/shell/platform/windows/windows_lifecycle_manager.h new file mode 100644 index 0000000000000..7f45277543219 --- /dev/null +++ b/shell/platform/windows/windows_lifecycle_manager.h @@ -0,0 +1,37 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef FLUTTER_SHELL_PLATFORM_WINDOWS_WINDOWS_LIFECYCLE_MANAGER_H_ +#define FLUTTER_SHELL_PLATFORM_WINDOWS_WINDOWS_LIFECYCLE_MANAGER_H_ + +#include + +#include + +namespace flutter { + +class FlutterWindowsEngine; + +/// A manager for lifecycle events of the top-level window. +/// +/// Currently handles the following events: +/// WM_CLOSE +class WindowsLifecycleManager { + public: + WindowsLifecycleManager(FlutterWindowsEngine* engine); + virtual ~WindowsLifecycleManager(); + + virtual void Quit(UINT exit_code) const; + + bool WindowProc(HWND hwnd, UINT msg, WPARAM w, LPARAM l, LRESULT* result); + + private: + bool IsLastWindowOfProcess(); + + FlutterWindowsEngine* engine_; +}; + +} // namespace flutter + +#endif // FLUTTER_SHELL_PLATFORM_WINDOWS_WINDOWS_LIFECYCLE_MANAGER_H_ From 268391dd1fb44d6ca923ffe0ad39aa14a625b514 Mon Sep 17 00:00:00 2001 From: Dan Field Date: Mon, 27 Mar 2023 16:24:51 -0700 Subject: [PATCH 03/19] more cleanup --- .../renderer/tessellation/compute_subgroup_unittests.cc | 2 +- impeller/renderer/tessellation/compute_tessellator.cc | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/impeller/renderer/tessellation/compute_subgroup_unittests.cc b/impeller/renderer/tessellation/compute_subgroup_unittests.cc index d51a32aabbb6d..0ca1ace6d07d3 100644 --- a/impeller/renderer/tessellation/compute_subgroup_unittests.cc +++ b/impeller/renderer/tessellation/compute_subgroup_unittests.cc @@ -41,7 +41,7 @@ TEST_P(ComputeSubgroupTest, QuadAndCubicInOnePath) { auto context = GetContext(); ASSERT_TRUE(context); - ASSERT_TRUE(context->GetDeviceCapabilities().SupportsComputeSubgroups()); + ASSERT_TRUE(context->GetCapabilities()->SupportsComputeSubgroups()); auto vertex_buffer = CreateHostVisibleDeviceBuffer>( context, "VertexBuffer"); diff --git a/impeller/renderer/tessellation/compute_tessellator.cc b/impeller/renderer/tessellation/compute_tessellator.cc index df7927b0b6e69..841618c80907d 100644 --- a/impeller/renderer/tessellation/compute_tessellator.cc +++ b/impeller/renderer/tessellation/compute_tessellator.cc @@ -86,15 +86,18 @@ ComputeTessellator::Status ComputeTessellator::Tessellate( path.EnumerateComponents( [&lines, &components](size_t index, const LinearPathComponent& linear) { - lines.data[lines.count] = {linear.p1, linear.p2}; + ::memcpy(&lines.data[lines.count], &linear, + sizeof(LinearPathComponent)); components.data[components.count++] = {lines.count++, 2}; }, [&quads, &components](size_t index, const QuadraticPathComponent& quad) { - quads.data[quads.count] = {quad.p1, quad.cp, quad.p2}; + ::memcpy(&quads.data[quads.count], &quad, + sizeof(QuadraticPathComponent)); components.data[components.count++] = {quads.count++, 3}; }, [&cubics, &components](size_t index, const CubicPathComponent& cubic) { - cubics.data[cubics.count] = {cubic.p1, cubic.cp1, cubic.cp2, cubic.p2}; + ::memcpy(&cubics.data[cubics.count], &cubic, + sizeof(CubicPathComponent)); components.data[components.count++] = {cubics.count++, 4}; }, [](size_t index, const ContourComponent& contour) {}); From 718b20db13a15c4b80d5d6fdcc6f2a0dfcdf886a Mon Sep 17 00:00:00 2001 From: Dan Field Date: Mon, 27 Mar 2023 21:05:35 -0700 Subject: [PATCH 04/19] Make it actually build --- ci/licenses_golden/licenses_flutter | 16 ++-- impeller/BUILD.gn | 2 +- impeller/entity/geometry.h | 12 --- impeller/geometry/path.h | 12 +++ impeller/renderer/BUILD.gn | 73 +++++++++++++++---- .../compute_subgroup_unittests.cc | 6 +- .../{tessellation => }/compute_tessellator.cc | 2 +- .../{tessellation => }/compute_tessellator.h | 1 - .../{tessellation => }/path_polyline.comp | 0 .../renderer/{tessellation => }/stroke.comp | 0 impeller/renderer/tessellation/BUILD.gn | 46 ------------ impeller/tools/impeller.gni | 2 +- 12 files changed, 84 insertions(+), 88 deletions(-) rename impeller/renderer/{tessellation => }/compute_subgroup_unittests.cc (98%) rename impeller/renderer/{tessellation => }/compute_tessellator.cc (98%) rename impeller/renderer/{tessellation => }/compute_tessellator.h (98%) rename impeller/renderer/{tessellation => }/path_polyline.comp (100%) rename impeller/renderer/{tessellation => }/stroke.comp (100%) delete mode 100644 impeller/renderer/tessellation/BUILD.gn diff --git a/ci/licenses_golden/licenses_flutter b/ci/licenses_golden/licenses_flutter index 484b31c71a509..7435e7738b8d0 100644 --- a/ci/licenses_golden/licenses_flutter +++ b/ci/licenses_golden/licenses_flutter @@ -1502,6 +1502,8 @@ ORIGIN: ../../../flutter/impeller/renderer/compute_pipeline_builder.cc + ../../. ORIGIN: ../../../flutter/impeller/renderer/compute_pipeline_builder.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/compute_pipeline_descriptor.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/compute_pipeline_descriptor.h + ../../../flutter/LICENSE +ORIGIN: ../../../flutter/impeller/renderer/compute_tessellator.cc + ../../../flutter/LICENSE +ORIGIN: ../../../flutter/impeller/renderer/compute_tessellator.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/context.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/context.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/device_buffer.cc + ../../../flutter/LICENSE @@ -1514,6 +1516,7 @@ ORIGIN: ../../../flutter/impeller/renderer/gpu_tracer.cc + ../../../flutter/LICE ORIGIN: ../../../flutter/impeller/renderer/gpu_tracer.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/host_buffer.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/host_buffer.h + ../../../flutter/LICENSE +ORIGIN: ../../../flutter/impeller/renderer/path_polyline.comp + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/pipeline.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/pipeline.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/pipeline_builder.cc + ../../../flutter/LICENSE @@ -1550,10 +1553,7 @@ ORIGIN: ../../../flutter/impeller/renderer/snapshot.cc + ../../../flutter/LICENS ORIGIN: ../../../flutter/impeller/renderer/snapshot.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/surface.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/surface.h + ../../../flutter/LICENSE -ORIGIN: ../../../flutter/impeller/renderer/tessellation/compute_tessellator.cc + ../../../flutter/LICENSE -ORIGIN: ../../../flutter/impeller/renderer/tessellation/compute_tessellator.h + ../../../flutter/LICENSE -ORIGIN: ../../../flutter/impeller/renderer/tessellation/path_polyline.comp + ../../../flutter/LICENSE -ORIGIN: ../../../flutter/impeller/renderer/tessellation/stroke.comp + ../../../flutter/LICENSE +ORIGIN: ../../../flutter/impeller/renderer/stroke.comp + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/texture.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/texture.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/texture_descriptor.cc + ../../../flutter/LICENSE @@ -4069,6 +4069,8 @@ FILE: ../../../flutter/impeller/renderer/compute_pipeline_builder.cc FILE: ../../../flutter/impeller/renderer/compute_pipeline_builder.h FILE: ../../../flutter/impeller/renderer/compute_pipeline_descriptor.cc FILE: ../../../flutter/impeller/renderer/compute_pipeline_descriptor.h +FILE: ../../../flutter/impeller/renderer/compute_tessellator.cc +FILE: ../../../flutter/impeller/renderer/compute_tessellator.h FILE: ../../../flutter/impeller/renderer/context.cc FILE: ../../../flutter/impeller/renderer/context.h FILE: ../../../flutter/impeller/renderer/device_buffer.cc @@ -4081,6 +4083,7 @@ FILE: ../../../flutter/impeller/renderer/gpu_tracer.cc FILE: ../../../flutter/impeller/renderer/gpu_tracer.h FILE: ../../../flutter/impeller/renderer/host_buffer.cc FILE: ../../../flutter/impeller/renderer/host_buffer.h +FILE: ../../../flutter/impeller/renderer/path_polyline.comp FILE: ../../../flutter/impeller/renderer/pipeline.cc FILE: ../../../flutter/impeller/renderer/pipeline.h FILE: ../../../flutter/impeller/renderer/pipeline_builder.cc @@ -4115,12 +4118,9 @@ FILE: ../../../flutter/impeller/renderer/shader_types.cc FILE: ../../../flutter/impeller/renderer/shader_types.h FILE: ../../../flutter/impeller/renderer/snapshot.cc FILE: ../../../flutter/impeller/renderer/snapshot.h +FILE: ../../../flutter/impeller/renderer/stroke.comp FILE: ../../../flutter/impeller/renderer/surface.cc FILE: ../../../flutter/impeller/renderer/surface.h -FILE: ../../../flutter/impeller/renderer/tessellation/compute_tessellator.cc -FILE: ../../../flutter/impeller/renderer/tessellation/compute_tessellator.h -FILE: ../../../flutter/impeller/renderer/tessellation/path_polyline.comp -FILE: ../../../flutter/impeller/renderer/tessellation/stroke.comp FILE: ../../../flutter/impeller/renderer/texture.cc FILE: ../../../flutter/impeller/renderer/texture.h FILE: ../../../flutter/impeller/renderer/texture_descriptor.cc diff --git a/impeller/BUILD.gn b/impeller/BUILD.gn index 85741e99033d0..34ed9d226a888 100644 --- a/impeller/BUILD.gn +++ b/impeller/BUILD.gn @@ -93,7 +93,7 @@ impeller_component("impeller_unittests") { } if (impeller_enable_compute) { - deps += [ "renderer/tessellation:compute_tessellation_unittests" ] + deps += [ "renderer:compute_tessellation_unittests" ] } } diff --git a/impeller/entity/geometry.h b/impeller/entity/geometry.h index 225d8600f574d..8b894abe22b25 100644 --- a/impeller/entity/geometry.h +++ b/impeller/entity/geometry.h @@ -30,18 +30,6 @@ enum GeometryVertexType { kUV, }; -enum class Cap { - kButt, - kRound, - kSquare, -}; - -enum class Join { - kMiter, - kRound, - kBevel, -}; - class Geometry { public: Geometry(); diff --git a/impeller/geometry/path.h b/impeller/geometry/path.h index 1f3c14659b84d..fc1a3f0afdafa 100644 --- a/impeller/geometry/path.h +++ b/impeller/geometry/path.h @@ -15,6 +15,18 @@ namespace impeller { +enum class Cap { + kButt, + kRound, + kSquare, +}; + +enum class Join { + kMiter, + kRound, + kBevel, +}; + enum class FillType { kNonZero, // The default winding order. kOdd, diff --git a/impeller/renderer/BUILD.gn b/impeller/renderer/BUILD.gn index 72feee9e04c47..0747457a5d048 100644 --- a/impeller/renderer/BUILD.gn +++ b/impeller/renderer/BUILD.gn @@ -4,27 +4,76 @@ import("//flutter/impeller/tools/impeller.gni") -impeller_component("buffer") { +impeller_component("allocation") { sources = [ + "allocator.cc", + "allocator.h", "buffer.cc", "buffer.h", "buffer_view.cc", "buffer_view.h", + "device_buffer.cc", + "device_buffer.h", + "device_buffer_descriptor.cc", + "device_buffer_descriptor.h", + "formats.cc", + "formats.h", "host_buffer.cc", "host_buffer.h", "platform.cc", "platform.h", "range.cc", "range.h", + "texture.cc", + "texture.h", + "texture_descriptor.cc", + "texture_descriptor.h", "vertex_buffer.cc", "vertex_buffer.h", ] + + deps = [ + "../base", + "../geometry", + "../image", + "//flutter/fml", + ] +} + +if (impeller_enable_compute) { + impeller_shaders("tessellation_shaders") { + enable_opengles = false + name = "tessellation" + + if (is_ios) { + metal_version = "2.4" + } else if (is_mac) { + metal_version = "2.1" + } + + shaders = [ + "stroke.comp", + "path_polyline.comp", + ] + } + + impeller_component("compute_tessellation_unittests") { + testonly = true + sources = [ "compute_subgroup_unittests.cc" ] + + deps = [ + ":renderer", + ":tessellation_shaders", + "../entity", + "../fixtures", + "../playground:playground_test", + "//flutter/testing:testing_lib", + ] + } } impeller_component("renderer") { sources = [ - "allocator.cc", - "allocator.h", "blit_command.cc", "blit_command.h", "blit_pass.cc", @@ -45,12 +94,6 @@ impeller_component("renderer") { "compute_pipeline_descriptor.h", "context.cc", "context.h", - "device_buffer.cc", - "device_buffer.h", - "device_buffer_descriptor.cc", - "device_buffer_descriptor.h", - "formats.cc", - "formats.h", "gpu_tracer.cc", "gpu_tracer.h", "pipeline.cc", @@ -85,10 +128,6 @@ impeller_component("renderer") { "snapshot.h", "surface.cc", "surface.h", - "texture.cc", - "texture.h", - "texture_descriptor.cc", - "texture_descriptor.h", "vertex_buffer_builder.cc", "vertex_buffer_builder.h", "vertex_descriptor.cc", @@ -96,7 +135,7 @@ impeller_component("renderer") { ] public_deps = [ - ":buffer", + ":allocation", "../base", "../geometry", "../image", @@ -105,7 +144,11 @@ impeller_component("renderer") { ] if (impeller_enable_compute) { - public_deps += [ "./tessellation" ] + sources += [ + "compute_tessellator.cc", + "compute_tessellator.h", + ] + public_deps += [ ":tessellation_shaders" ] } deps = [ "//flutter/fml" ] diff --git a/impeller/renderer/tessellation/compute_subgroup_unittests.cc b/impeller/renderer/compute_subgroup_unittests.cc similarity index 98% rename from impeller/renderer/tessellation/compute_subgroup_unittests.cc rename to impeller/renderer/compute_subgroup_unittests.cc index 0ca1ace6d07d3..10ade2a19fe5d 100644 --- a/impeller/renderer/tessellation/compute_subgroup_unittests.cc +++ b/impeller/renderer/compute_subgroup_unittests.cc @@ -24,12 +24,12 @@ #include "impeller/renderer/command_buffer.h" #include "impeller/renderer/compute_command.h" #include "impeller/renderer/compute_pipeline_builder.h" +#include "impeller/renderer/compute_tessellator.h" #include "impeller/renderer/formats.h" +#include "impeller/renderer/path_polyline.comp.h" #include "impeller/renderer/pipeline_library.h" #include "impeller/renderer/render_pass.h" -#include "impeller/renderer/tessellation/compute_tessellator.h" -#include "impeller/renderer/tessellation/path_polyline.comp.h" -#include "impeller/renderer/tessellation/stroke.comp.h" +#include "impeller/renderer/stroke.comp.h" namespace impeller { namespace testing { diff --git a/impeller/renderer/tessellation/compute_tessellator.cc b/impeller/renderer/compute_tessellator.cc similarity index 98% rename from impeller/renderer/tessellation/compute_tessellator.cc rename to impeller/renderer/compute_tessellator.cc index 841618c80907d..afe7803085246 100644 --- a/impeller/renderer/tessellation/compute_tessellator.cc +++ b/impeller/renderer/compute_tessellator.cc @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "impeller/renderer/tessellation/compute_tessellator.h" +#include "impeller/renderer/compute_tessellator.h" #include "compute_tessellator.h" #include "impeller/renderer/command_buffer.h" diff --git a/impeller/renderer/tessellation/compute_tessellator.h b/impeller/renderer/compute_tessellator.h similarity index 98% rename from impeller/renderer/tessellation/compute_tessellator.h rename to impeller/renderer/compute_tessellator.h index 711b1540c9490..bb2e782a5eace 100644 --- a/impeller/renderer/tessellation/compute_tessellator.h +++ b/impeller/renderer/compute_tessellator.h @@ -5,7 +5,6 @@ #pragma once #include "flutter/fml/macros.h" -#include "impeller/entity/geometry.h" #include "impeller/geometry/path.h" #include "impeller/renderer/buffer_view.h" #include "impeller/renderer/command_buffer.h" diff --git a/impeller/renderer/tessellation/path_polyline.comp b/impeller/renderer/path_polyline.comp similarity index 100% rename from impeller/renderer/tessellation/path_polyline.comp rename to impeller/renderer/path_polyline.comp diff --git a/impeller/renderer/tessellation/stroke.comp b/impeller/renderer/stroke.comp similarity index 100% rename from impeller/renderer/tessellation/stroke.comp rename to impeller/renderer/stroke.comp diff --git a/impeller/renderer/tessellation/BUILD.gn b/impeller/renderer/tessellation/BUILD.gn deleted file mode 100644 index 88bf11c7235b0..0000000000000 --- a/impeller/renderer/tessellation/BUILD.gn +++ /dev/null @@ -1,46 +0,0 @@ -# Copyright 2013 The Flutter Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -import("//flutter/impeller/tools/impeller.gni") - -if (impeller_enable_compute) { - impeller_shaders("tessellation_shaders") { - enable_opengles = false - name = "tessellation" - - if (is_ios) { - metal_version = "2.4" - } else if (is_mac) { - metal_version = "2.1" - } - - shaders = [ - "stroke.comp", - "path_polyline.comp", - ] - } - - impeller_component("tessellation") { - sources = [ - "compute_tessellator.cc", - "compute_tessellator.h", - ] - - public_deps = [ ":tessellation_shaders" ] - } - - impeller_component("compute_tessellation_unittests") { - testonly = true - sources = [ "compute_subgroup_unittests.cc" ] - - deps = [ - ":tessellation_shaders", - "../", - "../../entity", - "../../fixtures", - "../../playground:playground_test", - "//flutter/testing:testing_lib", - ] - } -} diff --git a/impeller/tools/impeller.gni b/impeller/tools/impeller.gni index 5c51c0612882e..2f879efae0242 100644 --- a/impeller/tools/impeller.gni +++ b/impeller/tools/impeller.gni @@ -390,7 +390,7 @@ template("impellerc_reflect") { ]) deps = [ - "//flutter/impeller/renderer:buffer", + "//flutter/impeller/renderer:allocation", impellerc_invocation, ] } From f423d3daef940753a8aa72f4c0c5e433b0c652e8 Mon Sep 17 00:00:00 2001 From: Dan Field Date: Tue, 28 Mar 2023 08:55:16 -0700 Subject: [PATCH 05/19] docs --- impeller/renderer/compute_tessellator.h | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/impeller/renderer/compute_tessellator.h b/impeller/renderer/compute_tessellator.h index bb2e782a5eace..4a8b100b22147 100644 --- a/impeller/renderer/compute_tessellator.h +++ b/impeller/renderer/compute_tessellator.h @@ -14,7 +14,7 @@ namespace impeller { //------------------------------------------------------------------------------ /// @brief A utility that generates triangles of the specified fill type -/// given a polyline. This happens on the CPU. +/// given a path. /// class ComputeTessellator { public: @@ -49,9 +49,19 @@ class ComputeTessellator { //---------------------------------------------------------------------------- /// @brief Generates triangles from the path. + /// If the data needs to be synchronized back to the CPU, e.g. + /// because one of the buffer views are host visible and will be + /// used without creating a blit pass to copy them back, the + /// callback is used to determine when the GPU calculation is + /// complete and its status. + /// On Metal, no additional synchronization is needed as long as + /// the buffers are not heap allocated, so no additional + /// synchronization mechanism is provided. /// - /// @return A buffer view that will be filled with the tessellation result. + /// @return A |Status| value indicating success or failure of the submission. /// + // TODO(dnfield): Provide additional synchronization methods here for Vulkan + // and heap allocated buffers on Metal. Status Tessellate( const Path& path, std::shared_ptr context, From 57f8d7b6d40d74c08be804aabc8b49a1df31c20c Mon Sep 17 00:00:00 2001 From: Dan Field Date: Tue, 28 Mar 2023 09:39:14 -0700 Subject: [PATCH 06/19] Fix compiler, fix include --- impeller/compiler/compiler.cc | 16 +++++++++++++++- impeller/renderer/compute_tessellator.cc | 5 ++--- impeller/tools/impeller.gni | 5 +++-- 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/impeller/compiler/compiler.cc b/impeller/compiler/compiler.cc index 373b5ee8f1cb6..ab92aa18d064c 100644 --- a/impeller/compiler/compiler.cc +++ b/impeller/compiler/compiler.cc @@ -108,6 +108,18 @@ static CompilerBackend CreateMSLCompiler(const spirv_cross::ParsedIR& ir, return CompilerBackend(sl_compiler); } +static CompilerBackend CreateVulkanCompiler( + const spirv_cross::ParsedIR& ir, + const SourceOptions& source_options) { + auto gl_compiler = std::make_shared(ir); + spirv_cross::CompilerGLSL::Options sl_options; + sl_options.vulkan_semantics = true; + sl_options.vertex.fixup_clipspace = true; + sl_options.force_zero_initialized_variables = true; + gl_compiler->set_common_options(sl_options); + return CompilerBackend(gl_compiler); +} + static CompilerBackend CreateGLSLCompiler(const spirv_cross::ParsedIR& ir, const SourceOptions& source_options) { auto gl_compiler = std::make_shared(ir); @@ -162,9 +174,11 @@ static CompilerBackend CreateCompiler(const spirv_cross::ParsedIR& ir, case TargetPlatform::kMetalDesktop: case TargetPlatform::kMetalIOS: case TargetPlatform::kRuntimeStageMetal: + compiler = CreateMSLCompiler(ir, source_options); + break; case TargetPlatform::kVulkan: case TargetPlatform::kRuntimeStageVulkan: - compiler = CreateMSLCompiler(ir, source_options); + compiler = CreateVulkanCompiler(ir, source_options); break; case TargetPlatform::kUnknown: case TargetPlatform::kOpenGLES: diff --git a/impeller/renderer/compute_tessellator.cc b/impeller/renderer/compute_tessellator.cc index afe7803085246..60d2548c47820 100644 --- a/impeller/renderer/compute_tessellator.cc +++ b/impeller/renderer/compute_tessellator.cc @@ -4,11 +4,10 @@ #include "impeller/renderer/compute_tessellator.h" -#include "compute_tessellator.h" #include "impeller/renderer/command_buffer.h" +#include "impeller/renderer/path_polyline.comp.h" #include "impeller/renderer/pipeline_library.h" -#include "impeller/renderer/tessellation/path_polyline.comp.h" -#include "impeller/renderer/tessellation/stroke.comp.h" +#include "impeller/renderer/stroke.comp.h" namespace impeller { diff --git a/impeller/tools/impeller.gni b/impeller/tools/impeller.gni index 2f879efae0242..9b9b92b0bdf86 100644 --- a/impeller/tools/impeller.gni +++ b/impeller/tools/impeller.gni @@ -303,6 +303,7 @@ template("impellerc") { } if (defined(invoker.metal_version)) { + assert(is_mac || is_ios) metal_version = invoker.metal_version args += [ "--metal-version=$metal_version" ] } @@ -669,7 +670,6 @@ template("_impeller_shaders_vk") { # The SPIR-V version required by the shaders. # template("impeller_shaders") { - metal_version = "1.2" if (defined(invoker.metal_version)) { metal_version = invoker.metal_version } @@ -722,7 +722,8 @@ template("impeller_shaders") { vulkan_language_version = invoker.vulkan_language_version } shaders = invoker.shaders - metal_version = metal_version + + # metal_version = metal_version analyze = analyze } } From 3409db36b4f8394b9fa948af12fb47b1fab65c17 Mon Sep 17 00:00:00 2001 From: Dan Field Date: Tue, 28 Mar 2023 09:42:24 -0700 Subject: [PATCH 07/19] commented out code --- impeller/tools/impeller.gni | 2 -- 1 file changed, 2 deletions(-) diff --git a/impeller/tools/impeller.gni b/impeller/tools/impeller.gni index 9b9b92b0bdf86..7b4fd2a9906c2 100644 --- a/impeller/tools/impeller.gni +++ b/impeller/tools/impeller.gni @@ -722,8 +722,6 @@ template("impeller_shaders") { vulkan_language_version = invoker.vulkan_language_version } shaders = invoker.shaders - - # metal_version = metal_version analyze = analyze } } From db554154c4668508ecfa5168c4332cc958f2e5d3 Mon Sep 17 00:00:00 2001 From: Dan Field Date: Tue, 28 Mar 2023 09:46:51 -0700 Subject: [PATCH 08/19] Fix metal compilation again --- impeller/tools/impeller.gni | 3 +++ 1 file changed, 3 insertions(+) diff --git a/impeller/tools/impeller.gni b/impeller/tools/impeller.gni index 7b4fd2a9906c2..f1335bbec29d5 100644 --- a/impeller/tools/impeller.gni +++ b/impeller/tools/impeller.gni @@ -681,6 +681,9 @@ template("impeller_shaders") { } if (impeller_enable_metal) { + if (!defined(metal_version)) { + metal_version = "1.2" + } not_needed(invoker, [ "analyze" ]) mtl_shaders = "mtl_$target_name" _impeller_shaders_metal(mtl_shaders) { From a1495ea9cf33a5fb4eedbbd9aa3db562ec883759 Mon Sep 17 00:00:00 2001 From: Dan Field Date: Tue, 28 Mar 2023 09:48:45 -0700 Subject: [PATCH 09/19] ++ --- impeller/playground/backend/metal/playground_impl_mtl.mm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/impeller/playground/backend/metal/playground_impl_mtl.mm b/impeller/playground/backend/metal/playground_impl_mtl.mm index 83bed5e2fcbca..d2f54d8a865bc 100644 --- a/impeller/playground/backend/metal/playground_impl_mtl.mm +++ b/impeller/playground/backend/metal/playground_impl_mtl.mm @@ -24,8 +24,8 @@ #include "impeller/renderer/backend/metal/formats_mtl.h" #include "impeller/renderer/backend/metal/surface_mtl.h" #include "impeller/renderer/backend/metal/texture_mtl.h" +#include "impeller/renderer/mtl/tessellation_shaders.h" #include "impeller/scene/shaders/mtl/scene_shaders.h" -#include "impeller/tessellator/mtl/tessellation_shaders.h" namespace impeller { From b0bc6ec7d6d3910159aaa23659e439336473a65a Mon Sep 17 00:00:00 2001 From: Dan Field Date: Tue, 28 Mar 2023 10:07:51 -0700 Subject: [PATCH 10/19] Fixup --- impeller/tools/impeller.gni | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/impeller/tools/impeller.gni b/impeller/tools/impeller.gni index f1335bbec29d5..5a0e393206c6e 100644 --- a/impeller/tools/impeller.gni +++ b/impeller/tools/impeller.gni @@ -574,12 +574,13 @@ template("_impeller_shaders_vk") { impellerc(impellerc_vk) { shaders = invoker.shaders sl_file_extension = "vkspv" - if (defined(invoker.metal_version)) { - metal_version = invoker.metal_version - } # Metal reflectors generate a superset of information. if (impeller_enable_metal) { + if (defined(invoker.metal_version)) { + metal_version = invoker.metal_version + } + intermediates_subdir = "vk" } shader_target_flag = "--vulkan" From ff7858037ad85421fec6c116cbc666cc9871d3f1 Mon Sep 17 00:00:00 2001 From: Dan Field Date: Tue, 28 Mar 2023 10:32:17 -0700 Subject: [PATCH 11/19] Make iOS compile --- impeller/compiler/compiler.cc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/impeller/compiler/compiler.cc b/impeller/compiler/compiler.cc index ab92aa18d064c..1da67b85268f3 100644 --- a/impeller/compiler/compiler.cc +++ b/impeller/compiler/compiler.cc @@ -57,6 +57,10 @@ static CompilerBackend CreateMSLCompiler(const spirv_cross::ParsedIR& ir, sl_options.platform = TargetPlatformToMSLPlatform(source_options.target_platform); sl_options.msl_version = ParseMSLVersion(source_options.metal_version); + sl_options.ios_use_simdgroup_functions = + sl_options.is_ios() && + sl_options.msl_version >= + spirv_cross::CompilerMSL::Options::make_msl_version(2, 4, 0); sl_options.use_framebuffer_fetch_subpasses = true; sl_compiler->set_msl_options(sl_options); From aae71bfa74d9a466b9565f724135352e333c819c Mon Sep 17 00:00:00 2001 From: Dan Field Date: Tue, 28 Mar 2023 10:34:01 -0700 Subject: [PATCH 12/19] I know the alphabet I promise --- ci/licenses_golden/licenses_flutter | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/licenses_golden/licenses_flutter b/ci/licenses_golden/licenses_flutter index 7435e7738b8d0..2c91375fe48ec 100644 --- a/ci/licenses_golden/licenses_flutter +++ b/ci/licenses_golden/licenses_flutter @@ -1551,9 +1551,9 @@ ORIGIN: ../../../flutter/impeller/renderer/shader_types.cc + ../../../flutter/LI ORIGIN: ../../../flutter/impeller/renderer/shader_types.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/snapshot.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/snapshot.h + ../../../flutter/LICENSE +ORIGIN: ../../../flutter/impeller/renderer/stroke.comp + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/surface.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/surface.h + ../../../flutter/LICENSE -ORIGIN: ../../../flutter/impeller/renderer/stroke.comp + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/texture.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/texture.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/texture_descriptor.cc + ../../../flutter/LICENSE From 9b8310b4a1b728616568ec45735a5cd62823cce8 Mon Sep 17 00:00:00 2001 From: Dan Field Date: Tue, 28 Mar 2023 12:21:40 -0700 Subject: [PATCH 13/19] Vulkan language version so Malioc knows what to do --- impeller/renderer/BUILD.gn | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/impeller/renderer/BUILD.gn b/impeller/renderer/BUILD.gn index 0747457a5d048..83b689cad87a9 100644 --- a/impeller/renderer/BUILD.gn +++ b/impeller/renderer/BUILD.gn @@ -42,8 +42,12 @@ impeller_component("allocation") { if (impeller_enable_compute) { impeller_shaders("tessellation_shaders") { - enable_opengles = false name = "tessellation" + enable_opengles = false + + if (impeller_enable_vulkan) { + vulkan_language_version = 130 + } if (is_ios) { metal_version = "2.4" From 9db600804ab5e1bd8081d67dda98d2bc0cdbbfca Mon Sep 17 00:00:00 2001 From: Dan Field Date: Tue, 28 Mar 2023 14:05:17 -0700 Subject: [PATCH 14/19] Update malioc.json --- impeller/tools/malioc.json | 178 +++++++++++++++++++++++++++++++------ 1 file changed, 150 insertions(+), 28 deletions(-) diff --git a/impeller/tools/malioc.json b/impeller/tools/malioc.json index 9d800cc43c0ab..20f7b1ac7c881 100644 --- a/impeller/tools/malioc.json +++ b/impeller/tools/malioc.json @@ -178,7 +178,7 @@ }, "stack_spill_bytes": 0, "thread_occupancy": 100, - "uniform_registers_used": 10, + "uniform_registers_used": 12, "work_registers_used": 15 } } @@ -252,7 +252,7 @@ }, "stack_spill_bytes": 0, "thread_occupancy": 100, - "uniform_registers_used": 8, + "uniform_registers_used": 10, "work_registers_used": 16 } } @@ -326,7 +326,7 @@ }, "stack_spill_bytes": 0, "thread_occupancy": 100, - "uniform_registers_used": 8, + "uniform_registers_used": 10, "work_registers_used": 14 } } @@ -403,7 +403,7 @@ }, "stack_spill_bytes": 0, "thread_occupancy": 100, - "uniform_registers_used": 6, + "uniform_registers_used": 8, "work_registers_used": 11 } } @@ -481,7 +481,7 @@ }, "stack_spill_bytes": 0, "thread_occupancy": 100, - "uniform_registers_used": 6, + "uniform_registers_used": 8, "work_registers_used": 11 } } @@ -560,7 +560,7 @@ }, "stack_spill_bytes": 0, "thread_occupancy": 100, - "uniform_registers_used": 6, + "uniform_registers_used": 8, "work_registers_used": 11 } } @@ -637,7 +637,7 @@ }, "stack_spill_bytes": 0, "thread_occupancy": 100, - "uniform_registers_used": 8, + "uniform_registers_used": 10, "work_registers_used": 15 } } @@ -710,7 +710,7 @@ }, "stack_spill_bytes": 0, "thread_occupancy": 100, - "uniform_registers_used": 10, + "uniform_registers_used": 12, "work_registers_used": 15 } } @@ -787,7 +787,7 @@ }, "stack_spill_bytes": 0, "thread_occupancy": 100, - "uniform_registers_used": 6, + "uniform_registers_used": 8, "work_registers_used": 11 } } @@ -860,7 +860,7 @@ }, "stack_spill_bytes": 0, "thread_occupancy": 100, - "uniform_registers_used": 10, + "uniform_registers_used": 12, "work_registers_used": 15 } } @@ -938,7 +938,7 @@ }, "stack_spill_bytes": 0, "thread_occupancy": 100, - "uniform_registers_used": 6, + "uniform_registers_used": 8, "work_registers_used": 11 } } @@ -1015,7 +1015,7 @@ }, "stack_spill_bytes": 0, "thread_occupancy": 100, - "uniform_registers_used": 8, + "uniform_registers_used": 10, "work_registers_used": 15 } } @@ -1088,7 +1088,7 @@ }, "stack_spill_bytes": 0, "thread_occupancy": 100, - "uniform_registers_used": 10, + "uniform_registers_used": 12, "work_registers_used": 15 } } @@ -1166,7 +1166,7 @@ }, "stack_spill_bytes": 0, "thread_occupancy": 100, - "uniform_registers_used": 6, + "uniform_registers_used": 8, "work_registers_used": 11 } } @@ -1239,7 +1239,7 @@ }, "stack_spill_bytes": 0, "thread_occupancy": 100, - "uniform_registers_used": 12, + "uniform_registers_used": 14, "work_registers_used": 25 } } @@ -3220,7 +3220,7 @@ }, "stack_spill_bytes": 0, "thread_occupancy": 100, - "uniform_registers_used": 14, + "uniform_registers_used": 16, "work_registers_used": 15 } } @@ -3404,7 +3404,7 @@ }, "stack_spill_bytes": 0, "thread_occupancy": 100, - "uniform_registers_used": 12, + "uniform_registers_used": 14, "work_registers_used": 20 } } @@ -13098,17 +13098,16 @@ "has_stack_spilling": false, "performance": { "longest_path_bound_pipelines": [ - "varying", "texture" ], "longest_path_cycles": [ 0.15625, 0.15625, - 0.0, + 0.015625, 0.0, 0.0, 0.25, - 0.25 + 0.5 ], "pipelines": [ "arith_total", @@ -13120,36 +13119,34 @@ "texture" ], "shortest_path_bound_pipelines": [ - "varying", "texture" ], "shortest_path_cycles": [ 0.15625, 0.15625, - 0.0, + 0.015625, 0.0, 0.0, 0.25, - 0.25 + 0.5 ], "total_bound_pipelines": [ - "varying", "texture" ], "total_cycles": [ 0.15625, 0.15625, - 0.0, + 0.015625, 0.0, 0.0, 0.25, - 0.25 + 0.5 ] }, "stack_spill_bytes": 0, "thread_occupancy": 100, - "uniform_registers_used": 12, - "work_registers_used": 6 + "uniform_registers_used": 14, + "work_registers_used": 8 } } } @@ -13266,6 +13263,131 @@ } } }, + "flutter/impeller/renderer/path_polyline.comp.vkspv": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/renderer/path_polyline.comp.vkspv", + "has_uniform_computation": true, + "type": "Compute", + "variants": { + "Main": { + "fp16_arithmetic": 0, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + null + ], + "longest_path_cycles": [ + null, + null, + null, + null, + null, + null + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 0.75, + 0.0, + 0.75, + 0.0, + 2.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 5.9375, + 2.737499952316284, + 4.824999809265137, + 5.9375, + 35.0, + 0.0 + ] + }, + "shared_storage_used": 12288, + "stack_spill_bytes": 0, + "thread_occupancy": 50, + "uniform_registers_used": 34, + "work_registers_used": 55 + } + } + } + }, + "flutter/impeller/renderer/stroke.comp.vkspv": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/renderer/stroke.comp.vkspv", + "has_uniform_computation": true, + "type": "Compute", + "variants": { + "Main": { + "fp16_arithmetic": 0, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 0.3125, + 0.3125, + 0.1875, + 0.125, + 7.0, + 0.0 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arith_total", + "arith_cvt" + ], + "shortest_path_cycles": [ + 0.0625, + 0.0, + 0.0625, + 0.0, + 0.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 0.3125, + 0.3125, + 0.1875, + 0.125, + 7.0, + 0.0 + ] + }, + "shared_storage_used": 0, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 10, + "work_registers_used": 24 + } + } + } + }, "flutter/impeller/scene/shaders/gles/skinned.vert.gles": { "Mali-G78": { "core": "Mali-G78", From a96028e538215d628e3273c0c73fdfa38c18cf5c Mon Sep 17 00:00:00 2001 From: Dan Field Date: Tue, 28 Mar 2023 16:17:19 -0700 Subject: [PATCH 15/19] revert malioc.json --- impeller/tools/malioc.json | 178 ++++++------------------------------- 1 file changed, 28 insertions(+), 150 deletions(-) diff --git a/impeller/tools/malioc.json b/impeller/tools/malioc.json index 20f7b1ac7c881..9d800cc43c0ab 100644 --- a/impeller/tools/malioc.json +++ b/impeller/tools/malioc.json @@ -178,7 +178,7 @@ }, "stack_spill_bytes": 0, "thread_occupancy": 100, - "uniform_registers_used": 12, + "uniform_registers_used": 10, "work_registers_used": 15 } } @@ -252,7 +252,7 @@ }, "stack_spill_bytes": 0, "thread_occupancy": 100, - "uniform_registers_used": 10, + "uniform_registers_used": 8, "work_registers_used": 16 } } @@ -326,7 +326,7 @@ }, "stack_spill_bytes": 0, "thread_occupancy": 100, - "uniform_registers_used": 10, + "uniform_registers_used": 8, "work_registers_used": 14 } } @@ -403,7 +403,7 @@ }, "stack_spill_bytes": 0, "thread_occupancy": 100, - "uniform_registers_used": 8, + "uniform_registers_used": 6, "work_registers_used": 11 } } @@ -481,7 +481,7 @@ }, "stack_spill_bytes": 0, "thread_occupancy": 100, - "uniform_registers_used": 8, + "uniform_registers_used": 6, "work_registers_used": 11 } } @@ -560,7 +560,7 @@ }, "stack_spill_bytes": 0, "thread_occupancy": 100, - "uniform_registers_used": 8, + "uniform_registers_used": 6, "work_registers_used": 11 } } @@ -637,7 +637,7 @@ }, "stack_spill_bytes": 0, "thread_occupancy": 100, - "uniform_registers_used": 10, + "uniform_registers_used": 8, "work_registers_used": 15 } } @@ -710,7 +710,7 @@ }, "stack_spill_bytes": 0, "thread_occupancy": 100, - "uniform_registers_used": 12, + "uniform_registers_used": 10, "work_registers_used": 15 } } @@ -787,7 +787,7 @@ }, "stack_spill_bytes": 0, "thread_occupancy": 100, - "uniform_registers_used": 8, + "uniform_registers_used": 6, "work_registers_used": 11 } } @@ -860,7 +860,7 @@ }, "stack_spill_bytes": 0, "thread_occupancy": 100, - "uniform_registers_used": 12, + "uniform_registers_used": 10, "work_registers_used": 15 } } @@ -938,7 +938,7 @@ }, "stack_spill_bytes": 0, "thread_occupancy": 100, - "uniform_registers_used": 8, + "uniform_registers_used": 6, "work_registers_used": 11 } } @@ -1015,7 +1015,7 @@ }, "stack_spill_bytes": 0, "thread_occupancy": 100, - "uniform_registers_used": 10, + "uniform_registers_used": 8, "work_registers_used": 15 } } @@ -1088,7 +1088,7 @@ }, "stack_spill_bytes": 0, "thread_occupancy": 100, - "uniform_registers_used": 12, + "uniform_registers_used": 10, "work_registers_used": 15 } } @@ -1166,7 +1166,7 @@ }, "stack_spill_bytes": 0, "thread_occupancy": 100, - "uniform_registers_used": 8, + "uniform_registers_used": 6, "work_registers_used": 11 } } @@ -1239,7 +1239,7 @@ }, "stack_spill_bytes": 0, "thread_occupancy": 100, - "uniform_registers_used": 14, + "uniform_registers_used": 12, "work_registers_used": 25 } } @@ -3220,7 +3220,7 @@ }, "stack_spill_bytes": 0, "thread_occupancy": 100, - "uniform_registers_used": 16, + "uniform_registers_used": 14, "work_registers_used": 15 } } @@ -3404,7 +3404,7 @@ }, "stack_spill_bytes": 0, "thread_occupancy": 100, - "uniform_registers_used": 14, + "uniform_registers_used": 12, "work_registers_used": 20 } } @@ -13098,16 +13098,17 @@ "has_stack_spilling": false, "performance": { "longest_path_bound_pipelines": [ + "varying", "texture" ], "longest_path_cycles": [ 0.15625, 0.15625, - 0.015625, + 0.0, 0.0, 0.0, 0.25, - 0.5 + 0.25 ], "pipelines": [ "arith_total", @@ -13119,34 +13120,36 @@ "texture" ], "shortest_path_bound_pipelines": [ + "varying", "texture" ], "shortest_path_cycles": [ 0.15625, 0.15625, - 0.015625, + 0.0, 0.0, 0.0, 0.25, - 0.5 + 0.25 ], "total_bound_pipelines": [ + "varying", "texture" ], "total_cycles": [ 0.15625, 0.15625, - 0.015625, + 0.0, 0.0, 0.0, 0.25, - 0.5 + 0.25 ] }, "stack_spill_bytes": 0, "thread_occupancy": 100, - "uniform_registers_used": 14, - "work_registers_used": 8 + "uniform_registers_used": 12, + "work_registers_used": 6 } } } @@ -13263,131 +13266,6 @@ } } }, - "flutter/impeller/renderer/path_polyline.comp.vkspv": { - "Mali-G78": { - "core": "Mali-G78", - "filename": "flutter/impeller/renderer/path_polyline.comp.vkspv", - "has_uniform_computation": true, - "type": "Compute", - "variants": { - "Main": { - "fp16_arithmetic": 0, - "has_stack_spilling": false, - "performance": { - "longest_path_bound_pipelines": [ - null - ], - "longest_path_cycles": [ - null, - null, - null, - null, - null, - null - ], - "pipelines": [ - "arith_total", - "arith_fma", - "arith_cvt", - "arith_sfu", - "load_store", - "texture" - ], - "shortest_path_bound_pipelines": [ - "load_store" - ], - "shortest_path_cycles": [ - 0.75, - 0.0, - 0.75, - 0.0, - 2.0, - 0.0 - ], - "total_bound_pipelines": [ - "load_store" - ], - "total_cycles": [ - 5.9375, - 2.737499952316284, - 4.824999809265137, - 5.9375, - 35.0, - 0.0 - ] - }, - "shared_storage_used": 12288, - "stack_spill_bytes": 0, - "thread_occupancy": 50, - "uniform_registers_used": 34, - "work_registers_used": 55 - } - } - } - }, - "flutter/impeller/renderer/stroke.comp.vkspv": { - "Mali-G78": { - "core": "Mali-G78", - "filename": "flutter/impeller/renderer/stroke.comp.vkspv", - "has_uniform_computation": true, - "type": "Compute", - "variants": { - "Main": { - "fp16_arithmetic": 0, - "has_stack_spilling": false, - "performance": { - "longest_path_bound_pipelines": [ - "load_store" - ], - "longest_path_cycles": [ - 0.3125, - 0.3125, - 0.1875, - 0.125, - 7.0, - 0.0 - ], - "pipelines": [ - "arith_total", - "arith_fma", - "arith_cvt", - "arith_sfu", - "load_store", - "texture" - ], - "shortest_path_bound_pipelines": [ - "arith_total", - "arith_cvt" - ], - "shortest_path_cycles": [ - 0.0625, - 0.0, - 0.0625, - 0.0, - 0.0, - 0.0 - ], - "total_bound_pipelines": [ - "load_store" - ], - "total_cycles": [ - 0.3125, - 0.3125, - 0.1875, - 0.125, - 7.0, - 0.0 - ] - }, - "shared_storage_used": 0, - "stack_spill_bytes": 0, - "thread_occupancy": 100, - "uniform_registers_used": 10, - "work_registers_used": 24 - } - } - } - }, "flutter/impeller/scene/shaders/gles/skinned.vert.gles": { "Mali-G78": { "core": "Mali-G78", From 9b19021bf782474a4eeaa2814f57bc717692addd Mon Sep 17 00:00:00 2001 From: Dan Field Date: Tue, 28 Mar 2023 16:18:10 -0700 Subject: [PATCH 16/19] try again --- impeller/tools/malioc.json | 125 +++++++++++++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) diff --git a/impeller/tools/malioc.json b/impeller/tools/malioc.json index 9d800cc43c0ab..673d3a85cf01d 100644 --- a/impeller/tools/malioc.json +++ b/impeller/tools/malioc.json @@ -13266,6 +13266,131 @@ } } }, + "flutter/impeller/renderer/path_polyline.comp.vkspv": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/renderer/path_polyline.comp.vkspv", + "has_uniform_computation": true, + "type": "Compute", + "variants": { + "Main": { + "fp16_arithmetic": 0, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + null + ], + "longest_path_cycles": [ + null, + null, + null, + null, + null, + null + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 0.75, + 0.0, + 0.75, + 0.0, + 2.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 5.9375, + 2.737499952316284, + 4.824999809265137, + 5.9375, + 35.0, + 0.0 + ] + }, + "shared_storage_used": 12288, + "stack_spill_bytes": 0, + "thread_occupancy": 50, + "uniform_registers_used": 34, + "work_registers_used": 55 + } + } + } + }, + "flutter/impeller/renderer/stroke.comp.vkspv": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/renderer/stroke.comp.vkspv", + "has_uniform_computation": true, + "type": "Compute", + "variants": { + "Main": { + "fp16_arithmetic": 0, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 0.3125, + 0.3125, + 0.1875, + 0.125, + 7.0, + 0.0 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arith_total", + "arith_cvt" + ], + "shortest_path_cycles": [ + 0.0625, + 0.0, + 0.0625, + 0.0, + 0.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 0.3125, + 0.3125, + 0.1875, + 0.125, + 7.0, + 0.0 + ] + }, + "shared_storage_used": 0, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 10, + "work_registers_used": 24 + } + } + } + }, "flutter/impeller/scene/shaders/gles/skinned.vert.gles": { "Mali-G78": { "core": "Mali-G78", From 141dd2deda918aa8de8922dbfbbdf97e84f921c6 Mon Sep 17 00:00:00 2001 From: Dan Field Date: Tue, 28 Mar 2023 16:36:25 -0700 Subject: [PATCH 17/19] rename --- ci/licenses_golden/licenses_flutter | 96 +++++++++---------- impeller/aiks/image.h | 2 +- impeller/compiler/code_gen_template.h | 4 +- impeller/core/BUILD.gn | 41 ++++++++ impeller/{renderer => core}/allocator.cc | 6 +- impeller/{renderer => core}/allocator.h | 4 +- impeller/{renderer => core}/buffer.cc | 2 +- impeller/{renderer => core}/buffer.h | 0 impeller/{renderer => core}/buffer_view.cc | 2 +- impeller/{renderer => core}/buffer_view.h | 4 +- impeller/{renderer => core}/device_buffer.cc | 2 +- impeller/{renderer => core}/device_buffer.h | 12 +-- .../device_buffer_descriptor.cc | 2 +- .../device_buffer_descriptor.h | 2 +- impeller/{renderer => core}/formats.cc | 4 +- impeller/{renderer => core}/formats.h | 0 impeller/{renderer => core}/host_buffer.cc | 8 +- impeller/{renderer => core}/host_buffer.h | 6 +- impeller/{renderer => core}/platform.cc | 2 +- impeller/{renderer => core}/platform.h | 0 impeller/{renderer => core}/range.cc | 2 +- impeller/{renderer => core}/range.h | 0 impeller/{renderer => core}/texture.cc | 2 +- impeller/{renderer => core}/texture.h | 4 +- .../{renderer => core}/texture_descriptor.cc | 2 +- .../{renderer => core}/texture_descriptor.h | 2 +- impeller/{renderer => core}/vertex_buffer.cc | 2 +- impeller/{renderer => core}/vertex_buffer.h | 4 +- .../display_list/display_list_dispatcher.cc | 2 +- .../display_list_image_impeller.h | 2 +- .../display_list_vertices_geometry.cc | 2 +- impeller/entity/contents/atlas_contents.cc | 2 +- impeller/entity/contents/clip_contents.cc | 2 +- impeller/entity/contents/content_context.cc | 2 +- impeller/entity/contents/content_context.h | 2 +- impeller/entity/contents/contents.cc | 2 +- impeller/entity/contents/contents.h | 2 +- .../contents/filters/blend_filter_contents.cc | 2 +- .../contents/filters/filter_contents.cc | 2 +- .../entity/contents/filters/filter_contents.h | 2 +- .../filters/gaussian_blur_filter_contents.cc | 2 +- .../filters/inputs/texture_filter_input.cc | 2 +- .../filters/yuv_to_rgb_filter_contents.cc | 2 +- .../contents/framebuffer_blend_contents.h | 2 +- .../entity/contents/gradient_generator.cc | 2 +- impeller/entity/contents/gradient_generator.h | 2 +- .../contents/linear_gradient_contents.cc | 2 +- .../contents/linear_gradient_contents.h | 2 +- .../contents/runtime_effect_contents.cc | 2 +- impeller/entity/contents/scene_contents.cc | 2 +- impeller/entity/contents/text_contents.cc | 2 +- impeller/entity/contents/texture_contents.cc | 2 +- impeller/entity/contents/vertices_contents.cc | 4 +- impeller/entity/entity_pass.cc | 6 +- impeller/entity/entity_pass.h | 2 +- impeller/entity/entity_pass_delegate.h | 2 +- impeller/entity/entity_pass_target.cc | 4 +- impeller/entity/geometry.cc | 2 +- impeller/entity/geometry.h | 6 +- impeller/entity/inline_pass_context.cc | 4 +- .../backend/metal/playground_impl_mtl.mm | 5 +- impeller/playground/compute_playground_test.h | 2 +- .../playground/imgui/imgui_impl_impeller.cc | 12 +-- impeller/playground/playground.cc | 4 +- impeller/playground/playground.h | 2 +- impeller/renderer/BUILD.gn | 46 +-------- .../renderer/backend/gles/allocator_gles.h | 2 +- .../renderer/backend/gles/blit_pass_gles.cc | 2 +- .../backend/gles/device_buffer_gles.h | 2 +- impeller/renderer/backend/gles/formats_gles.h | 2 +- .../renderer/backend/gles/sampler_gles.cc | 2 +- .../renderer/backend/gles/texture_gles.cc | 2 +- impeller/renderer/backend/gles/texture_gles.h | 2 +- .../renderer/backend/metal/allocator_mtl.h | 2 +- .../renderer/backend/metal/allocator_mtl.mm | 2 +- .../renderer/backend/metal/blit_pass_mtl.mm | 4 +- .../backend/metal/compute_pass_mtl.mm | 4 +- .../backend/metal/device_buffer_mtl.h | 2 +- impeller/renderer/backend/metal/formats_mtl.h | 4 +- .../renderer/backend/metal/render_pass_mtl.mm | 4 +- impeller/renderer/backend/metal/texture_mtl.h | 2 +- .../renderer/backend/metal/texture_mtl.mm | 2 +- .../renderer/backend/vulkan/allocator_vk.cc | 2 +- .../renderer/backend/vulkan/allocator_vk.h | 2 +- impeller/renderer/backend/vulkan/context_vk.h | 2 +- .../backend/vulkan/device_buffer_vk.h | 2 +- impeller/renderer/backend/vulkan/formats_vk.h | 2 +- .../renderer/backend/vulkan/render_pass_vk.cc | 2 +- .../backend/vulkan/texture_source_vk.h | 2 +- impeller/renderer/backend/vulkan/texture_vk.h | 2 +- impeller/renderer/blit_command.h | 4 +- impeller/renderer/blit_pass.cc | 2 +- impeller/renderer/blit_pass.h | 4 +- impeller/renderer/capabilities.h | 2 +- impeller/renderer/command.cc | 2 +- impeller/renderer/command.h | 8 +- impeller/renderer/compute_command.cc | 2 +- impeller/renderer/compute_command.h | 8 +- impeller/renderer/compute_pass.cc | 2 +- impeller/renderer/compute_pass.h | 4 +- impeller/renderer/compute_pipeline_builder.h | 2 +- .../renderer/compute_pipeline_descriptor.cc | 2 +- .../renderer/compute_pipeline_descriptor.h | 2 +- .../renderer/compute_subgroup_unittests.cc | 2 +- impeller/renderer/compute_tessellator.h | 2 +- impeller/renderer/compute_unittests.cc | 2 +- impeller/renderer/context.h | 2 +- impeller/renderer/device_buffer_unittests.cc | 2 +- impeller/renderer/host_buffer_unittests.cc | 2 +- impeller/renderer/pipeline_builder.h | 2 +- impeller/renderer/pipeline_descriptor.cc | 2 +- impeller/renderer/pipeline_descriptor.h | 2 +- impeller/renderer/render_target.cc | 4 +- impeller/renderer/render_target.h | 4 +- impeller/renderer/renderer_unittests.cc | 4 +- impeller/renderer/sampler_descriptor.h | 2 +- impeller/renderer/snapshot.h | 4 +- impeller/renderer/testing/mocks.h | 4 +- impeller/renderer/vertex_buffer_builder.h | 10 +- impeller/scene/geometry.cc | 6 +- impeller/scene/geometry.h | 8 +- impeller/scene/material.cc | 2 +- impeller/scene/material.h | 4 +- impeller/scene/node.h | 2 +- impeller/scene/scene_context.cc | 2 +- impeller/scene/scene_unittests.cc | 2 +- impeller/scene/skin.cc | 2 +- impeller/scene/skin.h | 4 +- impeller/tools/impeller.gni | 2 +- .../backends/skia/text_render_context_skia.cc | 2 +- impeller/typographer/glyph_atlas.h | 2 +- ...display_list_deferred_image_gpu_impeller.h | 2 +- lib/ui/painting/image_decoder_impeller.cc | 4 +- lib/ui/painting/image_decoder_unittests.cc | 4 +- lib/ui/painting/image_encoding_impeller.cc | 4 +- 135 files changed, 286 insertions(+), 282 deletions(-) create mode 100644 impeller/core/BUILD.gn rename impeller/{renderer => core}/allocator.cc (92%) rename impeller/{renderer => core}/allocator.h (93%) rename impeller/{renderer => core}/buffer.cc (86%) rename impeller/{renderer => core}/buffer.h (100%) rename impeller/{renderer => core}/buffer_view.cc (83%) rename impeller/{renderer => core}/buffer_view.h (85%) rename impeller/{renderer => core}/device_buffer.cc (97%) rename impeller/{renderer => core}/device_buffer.h (85%) rename impeller/{renderer => core}/device_buffer_descriptor.cc (79%) rename impeller/{renderer => core}/device_buffer_descriptor.h (90%) rename impeller/{renderer => core}/formats.cc (97%) rename impeller/{renderer => core}/formats.h (100%) rename impeller/{renderer => core}/host_buffer.cc (90%) rename impeller/{renderer => core}/host_buffer.h (96%) rename impeller/{renderer => core}/platform.cc (84%) rename impeller/{renderer => core}/platform.h (100%) rename impeller/{renderer => core}/range.cc (85%) rename impeller/{renderer => core}/range.h (100%) rename impeller/{renderer => core}/texture.cc (97%) rename impeller/{renderer => core}/texture.h (94%) rename impeller/{renderer => core}/texture_descriptor.cc (81%) rename impeller/{renderer => core}/texture_descriptor.h (98%) rename impeller/{renderer => core}/vertex_buffer.cc (82%) rename impeller/{renderer => core}/vertex_buffer.h (85%) diff --git a/ci/licenses_golden/licenses_flutter b/ci/licenses_golden/licenses_flutter index 2c91375fe48ec..749767503f06a 100644 --- a/ci/licenses_golden/licenses_flutter +++ b/ci/licenses_golden/licenses_flutter @@ -1106,6 +1106,30 @@ ORIGIN: ../../../flutter/impeller/compiler/uniform_sorter.cc + ../../../flutter/ ORIGIN: ../../../flutter/impeller/compiler/uniform_sorter.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/compiler/utilities.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/compiler/utilities.h + ../../../flutter/LICENSE +ORIGIN: ../../../flutter/impeller/core/allocator.cc + ../../../flutter/LICENSE +ORIGIN: ../../../flutter/impeller/core/allocator.h + ../../../flutter/LICENSE +ORIGIN: ../../../flutter/impeller/core/buffer.cc + ../../../flutter/LICENSE +ORIGIN: ../../../flutter/impeller/core/buffer.h + ../../../flutter/LICENSE +ORIGIN: ../../../flutter/impeller/core/buffer_view.cc + ../../../flutter/LICENSE +ORIGIN: ../../../flutter/impeller/core/buffer_view.h + ../../../flutter/LICENSE +ORIGIN: ../../../flutter/impeller/core/device_buffer.cc + ../../../flutter/LICENSE +ORIGIN: ../../../flutter/impeller/core/device_buffer.h + ../../../flutter/LICENSE +ORIGIN: ../../../flutter/impeller/core/device_buffer_descriptor.cc + ../../../flutter/LICENSE +ORIGIN: ../../../flutter/impeller/core/device_buffer_descriptor.h + ../../../flutter/LICENSE +ORIGIN: ../../../flutter/impeller/core/formats.cc + ../../../flutter/LICENSE +ORIGIN: ../../../flutter/impeller/core/formats.h + ../../../flutter/LICENSE +ORIGIN: ../../../flutter/impeller/core/host_buffer.cc + ../../../flutter/LICENSE +ORIGIN: ../../../flutter/impeller/core/host_buffer.h + ../../../flutter/LICENSE +ORIGIN: ../../../flutter/impeller/core/platform.cc + ../../../flutter/LICENSE +ORIGIN: ../../../flutter/impeller/core/platform.h + ../../../flutter/LICENSE +ORIGIN: ../../../flutter/impeller/core/range.cc + ../../../flutter/LICENSE +ORIGIN: ../../../flutter/impeller/core/range.h + ../../../flutter/LICENSE +ORIGIN: ../../../flutter/impeller/core/texture.cc + ../../../flutter/LICENSE +ORIGIN: ../../../flutter/impeller/core/texture.h + ../../../flutter/LICENSE +ORIGIN: ../../../flutter/impeller/core/texture_descriptor.cc + ../../../flutter/LICENSE +ORIGIN: ../../../flutter/impeller/core/texture_descriptor.h + ../../../flutter/LICENSE +ORIGIN: ../../../flutter/impeller/core/vertex_buffer.cc + ../../../flutter/LICENSE +ORIGIN: ../../../flutter/impeller/core/vertex_buffer.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/display_list/display_list_dispatcher.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/display_list/display_list_dispatcher.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/display_list/display_list_image_impeller.cc + ../../../flutter/LICENSE @@ -1334,8 +1358,6 @@ ORIGIN: ../../../flutter/impeller/image/compressed_image.cc + ../../../flutter/L ORIGIN: ../../../flutter/impeller/image/compressed_image.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/image/decompressed_image.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/image/decompressed_image.h + ../../../flutter/LICENSE -ORIGIN: ../../../flutter/impeller/renderer/allocator.cc + ../../../flutter/LICENSE -ORIGIN: ../../../flutter/impeller/renderer/allocator.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/backend/gles/allocator_gles.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/backend/gles/allocator_gles.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/backend/gles/blit_command_gles.cc + ../../../flutter/LICENSE @@ -1484,10 +1506,6 @@ ORIGIN: ../../../flutter/impeller/renderer/blit_command.cc + ../../../flutter/LI ORIGIN: ../../../flutter/impeller/renderer/blit_command.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/blit_pass.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/blit_pass.h + ../../../flutter/LICENSE -ORIGIN: ../../../flutter/impeller/renderer/buffer.cc + ../../../flutter/LICENSE -ORIGIN: ../../../flutter/impeller/renderer/buffer.h + ../../../flutter/LICENSE -ORIGIN: ../../../flutter/impeller/renderer/buffer_view.cc + ../../../flutter/LICENSE -ORIGIN: ../../../flutter/impeller/renderer/buffer_view.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/capabilities.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/capabilities.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/command.cc + ../../../flutter/LICENSE @@ -1506,16 +1524,8 @@ ORIGIN: ../../../flutter/impeller/renderer/compute_tessellator.cc + ../../../flu ORIGIN: ../../../flutter/impeller/renderer/compute_tessellator.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/context.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/context.h + ../../../flutter/LICENSE -ORIGIN: ../../../flutter/impeller/renderer/device_buffer.cc + ../../../flutter/LICENSE -ORIGIN: ../../../flutter/impeller/renderer/device_buffer.h + ../../../flutter/LICENSE -ORIGIN: ../../../flutter/impeller/renderer/device_buffer_descriptor.cc + ../../../flutter/LICENSE -ORIGIN: ../../../flutter/impeller/renderer/device_buffer_descriptor.h + ../../../flutter/LICENSE -ORIGIN: ../../../flutter/impeller/renderer/formats.cc + ../../../flutter/LICENSE -ORIGIN: ../../../flutter/impeller/renderer/formats.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/gpu_tracer.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/gpu_tracer.h + ../../../flutter/LICENSE -ORIGIN: ../../../flutter/impeller/renderer/host_buffer.cc + ../../../flutter/LICENSE -ORIGIN: ../../../flutter/impeller/renderer/host_buffer.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/path_polyline.comp + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/pipeline.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/pipeline.h + ../../../flutter/LICENSE @@ -1525,10 +1535,6 @@ ORIGIN: ../../../flutter/impeller/renderer/pipeline_descriptor.cc + ../../../flu ORIGIN: ../../../flutter/impeller/renderer/pipeline_descriptor.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/pipeline_library.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/pipeline_library.h + ../../../flutter/LICENSE -ORIGIN: ../../../flutter/impeller/renderer/platform.cc + ../../../flutter/LICENSE -ORIGIN: ../../../flutter/impeller/renderer/platform.h + ../../../flutter/LICENSE -ORIGIN: ../../../flutter/impeller/renderer/range.cc + ../../../flutter/LICENSE -ORIGIN: ../../../flutter/impeller/renderer/range.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/render_pass.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/render_pass.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/render_target.cc + ../../../flutter/LICENSE @@ -1554,12 +1560,6 @@ ORIGIN: ../../../flutter/impeller/renderer/snapshot.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/stroke.comp + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/surface.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/surface.h + ../../../flutter/LICENSE -ORIGIN: ../../../flutter/impeller/renderer/texture.cc + ../../../flutter/LICENSE -ORIGIN: ../../../flutter/impeller/renderer/texture.h + ../../../flutter/LICENSE -ORIGIN: ../../../flutter/impeller/renderer/texture_descriptor.cc + ../../../flutter/LICENSE -ORIGIN: ../../../flutter/impeller/renderer/texture_descriptor.h + ../../../flutter/LICENSE -ORIGIN: ../../../flutter/impeller/renderer/vertex_buffer.cc + ../../../flutter/LICENSE -ORIGIN: ../../../flutter/impeller/renderer/vertex_buffer.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/vertex_buffer_builder.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/vertex_buffer_builder.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/renderer/vertex_descriptor.cc + ../../../flutter/LICENSE @@ -3673,6 +3673,30 @@ FILE: ../../../flutter/impeller/compiler/uniform_sorter.cc FILE: ../../../flutter/impeller/compiler/uniform_sorter.h FILE: ../../../flutter/impeller/compiler/utilities.cc FILE: ../../../flutter/impeller/compiler/utilities.h +FILE: ../../../flutter/impeller/core/allocator.cc +FILE: ../../../flutter/impeller/core/allocator.h +FILE: ../../../flutter/impeller/core/buffer.cc +FILE: ../../../flutter/impeller/core/buffer.h +FILE: ../../../flutter/impeller/core/buffer_view.cc +FILE: ../../../flutter/impeller/core/buffer_view.h +FILE: ../../../flutter/impeller/core/device_buffer.cc +FILE: ../../../flutter/impeller/core/device_buffer.h +FILE: ../../../flutter/impeller/core/device_buffer_descriptor.cc +FILE: ../../../flutter/impeller/core/device_buffer_descriptor.h +FILE: ../../../flutter/impeller/core/formats.cc +FILE: ../../../flutter/impeller/core/formats.h +FILE: ../../../flutter/impeller/core/host_buffer.cc +FILE: ../../../flutter/impeller/core/host_buffer.h +FILE: ../../../flutter/impeller/core/platform.cc +FILE: ../../../flutter/impeller/core/platform.h +FILE: ../../../flutter/impeller/core/range.cc +FILE: ../../../flutter/impeller/core/range.h +FILE: ../../../flutter/impeller/core/texture.cc +FILE: ../../../flutter/impeller/core/texture.h +FILE: ../../../flutter/impeller/core/texture_descriptor.cc +FILE: ../../../flutter/impeller/core/texture_descriptor.h +FILE: ../../../flutter/impeller/core/vertex_buffer.cc +FILE: ../../../flutter/impeller/core/vertex_buffer.h FILE: ../../../flutter/impeller/display_list/display_list_dispatcher.cc FILE: ../../../flutter/impeller/display_list/display_list_dispatcher.h FILE: ../../../flutter/impeller/display_list/display_list_image_impeller.cc @@ -3901,8 +3925,6 @@ FILE: ../../../flutter/impeller/image/compressed_image.cc FILE: ../../../flutter/impeller/image/compressed_image.h FILE: ../../../flutter/impeller/image/decompressed_image.cc FILE: ../../../flutter/impeller/image/decompressed_image.h -FILE: ../../../flutter/impeller/renderer/allocator.cc -FILE: ../../../flutter/impeller/renderer/allocator.h FILE: ../../../flutter/impeller/renderer/backend/gles/allocator_gles.cc FILE: ../../../flutter/impeller/renderer/backend/gles/allocator_gles.h FILE: ../../../flutter/impeller/renderer/backend/gles/blit_command_gles.cc @@ -4051,10 +4073,6 @@ FILE: ../../../flutter/impeller/renderer/blit_command.cc FILE: ../../../flutter/impeller/renderer/blit_command.h FILE: ../../../flutter/impeller/renderer/blit_pass.cc FILE: ../../../flutter/impeller/renderer/blit_pass.h -FILE: ../../../flutter/impeller/renderer/buffer.cc -FILE: ../../../flutter/impeller/renderer/buffer.h -FILE: ../../../flutter/impeller/renderer/buffer_view.cc -FILE: ../../../flutter/impeller/renderer/buffer_view.h FILE: ../../../flutter/impeller/renderer/capabilities.cc FILE: ../../../flutter/impeller/renderer/capabilities.h FILE: ../../../flutter/impeller/renderer/command.cc @@ -4073,16 +4091,8 @@ FILE: ../../../flutter/impeller/renderer/compute_tessellator.cc FILE: ../../../flutter/impeller/renderer/compute_tessellator.h FILE: ../../../flutter/impeller/renderer/context.cc FILE: ../../../flutter/impeller/renderer/context.h -FILE: ../../../flutter/impeller/renderer/device_buffer.cc -FILE: ../../../flutter/impeller/renderer/device_buffer.h -FILE: ../../../flutter/impeller/renderer/device_buffer_descriptor.cc -FILE: ../../../flutter/impeller/renderer/device_buffer_descriptor.h -FILE: ../../../flutter/impeller/renderer/formats.cc -FILE: ../../../flutter/impeller/renderer/formats.h FILE: ../../../flutter/impeller/renderer/gpu_tracer.cc FILE: ../../../flutter/impeller/renderer/gpu_tracer.h -FILE: ../../../flutter/impeller/renderer/host_buffer.cc -FILE: ../../../flutter/impeller/renderer/host_buffer.h FILE: ../../../flutter/impeller/renderer/path_polyline.comp FILE: ../../../flutter/impeller/renderer/pipeline.cc FILE: ../../../flutter/impeller/renderer/pipeline.h @@ -4092,10 +4102,6 @@ FILE: ../../../flutter/impeller/renderer/pipeline_descriptor.cc FILE: ../../../flutter/impeller/renderer/pipeline_descriptor.h FILE: ../../../flutter/impeller/renderer/pipeline_library.cc FILE: ../../../flutter/impeller/renderer/pipeline_library.h -FILE: ../../../flutter/impeller/renderer/platform.cc -FILE: ../../../flutter/impeller/renderer/platform.h -FILE: ../../../flutter/impeller/renderer/range.cc -FILE: ../../../flutter/impeller/renderer/range.h FILE: ../../../flutter/impeller/renderer/render_pass.cc FILE: ../../../flutter/impeller/renderer/render_pass.h FILE: ../../../flutter/impeller/renderer/render_target.cc @@ -4121,12 +4127,6 @@ FILE: ../../../flutter/impeller/renderer/snapshot.h FILE: ../../../flutter/impeller/renderer/stroke.comp FILE: ../../../flutter/impeller/renderer/surface.cc FILE: ../../../flutter/impeller/renderer/surface.h -FILE: ../../../flutter/impeller/renderer/texture.cc -FILE: ../../../flutter/impeller/renderer/texture.h -FILE: ../../../flutter/impeller/renderer/texture_descriptor.cc -FILE: ../../../flutter/impeller/renderer/texture_descriptor.h -FILE: ../../../flutter/impeller/renderer/vertex_buffer.cc -FILE: ../../../flutter/impeller/renderer/vertex_buffer.h FILE: ../../../flutter/impeller/renderer/vertex_buffer_builder.cc FILE: ../../../flutter/impeller/renderer/vertex_buffer_builder.h FILE: ../../../flutter/impeller/renderer/vertex_descriptor.cc diff --git a/impeller/aiks/image.h b/impeller/aiks/image.h index aa124f2ed7dd1..faab8c268ba62 100644 --- a/impeller/aiks/image.h +++ b/impeller/aiks/image.h @@ -7,7 +7,7 @@ #include #include "flutter/fml/macros.h" -#include "impeller/renderer/texture.h" +#include "impeller/core/texture.h" namespace impeller { diff --git a/impeller/compiler/code_gen_template.h b/impeller/compiler/code_gen_template.h index 2666a53f9ca96..b7015b0457c7d 100644 --- a/impeller/compiler/code_gen_template.h +++ b/impeller/compiler/code_gen_template.h @@ -16,7 +16,7 @@ constexpr std::string_view kReflectionHeaderTemplate = {# Note: The nogncheck decorations are only to make GN not mad at the template#} {# this file is generated from. There are no GN rule violations in the generated#} {# file itself and the no-check declarations will be stripped in generated files.#} -#include "impeller/renderer/buffer_view.h" {# // nogncheck #} +#include "impeller/core/buffer_view.h" {# // nogncheck #} #include "impeller/renderer/command.h" {# // nogncheck #} @@ -26,7 +26,7 @@ constexpr std::string_view kReflectionHeaderTemplate = #include "impeller/renderer/shader_types.h" {# // nogncheck #} -#include "impeller/renderer/texture.h" {# // nogncheck #} +#include "impeller/core/texture.h" {# // nogncheck #} namespace impeller { diff --git a/impeller/core/BUILD.gn b/impeller/core/BUILD.gn new file mode 100644 index 0000000000000..6b34c1326e5e4 --- /dev/null +++ b/impeller/core/BUILD.gn @@ -0,0 +1,41 @@ +# Copyright 2013 The Flutter Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import("//flutter/impeller/tools/impeller.gni") + +impeller_component("core") { + sources = [ + "allocator.cc", + "allocator.h", + "buffer.cc", + "buffer.h", + "buffer_view.cc", + "buffer_view.h", + "device_buffer.cc", + "device_buffer.h", + "device_buffer_descriptor.cc", + "device_buffer_descriptor.h", + "formats.cc", + "formats.h", + "host_buffer.cc", + "host_buffer.h", + "platform.cc", + "platform.h", + "range.cc", + "range.h", + "texture.cc", + "texture.h", + "texture_descriptor.cc", + "texture_descriptor.h", + "vertex_buffer.cc", + "vertex_buffer.h", + ] + + deps = [ + "../base", + "../geometry", + "../image", + "//flutter/fml", + ] +} diff --git a/impeller/renderer/allocator.cc b/impeller/core/allocator.cc similarity index 92% rename from impeller/renderer/allocator.cc rename to impeller/core/allocator.cc index 297cb48f2a4d9..2d056a38b2a76 100644 --- a/impeller/renderer/allocator.cc +++ b/impeller/core/allocator.cc @@ -2,11 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "impeller/renderer/allocator.h" +#include "impeller/core/allocator.h" #include "impeller/base/validation.h" -#include "impeller/renderer/device_buffer.h" -#include "impeller/renderer/range.h" +#include "impeller/core/device_buffer.h" +#include "impeller/core/range.h" namespace impeller { diff --git a/impeller/renderer/allocator.h b/impeller/core/allocator.h similarity index 93% rename from impeller/renderer/allocator.h rename to impeller/core/allocator.h index 6dfec0652f207..25b3dae07a22c 100644 --- a/impeller/renderer/allocator.h +++ b/impeller/core/allocator.h @@ -8,8 +8,8 @@ #include "flutter/fml/macros.h" #include "flutter/fml/mapping.h" -#include "impeller/renderer/device_buffer_descriptor.h" -#include "impeller/renderer/texture_descriptor.h" +#include "impeller/core/device_buffer_descriptor.h" +#include "impeller/core/texture_descriptor.h" namespace impeller { diff --git a/impeller/renderer/buffer.cc b/impeller/core/buffer.cc similarity index 86% rename from impeller/renderer/buffer.cc rename to impeller/core/buffer.cc index 1b0d524463dce..b645939921f91 100644 --- a/impeller/renderer/buffer.cc +++ b/impeller/core/buffer.cc @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "impeller/renderer/buffer.h" +#include "impeller/core/buffer.h" namespace impeller { diff --git a/impeller/renderer/buffer.h b/impeller/core/buffer.h similarity index 100% rename from impeller/renderer/buffer.h rename to impeller/core/buffer.h diff --git a/impeller/renderer/buffer_view.cc b/impeller/core/buffer_view.cc similarity index 83% rename from impeller/renderer/buffer_view.cc rename to impeller/core/buffer_view.cc index a52f369c8dc8a..8d0887a3b59d7 100644 --- a/impeller/renderer/buffer_view.cc +++ b/impeller/core/buffer_view.cc @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "impeller/renderer/buffer_view.h" +#include "impeller/core/buffer_view.h" namespace impeller { diff --git a/impeller/renderer/buffer_view.h b/impeller/core/buffer_view.h similarity index 85% rename from impeller/renderer/buffer_view.h rename to impeller/core/buffer_view.h index 21a04655d645a..61f4c264ed82a 100644 --- a/impeller/renderer/buffer_view.h +++ b/impeller/core/buffer_view.h @@ -5,8 +5,8 @@ #pragma once #include "flutter/fml/macros.h" -#include "impeller/renderer/buffer.h" -#include "impeller/renderer/range.h" +#include "impeller/core/buffer.h" +#include "impeller/core/range.h" namespace impeller { diff --git a/impeller/renderer/device_buffer.cc b/impeller/core/device_buffer.cc similarity index 97% rename from impeller/renderer/device_buffer.cc rename to impeller/core/device_buffer.cc index 08daf8c8b655a..741a4d7ee2386 100644 --- a/impeller/renderer/device_buffer.cc +++ b/impeller/core/device_buffer.cc @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "impeller/renderer/device_buffer.h" +#include "impeller/core/device_buffer.h" namespace impeller { diff --git a/impeller/renderer/device_buffer.h b/impeller/core/device_buffer.h similarity index 85% rename from impeller/renderer/device_buffer.h rename to impeller/core/device_buffer.h index a4c43c723190a..507a4157d53be 100644 --- a/impeller/renderer/device_buffer.h +++ b/impeller/core/device_buffer.h @@ -8,12 +8,12 @@ #include #include "flutter/fml/macros.h" -#include "impeller/renderer/allocator.h" -#include "impeller/renderer/buffer.h" -#include "impeller/renderer/buffer_view.h" -#include "impeller/renderer/device_buffer_descriptor.h" -#include "impeller/renderer/range.h" -#include "impeller/renderer/texture.h" +#include "impeller/core/allocator.h" +#include "impeller/core/buffer.h" +#include "impeller/core/buffer_view.h" +#include "impeller/core/device_buffer_descriptor.h" +#include "impeller/core/range.h" +#include "impeller/core/texture.h" namespace impeller { diff --git a/impeller/renderer/device_buffer_descriptor.cc b/impeller/core/device_buffer_descriptor.cc similarity index 79% rename from impeller/renderer/device_buffer_descriptor.cc rename to impeller/core/device_buffer_descriptor.cc index 8ad9131397919..9be04ae14fa18 100644 --- a/impeller/renderer/device_buffer_descriptor.cc +++ b/impeller/core/device_buffer_descriptor.cc @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "impeller/renderer/device_buffer_descriptor.h" +#include "impeller/core/device_buffer_descriptor.h" namespace impeller { diff --git a/impeller/renderer/device_buffer_descriptor.h b/impeller/core/device_buffer_descriptor.h similarity index 90% rename from impeller/renderer/device_buffer_descriptor.h rename to impeller/core/device_buffer_descriptor.h index 2585808b8d8ec..976b8f7b0acac 100644 --- a/impeller/renderer/device_buffer_descriptor.h +++ b/impeller/core/device_buffer_descriptor.h @@ -6,7 +6,7 @@ #include -#include "impeller/renderer/formats.h" +#include "impeller/core/formats.h" namespace impeller { diff --git a/impeller/renderer/formats.cc b/impeller/core/formats.cc similarity index 97% rename from impeller/renderer/formats.cc rename to impeller/core/formats.cc index 7736c9ff131bb..3bcfc98ac2cb0 100644 --- a/impeller/renderer/formats.cc +++ b/impeller/core/formats.cc @@ -2,13 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "impeller/renderer/formats.h" +#include "impeller/core/formats.h" #include #include "impeller/base/strings.h" #include "impeller/base/validation.h" -#include "impeller/renderer/texture.h" +#include "impeller/core/texture.h" namespace impeller { diff --git a/impeller/renderer/formats.h b/impeller/core/formats.h similarity index 100% rename from impeller/renderer/formats.h rename to impeller/core/formats.h diff --git a/impeller/renderer/host_buffer.cc b/impeller/core/host_buffer.cc similarity index 90% rename from impeller/renderer/host_buffer.cc rename to impeller/core/host_buffer.cc index 84fbebc740369..825cd86250ac5 100644 --- a/impeller/renderer/host_buffer.cc +++ b/impeller/core/host_buffer.cc @@ -2,16 +2,16 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "impeller/renderer/host_buffer.h" +#include "impeller/core/host_buffer.h" #include #include #include "flutter/fml/logging.h" -#include "impeller/renderer/allocator.h" -#include "impeller/renderer/buffer_view.h" -#include "impeller/renderer/device_buffer.h" +#include "impeller/core/allocator.h" +#include "impeller/core/buffer_view.h" +#include "impeller/core/device_buffer.h" namespace impeller { diff --git a/impeller/renderer/host_buffer.h b/impeller/core/host_buffer.h similarity index 96% rename from impeller/renderer/host_buffer.h rename to impeller/core/host_buffer.h index 7895a38b87ae6..e23c3814fd6c7 100644 --- a/impeller/renderer/host_buffer.h +++ b/impeller/core/host_buffer.h @@ -11,9 +11,9 @@ #include "flutter/fml/macros.h" #include "impeller/base/allocation.h" -#include "impeller/renderer/buffer.h" -#include "impeller/renderer/buffer_view.h" -#include "impeller/renderer/platform.h" +#include "impeller/core/buffer.h" +#include "impeller/core/buffer_view.h" +#include "impeller/core/platform.h" namespace impeller { diff --git a/impeller/renderer/platform.cc b/impeller/core/platform.cc similarity index 84% rename from impeller/renderer/platform.cc rename to impeller/core/platform.cc index 7f225f3d3dbbc..66a8115092b89 100644 --- a/impeller/renderer/platform.cc +++ b/impeller/core/platform.cc @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "impeller/renderer/platform.h" +#include "impeller/core/platform.h" namespace impeller { diff --git a/impeller/renderer/platform.h b/impeller/core/platform.h similarity index 100% rename from impeller/renderer/platform.h rename to impeller/core/platform.h diff --git a/impeller/renderer/range.cc b/impeller/core/range.cc similarity index 85% rename from impeller/renderer/range.cc rename to impeller/core/range.cc index 14d7c001a10b9..336f08bf3c183 100644 --- a/impeller/renderer/range.cc +++ b/impeller/core/range.cc @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "impeller/renderer/range.h" +#include "impeller/core/range.h" namespace impeller { diff --git a/impeller/renderer/range.h b/impeller/core/range.h similarity index 100% rename from impeller/renderer/range.h rename to impeller/core/range.h diff --git a/impeller/renderer/texture.cc b/impeller/core/texture.cc similarity index 97% rename from impeller/renderer/texture.cc rename to impeller/core/texture.cc index aaa800aef03a2..d884d355cf42b 100644 --- a/impeller/renderer/texture.cc +++ b/impeller/core/texture.cc @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "impeller/renderer/texture.h" +#include "impeller/core/texture.h" #include "impeller/base/validation.h" diff --git a/impeller/renderer/texture.h b/impeller/core/texture.h similarity index 94% rename from impeller/renderer/texture.h rename to impeller/core/texture.h index cfeea6225c594..5d3852c137f8b 100644 --- a/impeller/renderer/texture.h +++ b/impeller/core/texture.h @@ -8,9 +8,9 @@ #include "flutter/fml/macros.h" #include "flutter/fml/mapping.h" +#include "impeller/core/formats.h" +#include "impeller/core/texture_descriptor.h" #include "impeller/geometry/size.h" -#include "impeller/renderer/formats.h" -#include "impeller/renderer/texture_descriptor.h" namespace impeller { diff --git a/impeller/renderer/texture_descriptor.cc b/impeller/core/texture_descriptor.cc similarity index 81% rename from impeller/renderer/texture_descriptor.cc rename to impeller/core/texture_descriptor.cc index 190f4482ef136..05f4e75d449ef 100644 --- a/impeller/renderer/texture_descriptor.cc +++ b/impeller/core/texture_descriptor.cc @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "impeller/renderer/texture_descriptor.h" +#include "impeller/core/texture_descriptor.h" namespace impeller { diff --git a/impeller/renderer/texture_descriptor.h b/impeller/core/texture_descriptor.h similarity index 98% rename from impeller/renderer/texture_descriptor.h rename to impeller/core/texture_descriptor.h index 9ede2ef6c39b3..e55aea2e4e858 100644 --- a/impeller/renderer/texture_descriptor.h +++ b/impeller/core/texture_descriptor.h @@ -6,9 +6,9 @@ #include +#include "impeller/core/formats.h" #include "impeller/geometry/size.h" #include "impeller/image/decompressed_image.h" -#include "impeller/renderer/formats.h" namespace impeller { diff --git a/impeller/renderer/vertex_buffer.cc b/impeller/core/vertex_buffer.cc similarity index 82% rename from impeller/renderer/vertex_buffer.cc rename to impeller/core/vertex_buffer.cc index e73f64e533a82..900bcffcf8d37 100644 --- a/impeller/renderer/vertex_buffer.cc +++ b/impeller/core/vertex_buffer.cc @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "impeller/renderer/vertex_buffer.h" +#include "impeller/core/vertex_buffer.h" namespace impeller { diff --git a/impeller/renderer/vertex_buffer.h b/impeller/core/vertex_buffer.h similarity index 85% rename from impeller/renderer/vertex_buffer.h rename to impeller/core/vertex_buffer.h index 35b9743db8621..4e8850f752803 100644 --- a/impeller/renderer/vertex_buffer.h +++ b/impeller/core/vertex_buffer.h @@ -4,8 +4,8 @@ #pragma once -#include "impeller/renderer/buffer_view.h" -#include "impeller/renderer/formats.h" +#include "impeller/core/buffer_view.h" +#include "impeller/core/formats.h" namespace impeller { diff --git a/impeller/display_list/display_list_dispatcher.cc b/impeller/display_list/display_list_dispatcher.cc index 986d85fc600c4..c50d0d00ea00a 100644 --- a/impeller/display_list/display_list_dispatcher.cc +++ b/impeller/display_list/display_list_dispatcher.cc @@ -14,6 +14,7 @@ #include "flutter/fml/logging.h" #include "flutter/fml/trace_event.h" +#include "impeller/core/formats.h" #include "impeller/display_list/display_list_image_impeller.h" #include "impeller/display_list/display_list_vertices_geometry.h" #include "impeller/display_list/nine_patch_converter.h" @@ -32,7 +33,6 @@ #include "impeller/geometry/path_builder.h" #include "impeller/geometry/scalar.h" #include "impeller/geometry/sigma.h" -#include "impeller/renderer/formats.h" #include "impeller/typographer/backends/skia/text_frame_skia.h" #include "third_party/skia/include/core/SkColor.h" diff --git a/impeller/display_list/display_list_image_impeller.h b/impeller/display_list/display_list_image_impeller.h index 395ba05e82cb9..d76aaba5d3957 100644 --- a/impeller/display_list/display_list_image_impeller.h +++ b/impeller/display_list/display_list_image_impeller.h @@ -6,7 +6,7 @@ #include "flutter/display_list/image/dl_image.h" #include "flutter/fml/macros.h" -#include "impeller/renderer/texture.h" +#include "impeller/core/texture.h" namespace impeller { diff --git a/impeller/display_list/display_list_vertices_geometry.cc b/impeller/display_list/display_list_vertices_geometry.cc index 19662297cc6eb..2faa4d1f1647f 100644 --- a/impeller/display_list/display_list_vertices_geometry.cc +++ b/impeller/display_list/display_list_vertices_geometry.cc @@ -4,6 +4,7 @@ #include "impeller/display_list/display_list_vertices_geometry.h" +#include "impeller/core/device_buffer.h" #include "impeller/entity/contents/content_context.h" #include "impeller/entity/entity.h" #include "impeller/entity/position_color.vert.h" @@ -11,7 +12,6 @@ #include "impeller/geometry/matrix.h" #include "impeller/geometry/path_builder.h" #include "impeller/geometry/point.h" -#include "impeller/renderer/device_buffer.h" #include "impeller/renderer/render_pass.h" #include "third_party/skia/include/core/SkPoint.h" #include "third_party/skia/include/core/SkRect.h" diff --git a/impeller/entity/contents/atlas_contents.cc b/impeller/entity/contents/atlas_contents.cc index e1065be972d22..4231dc8f27734 100644 --- a/impeller/entity/contents/atlas_contents.cc +++ b/impeller/entity/contents/atlas_contents.cc @@ -8,6 +8,7 @@ #include "flutter/fml/macros.h" +#include "impeller/core/formats.h" #include "impeller/entity/contents/atlas_contents.h" #include "impeller/entity/contents/content_context.h" #include "impeller/entity/contents/filters/color_filter_contents.h" @@ -18,7 +19,6 @@ #include "impeller/entity/geometry.h" #include "impeller/entity/texture_fill.frag.h" #include "impeller/entity/texture_fill.vert.h" -#include "impeller/renderer/formats.h" #include "impeller/renderer/render_pass.h" #include "impeller/renderer/sampler_library.h" #include "impeller/renderer/vertex_buffer_builder.h" diff --git a/impeller/entity/contents/clip_contents.cc b/impeller/entity/contents/clip_contents.cc index 92085b74023b9..f7663312a9dac 100644 --- a/impeller/entity/contents/clip_contents.cc +++ b/impeller/entity/contents/clip_contents.cc @@ -5,10 +5,10 @@ #include #include "fml/logging.h" +#include "impeller/core/formats.h" #include "impeller/entity/contents/clip_contents.h" #include "impeller/entity/contents/content_context.h" #include "impeller/entity/entity.h" -#include "impeller/renderer/formats.h" #include "impeller/renderer/render_pass.h" #include "impeller/renderer/vertex_buffer_builder.h" diff --git a/impeller/entity/contents/content_context.cc b/impeller/entity/contents/content_context.cc index 3c2545cd97b53..784bc0b882459 100644 --- a/impeller/entity/contents/content_context.cc +++ b/impeller/entity/contents/content_context.cc @@ -8,9 +8,9 @@ #include #include "impeller/base/strings.h" +#include "impeller/core/formats.h" #include "impeller/entity/entity.h" #include "impeller/renderer/command_buffer.h" -#include "impeller/renderer/formats.h" #include "impeller/renderer/render_pass.h" #include "impeller/renderer/render_target.h" #include "impeller/tessellator/tessellator.h" diff --git a/impeller/entity/contents/content_context.h b/impeller/entity/contents/content_context.h index f9ab7ac85df0c..9fb50bc61604d 100644 --- a/impeller/entity/contents/content_context.h +++ b/impeller/entity/contents/content_context.h @@ -12,6 +12,7 @@ #include "flutter/fml/logging.h" #include "flutter/fml/macros.h" #include "impeller/base/validation.h" +#include "impeller/core/formats.h" #include "impeller/entity/blend.frag.h" #include "impeller/entity/blend.vert.h" #include "impeller/entity/border_mask_blur.frag.h" @@ -49,7 +50,6 @@ #include "impeller/entity/yuv_to_rgb_filter.frag.h" #include "impeller/entity/yuv_to_rgb_filter.vert.h" #include "impeller/renderer/capabilities.h" -#include "impeller/renderer/formats.h" #include "impeller/renderer/pipeline.h" #include "impeller/scene/scene_context.h" diff --git a/impeller/entity/contents/contents.cc b/impeller/entity/contents/contents.cc index 58377c47fe08c..c56fe8b1a6093 100644 --- a/impeller/entity/contents/contents.cc +++ b/impeller/entity/contents/contents.cc @@ -8,11 +8,11 @@ #include "fml/logging.h" #include "impeller/base/strings.h" #include "impeller/base/validation.h" +#include "impeller/core/formats.h" #include "impeller/entity/contents/anonymous_contents.h" #include "impeller/entity/contents/content_context.h" #include "impeller/entity/contents/texture_contents.h" #include "impeller/renderer/command_buffer.h" -#include "impeller/renderer/formats.h" #include "impeller/renderer/render_pass.h" namespace impeller { diff --git a/impeller/entity/contents/contents.h b/impeller/entity/contents/contents.h index c598b3cef6d96..1d444e57f7bb4 100644 --- a/impeller/entity/contents/contents.h +++ b/impeller/entity/contents/contents.h @@ -9,11 +9,11 @@ #include #include "flutter/fml/macros.h" +#include "impeller/core/texture.h" #include "impeller/geometry/color.h" #include "impeller/geometry/rect.h" #include "impeller/renderer/sampler_descriptor.h" #include "impeller/renderer/snapshot.h" -#include "impeller/renderer/texture.h" namespace impeller { diff --git a/impeller/entity/contents/filters/blend_filter_contents.cc b/impeller/entity/contents/filters/blend_filter_contents.cc index 461a7197f79a1..ec215482d605e 100644 --- a/impeller/entity/contents/filters/blend_filter_contents.cc +++ b/impeller/entity/contents/filters/blend_filter_contents.cc @@ -8,13 +8,13 @@ #include #include +#include "impeller/core/formats.h" #include "impeller/entity/contents/content_context.h" #include "impeller/entity/contents/contents.h" #include "impeller/entity/contents/filters/inputs/filter_input.h" #include "impeller/entity/contents/solid_color_contents.h" #include "impeller/entity/entity.h" #include "impeller/geometry/path_builder.h" -#include "impeller/renderer/formats.h" #include "impeller/renderer/render_pass.h" #include "impeller/renderer/sampler_library.h" #include "impeller/renderer/snapshot.h" diff --git a/impeller/entity/contents/filters/filter_contents.cc b/impeller/entity/contents/filters/filter_contents.cc index 5458b5e05dbd3..b8bfe7a9ceeae 100644 --- a/impeller/entity/contents/filters/filter_contents.cc +++ b/impeller/entity/contents/filters/filter_contents.cc @@ -13,6 +13,7 @@ #include #include "flutter/fml/logging.h" +#include "impeller/core/formats.h" #include "impeller/entity/contents/content_context.h" #include "impeller/entity/contents/filters/border_mask_blur_filter_contents.h" #include "impeller/entity/contents/filters/gaussian_blur_filter_contents.h" @@ -25,7 +26,6 @@ #include "impeller/entity/entity.h" #include "impeller/geometry/path_builder.h" #include "impeller/renderer/command_buffer.h" -#include "impeller/renderer/formats.h" #include "impeller/renderer/render_pass.h" namespace impeller { diff --git a/impeller/entity/contents/filters/filter_contents.h b/impeller/entity/contents/filters/filter_contents.h index c02c2ca30678c..c85294549479c 100644 --- a/impeller/entity/contents/filters/filter_contents.h +++ b/impeller/entity/contents/filters/filter_contents.h @@ -9,10 +9,10 @@ #include #include +#include "impeller/core/formats.h" #include "impeller/entity/contents/filters/inputs/filter_input.h" #include "impeller/entity/entity.h" #include "impeller/geometry/sigma.h" -#include "impeller/renderer/formats.h" namespace impeller { diff --git a/impeller/entity/contents/filters/gaussian_blur_filter_contents.cc b/impeller/entity/contents/filters/gaussian_blur_filter_contents.cc index 6683a7118dbcb..d09a8b3c5652a 100644 --- a/impeller/entity/contents/filters/gaussian_blur_filter_contents.cc +++ b/impeller/entity/contents/filters/gaussian_blur_filter_contents.cc @@ -10,12 +10,12 @@ #include "impeller/base/strings.h" #include "impeller/base/validation.h" +#include "impeller/core/formats.h" #include "impeller/entity/contents/content_context.h" #include "impeller/entity/contents/filters/filter_contents.h" #include "impeller/geometry/rect.h" #include "impeller/geometry/scalar.h" #include "impeller/renderer/command_buffer.h" -#include "impeller/renderer/formats.h" #include "impeller/renderer/render_pass.h" #include "impeller/renderer/render_target.h" #include "impeller/renderer/sampler_descriptor.h" diff --git a/impeller/entity/contents/filters/inputs/texture_filter_input.cc b/impeller/entity/contents/filters/inputs/texture_filter_input.cc index b64a78a34912d..2cdb8cce0f9d6 100644 --- a/impeller/entity/contents/filters/inputs/texture_filter_input.cc +++ b/impeller/entity/contents/filters/inputs/texture_filter_input.cc @@ -6,7 +6,7 @@ #include -#include "impeller/renderer/formats.h" +#include "impeller/core/formats.h" namespace impeller { diff --git a/impeller/entity/contents/filters/yuv_to_rgb_filter_contents.cc b/impeller/entity/contents/filters/yuv_to_rgb_filter_contents.cc index 0c76f6074e774..fd725ca4f34d4 100644 --- a/impeller/entity/contents/filters/yuv_to_rgb_filter_contents.cc +++ b/impeller/entity/contents/filters/yuv_to_rgb_filter_contents.cc @@ -4,9 +4,9 @@ #include "impeller/entity/contents/filters/yuv_to_rgb_filter_contents.h" +#include "impeller/core/formats.h" #include "impeller/entity/contents/content_context.h" #include "impeller/geometry/matrix.h" -#include "impeller/renderer/formats.h" #include "impeller/renderer/render_pass.h" #include "impeller/renderer/sampler_library.h" diff --git a/impeller/entity/contents/framebuffer_blend_contents.h b/impeller/entity/contents/framebuffer_blend_contents.h index ba2733e7720fe..4b3ee089a92b6 100644 --- a/impeller/entity/contents/framebuffer_blend_contents.h +++ b/impeller/entity/contents/framebuffer_blend_contents.h @@ -9,7 +9,7 @@ #include #include "flutter/fml/macros.h" -#include "flutter/impeller/renderer/texture.h" +#include "flutter/impeller/core/texture.h" #include "impeller/entity/contents/color_source_contents.h" #include "impeller/entity/entity.h" diff --git a/impeller/entity/contents/gradient_generator.cc b/impeller/entity/contents/gradient_generator.cc index ee10bb937cdc2..6672fb394118b 100644 --- a/impeller/entity/contents/gradient_generator.cc +++ b/impeller/entity/contents/gradient_generator.cc @@ -7,10 +7,10 @@ #include "impeller/entity/contents/gradient_generator.h" #include "flutter/fml/logging.h" +#include "impeller/core/texture.h" #include "impeller/entity/contents/content_context.h" #include "impeller/renderer/context.h" #include "impeller/renderer/render_pass.h" -#include "impeller/renderer/texture.h" namespace impeller { diff --git a/impeller/entity/contents/gradient_generator.h b/impeller/entity/contents/gradient_generator.h index 36f81e087d63f..11cff7883da8e 100644 --- a/impeller/entity/contents/gradient_generator.h +++ b/impeller/entity/contents/gradient_generator.h @@ -9,7 +9,7 @@ #include #include "flutter/fml/macros.h" -#include "flutter/impeller/renderer/texture.h" +#include "flutter/impeller/core/texture.h" #include "impeller/geometry/color.h" #include "impeller/geometry/gradient.h" #include "impeller/geometry/path.h" diff --git a/impeller/entity/contents/linear_gradient_contents.cc b/impeller/entity/contents/linear_gradient_contents.cc index 2fe2e48b2123d..cb76d16231dad 100644 --- a/impeller/entity/contents/linear_gradient_contents.cc +++ b/impeller/entity/contents/linear_gradient_contents.cc @@ -5,11 +5,11 @@ #include "linear_gradient_contents.h" #include "flutter/fml/logging.h" +#include "impeller/core/formats.h" #include "impeller/entity/contents/clip_contents.h" #include "impeller/entity/contents/content_context.h" #include "impeller/entity/contents/gradient_generator.h" #include "impeller/entity/entity.h" -#include "impeller/renderer/formats.h" #include "impeller/renderer/render_pass.h" #include "impeller/renderer/sampler_library.h" diff --git a/impeller/entity/contents/linear_gradient_contents.h b/impeller/entity/contents/linear_gradient_contents.h index 2a2fd1c6c6632..4a393bfadade9 100644 --- a/impeller/entity/contents/linear_gradient_contents.h +++ b/impeller/entity/contents/linear_gradient_contents.h @@ -9,7 +9,7 @@ #include #include "flutter/fml/macros.h" -#include "flutter/impeller/renderer/texture.h" +#include "flutter/impeller/core/texture.h" #include "impeller/entity/contents/color_source_contents.h" #include "impeller/entity/entity.h" #include "impeller/geometry/color.h" diff --git a/impeller/entity/contents/runtime_effect_contents.cc b/impeller/entity/contents/runtime_effect_contents.cc index 0ac8fbdd4704e..4b9f64d914e29 100644 --- a/impeller/entity/contents/runtime_effect_contents.cc +++ b/impeller/entity/contents/runtime_effect_contents.cc @@ -10,10 +10,10 @@ #include "flutter/fml/logging.h" #include "flutter/fml/make_copyable.h" #include "impeller/base/validation.h" +#include "impeller/core/formats.h" #include "impeller/entity/contents/clip_contents.h" #include "impeller/entity/contents/content_context.h" #include "impeller/entity/runtime_effect.vert.h" -#include "impeller/renderer/formats.h" #include "impeller/renderer/pipeline_library.h" #include "impeller/renderer/render_pass.h" #include "impeller/renderer/sampler_library.h" diff --git a/impeller/entity/contents/scene_contents.cc b/impeller/entity/contents/scene_contents.cc index 37dbb702c7355..bb00ff923e26e 100644 --- a/impeller/entity/contents/scene_contents.cc +++ b/impeller/entity/contents/scene_contents.cc @@ -4,11 +4,11 @@ #include "impeller/entity/contents/scene_contents.h" +#include "impeller/core/formats.h" #include "impeller/entity/contents/content_context.h" #include "impeller/entity/contents/tiled_texture_contents.h" #include "impeller/entity/entity.h" #include "impeller/geometry/path_builder.h" -#include "impeller/renderer/formats.h" #include "impeller/scene/camera.h" #include "impeller/scene/scene.h" diff --git a/impeller/entity/contents/text_contents.cc b/impeller/entity/contents/text_contents.cc index 42cc7181f1fab..e77ee50d76808 100644 --- a/impeller/entity/contents/text_contents.cc +++ b/impeller/entity/contents/text_contents.cc @@ -8,10 +8,10 @@ #include #include +#include "impeller/core/formats.h" #include "impeller/entity/contents/content_context.h" #include "impeller/entity/entity.h" #include "impeller/geometry/path_builder.h" -#include "impeller/renderer/formats.h" #include "impeller/renderer/render_pass.h" #include "impeller/renderer/sampler_descriptor.h" #include "impeller/renderer/sampler_library.h" diff --git a/impeller/entity/contents/texture_contents.cc b/impeller/entity/contents/texture_contents.cc index efa7a207e18ea..47763697e8411 100644 --- a/impeller/entity/contents/texture_contents.cc +++ b/impeller/entity/contents/texture_contents.cc @@ -8,13 +8,13 @@ #include #include +#include "impeller/core/formats.h" #include "impeller/entity/contents/content_context.h" #include "impeller/entity/entity.h" #include "impeller/entity/texture_fill.frag.h" #include "impeller/entity/texture_fill.vert.h" #include "impeller/geometry/constants.h" #include "impeller/geometry/path_builder.h" -#include "impeller/renderer/formats.h" #include "impeller/renderer/render_pass.h" #include "impeller/renderer/sampler_library.h" diff --git a/impeller/entity/contents/vertices_contents.cc b/impeller/entity/contents/vertices_contents.cc index 0e675ae40498c..e996e09b449af 100644 --- a/impeller/entity/contents/vertices_contents.cc +++ b/impeller/entity/contents/vertices_contents.cc @@ -4,6 +4,8 @@ #include "vertices_contents.h" +#include "impeller/core/formats.h" +#include "impeller/core/vertex_buffer.h" #include "impeller/entity/contents/content_context.h" #include "impeller/entity/contents/filters/color_filter_contents.h" #include "impeller/entity/contents/filters/filter_contents.h" @@ -11,10 +13,8 @@ #include "impeller/entity/position_color.vert.h" #include "impeller/entity/vertices.frag.h" #include "impeller/geometry/color.h" -#include "impeller/renderer/formats.h" #include "impeller/renderer/render_pass.h" #include "impeller/renderer/sampler_library.h" -#include "impeller/renderer/vertex_buffer.h" namespace impeller { diff --git a/impeller/entity/entity_pass.cc b/impeller/entity/entity_pass.cc index ea30b55b76452..3e2587cb1d11d 100644 --- a/impeller/entity/entity_pass.cc +++ b/impeller/entity/entity_pass.cc @@ -12,6 +12,9 @@ #include "flutter/fml/macros.h" #include "flutter/fml/trace_event.h" #include "impeller/base/validation.h" +#include "impeller/core/allocator.h" +#include "impeller/core/formats.h" +#include "impeller/core/texture.h" #include "impeller/entity/contents/clip_contents.h" #include "impeller/entity/contents/content_context.h" #include "impeller/entity/contents/filters/color_filter_contents.h" @@ -21,12 +24,9 @@ #include "impeller/entity/entity.h" #include "impeller/entity/inline_pass_context.h" #include "impeller/geometry/path_builder.h" -#include "impeller/renderer/allocator.h" #include "impeller/renderer/command.h" #include "impeller/renderer/command_buffer.h" -#include "impeller/renderer/formats.h" #include "impeller/renderer/render_pass.h" -#include "impeller/renderer/texture.h" namespace impeller { diff --git a/impeller/entity/entity_pass.h b/impeller/entity/entity_pass.h index b448a93cb2017..d0b92f0e38731 100644 --- a/impeller/entity/entity_pass.h +++ b/impeller/entity/entity_pass.h @@ -10,13 +10,13 @@ #include #include "flutter/fml/macros.h" +#include "impeller/core/texture.h" #include "impeller/entity/contents/contents.h" #include "impeller/entity/contents/filters/filter_contents.h" #include "impeller/entity/entity.h" #include "impeller/entity/entity_pass_delegate.h" #include "impeller/entity/inline_pass_context.h" #include "impeller/renderer/render_target.h" -#include "impeller/renderer/texture.h" #include "impeller/typographer/lazy_glyph_atlas.h" namespace impeller { diff --git a/impeller/entity/entity_pass_delegate.h b/impeller/entity/entity_pass_delegate.h index 119d78dda8798..a8ee633b2d5f0 100644 --- a/impeller/entity/entity_pass_delegate.h +++ b/impeller/entity/entity_pass_delegate.h @@ -7,8 +7,8 @@ #include #include "flutter/fml/macros.h" +#include "impeller/core/texture.h" #include "impeller/entity/contents/contents.h" -#include "impeller/renderer/texture.h" namespace impeller { diff --git a/impeller/entity/entity_pass_target.cc b/impeller/entity/entity_pass_target.cc index af6a042c1f024..da017e062224a 100644 --- a/impeller/entity/entity_pass_target.cc +++ b/impeller/entity/entity_pass_target.cc @@ -5,8 +5,8 @@ #include "impeller/entity/entity_pass_target.h" #include "impeller/base/validation.h" -#include "impeller/renderer/formats.h" -#include "impeller/renderer/texture.h" +#include "impeller/core/formats.h" +#include "impeller/core/texture.h" namespace impeller { diff --git a/impeller/entity/geometry.cc b/impeller/entity/geometry.cc index f5d5a819e86c5..7e8ed784cb4da 100644 --- a/impeller/entity/geometry.cc +++ b/impeller/entity/geometry.cc @@ -4,13 +4,13 @@ #include "impeller/entity/geometry.h" +#include "impeller/core/device_buffer.h" #include "impeller/entity/contents/content_context.h" #include "impeller/entity/entity.h" #include "impeller/entity/position_color.vert.h" #include "impeller/entity/texture_fill.vert.h" #include "impeller/geometry/matrix.h" #include "impeller/geometry/path_builder.h" -#include "impeller/renderer/device_buffer.h" #include "impeller/renderer/render_pass.h" #include "impeller/tessellator/tessellator.h" diff --git a/impeller/entity/geometry.h b/impeller/entity/geometry.h index 8b894abe22b25..5061dc19f7cb3 100644 --- a/impeller/entity/geometry.h +++ b/impeller/entity/geometry.h @@ -4,14 +4,14 @@ #pragma once +#include "impeller/core/allocator.h" +#include "impeller/core/host_buffer.h" +#include "impeller/core/vertex_buffer.h" #include "impeller/entity/contents/contents.h" #include "impeller/entity/entity.h" #include "impeller/entity/solid_fill.vert.h" #include "impeller/geometry/color.h" #include "impeller/geometry/path.h" -#include "impeller/renderer/allocator.h" -#include "impeller/renderer/host_buffer.h" -#include "impeller/renderer/vertex_buffer.h" namespace impeller { diff --git a/impeller/entity/inline_pass_context.cc b/impeller/entity/inline_pass_context.cc index a4a94732edb07..01aa6420d1229 100644 --- a/impeller/entity/inline_pass_context.cc +++ b/impeller/entity/inline_pass_context.cc @@ -7,10 +7,10 @@ #include #include "impeller/base/validation.h" +#include "impeller/core/formats.h" +#include "impeller/core/texture_descriptor.h" #include "impeller/entity/entity_pass_target.h" #include "impeller/renderer/command_buffer.h" -#include "impeller/renderer/formats.h" -#include "impeller/renderer/texture_descriptor.h" namespace impeller { diff --git a/impeller/playground/backend/metal/playground_impl_mtl.mm b/impeller/playground/backend/metal/playground_impl_mtl.mm index d2f54d8a865bc..9aadd0b73d05e 100644 --- a/impeller/playground/backend/metal/playground_impl_mtl.mm +++ b/impeller/playground/backend/metal/playground_impl_mtl.mm @@ -24,7 +24,7 @@ #include "impeller/renderer/backend/metal/formats_mtl.h" #include "impeller/renderer/backend/metal/surface_mtl.h" #include "impeller/renderer/backend/metal/texture_mtl.h" -#include "impeller/renderer/mtl/tessellation_shaders.h" +#include "impeller/renderer/mtl/compute_shaders.h" #include "impeller/scene/shaders/mtl/scene_shaders.h" namespace impeller { @@ -52,8 +52,7 @@ std::make_shared(impeller_scene_shaders_data, impeller_scene_shaders_length), std::make_shared( - impeller_tessellation_shaders_data, - impeller_tessellation_shaders_length) + impeller_compute_shaders_data, impeller_compute_shaders_length) }; } diff --git a/impeller/playground/compute_playground_test.h b/impeller/playground/compute_playground_test.h index af9edf71a83bc..6beacd7d92415 100644 --- a/impeller/playground/compute_playground_test.h +++ b/impeller/playground/compute_playground_test.h @@ -9,9 +9,9 @@ #include "flutter/fml/macros.h" #include "flutter/fml/time/time_delta.h" #include "flutter/testing/testing.h" +#include "impeller/core/device_buffer.h" #include "impeller/geometry/scalar.h" #include "impeller/playground/playground.h" -#include "impeller/renderer/device_buffer.h" namespace impeller { diff --git a/impeller/playground/imgui/imgui_impl_impeller.cc b/impeller/playground/imgui/imgui_impl_impeller.cc index 8657751ef7198..e8c58325dbaae 100644 --- a/impeller/playground/imgui/imgui_impl_impeller.cc +++ b/impeller/playground/imgui/imgui_impl_impeller.cc @@ -15,24 +15,24 @@ #include "impeller/playground/imgui/imgui_raster.vert.h" #include "third_party/imgui/imgui.h" +#include "impeller/core/allocator.h" +#include "impeller/core/formats.h" +#include "impeller/core/range.h" +#include "impeller/core/texture.h" +#include "impeller/core/texture_descriptor.h" +#include "impeller/core/vertex_buffer.h" #include "impeller/geometry/matrix.h" #include "impeller/geometry/point.h" #include "impeller/geometry/rect.h" #include "impeller/geometry/size.h" -#include "impeller/renderer/allocator.h" #include "impeller/renderer/command.h" #include "impeller/renderer/context.h" -#include "impeller/renderer/formats.h" #include "impeller/renderer/pipeline_builder.h" #include "impeller/renderer/pipeline_descriptor.h" #include "impeller/renderer/pipeline_library.h" -#include "impeller/renderer/range.h" #include "impeller/renderer/render_pass.h" #include "impeller/renderer/sampler.h" #include "impeller/renderer/sampler_library.h" -#include "impeller/renderer/texture.h" -#include "impeller/renderer/texture_descriptor.h" -#include "impeller/renderer/vertex_buffer.h" struct ImGui_ImplImpeller_Data { std::shared_ptr context; diff --git a/impeller/playground/playground.cc b/impeller/playground/playground.cc index cbc2caf921fc4..e2b275356f29f 100644 --- a/impeller/playground/playground.cc +++ b/impeller/playground/playground.cc @@ -18,13 +18,13 @@ #include "flutter/fml/paths.h" #include "impeller/base/validation.h" +#include "impeller/core/allocator.h" +#include "impeller/core/formats.h" #include "impeller/image/compressed_image.h" #include "impeller/playground/imgui/imgui_impl_impeller.h" #include "impeller/playground/playground.h" #include "impeller/playground/playground_impl.h" -#include "impeller/renderer/allocator.h" #include "impeller/renderer/context.h" -#include "impeller/renderer/formats.h" #include "impeller/renderer/render_pass.h" #include "impeller/renderer/renderer.h" #include "third_party/imgui/backends/imgui_impl_glfw.h" diff --git a/impeller/playground/playground.h b/impeller/playground/playground.h index f44e36c20b100..820be098c224b 100644 --- a/impeller/playground/playground.h +++ b/impeller/playground/playground.h @@ -10,11 +10,11 @@ #include "flutter/fml/closure.h" #include "flutter/fml/macros.h" #include "flutter/fml/time/time_delta.h" +#include "impeller/core/texture.h" #include "impeller/geometry/point.h" #include "impeller/image/compressed_image.h" #include "impeller/image/decompressed_image.h" #include "impeller/renderer/renderer.h" -#include "impeller/renderer/texture.h" #include "impeller/runtime_stage/runtime_stage.h" namespace impeller { diff --git a/impeller/renderer/BUILD.gn b/impeller/renderer/BUILD.gn index 83b689cad87a9..e1f9c5532b8d8 100644 --- a/impeller/renderer/BUILD.gn +++ b/impeller/renderer/BUILD.gn @@ -4,45 +4,9 @@ import("//flutter/impeller/tools/impeller.gni") -impeller_component("allocation") { - sources = [ - "allocator.cc", - "allocator.h", - "buffer.cc", - "buffer.h", - "buffer_view.cc", - "buffer_view.h", - "device_buffer.cc", - "device_buffer.h", - "device_buffer_descriptor.cc", - "device_buffer_descriptor.h", - "formats.cc", - "formats.h", - "host_buffer.cc", - "host_buffer.h", - "platform.cc", - "platform.h", - "range.cc", - "range.h", - "texture.cc", - "texture.h", - "texture_descriptor.cc", - "texture_descriptor.h", - "vertex_buffer.cc", - "vertex_buffer.h", - ] - - deps = [ - "../base", - "../geometry", - "../image", - "//flutter/fml", - ] -} - if (impeller_enable_compute) { - impeller_shaders("tessellation_shaders") { - name = "tessellation" + impeller_shaders("compute_shaders") { + name = "compute" enable_opengles = false if (impeller_enable_vulkan) { @@ -66,8 +30,8 @@ if (impeller_enable_compute) { sources = [ "compute_subgroup_unittests.cc" ] deps = [ + ":compute_shaders", ":renderer", - ":tessellation_shaders", "../entity", "../fixtures", "../playground:playground_test", @@ -139,8 +103,8 @@ impeller_component("renderer") { ] public_deps = [ - ":allocation", "../base", + "../core", "../geometry", "../image", "../runtime_stage", @@ -152,7 +116,7 @@ impeller_component("renderer") { "compute_tessellator.cc", "compute_tessellator.h", ] - public_deps += [ ":tessellation_shaders" ] + public_deps += [ ":compute_shaders" ] } deps = [ "//flutter/fml" ] diff --git a/impeller/renderer/backend/gles/allocator_gles.h b/impeller/renderer/backend/gles/allocator_gles.h index 171daf7f44a16..14f9dcf2dbe3a 100644 --- a/impeller/renderer/backend/gles/allocator_gles.h +++ b/impeller/renderer/backend/gles/allocator_gles.h @@ -5,7 +5,7 @@ #pragma once #include "flutter/fml/macros.h" -#include "impeller/renderer/allocator.h" +#include "impeller/core/allocator.h" #include "impeller/renderer/backend/gles/reactor_gles.h" namespace impeller { diff --git a/impeller/renderer/backend/gles/blit_pass_gles.cc b/impeller/renderer/backend/gles/blit_pass_gles.cc index 8685d86aa4a29..297f3171e5db5 100644 --- a/impeller/renderer/backend/gles/blit_pass_gles.cc +++ b/impeller/renderer/backend/gles/blit_pass_gles.cc @@ -10,13 +10,13 @@ #include "flutter/fml/trace_event.h" #include "impeller/base/config.h" #include "impeller/base/validation.h" +#include "impeller/core/formats.h" #include "impeller/renderer/backend/gles/blit_command_gles.h" #include "impeller/renderer/backend/gles/device_buffer_gles.h" #include "impeller/renderer/backend/gles/formats_gles.h" #include "impeller/renderer/backend/gles/pipeline_gles.h" #include "impeller/renderer/backend/gles/proc_table_gles.h" #include "impeller/renderer/backend/gles/texture_gles.h" -#include "impeller/renderer/formats.h" namespace impeller { diff --git a/impeller/renderer/backend/gles/device_buffer_gles.h b/impeller/renderer/backend/gles/device_buffer_gles.h index 70700040b0770..f4576e60c7f96 100644 --- a/impeller/renderer/backend/gles/device_buffer_gles.h +++ b/impeller/renderer/backend/gles/device_buffer_gles.h @@ -9,8 +9,8 @@ #include "flutter/fml/macros.h" #include "impeller/base/allocation.h" #include "impeller/base/backend_cast.h" +#include "impeller/core/device_buffer.h" #include "impeller/renderer/backend/gles/reactor_gles.h" -#include "impeller/renderer/device_buffer.h" namespace impeller { diff --git a/impeller/renderer/backend/gles/formats_gles.h b/impeller/renderer/backend/gles/formats_gles.h index fb5ce27e0a384..ef4cc418a76c2 100644 --- a/impeller/renderer/backend/gles/formats_gles.h +++ b/impeller/renderer/backend/gles/formats_gles.h @@ -6,8 +6,8 @@ #include "flutter/fml/logging.h" #include "flutter/fml/macros.h" +#include "impeller/core/formats.h" #include "impeller/renderer/backend/gles/gles.h" -#include "impeller/renderer/formats.h" #include "impeller/renderer/shader_types.h" namespace impeller { diff --git a/impeller/renderer/backend/gles/sampler_gles.cc b/impeller/renderer/backend/gles/sampler_gles.cc index 054c0f7782468..c96ff1700a061 100644 --- a/impeller/renderer/backend/gles/sampler_gles.cc +++ b/impeller/renderer/backend/gles/sampler_gles.cc @@ -7,10 +7,10 @@ #include #include "impeller/base/validation.h" +#include "impeller/core/formats.h" #include "impeller/renderer/backend/gles/formats_gles.h" #include "impeller/renderer/backend/gles/proc_table_gles.h" #include "impeller/renderer/backend/gles/texture_gles.h" -#include "impeller/renderer/formats.h" namespace impeller { diff --git a/impeller/renderer/backend/gles/texture_gles.cc b/impeller/renderer/backend/gles/texture_gles.cc index ff7c8c7865ee7..233bdc23ebd57 100644 --- a/impeller/renderer/backend/gles/texture_gles.cc +++ b/impeller/renderer/backend/gles/texture_gles.cc @@ -12,8 +12,8 @@ #include "impeller/base/allocation.h" #include "impeller/base/config.h" #include "impeller/base/validation.h" +#include "impeller/core/formats.h" #include "impeller/renderer/backend/gles/formats_gles.h" -#include "impeller/renderer/formats.h" namespace impeller { diff --git a/impeller/renderer/backend/gles/texture_gles.h b/impeller/renderer/backend/gles/texture_gles.h index 0ece901d2be6c..e2d2ae32c496e 100644 --- a/impeller/renderer/backend/gles/texture_gles.h +++ b/impeller/renderer/backend/gles/texture_gles.h @@ -6,9 +6,9 @@ #include "flutter/fml/macros.h" #include "impeller/base/backend_cast.h" +#include "impeller/core/texture.h" #include "impeller/renderer/backend/gles/handle_gles.h" #include "impeller/renderer/backend/gles/reactor_gles.h" -#include "impeller/renderer/texture.h" namespace impeller { diff --git a/impeller/renderer/backend/metal/allocator_mtl.h b/impeller/renderer/backend/metal/allocator_mtl.h index c1cca04c81227..345d0234e56c7 100644 --- a/impeller/renderer/backend/metal/allocator_mtl.h +++ b/impeller/renderer/backend/metal/allocator_mtl.h @@ -7,7 +7,7 @@ #include #include "flutter/fml/macros.h" -#include "impeller/renderer/allocator.h" +#include "impeller/core/allocator.h" namespace impeller { diff --git a/impeller/renderer/backend/metal/allocator_mtl.mm b/impeller/renderer/backend/metal/allocator_mtl.mm index 7dc44aff11519..dc24ebe4e12c5 100644 --- a/impeller/renderer/backend/metal/allocator_mtl.mm +++ b/impeller/renderer/backend/metal/allocator_mtl.mm @@ -10,7 +10,7 @@ #include "impeller/renderer/backend/metal/device_buffer_mtl.h" #include "impeller/renderer/backend/metal/formats_mtl.h" #include "impeller/renderer/backend/metal/texture_mtl.h" -#include "impeller/renderer/buffer.h" +#include "impeller/core/buffer.h" namespace impeller { diff --git a/impeller/renderer/backend/metal/blit_pass_mtl.mm b/impeller/renderer/backend/metal/blit_pass_mtl.mm index c18261948df91..fc88017c9656f 100644 --- a/impeller/renderer/backend/metal/blit_pass_mtl.mm +++ b/impeller/renderer/backend/metal/blit_pass_mtl.mm @@ -18,8 +18,8 @@ #include "impeller/renderer/backend/metal/sampler_mtl.h" #include "impeller/renderer/backend/metal/texture_mtl.h" #include "impeller/renderer/blit_command.h" -#include "impeller/renderer/formats.h" -#include "impeller/renderer/host_buffer.h" +#include "impeller/core/formats.h" +#include "impeller/core/host_buffer.h" #include "impeller/renderer/shader_types.h" namespace impeller { diff --git a/impeller/renderer/backend/metal/compute_pass_mtl.mm b/impeller/renderer/backend/metal/compute_pass_mtl.mm index e027cc91df8d1..f8152e8c9ac38 100644 --- a/impeller/renderer/backend/metal/compute_pass_mtl.mm +++ b/impeller/renderer/backend/metal/compute_pass_mtl.mm @@ -19,8 +19,8 @@ #include "impeller/renderer/backend/metal/sampler_mtl.h" #include "impeller/renderer/backend/metal/texture_mtl.h" #include "impeller/renderer/compute_command.h" -#include "impeller/renderer/formats.h" -#include "impeller/renderer/host_buffer.h" +#include "impeller/core/formats.h" +#include "impeller/core/host_buffer.h" #include "impeller/renderer/shader_types.h" namespace impeller { diff --git a/impeller/renderer/backend/metal/device_buffer_mtl.h b/impeller/renderer/backend/metal/device_buffer_mtl.h index ef1d5deefa1fb..061ad6004cc5a 100644 --- a/impeller/renderer/backend/metal/device_buffer_mtl.h +++ b/impeller/renderer/backend/metal/device_buffer_mtl.h @@ -8,7 +8,7 @@ #include "flutter/fml/macros.h" #include "impeller/base/backend_cast.h" -#include "impeller/renderer/device_buffer.h" +#include "impeller/core/device_buffer.h" namespace impeller { diff --git a/impeller/renderer/backend/metal/formats_mtl.h b/impeller/renderer/backend/metal/formats_mtl.h index 533011717c5ab..566f7eeb8779f 100644 --- a/impeller/renderer/backend/metal/formats_mtl.h +++ b/impeller/renderer/backend/metal/formats_mtl.h @@ -9,9 +9,9 @@ #include #include "flutter/fml/macros.h" +#include "impeller/core/formats.h" +#include "impeller/core/texture_descriptor.h" #include "impeller/geometry/color.h" -#include "impeller/renderer/formats.h" -#include "impeller/renderer/texture_descriptor.h" namespace impeller { diff --git a/impeller/renderer/backend/metal/render_pass_mtl.mm b/impeller/renderer/backend/metal/render_pass_mtl.mm index cce54c841d584..16898b11e34a3 100644 --- a/impeller/renderer/backend/metal/render_pass_mtl.mm +++ b/impeller/renderer/backend/metal/render_pass_mtl.mm @@ -13,8 +13,8 @@ #include "impeller/renderer/backend/metal/pipeline_mtl.h" #include "impeller/renderer/backend/metal/sampler_mtl.h" #include "impeller/renderer/backend/metal/texture_mtl.h" -#include "impeller/renderer/formats.h" -#include "impeller/renderer/host_buffer.h" +#include "impeller/core/formats.h" +#include "impeller/core/host_buffer.h" #include "impeller/renderer/shader_types.h" namespace impeller { diff --git a/impeller/renderer/backend/metal/texture_mtl.h b/impeller/renderer/backend/metal/texture_mtl.h index 0ff8d849ca04e..9d9378d1b6ce7 100644 --- a/impeller/renderer/backend/metal/texture_mtl.h +++ b/impeller/renderer/backend/metal/texture_mtl.h @@ -8,7 +8,7 @@ #include "flutter/fml/macros.h" #include "impeller/base/backend_cast.h" -#include "impeller/renderer/texture.h" +#include "impeller/core/texture.h" namespace impeller { diff --git a/impeller/renderer/backend/metal/texture_mtl.mm b/impeller/renderer/backend/metal/texture_mtl.mm index b719f96e23511..5c63624c014c6 100644 --- a/impeller/renderer/backend/metal/texture_mtl.mm +++ b/impeller/renderer/backend/metal/texture_mtl.mm @@ -5,7 +5,7 @@ #include "impeller/renderer/backend/metal/texture_mtl.h" #include "impeller/base/validation.h" -#include "impeller/renderer/texture_descriptor.h" +#include "impeller/core/texture_descriptor.h" namespace impeller { diff --git a/impeller/renderer/backend/vulkan/allocator_vk.cc b/impeller/renderer/backend/vulkan/allocator_vk.cc index 087e6b5d7fa9f..31f0f63e75d57 100644 --- a/impeller/renderer/backend/vulkan/allocator_vk.cc +++ b/impeller/renderer/backend/vulkan/allocator_vk.cc @@ -7,10 +7,10 @@ #include #include "flutter/fml/memory/ref_ptr.h" +#include "impeller/core/formats.h" #include "impeller/renderer/backend/vulkan/device_buffer_vk.h" #include "impeller/renderer/backend/vulkan/formats_vk.h" #include "impeller/renderer/backend/vulkan/texture_vk.h" -#include "impeller/renderer/formats.h" namespace impeller { diff --git a/impeller/renderer/backend/vulkan/allocator_vk.h b/impeller/renderer/backend/vulkan/allocator_vk.h index 0b4f3541bce98..7b61a3f475a12 100644 --- a/impeller/renderer/backend/vulkan/allocator_vk.h +++ b/impeller/renderer/backend/vulkan/allocator_vk.h @@ -7,7 +7,7 @@ #include "flutter/fml/macros.h" #include "flutter/fml/memory/ref_ptr.h" #include "flutter/vulkan/procs/vulkan_proc_table.h" -#include "impeller/renderer/allocator.h" +#include "impeller/core/allocator.h" #include "impeller/renderer/backend/vulkan/context_vk.h" #include "impeller/renderer/backend/vulkan/device_buffer_vk.h" #include "impeller/renderer/backend/vulkan/vk.h" diff --git a/impeller/renderer/backend/vulkan/context_vk.h b/impeller/renderer/backend/vulkan/context_vk.h index 19207433d0764..ceebbca0dc549 100644 --- a/impeller/renderer/backend/vulkan/context_vk.h +++ b/impeller/renderer/backend/vulkan/context_vk.h @@ -11,6 +11,7 @@ #include "flutter/fml/mapping.h" #include "flutter/fml/unique_fd.h" #include "impeller/base/backend_cast.h" +#include "impeller/core/formats.h" #include "impeller/renderer/backend/vulkan/pipeline_library_vk.h" #include "impeller/renderer/backend/vulkan/sampler_library_vk.h" #include "impeller/renderer/backend/vulkan/shader_library_vk.h" @@ -18,7 +19,6 @@ #include "impeller/renderer/backend/vulkan/vk.h" #include "impeller/renderer/capabilities.h" #include "impeller/renderer/context.h" -#include "impeller/renderer/formats.h" #include "impeller/renderer/surface.h" namespace impeller { diff --git a/impeller/renderer/backend/vulkan/device_buffer_vk.h b/impeller/renderer/backend/vulkan/device_buffer_vk.h index 2f579c13a1e9c..5f92ca291114d 100644 --- a/impeller/renderer/backend/vulkan/device_buffer_vk.h +++ b/impeller/renderer/backend/vulkan/device_buffer_vk.h @@ -8,8 +8,8 @@ #include "flutter/fml/macros.h" #include "impeller/base/backend_cast.h" +#include "impeller/core/device_buffer.h" #include "impeller/renderer/backend/vulkan/context_vk.h" -#include "impeller/renderer/device_buffer.h" namespace impeller { diff --git a/impeller/renderer/backend/vulkan/formats_vk.h b/impeller/renderer/backend/vulkan/formats_vk.h index ce9db2558e5c2..f11887a48c3a9 100644 --- a/impeller/renderer/backend/vulkan/formats_vk.h +++ b/impeller/renderer/backend/vulkan/formats_vk.h @@ -5,8 +5,8 @@ #pragma once #include "flutter/fml/macros.h" +#include "impeller/core/formats.h" #include "impeller/renderer/backend/vulkan/vk.h" -#include "impeller/renderer/formats.h" #include "impeller/renderer/shader_types.h" #include "vulkan/vulkan_enums.hpp" diff --git a/impeller/renderer/backend/vulkan/render_pass_vk.cc b/impeller/renderer/backend/vulkan/render_pass_vk.cc index 4c1338555f9f7..8553aebd0c3f4 100644 --- a/impeller/renderer/backend/vulkan/render_pass_vk.cc +++ b/impeller/renderer/backend/vulkan/render_pass_vk.cc @@ -12,6 +12,7 @@ #include "flutter/fml/logging.h" #include "flutter/fml/trace_event.h" #include "impeller/base/validation.h" +#include "impeller/core/formats.h" #include "impeller/renderer/backend/vulkan/command_encoder_vk.h" #include "impeller/renderer/backend/vulkan/context_vk.h" #include "impeller/renderer/backend/vulkan/device_buffer_vk.h" @@ -20,7 +21,6 @@ #include "impeller/renderer/backend/vulkan/sampler_vk.h" #include "impeller/renderer/backend/vulkan/shared_object_vk.h" #include "impeller/renderer/backend/vulkan/texture_vk.h" -#include "impeller/renderer/formats.h" #include "impeller/renderer/sampler.h" #include "impeller/renderer/shader_types.h" #include "vulkan/vulkan_enums.hpp" diff --git a/impeller/renderer/backend/vulkan/texture_source_vk.h b/impeller/renderer/backend/vulkan/texture_source_vk.h index 2ec7d5876563e..3d99c2c14d781 100644 --- a/impeller/renderer/backend/vulkan/texture_source_vk.h +++ b/impeller/renderer/backend/vulkan/texture_source_vk.h @@ -6,9 +6,9 @@ #include "flutter/fml/macros.h" #include "impeller/base/thread.h" +#include "impeller/core/texture_descriptor.h" #include "impeller/renderer/backend/vulkan/formats_vk.h" #include "impeller/renderer/backend/vulkan/vk.h" -#include "impeller/renderer/texture_descriptor.h" namespace impeller { diff --git a/impeller/renderer/backend/vulkan/texture_vk.h b/impeller/renderer/backend/vulkan/texture_vk.h index 5128c2fd66ad5..2b7e2e451fdf7 100644 --- a/impeller/renderer/backend/vulkan/texture_vk.h +++ b/impeller/renderer/backend/vulkan/texture_vk.h @@ -8,12 +8,12 @@ #include "flutter/fml/macros.h" #include "impeller/base/backend_cast.h" +#include "impeller/core/texture.h" #include "impeller/renderer/backend/vulkan/context_vk.h" #include "impeller/renderer/backend/vulkan/device_buffer_vk.h" #include "impeller/renderer/backend/vulkan/formats_vk.h" #include "impeller/renderer/backend/vulkan/texture_source_vk.h" #include "impeller/renderer/backend/vulkan/vk.h" -#include "impeller/renderer/texture.h" namespace impeller { diff --git a/impeller/renderer/blit_command.h b/impeller/renderer/blit_command.h index 236b3e2c4b15d..90124b58d86c9 100644 --- a/impeller/renderer/blit_command.h +++ b/impeller/renderer/blit_command.h @@ -4,9 +4,9 @@ #pragma once +#include "impeller/core/device_buffer.h" +#include "impeller/core/texture.h" #include "impeller/geometry/rect.h" -#include "impeller/renderer/device_buffer.h" -#include "impeller/renderer/texture.h" namespace impeller { diff --git a/impeller/renderer/blit_pass.cc b/impeller/renderer/blit_pass.cc index da826a0af4644..36ef50f40eecc 100644 --- a/impeller/renderer/blit_pass.cc +++ b/impeller/renderer/blit_pass.cc @@ -8,8 +8,8 @@ #include "impeller/base/strings.h" #include "impeller/base/validation.h" +#include "impeller/core/host_buffer.h" #include "impeller/renderer/blit_command.h" -#include "impeller/renderer/host_buffer.h" namespace impeller { diff --git a/impeller/renderer/blit_pass.h b/impeller/renderer/blit_pass.h index 767f8d2a7f099..ea406c3e677fd 100644 --- a/impeller/renderer/blit_pass.h +++ b/impeller/renderer/blit_pass.h @@ -7,9 +7,9 @@ #include #include +#include "impeller/core/device_buffer.h" +#include "impeller/core/texture.h" #include "impeller/renderer/blit_command.h" -#include "impeller/renderer/device_buffer.h" -#include "impeller/renderer/texture.h" namespace impeller { diff --git a/impeller/renderer/capabilities.h b/impeller/renderer/capabilities.h index 11a2c99e8a90a..cac369087a308 100644 --- a/impeller/renderer/capabilities.h +++ b/impeller/renderer/capabilities.h @@ -7,7 +7,7 @@ #include #include "flutter/fml/macros.h" -#include "impeller/renderer/formats.h" +#include "impeller/core/formats.h" namespace impeller { diff --git a/impeller/renderer/command.cc b/impeller/renderer/command.cc index e5380a83570ca..71c57402cc806 100644 --- a/impeller/renderer/command.cc +++ b/impeller/renderer/command.cc @@ -7,7 +7,7 @@ #include #include "impeller/base/validation.h" -#include "impeller/renderer/formats.h" +#include "impeller/core/formats.h" #include "impeller/renderer/vertex_descriptor.h" namespace impeller { diff --git a/impeller/renderer/command.h b/impeller/renderer/command.h index 526fe3aaafe30..aa219dfd5fc25 100644 --- a/impeller/renderer/command.h +++ b/impeller/renderer/command.h @@ -11,14 +11,14 @@ #include "flutter/fml/logging.h" #include "flutter/fml/macros.h" +#include "impeller/core/buffer_view.h" +#include "impeller/core/formats.h" +#include "impeller/core/texture.h" +#include "impeller/core/vertex_buffer.h" #include "impeller/geometry/rect.h" -#include "impeller/renderer/buffer_view.h" -#include "impeller/renderer/formats.h" #include "impeller/renderer/pipeline.h" #include "impeller/renderer/sampler.h" #include "impeller/renderer/shader_types.h" -#include "impeller/renderer/texture.h" -#include "impeller/renderer/vertex_buffer.h" #include "impeller/renderer/vertex_buffer_builder.h" #include "impeller/tessellator/tessellator.h" diff --git a/impeller/renderer/compute_command.cc b/impeller/renderer/compute_command.cc index e2e2812f36266..41ce7586ff221 100644 --- a/impeller/renderer/compute_command.cc +++ b/impeller/renderer/compute_command.cc @@ -7,7 +7,7 @@ #include #include "impeller/base/validation.h" -#include "impeller/renderer/formats.h" +#include "impeller/core/formats.h" #include "impeller/renderer/vertex_descriptor.h" namespace impeller { diff --git a/impeller/renderer/compute_command.h b/impeller/renderer/compute_command.h index 54b467a56c839..15ee42f98a5d8 100644 --- a/impeller/renderer/compute_command.h +++ b/impeller/renderer/compute_command.h @@ -11,16 +11,16 @@ #include "flutter/fml/logging.h" #include "flutter/fml/macros.h" +#include "impeller/core/buffer_view.h" +#include "impeller/core/formats.h" +#include "impeller/core/texture.h" +#include "impeller/core/vertex_buffer.h" #include "impeller/geometry/rect.h" -#include "impeller/renderer/buffer_view.h" #include "impeller/renderer/command.h" #include "impeller/renderer/compute_pipeline_descriptor.h" -#include "impeller/renderer/formats.h" #include "impeller/renderer/pipeline.h" #include "impeller/renderer/sampler.h" #include "impeller/renderer/shader_types.h" -#include "impeller/renderer/texture.h" -#include "impeller/renderer/vertex_buffer.h" #include "impeller/renderer/vertex_buffer_builder.h" #include "impeller/tessellator/tessellator.h" diff --git a/impeller/renderer/compute_pass.cc b/impeller/renderer/compute_pass.cc index 7ca45618a95bd..579405831352f 100644 --- a/impeller/renderer/compute_pass.cc +++ b/impeller/renderer/compute_pass.cc @@ -7,7 +7,7 @@ #include "impeller/base/strings.h" #include "impeller/base/validation.h" -#include "impeller/renderer/host_buffer.h" +#include "impeller/core/host_buffer.h" namespace impeller { diff --git a/impeller/renderer/compute_pass.h b/impeller/renderer/compute_pass.h index 996e55bb7ecb6..8d4af547d3e67 100644 --- a/impeller/renderer/compute_pass.h +++ b/impeller/renderer/compute_pass.h @@ -7,9 +7,9 @@ #include #include +#include "impeller/core/device_buffer.h" +#include "impeller/core/texture.h" #include "impeller/renderer/compute_command.h" -#include "impeller/renderer/device_buffer.h" -#include "impeller/renderer/texture.h" namespace impeller { diff --git a/impeller/renderer/compute_pipeline_builder.h b/impeller/renderer/compute_pipeline_builder.h index 044498d618270..aec09e607180f 100644 --- a/impeller/renderer/compute_pipeline_builder.h +++ b/impeller/renderer/compute_pipeline_builder.h @@ -8,9 +8,9 @@ #include "flutter/fml/macros.h" #include "impeller/base/strings.h" #include "impeller/base/validation.h" +#include "impeller/core/formats.h" #include "impeller/renderer/compute_pipeline_descriptor.h" #include "impeller/renderer/context.h" -#include "impeller/renderer/formats.h" #include "impeller/renderer/shader_library.h" #include "impeller/renderer/vertex_descriptor.h" diff --git a/impeller/renderer/compute_pipeline_descriptor.cc b/impeller/renderer/compute_pipeline_descriptor.cc index 37a69eaec955e..4563784591510 100644 --- a/impeller/renderer/compute_pipeline_descriptor.cc +++ b/impeller/renderer/compute_pipeline_descriptor.cc @@ -4,7 +4,7 @@ #include "impeller/renderer/compute_pipeline_descriptor.h" -#include "impeller/renderer/formats.h" +#include "impeller/core/formats.h" #include "impeller/renderer/shader_function.h" #include "impeller/renderer/shader_library.h" #include "impeller/renderer/vertex_descriptor.h" diff --git a/impeller/renderer/compute_pipeline_descriptor.h b/impeller/renderer/compute_pipeline_descriptor.h index 582844db7dd3c..5bd513f43c863 100644 --- a/impeller/renderer/compute_pipeline_descriptor.h +++ b/impeller/renderer/compute_pipeline_descriptor.h @@ -16,7 +16,7 @@ #include "flutter/fml/hash_combine.h" #include "flutter/fml/macros.h" #include "impeller/base/comparable.h" -#include "impeller/renderer/formats.h" +#include "impeller/core/formats.h" #include "impeller/renderer/shader_types.h" #include "impeller/tessellator/tessellator.h" diff --git a/impeller/renderer/compute_subgroup_unittests.cc b/impeller/renderer/compute_subgroup_unittests.cc index 10ade2a19fe5d..eb9c3d6069374 100644 --- a/impeller/renderer/compute_subgroup_unittests.cc +++ b/impeller/renderer/compute_subgroup_unittests.cc @@ -10,6 +10,7 @@ #include "flutter/testing/testing.h" #include "gmock/gmock.h" #include "impeller/base/strings.h" +#include "impeller/core/formats.h" #include "impeller/entity/contents/content_context.h" #include "impeller/fixtures/cubic_to_quads.comp.h" #include "impeller/fixtures/golden_paths.h" @@ -25,7 +26,6 @@ #include "impeller/renderer/compute_command.h" #include "impeller/renderer/compute_pipeline_builder.h" #include "impeller/renderer/compute_tessellator.h" -#include "impeller/renderer/formats.h" #include "impeller/renderer/path_polyline.comp.h" #include "impeller/renderer/pipeline_library.h" #include "impeller/renderer/render_pass.h" diff --git a/impeller/renderer/compute_tessellator.h b/impeller/renderer/compute_tessellator.h index 4a8b100b22147..124ca426650f9 100644 --- a/impeller/renderer/compute_tessellator.h +++ b/impeller/renderer/compute_tessellator.h @@ -5,8 +5,8 @@ #pragma once #include "flutter/fml/macros.h" +#include "impeller/core/buffer_view.h" #include "impeller/geometry/path.h" -#include "impeller/renderer/buffer_view.h" #include "impeller/renderer/command_buffer.h" #include "impeller/renderer/context.h" diff --git a/impeller/renderer/compute_unittests.cc b/impeller/renderer/compute_unittests.cc index 243fbf05d410f..3411103539c04 100644 --- a/impeller/renderer/compute_unittests.cc +++ b/impeller/renderer/compute_unittests.cc @@ -7,6 +7,7 @@ #include "flutter/testing/testing.h" #include "gmock/gmock.h" #include "impeller/base/strings.h" +#include "impeller/core/formats.h" #include "impeller/fixtures/sample.comp.h" #include "impeller/fixtures/stage1.comp.h" #include "impeller/fixtures/stage2.comp.h" @@ -16,7 +17,6 @@ #include "impeller/renderer/command_buffer.h" #include "impeller/renderer/compute_command.h" #include "impeller/renderer/compute_pipeline_builder.h" -#include "impeller/renderer/formats.h" #include "impeller/renderer/pipeline_library.h" namespace impeller { diff --git a/impeller/renderer/context.h b/impeller/renderer/context.h index c68996f376145..d0b425c658bb3 100644 --- a/impeller/renderer/context.h +++ b/impeller/renderer/context.h @@ -8,8 +8,8 @@ #include #include "flutter/fml/macros.h" +#include "impeller/core/formats.h" #include "impeller/renderer/capabilities.h" -#include "impeller/renderer/formats.h" namespace impeller { diff --git a/impeller/renderer/device_buffer_unittests.cc b/impeller/renderer/device_buffer_unittests.cc index 49c6e626ed8b0..95d53812cda53 100644 --- a/impeller/renderer/device_buffer_unittests.cc +++ b/impeller/renderer/device_buffer_unittests.cc @@ -3,8 +3,8 @@ // found in the LICENSE file. #include "flutter/testing/testing.h" +#include "impeller/core/device_buffer.h" #include "impeller/playground/playground.h" -#include "impeller/renderer/device_buffer.h" namespace impeller { namespace testing { diff --git a/impeller/renderer/host_buffer_unittests.cc b/impeller/renderer/host_buffer_unittests.cc index 8de2339ff3738..985c9c1af5e0d 100644 --- a/impeller/renderer/host_buffer_unittests.cc +++ b/impeller/renderer/host_buffer_unittests.cc @@ -3,7 +3,7 @@ // found in the LICENSE file. #include "flutter/testing/testing.h" -#include "impeller/renderer/host_buffer.h" +#include "impeller/core/host_buffer.h" namespace impeller { namespace testing { diff --git a/impeller/renderer/pipeline_builder.h b/impeller/renderer/pipeline_builder.h index c1c3fbb94781c..ad003493061a0 100644 --- a/impeller/renderer/pipeline_builder.h +++ b/impeller/renderer/pipeline_builder.h @@ -8,8 +8,8 @@ #include "flutter/fml/macros.h" #include "impeller/base/strings.h" #include "impeller/base/validation.h" +#include "impeller/core/formats.h" #include "impeller/renderer/context.h" -#include "impeller/renderer/formats.h" #include "impeller/renderer/pipeline_descriptor.h" #include "impeller/renderer/shader_library.h" #include "impeller/renderer/vertex_descriptor.h" diff --git a/impeller/renderer/pipeline_descriptor.cc b/impeller/renderer/pipeline_descriptor.cc index 06367a714804d..eef517b30c847 100644 --- a/impeller/renderer/pipeline_descriptor.cc +++ b/impeller/renderer/pipeline_descriptor.cc @@ -4,7 +4,7 @@ #include "impeller/renderer/pipeline_descriptor.h" -#include "impeller/renderer/formats.h" +#include "impeller/core/formats.h" #include "impeller/renderer/shader_function.h" #include "impeller/renderer/shader_library.h" #include "impeller/renderer/vertex_descriptor.h" diff --git a/impeller/renderer/pipeline_descriptor.h b/impeller/renderer/pipeline_descriptor.h index f6d4930d15df9..552fcfedf23c0 100644 --- a/impeller/renderer/pipeline_descriptor.h +++ b/impeller/renderer/pipeline_descriptor.h @@ -16,7 +16,7 @@ #include "flutter/fml/hash_combine.h" #include "flutter/fml/macros.h" #include "impeller/base/comparable.h" -#include "impeller/renderer/formats.h" +#include "impeller/core/formats.h" #include "impeller/renderer/shader_types.h" #include "impeller/tessellator/tessellator.h" diff --git a/impeller/renderer/render_target.cc b/impeller/renderer/render_target.cc index a9db9b2e7c2c5..426bc0ad8a12a 100644 --- a/impeller/renderer/render_target.cc +++ b/impeller/renderer/render_target.cc @@ -6,9 +6,9 @@ #include "impeller/base/strings.h" #include "impeller/base/validation.h" -#include "impeller/renderer/allocator.h" +#include "impeller/core/allocator.h" +#include "impeller/core/texture.h" #include "impeller/renderer/context.h" -#include "impeller/renderer/texture.h" namespace impeller { diff --git a/impeller/renderer/render_target.h b/impeller/renderer/render_target.h index 3be7b430577db..a7310ed7ce80d 100644 --- a/impeller/renderer/render_target.h +++ b/impeller/renderer/render_target.h @@ -9,9 +9,9 @@ #include #include "flutter/fml/macros.h" +#include "impeller/core/allocator.h" +#include "impeller/core/formats.h" #include "impeller/geometry/size.h" -#include "impeller/renderer/allocator.h" -#include "impeller/renderer/formats.h" namespace impeller { diff --git a/impeller/renderer/renderer_unittests.cc b/impeller/renderer/renderer_unittests.cc index 8eabd143a21db..5e9d60f792766 100644 --- a/impeller/renderer/renderer_unittests.cc +++ b/impeller/renderer/renderer_unittests.cc @@ -4,6 +4,8 @@ #include "flutter/testing/testing.h" #include "impeller/base/strings.h" +#include "impeller/core/device_buffer_descriptor.h" +#include "impeller/core/formats.h" #include "impeller/fixtures/array.frag.h" #include "impeller/fixtures/array.vert.h" #include "impeller/fixtures/box_fade.frag.h" @@ -26,8 +28,6 @@ #include "impeller/playground/playground_test.h" #include "impeller/renderer/command.h" #include "impeller/renderer/command_buffer.h" -#include "impeller/renderer/device_buffer_descriptor.h" -#include "impeller/renderer/formats.h" #include "impeller/renderer/pipeline_builder.h" #include "impeller/renderer/pipeline_library.h" #include "impeller/renderer/renderer.h" diff --git a/impeller/renderer/sampler_descriptor.h b/impeller/renderer/sampler_descriptor.h index 60678dac122bc..b9292cff94d90 100644 --- a/impeller/renderer/sampler_descriptor.h +++ b/impeller/renderer/sampler_descriptor.h @@ -8,7 +8,7 @@ #include "flutter/fml/macros.h" #include "impeller/base/comparable.h" -#include "impeller/renderer/formats.h" +#include "impeller/core/formats.h" namespace impeller { diff --git a/impeller/renderer/snapshot.h b/impeller/renderer/snapshot.h index 981b668b66c65..6d2d2fb74f085 100644 --- a/impeller/renderer/snapshot.h +++ b/impeller/renderer/snapshot.h @@ -9,11 +9,11 @@ #include #include "flutter/fml/macros.h" +#include "impeller/core/formats.h" +#include "impeller/core/texture.h" #include "impeller/geometry/matrix.h" #include "impeller/geometry/rect.h" -#include "impeller/renderer/formats.h" #include "impeller/renderer/sampler_descriptor.h" -#include "impeller/renderer/texture.h" namespace impeller { diff --git a/impeller/renderer/testing/mocks.h b/impeller/renderer/testing/mocks.h index 260f9c8898168..6a0e093443f2b 100644 --- a/impeller/renderer/testing/mocks.h +++ b/impeller/renderer/testing/mocks.h @@ -5,11 +5,11 @@ #pragma once #include "gmock/gmock.h" -#include "impeller/renderer/allocator.h" +#include "impeller/core/allocator.h" +#include "impeller/core/texture.h" #include "impeller/renderer/command_buffer.h" #include "impeller/renderer/context.h" #include "impeller/renderer/render_target.h" -#include "impeller/renderer/texture.h" namespace impeller { namespace testing { diff --git a/impeller/renderer/vertex_buffer_builder.h b/impeller/renderer/vertex_buffer_builder.h index 4d0e29df9e0f9..96c114202f4cf 100644 --- a/impeller/renderer/vertex_buffer_builder.h +++ b/impeller/renderer/vertex_buffer_builder.h @@ -10,12 +10,12 @@ #include "flutter/fml/macros.h" #include "impeller/base/strings.h" +#include "impeller/core/allocator.h" +#include "impeller/core/device_buffer.h" +#include "impeller/core/formats.h" +#include "impeller/core/host_buffer.h" +#include "impeller/core/vertex_buffer.h" #include "impeller/geometry/vector.h" -#include "impeller/renderer/allocator.h" -#include "impeller/renderer/device_buffer.h" -#include "impeller/renderer/formats.h" -#include "impeller/renderer/host_buffer.h" -#include "impeller/renderer/vertex_buffer.h" namespace impeller { diff --git a/impeller/scene/geometry.cc b/impeller/scene/geometry.cc index ed6eda6ab64e8..016211499aa95 100644 --- a/impeller/scene/geometry.cc +++ b/impeller/scene/geometry.cc @@ -8,13 +8,13 @@ #include #include +#include "impeller/core/device_buffer_descriptor.h" +#include "impeller/core/formats.h" +#include "impeller/core/vertex_buffer.h" #include "impeller/geometry/point.h" #include "impeller/geometry/vector.h" -#include "impeller/renderer/device_buffer_descriptor.h" -#include "impeller/renderer/formats.h" #include "impeller/renderer/sampler_descriptor.h" #include "impeller/renderer/sampler_library.h" -#include "impeller/renderer/vertex_buffer.h" #include "impeller/renderer/vertex_buffer_builder.h" #include "impeller/scene/importer/scene_flatbuffers.h" #include "impeller/scene/shaders/skinned.vert.h" diff --git a/impeller/scene/geometry.h b/impeller/scene/geometry.h index 269fe46376ad4..285629a7a4cb3 100644 --- a/impeller/scene/geometry.h +++ b/impeller/scene/geometry.h @@ -7,13 +7,13 @@ #include #include "flutter/fml/macros.h" +#include "impeller/core/allocator.h" +#include "impeller/core/device_buffer.h" +#include "impeller/core/host_buffer.h" +#include "impeller/core/vertex_buffer.h" #include "impeller/geometry/matrix.h" #include "impeller/geometry/vector.h" -#include "impeller/renderer/allocator.h" #include "impeller/renderer/command.h" -#include "impeller/renderer/device_buffer.h" -#include "impeller/renderer/host_buffer.h" -#include "impeller/renderer/vertex_buffer.h" #include "impeller/scene/importer/scene_flatbuffers.h" #include "impeller/scene/pipeline_key.h" #include "impeller/scene/scene_context.h" diff --git a/impeller/scene/material.cc b/impeller/scene/material.cc index 87eb92e198013..1e3493dadd3e5 100644 --- a/impeller/scene/material.cc +++ b/impeller/scene/material.cc @@ -4,7 +4,7 @@ #include "impeller/scene/material.h" #include "impeller/base/validation.h" -#include "impeller/renderer/formats.h" +#include "impeller/core/formats.h" #include "impeller/renderer/sampler_descriptor.h" #include "impeller/renderer/sampler_library.h" #include "impeller/scene/importer/conversions.h" diff --git a/impeller/scene/material.h b/impeller/scene/material.h index a9221a05f480c..e3132cfb1c7c1 100644 --- a/impeller/scene/material.h +++ b/impeller/scene/material.h @@ -6,10 +6,10 @@ #include +#include "impeller/core/formats.h" +#include "impeller/core/texture.h" #include "impeller/geometry/scalar.h" -#include "impeller/renderer/formats.h" #include "impeller/renderer/render_pass.h" -#include "impeller/renderer/texture.h" #include "impeller/scene/importer/scene_flatbuffers.h" #include "impeller/scene/pipeline_key.h" diff --git a/impeller/scene/node.h b/impeller/scene/node.h index 2f144397500fd..2e0cce559cc44 100644 --- a/impeller/scene/node.h +++ b/impeller/scene/node.h @@ -12,9 +12,9 @@ #include "flutter/fml/macros.h" #include "impeller/base/thread.h" #include "impeller/base/thread_safety.h" +#include "impeller/core/texture.h" #include "impeller/geometry/matrix.h" #include "impeller/renderer/render_target.h" -#include "impeller/renderer/texture.h" #include "impeller/scene/animation/animation.h" #include "impeller/scene/animation/animation_clip.h" #include "impeller/scene/animation/animation_player.h" diff --git a/impeller/scene/scene_context.cc b/impeller/scene/scene_context.cc index 1ee1a7a5b3733..dbd09eec0e48b 100644 --- a/impeller/scene/scene_context.cc +++ b/impeller/scene/scene_context.cc @@ -3,7 +3,7 @@ // found in the LICENSE file. #include "impeller/scene/scene_context.h" -#include "impeller/renderer/formats.h" +#include "impeller/core/formats.h" #include "impeller/scene/material.h" #include "impeller/scene/shaders/skinned.vert.h" #include "impeller/scene/shaders/unlit.frag.h" diff --git a/impeller/scene/scene_unittests.cc b/impeller/scene/scene_unittests.cc index d1ed6567902fa..875e9fc1d9fb4 100644 --- a/impeller/scene/scene_unittests.cc +++ b/impeller/scene/scene_unittests.cc @@ -8,6 +8,7 @@ #include "flutter/fml/mapping.h" #include "flutter/testing/testing.h" +#include "impeller/core/formats.h" #include "impeller/geometry/color.h" #include "impeller/geometry/constants.h" #include "impeller/geometry/matrix.h" @@ -16,7 +17,6 @@ #include "impeller/image/decompressed_image.h" #include "impeller/playground/playground.h" #include "impeller/playground/playground_test.h" -#include "impeller/renderer/formats.h" #include "impeller/scene/animation/animation_clip.h" #include "impeller/scene/camera.h" #include "impeller/scene/geometry.h" diff --git a/impeller/scene/skin.cc b/impeller/scene/skin.cc index 4407eeb5bf76f..b3ea96993a6e7 100644 --- a/impeller/scene/skin.cc +++ b/impeller/scene/skin.cc @@ -10,7 +10,7 @@ #include #include "flutter/fml/logging.h" -#include "impeller/renderer/allocator.h" +#include "impeller/core/allocator.h" #include "impeller/scene/importer/conversions.h" namespace impeller { diff --git a/impeller/scene/skin.h b/impeller/scene/skin.h index 016b527e771c0..804278a0d741f 100644 --- a/impeller/scene/skin.h +++ b/impeller/scene/skin.h @@ -9,8 +9,8 @@ #include "flutter/fml/macros.h" -#include "impeller/renderer/allocator.h" -#include "impeller/renderer/texture.h" +#include "impeller/core/allocator.h" +#include "impeller/core/texture.h" #include "impeller/scene/importer/scene_flatbuffers.h" #include "impeller/scene/node.h" diff --git a/impeller/tools/impeller.gni b/impeller/tools/impeller.gni index 5a0e393206c6e..7121ba4a2bb89 100644 --- a/impeller/tools/impeller.gni +++ b/impeller/tools/impeller.gni @@ -391,7 +391,7 @@ template("impellerc_reflect") { ]) deps = [ - "//flutter/impeller/renderer:allocation", + "//flutter/impeller/core", impellerc_invocation, ] } diff --git a/impeller/typographer/backends/skia/text_render_context_skia.cc b/impeller/typographer/backends/skia/text_render_context_skia.cc index 1338c0c13c561..d6f9ee8e48f6e 100644 --- a/impeller/typographer/backends/skia/text_render_context_skia.cc +++ b/impeller/typographer/backends/skia/text_render_context_skia.cc @@ -9,7 +9,7 @@ #include "flutter/fml/logging.h" #include "flutter/fml/trace_event.h" #include "impeller/base/allocation.h" -#include "impeller/renderer/allocator.h" +#include "impeller/core/allocator.h" #include "impeller/typographer/backends/skia/typeface_skia.h" #include "third_party/skia/include/core/SkBitmap.h" #include "third_party/skia/include/core/SkCanvas.h" diff --git a/impeller/typographer/glyph_atlas.h b/impeller/typographer/glyph_atlas.h index d25d1e162e32e..7ae35740b42de 100644 --- a/impeller/typographer/glyph_atlas.h +++ b/impeller/typographer/glyph_atlas.h @@ -10,9 +10,9 @@ #include #include "flutter/fml/macros.h" +#include "impeller/core/texture.h" #include "impeller/geometry/rect.h" #include "impeller/renderer/pipeline.h" -#include "impeller/renderer/texture.h" #include "impeller/typographer/font_glyph_pair.h" class SkBitmap; diff --git a/lib/ui/painting/display_list_deferred_image_gpu_impeller.h b/lib/ui/painting/display_list_deferred_image_gpu_impeller.h index 75a1fe7704bf3..08692ff2b4bd1 100644 --- a/lib/ui/painting/display_list_deferred_image_gpu_impeller.h +++ b/lib/ui/painting/display_list_deferred_image_gpu_impeller.h @@ -11,7 +11,7 @@ #include "flutter/fml/memory/weak_ptr.h" #include "flutter/fml/task_runner.h" #include "flutter/lib/ui/snapshot_delegate.h" -#include "impeller/renderer/texture.h" +#include "impeller/core/texture.h" namespace flutter { diff --git a/lib/ui/painting/image_decoder_impeller.cc b/lib/ui/painting/image_decoder_impeller.cc index 6e834f07880d3..01ee5ce62616a 100644 --- a/lib/ui/painting/image_decoder_impeller.cc +++ b/lib/ui/painting/image_decoder_impeller.cc @@ -9,11 +9,11 @@ #include "flutter/fml/closure.h" #include "flutter/fml/make_copyable.h" #include "flutter/fml/trace_event.h" +#include "flutter/impeller/core/allocator.h" +#include "flutter/impeller/core/texture.h" #include "flutter/impeller/display_list/display_list_image_impeller.h" -#include "flutter/impeller/renderer/allocator.h" #include "flutter/impeller/renderer/command_buffer.h" #include "flutter/impeller/renderer/context.h" -#include "flutter/impeller/renderer/texture.h" #include "flutter/lib/ui/painting/image_decoder_skia.h" #include "impeller/base/strings.h" #include "impeller/geometry/size.h" diff --git a/lib/ui/painting/image_decoder_unittests.cc b/lib/ui/painting/image_decoder_unittests.cc index 35cf13a0ab6cb..fc4d851b550b2 100644 --- a/lib/ui/painting/image_decoder_unittests.cc +++ b/lib/ui/painting/image_decoder_unittests.cc @@ -5,9 +5,9 @@ #include "flutter/common/task_runners.h" #include "flutter/fml/mapping.h" #include "flutter/fml/synchronization/waitable_event.h" +#include "flutter/impeller/core/allocator.h" +#include "flutter/impeller/core/device_buffer.h" #include "flutter/impeller/geometry/size.h" -#include "flutter/impeller/renderer/allocator.h" -#include "flutter/impeller/renderer/device_buffer.h" #include "flutter/lib/ui/painting/image_decoder.h" #include "flutter/lib/ui/painting/image_decoder_impeller.h" #include "flutter/lib/ui/painting/image_decoder_skia.h" diff --git a/lib/ui/painting/image_encoding_impeller.cc b/lib/ui/painting/image_encoding_impeller.cc index 163a9a8f1b50d..bbfface197f19 100644 --- a/lib/ui/painting/image_encoding_impeller.cc +++ b/lib/ui/painting/image_encoding_impeller.cc @@ -5,10 +5,10 @@ #include "flutter/lib/ui/painting/image_encoding_impeller.h" #include "flutter/lib/ui/painting/image.h" +#include "impeller/core/device_buffer.h" +#include "impeller/core/formats.h" #include "impeller/renderer/command_buffer.h" #include "impeller/renderer/context.h" -#include "impeller/renderer/device_buffer.h" -#include "impeller/renderer/formats.h" #include "third_party/skia/include/core/SkBitmap.h" namespace flutter { From 8e8abeb5f70adfe0ddddc5b31bbc70a955356e6f Mon Sep 17 00:00:00 2001 From: Dan Field Date: Tue, 28 Mar 2023 16:37:14 -0700 Subject: [PATCH 18/19] Format --- impeller/renderer/backend/metal/allocator_mtl.mm | 2 +- impeller/renderer/backend/metal/blit_pass_mtl.mm | 4 ++-- impeller/renderer/backend/metal/compute_pass_mtl.mm | 4 ++-- impeller/renderer/backend/metal/render_pass_mtl.mm | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/impeller/renderer/backend/metal/allocator_mtl.mm b/impeller/renderer/backend/metal/allocator_mtl.mm index dc24ebe4e12c5..28c34f7c69811 100644 --- a/impeller/renderer/backend/metal/allocator_mtl.mm +++ b/impeller/renderer/backend/metal/allocator_mtl.mm @@ -7,10 +7,10 @@ #include "flutter/fml/build_config.h" #include "flutter/fml/logging.h" #include "impeller/base/validation.h" +#include "impeller/core/buffer.h" #include "impeller/renderer/backend/metal/device_buffer_mtl.h" #include "impeller/renderer/backend/metal/formats_mtl.h" #include "impeller/renderer/backend/metal/texture_mtl.h" -#include "impeller/core/buffer.h" namespace impeller { diff --git a/impeller/renderer/backend/metal/blit_pass_mtl.mm b/impeller/renderer/backend/metal/blit_pass_mtl.mm index fc88017c9656f..ddbba0772c219 100644 --- a/impeller/renderer/backend/metal/blit_pass_mtl.mm +++ b/impeller/renderer/backend/metal/blit_pass_mtl.mm @@ -11,6 +11,8 @@ #include "flutter/fml/logging.h" #include "flutter/fml/trace_event.h" #include "impeller/base/backend_cast.h" +#include "impeller/core/formats.h" +#include "impeller/core/host_buffer.h" #include "impeller/renderer/backend/metal/blit_command_mtl.h" #include "impeller/renderer/backend/metal/device_buffer_mtl.h" #include "impeller/renderer/backend/metal/formats_mtl.h" @@ -18,8 +20,6 @@ #include "impeller/renderer/backend/metal/sampler_mtl.h" #include "impeller/renderer/backend/metal/texture_mtl.h" #include "impeller/renderer/blit_command.h" -#include "impeller/core/formats.h" -#include "impeller/core/host_buffer.h" #include "impeller/renderer/shader_types.h" namespace impeller { diff --git a/impeller/renderer/backend/metal/compute_pass_mtl.mm b/impeller/renderer/backend/metal/compute_pass_mtl.mm index f8152e8c9ac38..dd5e7aee00680 100644 --- a/impeller/renderer/backend/metal/compute_pass_mtl.mm +++ b/impeller/renderer/backend/metal/compute_pass_mtl.mm @@ -13,14 +13,14 @@ #include "flutter/fml/logging.h" #include "flutter/fml/trace_event.h" #include "impeller/base/backend_cast.h" +#include "impeller/core/formats.h" +#include "impeller/core/host_buffer.h" #include "impeller/renderer/backend/metal/compute_pipeline_mtl.h" #include "impeller/renderer/backend/metal/device_buffer_mtl.h" #include "impeller/renderer/backend/metal/formats_mtl.h" #include "impeller/renderer/backend/metal/sampler_mtl.h" #include "impeller/renderer/backend/metal/texture_mtl.h" #include "impeller/renderer/compute_command.h" -#include "impeller/core/formats.h" -#include "impeller/core/host_buffer.h" #include "impeller/renderer/shader_types.h" namespace impeller { diff --git a/impeller/renderer/backend/metal/render_pass_mtl.mm b/impeller/renderer/backend/metal/render_pass_mtl.mm index 16898b11e34a3..540309532ff26 100644 --- a/impeller/renderer/backend/metal/render_pass_mtl.mm +++ b/impeller/renderer/backend/metal/render_pass_mtl.mm @@ -8,13 +8,13 @@ #include "flutter/fml/logging.h" #include "flutter/fml/trace_event.h" #include "impeller/base/backend_cast.h" +#include "impeller/core/formats.h" +#include "impeller/core/host_buffer.h" #include "impeller/renderer/backend/metal/device_buffer_mtl.h" #include "impeller/renderer/backend/metal/formats_mtl.h" #include "impeller/renderer/backend/metal/pipeline_mtl.h" #include "impeller/renderer/backend/metal/sampler_mtl.h" #include "impeller/renderer/backend/metal/texture_mtl.h" -#include "impeller/core/formats.h" -#include "impeller/core/host_buffer.h" #include "impeller/renderer/shader_types.h" namespace impeller { From 7b7b1e39315c618ee89138d1cf999dd5e1243fd6 Mon Sep 17 00:00:00 2001 From: Dan Field Date: Tue, 28 Mar 2023 16:56:10 -0700 Subject: [PATCH 19/19] tidy --- impeller/renderer/compute_tessellator.cc | 8 ++++---- impeller/renderer/compute_tessellator.h | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/impeller/renderer/compute_tessellator.cc b/impeller/renderer/compute_tessellator.cc index 60d2548c47820..504036963bfbe 100644 --- a/impeller/renderer/compute_tessellator.cc +++ b/impeller/renderer/compute_tessellator.cc @@ -16,7 +16,7 @@ ComputeTessellator::~ComputeTessellator() = default; template static std::shared_ptr CreateDeviceBuffer( - std::shared_ptr context, + const std::shared_ptr& context, const std::string& label) { DeviceBufferDescriptor desc; desc.storage_mode = StorageMode::kDevicePrivate; @@ -59,7 +59,7 @@ ComputeTessellator& ComputeTessellator::SetQuadraticTolerance(Scalar value) { ComputeTessellator::Status ComputeTessellator::Tessellate( const Path& path, - std::shared_ptr context, + const std::shared_ptr& context, BufferView vertex_buffer, BufferView vertex_buffer_count, const CommandBuffer::CompletionCallback& callback) const { @@ -163,8 +163,8 @@ ComputeTessellator::Status ComputeTessellator::Tessellate( SS::BindConfig(cmd, pass->GetTransientsBuffer().EmplaceUniform(config)); SS::BindPolyline(cmd, polyline_buffer->AsBufferView()); - SS::BindVertexBufferCount(cmd, vertex_buffer_count); - SS::BindVertexBuffer(cmd, vertex_buffer); + SS::BindVertexBufferCount(cmd, std::move(vertex_buffer_count)); + SS::BindVertexBuffer(cmd, std::move(vertex_buffer)); if (!pass->AddCommand(std::move(cmd))) { return Status::kCommandInvalid; diff --git a/impeller/renderer/compute_tessellator.h b/impeller/renderer/compute_tessellator.h index 124ca426650f9..0a33c98652a2a 100644 --- a/impeller/renderer/compute_tessellator.h +++ b/impeller/renderer/compute_tessellator.h @@ -64,7 +64,7 @@ class ComputeTessellator { // and heap allocated buffers on Metal. Status Tessellate( const Path& path, - std::shared_ptr context, + const std::shared_ptr& context, BufferView vertex_buffer, BufferView vertex_buffer_count, const CommandBuffer::CompletionCallback& callback = nullptr) const;