diff --git a/impeller/aiks/aiks_unittests.cc b/impeller/aiks/aiks_unittests.cc index 1531285380d2a..3a1a529f7d448 100644 --- a/impeller/aiks/aiks_unittests.cc +++ b/impeller/aiks/aiks_unittests.cc @@ -1955,7 +1955,7 @@ TEST_P(AiksTest, TranslucentSaveLayerWithBlendColorFilterDrawsCorrectly) { ASSERT_TRUE(OpenPlaygroundHere(canvas.EndRecordingAsPicture())); } -TEST_P(AiksTest, TranslucentSaveLayerWithBlendImageFilterAndDrawsCorrectly) { +TEST_P(AiksTest, TranslucentSaveLayerWithBlendImageFilterDrawsCorrectly) { Canvas canvas; canvas.DrawRect(Rect::MakeXYWH(100, 100, 300, 300), {.color = Color::Blue()}); @@ -1976,7 +1976,7 @@ TEST_P(AiksTest, TranslucentSaveLayerWithBlendImageFilterAndDrawsCorrectly) { ASSERT_TRUE(OpenPlaygroundHere(canvas.EndRecordingAsPicture())); } -TEST_P(AiksTest, TranslucentSaveLayerWithColorImageFilterAndDrawsCorrectly) { +TEST_P(AiksTest, TranslucentSaveLayerWithColorAndImageFilterDrawsCorrectly) { Canvas canvas; canvas.DrawRect(Rect::MakeXYWH(100, 100, 300, 300), {.color = Color::Blue()}); @@ -2060,6 +2060,38 @@ TEST_P(AiksTest, TranslucentSaveLayerWithColorMatrixImageFilterDrawsCorrectly) { ASSERT_TRUE(OpenPlaygroundHere(canvas.EndRecordingAsPicture())); } +TEST_P(AiksTest, + TranslucentSaveLayerWithColorFilterAndImageFilterDrawsCorrectly) { + Canvas canvas; + + auto image = std::make_shared(CreateTextureForFixture("airplane.jpg")); + canvas.DrawImage(image, {100, 100}, {}); + + canvas.SaveLayer({ + .color = Color::Black().WithAlpha(0.5), + .image_filter = + [](FilterInput::Ref input, const Matrix& effect_transform, + bool is_subpass) { + return ColorFilterContents::MakeColorMatrix( + {std::move(input)}, {.array = { + 1, 0, 0, 0, 0, // + 0, 1, 0, 0, 0, // + 0, 0.2, 1, 0, 0, // + 0, 0, 0, 0.5, 0 // + }}); + }, + .color_filter = + [](FilterInput::Ref input) { + return ColorFilterContents::MakeBlend( + BlendMode::kModulate, {std::move(input)}, Color::Green()); + }, + }); + canvas.DrawImage(image, {100, 500}, {}); + canvas.Restore(); + + ASSERT_TRUE(OpenPlaygroundHere(canvas.EndRecordingAsPicture())); +} + /// This is a regression check for https://github.com/flutter/engine/pull/41129 /// The entire screen is green if successful. If failing, no frames will render, /// or the entire screen will be transparent black. diff --git a/impeller/entity/contents/filters/blend_filter_contents.cc b/impeller/entity/contents/filters/blend_filter_contents.cc index 10477d2e6272e..a92331f70bd20 100644 --- a/impeller/entity/contents/filters/blend_filter_contents.cc +++ b/impeller/entity/contents/filters/blend_filter_contents.cc @@ -304,7 +304,8 @@ std::optional BlendFilterContents::CreateForegroundAdvancedBlend( auto blend_uniform = host_buffer.EmplaceUniform(blend_info); FS::BindBlendInfo(cmd, blend_uniform); - frame_info.mvp = Matrix::MakeOrthographic(pass.GetRenderTargetSize()); + frame_info.mvp = Matrix::MakeOrthographic(pass.GetRenderTargetSize()) * + entity.GetTransformation(); auto uniform_view = host_buffer.EmplaceUniform(frame_info); VS::BindFrameInfo(cmd, uniform_view); @@ -313,7 +314,7 @@ std::optional BlendFilterContents::CreateForegroundAdvancedBlend( }; CoverageProc coverage_proc = [coverage](const Entity& entity) -> std::optional { - return coverage; + return coverage.TransformBounds(entity.GetTransformation()); }; auto contents = AnonymousContents::Make(render_proc, coverage_proc); @@ -321,7 +322,6 @@ std::optional BlendFilterContents::CreateForegroundAdvancedBlend( Entity sub_entity; sub_entity.SetContents(std::move(contents)); sub_entity.SetStencilDepth(entity.GetStencilDepth()); - sub_entity.SetTransformation(entity.GetTransformation()); return sub_entity; } @@ -442,7 +442,8 @@ std::optional BlendFilterContents::CreateForegroundPorterDuffBlend( FS::BindFragInfo(cmd, host_buffer.EmplaceUniform(frag_info)); - frame_info.mvp = Matrix::MakeOrthographic(pass.GetRenderTargetSize()); + frame_info.mvp = Matrix::MakeOrthographic(pass.GetRenderTargetSize()) * + entity.GetTransformation(); auto uniform_view = host_buffer.EmplaceUniform(frame_info); VS::BindFrameInfo(cmd, uniform_view); @@ -452,7 +453,7 @@ std::optional BlendFilterContents::CreateForegroundPorterDuffBlend( CoverageProc coverage_proc = [coverage](const Entity& entity) -> std::optional { - return coverage; + return coverage.TransformBounds(entity.GetTransformation()); }; auto contents = AnonymousContents::Make(render_proc, coverage_proc); @@ -460,7 +461,6 @@ std::optional BlendFilterContents::CreateForegroundPorterDuffBlend( Entity sub_entity; sub_entity.SetContents(std::move(contents)); sub_entity.SetStencilDepth(entity.GetStencilDepth()); - sub_entity.SetTransformation(entity.GetTransformation()); return sub_entity; } diff --git a/impeller/entity/contents/filters/border_mask_blur_filter_contents.cc b/impeller/entity/contents/filters/border_mask_blur_filter_contents.cc index b9b72143045d4..0745486f13e26 100644 --- a/impeller/entity/contents/filters/border_mask_blur_filter_contents.cc +++ b/impeller/entity/contents/filters/border_mask_blur_filter_contents.cc @@ -115,7 +115,8 @@ std::optional BorderMaskBlurFilterContents::RenderFilter( cmd.stencil_reference = entity.GetStencilDepth(); VS::FrameInfo frame_info; - frame_info.mvp = Matrix::MakeOrthographic(pass.GetRenderTargetSize()); + frame_info.mvp = Matrix::MakeOrthographic(pass.GetRenderTargetSize()) * + entity.GetTransformation(); frame_info.texture_sampler_y_coord_scale = input_snapshot->texture->GetYCoordScale(); @@ -136,7 +137,7 @@ std::optional BorderMaskBlurFilterContents::RenderFilter( CoverageProc coverage_proc = [coverage](const Entity& entity) -> std::optional { - return coverage; + return coverage.TransformBounds(entity.GetTransformation()); }; auto contents = AnonymousContents::Make(render_proc, coverage_proc); @@ -144,7 +145,6 @@ std::optional BorderMaskBlurFilterContents::RenderFilter( Entity sub_entity; sub_entity.SetContents(std::move(contents)); sub_entity.SetStencilDepth(entity.GetStencilDepth()); - sub_entity.SetTransformation(entity.GetTransformation()); sub_entity.SetBlendMode(entity.GetBlendMode()); return sub_entity; } diff --git a/impeller/entity/contents/filters/color_matrix_filter_contents.cc b/impeller/entity/contents/filters/color_matrix_filter_contents.cc index 88e7487318b6c..2dcee065810c0 100644 --- a/impeller/entity/contents/filters/color_matrix_filter_contents.cc +++ b/impeller/entity/contents/filters/color_matrix_filter_contents.cc @@ -49,7 +49,7 @@ std::optional ColorMatrixFilterContents::RenderFilter( //---------------------------------------------------------------------------- /// Create AnonymousContents for rendering. /// - RenderProc render_proc = [input_snapshot, color_matrix = matrix_, coverage, + RenderProc render_proc = [input_snapshot, color_matrix = matrix_, absorb_opacity = GetAbsorbOpacity()]( const ContentContext& renderer, const Entity& entity, RenderPass& pass) -> bool { @@ -60,27 +60,25 @@ std::optional ColorMatrixFilterContents::RenderFilter( auto options = OptionsFromPassAndEntity(pass, entity); cmd.pipeline = renderer.GetColorMatrixColorFilterPipeline(options); + auto size = input_snapshot->texture->GetSize(); + VertexBufferBuilder vtx_builder; vtx_builder.AddVertices({ - {coverage.origin, Point(0, 0)}, - {{coverage.origin.x + coverage.size.width, coverage.origin.y}, - Point(1, 0)}, - {{coverage.origin.x + coverage.size.width, - coverage.origin.y + coverage.size.height}, - Point(1, 1)}, - {coverage.origin, Point(0, 0)}, - {{coverage.origin.x + coverage.size.width, - coverage.origin.y + coverage.size.height}, - Point(1, 1)}, - {{coverage.origin.x, coverage.origin.y + coverage.size.height}, - Point(0, 1)}, + {Point(0, 0)}, + {Point(1, 0)}, + {Point(1, 1)}, + {Point(0, 0)}, + {Point(1, 1)}, + {Point(0, 1)}, }); auto& host_buffer = pass.GetTransientsBuffer(); auto vtx_buffer = vtx_builder.CreateVertexBuffer(host_buffer); cmd.BindVertices(vtx_buffer); VS::FrameInfo frame_info; - frame_info.mvp = Matrix::MakeOrthographic(pass.GetRenderTargetSize()); + frame_info.mvp = Matrix::MakeOrthographic(pass.GetRenderTargetSize()) * + entity.GetTransformation() * input_snapshot->transform * + Matrix::MakeScale(Vector2(size)); frame_info.texture_sampler_y_coord_scale = input_snapshot->texture->GetYCoordScale(); @@ -107,7 +105,7 @@ std::optional ColorMatrixFilterContents::RenderFilter( CoverageProc coverage_proc = [coverage](const Entity& entity) -> std::optional { - return coverage; + return coverage.TransformBounds(entity.GetTransformation()); }; auto contents = AnonymousContents::Make(render_proc, coverage_proc); @@ -115,8 +113,6 @@ std::optional ColorMatrixFilterContents::RenderFilter( Entity sub_entity; sub_entity.SetContents(std::move(contents)); sub_entity.SetStencilDepth(entity.GetStencilDepth()); - sub_entity.SetTransformation(Matrix::MakeTranslation(coverage.origin) * - entity.GetTransformation()); sub_entity.SetBlendMode(entity.GetBlendMode()); return sub_entity; } diff --git a/impeller/entity/contents/filters/linear_to_srgb_filter_contents.cc b/impeller/entity/contents/filters/linear_to_srgb_filter_contents.cc index f4c2afd21897e..030b75c0eeffd 100644 --- a/impeller/entity/contents/filters/linear_to_srgb_filter_contents.cc +++ b/impeller/entity/contents/filters/linear_to_srgb_filter_contents.cc @@ -36,16 +36,10 @@ std::optional LinearToSrgbFilterContents::RenderFilter( return std::nullopt; } - auto maybe_input_uvs = input_snapshot->GetCoverageUVs(coverage); - if (!maybe_input_uvs.has_value()) { - return std::nullopt; - } - auto input_uvs = maybe_input_uvs.value(); - //---------------------------------------------------------------------------- /// Create AnonymousContents for rendering. /// - RenderProc render_proc = [input_snapshot, coverage, input_uvs, + RenderProc render_proc = [input_snapshot, absorb_opacity = GetAbsorbOpacity()]( const ContentContext& renderer, const Entity& entity, RenderPass& pass) -> bool { @@ -56,20 +50,16 @@ std::optional LinearToSrgbFilterContents::RenderFilter( auto options = OptionsFromPassAndEntity(pass, entity); cmd.pipeline = renderer.GetLinearToSrgbFilterPipeline(options); + auto size = input_snapshot->texture->GetSize(); + VertexBufferBuilder vtx_builder; vtx_builder.AddVertices({ - {coverage.origin, input_uvs[0]}, - {{coverage.origin.x + coverage.size.width, coverage.origin.y}, - input_uvs[1]}, - {{coverage.origin.x + coverage.size.width, - coverage.origin.y + coverage.size.height}, - input_uvs[3]}, - {coverage.origin, input_uvs[0]}, - {{coverage.origin.x + coverage.size.width, - coverage.origin.y + coverage.size.height}, - input_uvs[3]}, - {{coverage.origin.x, coverage.origin.y + coverage.size.height}, - input_uvs[2]}, + {Point(0, 0)}, + {Point(1, 0)}, + {Point(1, 1)}, + {Point(0, 0)}, + {Point(1, 1)}, + {Point(0, 1)}, }); auto& host_buffer = pass.GetTransientsBuffer(); @@ -77,7 +67,9 @@ std::optional LinearToSrgbFilterContents::RenderFilter( cmd.BindVertices(vtx_buffer); VS::FrameInfo frame_info; - frame_info.mvp = Matrix::MakeOrthographic(pass.GetRenderTargetSize()); + frame_info.mvp = Matrix::MakeOrthographic(pass.GetRenderTargetSize()) * + entity.GetTransformation() * input_snapshot->transform * + Matrix::MakeScale(Vector2(size)); frame_info.texture_sampler_y_coord_scale = input_snapshot->texture->GetYCoordScale(); @@ -94,7 +86,7 @@ std::optional LinearToSrgbFilterContents::RenderFilter( CoverageProc coverage_proc = [coverage](const Entity& entity) -> std::optional { - return coverage; + return coverage.TransformBounds(entity.GetTransformation()); }; auto contents = AnonymousContents::Make(render_proc, coverage_proc); @@ -102,7 +94,6 @@ std::optional LinearToSrgbFilterContents::RenderFilter( Entity sub_entity; sub_entity.SetContents(std::move(contents)); sub_entity.SetStencilDepth(entity.GetStencilDepth()); - sub_entity.SetTransformation(entity.GetTransformation()); sub_entity.SetBlendMode(entity.GetBlendMode()); return sub_entity; } diff --git a/impeller/entity/contents/filters/srgb_to_linear_filter_contents.cc b/impeller/entity/contents/filters/srgb_to_linear_filter_contents.cc index 70576924acfbf..64524e824c925 100644 --- a/impeller/entity/contents/filters/srgb_to_linear_filter_contents.cc +++ b/impeller/entity/contents/filters/srgb_to_linear_filter_contents.cc @@ -36,16 +36,10 @@ std::optional SrgbToLinearFilterContents::RenderFilter( return std::nullopt; } - auto maybe_input_uvs = input_snapshot->GetCoverageUVs(coverage); - if (!maybe_input_uvs.has_value()) { - return std::nullopt; - } - auto input_uvs = maybe_input_uvs.value(); - //---------------------------------------------------------------------------- /// Create AnonymousContents for rendering. /// - RenderProc render_proc = [input_snapshot, coverage, input_uvs, + RenderProc render_proc = [input_snapshot, absorb_opacity = GetAbsorbOpacity()]( const ContentContext& renderer, const Entity& entity, RenderPass& pass) -> bool { @@ -56,20 +50,16 @@ std::optional SrgbToLinearFilterContents::RenderFilter( auto options = OptionsFromPassAndEntity(pass, entity); cmd.pipeline = renderer.GetSrgbToLinearFilterPipeline(options); + auto size = input_snapshot->texture->GetSize(); + VertexBufferBuilder vtx_builder; vtx_builder.AddVertices({ - {coverage.origin, input_uvs[0]}, - {{coverage.origin.x + coverage.size.width, coverage.origin.y}, - input_uvs[1]}, - {{coverage.origin.x + coverage.size.width, - coverage.origin.y + coverage.size.height}, - input_uvs[3]}, - {coverage.origin, input_uvs[0]}, - {{coverage.origin.x + coverage.size.width, - coverage.origin.y + coverage.size.height}, - input_uvs[3]}, - {{coverage.origin.x, coverage.origin.y + coverage.size.height}, - input_uvs[2]}, + {Point(0, 0)}, + {Point(1, 0)}, + {Point(1, 1)}, + {Point(0, 0)}, + {Point(1, 1)}, + {Point(0, 1)}, }); auto& host_buffer = pass.GetTransientsBuffer(); @@ -77,7 +67,9 @@ std::optional SrgbToLinearFilterContents::RenderFilter( cmd.BindVertices(vtx_buffer); VS::FrameInfo frame_info; - frame_info.mvp = Matrix::MakeOrthographic(pass.GetRenderTargetSize()); + frame_info.mvp = Matrix::MakeOrthographic(pass.GetRenderTargetSize()) * + entity.GetTransformation() * input_snapshot->transform * + Matrix::MakeScale(Vector2(size)); frame_info.texture_sampler_y_coord_scale = input_snapshot->texture->GetYCoordScale(); @@ -94,7 +86,7 @@ std::optional SrgbToLinearFilterContents::RenderFilter( CoverageProc coverage_proc = [coverage](const Entity& entity) -> std::optional { - return coverage; + return coverage.TransformBounds(entity.GetTransformation()); }; auto contents = AnonymousContents::Make(render_proc, coverage_proc); @@ -102,7 +94,6 @@ std::optional SrgbToLinearFilterContents::RenderFilter( Entity sub_entity; sub_entity.SetContents(std::move(contents)); sub_entity.SetStencilDepth(entity.GetStencilDepth()); - sub_entity.SetTransformation(entity.GetTransformation()); sub_entity.SetBlendMode(entity.GetBlendMode()); return sub_entity; } 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 0b79cc5b10ded..cc4241c6287a2 100644 --- a/impeller/entity/contents/filters/yuv_to_rgb_filter_contents.cc +++ b/impeller/entity/contents/filters/yuv_to_rgb_filter_contents.cc @@ -56,12 +56,6 @@ std::optional YUVToRGBFilterContents::RenderFilter( return std::nullopt; } - auto maybe_input_uvs = y_input_snapshot->GetCoverageUVs(coverage); - if (!maybe_input_uvs.has_value()) { - return std::nullopt; - } - auto input_uvs = maybe_input_uvs.value(); - if (y_input_snapshot->texture->GetTextureDescriptor().format != PixelFormat::kR8UNormInt || uv_input_snapshot->texture->GetTextureDescriptor().format != @@ -72,8 +66,8 @@ std::optional YUVToRGBFilterContents::RenderFilter( //---------------------------------------------------------------------------- /// Create AnonymousContents for rendering. /// - RenderProc render_proc = [y_input_snapshot, uv_input_snapshot, coverage, - yuv_color_space = yuv_color_space_, input_uvs]( + RenderProc render_proc = [y_input_snapshot, uv_input_snapshot, + yuv_color_space = yuv_color_space_]( const ContentContext& renderer, const Entity& entity, RenderPass& pass) -> bool { Command cmd; @@ -83,20 +77,16 @@ std::optional YUVToRGBFilterContents::RenderFilter( auto options = OptionsFromPassAndEntity(pass, entity); cmd.pipeline = renderer.GetYUVToRGBFilterPipeline(options); + auto size = y_input_snapshot->texture->GetSize(); + VertexBufferBuilder vtx_builder; vtx_builder.AddVertices({ - {coverage.origin, input_uvs[0]}, - {{coverage.origin.x + coverage.size.width, coverage.origin.y}, - input_uvs[1]}, - {{coverage.origin.x + coverage.size.width, - coverage.origin.y + coverage.size.height}, - input_uvs[3]}, - {coverage.origin, input_uvs[0]}, - {{coverage.origin.x + coverage.size.width, - coverage.origin.y + coverage.size.height}, - input_uvs[3]}, - {{coverage.origin.x, coverage.origin.y + coverage.size.height}, - input_uvs[2]}, + {Point(0, 0)}, + {Point(1, 0)}, + {Point(1, 1)}, + {Point(0, 0)}, + {Point(1, 1)}, + {Point(0, 1)}, }); auto& host_buffer = pass.GetTransientsBuffer(); @@ -104,7 +94,9 @@ std::optional YUVToRGBFilterContents::RenderFilter( cmd.BindVertices(vtx_buffer); VS::FrameInfo frame_info; - frame_info.mvp = Matrix::MakeOrthographic(pass.GetRenderTargetSize()); + frame_info.mvp = Matrix::MakeOrthographic(pass.GetRenderTargetSize()) * + entity.GetTransformation() * y_input_snapshot->transform * + Matrix::MakeScale(Vector2(size)); frame_info.texture_sampler_y_coord_scale = y_input_snapshot->texture->GetYCoordScale(); @@ -131,7 +123,7 @@ std::optional YUVToRGBFilterContents::RenderFilter( CoverageProc coverage_proc = [coverage](const Entity& entity) -> std::optional { - return coverage; + return coverage.TransformBounds(entity.GetTransformation()); }; auto contents = AnonymousContents::Make(render_proc, coverage_proc); @@ -139,7 +131,6 @@ std::optional YUVToRGBFilterContents::RenderFilter( Entity sub_entity; sub_entity.SetContents(std::move(contents)); sub_entity.SetStencilDepth(entity.GetStencilDepth()); - sub_entity.SetTransformation(entity.GetTransformation()); sub_entity.SetBlendMode(entity.GetBlendMode()); return sub_entity; } diff --git a/impeller/entity/shaders/color_matrix_color_filter.vert b/impeller/entity/shaders/color_matrix_color_filter.vert index 16282a24151c4..f2262eb988925 100644 --- a/impeller/entity/shaders/color_matrix_color_filter.vert +++ b/impeller/entity/shaders/color_matrix_color_filter.vert @@ -12,12 +12,11 @@ uniform FrameInfo { frame_info; in vec2 position; -in highp vec2 texture_coords; out highp vec2 v_texture_coords; void main() { gl_Position = frame_info.mvp * vec4(position, 0.0, 1.0); v_texture_coords = - IPRemapCoords(texture_coords, frame_info.texture_sampler_y_coord_scale); + IPRemapCoords(position, frame_info.texture_sampler_y_coord_scale); } diff --git a/impeller/entity/shaders/linear_to_srgb_filter.vert b/impeller/entity/shaders/linear_to_srgb_filter.vert index 16282a24151c4..f2262eb988925 100644 --- a/impeller/entity/shaders/linear_to_srgb_filter.vert +++ b/impeller/entity/shaders/linear_to_srgb_filter.vert @@ -12,12 +12,11 @@ uniform FrameInfo { frame_info; in vec2 position; -in highp vec2 texture_coords; out highp vec2 v_texture_coords; void main() { gl_Position = frame_info.mvp * vec4(position, 0.0, 1.0); v_texture_coords = - IPRemapCoords(texture_coords, frame_info.texture_sampler_y_coord_scale); + IPRemapCoords(position, frame_info.texture_sampler_y_coord_scale); } diff --git a/impeller/entity/shaders/srgb_to_linear_filter.vert b/impeller/entity/shaders/srgb_to_linear_filter.vert index 16282a24151c4..f2262eb988925 100644 --- a/impeller/entity/shaders/srgb_to_linear_filter.vert +++ b/impeller/entity/shaders/srgb_to_linear_filter.vert @@ -12,12 +12,11 @@ uniform FrameInfo { frame_info; in vec2 position; -in highp vec2 texture_coords; out highp vec2 v_texture_coords; void main() { gl_Position = frame_info.mvp * vec4(position, 0.0, 1.0); v_texture_coords = - IPRemapCoords(texture_coords, frame_info.texture_sampler_y_coord_scale); + IPRemapCoords(position, frame_info.texture_sampler_y_coord_scale); } diff --git a/impeller/entity/shaders/yuv_to_rgb_filter.vert b/impeller/entity/shaders/yuv_to_rgb_filter.vert index 16282a24151c4..f2262eb988925 100644 --- a/impeller/entity/shaders/yuv_to_rgb_filter.vert +++ b/impeller/entity/shaders/yuv_to_rgb_filter.vert @@ -12,12 +12,11 @@ uniform FrameInfo { frame_info; in vec2 position; -in highp vec2 texture_coords; out highp vec2 v_texture_coords; void main() { gl_Position = frame_info.mvp * vec4(position, 0.0, 1.0); v_texture_coords = - IPRemapCoords(texture_coords, frame_info.texture_sampler_y_coord_scale); + IPRemapCoords(position, frame_info.texture_sampler_y_coord_scale); } diff --git a/impeller/tools/malioc.json b/impeller/tools/malioc.json index b258b535464cc..e9e21d268c9d4 100644 --- a/impeller/tools/malioc.json +++ b/impeller/tools/malioc.json @@ -6570,16 +6570,16 @@ "work_registers_used": 32 }, "Varying": { - "fp16_arithmetic": 0, + "fp16_arithmetic": 100, "has_stack_spilling": false, "performance": { "longest_path_bound_pipelines": [ "load_store" ], "longest_path_cycles": [ - 0.078125, + 0.0625, 0.015625, - 0.078125, + 0.0625, 0.0, 3.0, 0.0 @@ -6597,7 +6597,7 @@ ], "shortest_path_cycles": [ 0.0625, - 0.0, + 0.015625, 0.0625, 0.0, 3.0, @@ -6607,9 +6607,9 @@ "load_store" ], "total_cycles": [ - 0.078125, + 0.0625, 0.015625, - 0.078125, + 0.0625, 0.0, 3.0, 0.0 @@ -6636,7 +6636,7 @@ ], "longest_path_cycles": [ 2.9700000286102295, - 5.0, + 4.0, 0.0 ], "pipelines": [ @@ -6649,7 +6649,7 @@ ], "shortest_path_cycles": [ 2.9700000286102295, - 5.0, + 4.0, 0.0 ], "total_bound_pipelines": [ @@ -6657,7 +6657,7 @@ ], "total_cycles": [ 3.0, - 5.0, + 4.0, 0.0 ] }, @@ -8421,16 +8421,16 @@ "work_registers_used": 32 }, "Varying": { - "fp16_arithmetic": 0, + "fp16_arithmetic": 100, "has_stack_spilling": false, "performance": { "longest_path_bound_pipelines": [ "load_store" ], "longest_path_cycles": [ - 0.078125, + 0.0625, 0.015625, - 0.078125, + 0.0625, 0.0, 3.0, 0.0 @@ -8448,7 +8448,7 @@ ], "shortest_path_cycles": [ 0.0625, - 0.0, + 0.015625, 0.0625, 0.0, 3.0, @@ -8458,9 +8458,9 @@ "load_store" ], "total_cycles": [ - 0.078125, + 0.0625, 0.015625, - 0.078125, + 0.0625, 0.0, 3.0, 0.0 @@ -8487,7 +8487,7 @@ ], "longest_path_cycles": [ 2.9700000286102295, - 5.0, + 4.0, 0.0 ], "pipelines": [ @@ -8500,7 +8500,7 @@ ], "shortest_path_cycles": [ 2.9700000286102295, - 5.0, + 4.0, 0.0 ], "total_bound_pipelines": [ @@ -8508,7 +8508,7 @@ ], "total_cycles": [ 3.0, - 5.0, + 4.0, 0.0 ] }, @@ -10176,16 +10176,16 @@ "work_registers_used": 32 }, "Varying": { - "fp16_arithmetic": 0, + "fp16_arithmetic": 100, "has_stack_spilling": false, "performance": { "longest_path_bound_pipelines": [ "load_store" ], "longest_path_cycles": [ - 0.078125, + 0.0625, 0.015625, - 0.078125, + 0.0625, 0.0, 3.0, 0.0 @@ -10203,7 +10203,7 @@ ], "shortest_path_cycles": [ 0.0625, - 0.0, + 0.015625, 0.0625, 0.0, 3.0, @@ -10213,9 +10213,9 @@ "load_store" ], "total_cycles": [ - 0.078125, + 0.0625, 0.015625, - 0.078125, + 0.0625, 0.0, 3.0, 0.0 @@ -10242,7 +10242,7 @@ ], "longest_path_cycles": [ 2.9700000286102295, - 5.0, + 4.0, 0.0 ], "pipelines": [ @@ -10255,7 +10255,7 @@ ], "shortest_path_cycles": [ 2.9700000286102295, - 5.0, + 4.0, 0.0 ], "total_bound_pipelines": [ @@ -10263,7 +10263,7 @@ ], "total_cycles": [ 3.0, - 5.0, + 4.0, 0.0 ] }, @@ -11239,16 +11239,16 @@ "work_registers_used": 32 }, "Varying": { - "fp16_arithmetic": 0, + "fp16_arithmetic": 100, "has_stack_spilling": false, "performance": { "longest_path_bound_pipelines": [ "load_store" ], "longest_path_cycles": [ - 0.078125, + 0.0625, 0.015625, - 0.078125, + 0.0625, 0.0, 3.0, 0.0 @@ -11266,7 +11266,7 @@ ], "shortest_path_cycles": [ 0.0625, - 0.0, + 0.015625, 0.0625, 0.0, 3.0, @@ -11276,9 +11276,9 @@ "load_store" ], "total_cycles": [ - 0.078125, + 0.0625, 0.015625, - 0.078125, + 0.0625, 0.0, 3.0, 0.0 @@ -11305,7 +11305,7 @@ ], "longest_path_cycles": [ 2.9700000286102295, - 5.0, + 4.0, 0.0 ], "pipelines": [ @@ -11318,7 +11318,7 @@ ], "shortest_path_cycles": [ 2.9700000286102295, - 5.0, + 4.0, 0.0 ], "total_bound_pipelines": [ @@ -11326,7 +11326,7 @@ ], "total_cycles": [ 3.0, - 5.0, + 4.0, 0.0 ] },