diff --git a/impeller/entity/contents/content_context.cc b/impeller/entity/contents/content_context.cc index 64d4b5c85a3da..68011388e661b 100644 --- a/impeller/entity/contents/content_context.cc +++ b/impeller/entity/contents/content_context.cc @@ -30,7 +30,7 @@ void ContentContextOptions::ApplyToPipelineDescriptor( desc.SetSampleCount(sample_count); ColorAttachmentDescriptor color0 = *desc.GetColorAttachmentDescriptor(0u); - color0.format = color_attachment_pixel_format; + color0.format = color_attachment_pixel_format.value_or(PixelFormat::kUnknown); color0.alpha_blend_op = BlendOperation::kAdd; color0.color_blend_op = BlendOperation::kAdd; @@ -165,139 +165,130 @@ ContentContext::ContentContext(std::shared_ptr context) if (!context_ || !context_->IsValid()) { return; } - auto default_options = ContentContextOptions{ - .color_attachment_pixel_format = - context_->GetCapabilities()->GetDefaultColorFormat()}; #ifdef IMPELLER_DEBUG - checkerboard_pipelines_[default_options] = + checkerboard_pipelines_[{}] = CreateDefaultPipeline(*context_); #endif // IMPELLER_DEBUG - solid_fill_pipelines_[default_options] = + solid_fill_pipelines_[{}] = CreateDefaultPipeline(*context_); - + linear_gradient_fill_pipelines_[{}] = + CreateDefaultPipeline(*context_); + radial_gradient_fill_pipelines_[{}] = + CreateDefaultPipeline(*context_); + conical_gradient_fill_pipelines_[{}] = + CreateDefaultPipeline(*context_); if (context_->GetCapabilities()->SupportsSSBO()) { - linear_gradient_ssbo_fill_pipelines_[default_options] = + linear_gradient_ssbo_fill_pipelines_[{}] = CreateDefaultPipeline(*context_); - radial_gradient_ssbo_fill_pipelines_[default_options] = + radial_gradient_ssbo_fill_pipelines_[{}] = CreateDefaultPipeline(*context_); - conical_gradient_ssbo_fill_pipelines_[default_options] = + conical_gradient_ssbo_fill_pipelines_[{}] = CreateDefaultPipeline(*context_); - sweep_gradient_ssbo_fill_pipelines_[default_options] = + sweep_gradient_ssbo_fill_pipelines_[{}] = CreateDefaultPipeline(*context_); - } else { - linear_gradient_fill_pipelines_[default_options] = - CreateDefaultPipeline(*context_); - radial_gradient_fill_pipelines_[default_options] = - CreateDefaultPipeline(*context_); - conical_gradient_fill_pipelines_[default_options] = - CreateDefaultPipeline(*context_); - sweep_gradient_fill_pipelines_[default_options] = - CreateDefaultPipeline(*context_); } - if (context_->GetCapabilities()->SupportsFramebufferFetch()) { - framebuffer_blend_color_pipelines_[default_options] = + framebuffer_blend_color_pipelines_[{}] = CreateDefaultPipeline(*context_); - framebuffer_blend_colorburn_pipelines_[default_options] = + framebuffer_blend_colorburn_pipelines_[{}] = CreateDefaultPipeline(*context_); - framebuffer_blend_colordodge_pipelines_[default_options] = + framebuffer_blend_colordodge_pipelines_[{}] = CreateDefaultPipeline(*context_); - framebuffer_blend_darken_pipelines_[default_options] = + framebuffer_blend_darken_pipelines_[{}] = CreateDefaultPipeline(*context_); - framebuffer_blend_difference_pipelines_[default_options] = + framebuffer_blend_difference_pipelines_[{}] = CreateDefaultPipeline(*context_); - framebuffer_blend_exclusion_pipelines_[default_options] = + framebuffer_blend_exclusion_pipelines_[{}] = CreateDefaultPipeline(*context_); - framebuffer_blend_hardlight_pipelines_[default_options] = + framebuffer_blend_hardlight_pipelines_[{}] = CreateDefaultPipeline(*context_); - framebuffer_blend_hue_pipelines_[default_options] = + framebuffer_blend_hue_pipelines_[{}] = CreateDefaultPipeline(*context_); - framebuffer_blend_lighten_pipelines_[default_options] = + framebuffer_blend_lighten_pipelines_[{}] = CreateDefaultPipeline(*context_); - framebuffer_blend_luminosity_pipelines_[default_options] = + framebuffer_blend_luminosity_pipelines_[{}] = CreateDefaultPipeline(*context_); - framebuffer_blend_multiply_pipelines_[default_options] = + framebuffer_blend_multiply_pipelines_[{}] = CreateDefaultPipeline(*context_); - framebuffer_blend_overlay_pipelines_[default_options] = + framebuffer_blend_overlay_pipelines_[{}] = CreateDefaultPipeline(*context_); - framebuffer_blend_saturation_pipelines_[default_options] = + framebuffer_blend_saturation_pipelines_[{}] = CreateDefaultPipeline(*context_); - framebuffer_blend_screen_pipelines_[default_options] = + framebuffer_blend_screen_pipelines_[{}] = CreateDefaultPipeline(*context_); - framebuffer_blend_softlight_pipelines_[default_options] = + framebuffer_blend_softlight_pipelines_[{}] = CreateDefaultPipeline(*context_); } - blend_color_pipelines_[default_options] = + blend_color_pipelines_[{}] = CreateDefaultPipeline(*context_); - blend_colorburn_pipelines_[default_options] = + blend_colorburn_pipelines_[{}] = CreateDefaultPipeline(*context_); - blend_colordodge_pipelines_[default_options] = + blend_colordodge_pipelines_[{}] = CreateDefaultPipeline(*context_); - blend_darken_pipelines_[default_options] = + blend_darken_pipelines_[{}] = CreateDefaultPipeline(*context_); - blend_difference_pipelines_[default_options] = + blend_difference_pipelines_[{}] = CreateDefaultPipeline(*context_); - blend_exclusion_pipelines_[default_options] = + blend_exclusion_pipelines_[{}] = CreateDefaultPipeline(*context_); - blend_hardlight_pipelines_[default_options] = + blend_hardlight_pipelines_[{}] = CreateDefaultPipeline(*context_); - blend_hue_pipelines_[default_options] = - CreateDefaultPipeline(*context_); - blend_lighten_pipelines_[default_options] = + blend_hue_pipelines_[{}] = CreateDefaultPipeline(*context_); + blend_lighten_pipelines_[{}] = CreateDefaultPipeline(*context_); - blend_luminosity_pipelines_[default_options] = + blend_luminosity_pipelines_[{}] = CreateDefaultPipeline(*context_); - blend_multiply_pipelines_[default_options] = + blend_multiply_pipelines_[{}] = CreateDefaultPipeline(*context_); - blend_overlay_pipelines_[default_options] = + blend_overlay_pipelines_[{}] = CreateDefaultPipeline(*context_); - blend_saturation_pipelines_[default_options] = + blend_saturation_pipelines_[{}] = CreateDefaultPipeline(*context_); - blend_screen_pipelines_[default_options] = + blend_screen_pipelines_[{}] = CreateDefaultPipeline(*context_); - blend_softlight_pipelines_[default_options] = + blend_softlight_pipelines_[{}] = CreateDefaultPipeline(*context_); - - rrect_blur_pipelines_[default_options] = + sweep_gradient_fill_pipelines_[{}] = + CreateDefaultPipeline(*context_); + rrect_blur_pipelines_[{}] = CreateDefaultPipeline(*context_); - texture_blend_pipelines_[default_options] = + texture_blend_pipelines_[{}] = CreateDefaultPipeline(*context_); - texture_pipelines_[default_options] = - CreateDefaultPipeline(*context_); - position_uv_pipelines_[default_options] = + texture_pipelines_[{}] = CreateDefaultPipeline(*context_); + position_uv_pipelines_[{}] = CreateDefaultPipeline(*context_); - tiled_texture_pipelines_[default_options] = + tiled_texture_pipelines_[{}] = CreateDefaultPipeline(*context_); - gaussian_blur_alpha_decal_pipelines_[default_options] = + gaussian_blur_alpha_decal_pipelines_[{}] = CreateDefaultPipeline(*context_); - gaussian_blur_alpha_nodecal_pipelines_[default_options] = + gaussian_blur_alpha_nodecal_pipelines_[{}] = CreateDefaultPipeline(*context_); - gaussian_blur_noalpha_decal_pipelines_[default_options] = + gaussian_blur_noalpha_decal_pipelines_[{}] = CreateDefaultPipeline(*context_); - gaussian_blur_noalpha_nodecal_pipelines_[default_options] = + gaussian_blur_noalpha_nodecal_pipelines_[{}] = CreateDefaultPipeline(*context_); - border_mask_blur_pipelines_[default_options] = + border_mask_blur_pipelines_[{}] = CreateDefaultPipeline(*context_); - morphology_filter_pipelines_[default_options] = + morphology_filter_pipelines_[{}] = CreateDefaultPipeline(*context_); - color_matrix_color_filter_pipelines_[default_options] = + color_matrix_color_filter_pipelines_[{}] = CreateDefaultPipeline(*context_); - linear_to_srgb_filter_pipelines_[default_options] = + linear_to_srgb_filter_pipelines_[{}] = CreateDefaultPipeline(*context_); - srgb_to_linear_filter_pipelines_[default_options] = + srgb_to_linear_filter_pipelines_[{}] = CreateDefaultPipeline(*context_); - glyph_atlas_pipelines_[default_options] = + glyph_atlas_pipelines_[{}] = CreateDefaultPipeline(*context_); - glyph_atlas_color_pipelines_[default_options] = + glyph_atlas_color_pipelines_[{}] = CreateDefaultPipeline(*context_); - geometry_color_pipelines_[default_options] = + geometry_color_pipelines_[{}] = CreateDefaultPipeline(*context_); - yuv_to_rgb_filter_pipelines_[default_options] = + yuv_to_rgb_filter_pipelines_[{}] = CreateDefaultPipeline(*context_); - porter_duff_blend_pipelines_[default_options] = + porter_duff_blend_pipelines_[{}] = CreateDefaultPipeline(*context_); if (context_->GetCapabilities()->SupportsCompute()) { @@ -312,8 +303,7 @@ ContentContext::ContentContext(std::shared_ptr context) context_->GetPipelineLibrary()->GetPipeline(uv_pipeline_desc).Get(); } - auto maybe_pipeline_desc = - solid_fill_pipelines_[default_options]->GetDescriptor(); + auto maybe_pipeline_desc = solid_fill_pipelines_[{}]->GetDescriptor(); if (maybe_pipeline_desc.has_value()) { auto clip_pipeline_descriptor = maybe_pipeline_desc.value(); clip_pipeline_descriptor.SetLabel("Clip Pipeline"); @@ -326,7 +316,7 @@ ContentContext::ContentContext(std::shared_ptr context) } clip_pipeline_descriptor.SetColorAttachmentDescriptors( std::move(color_attachments)); - clip_pipelines_[default_options] = + clip_pipelines_[{}] = std::make_unique(*context_, clip_pipeline_descriptor); } else { return; diff --git a/impeller/entity/contents/content_context.h b/impeller/entity/contents/content_context.h index c88417890b160..706d77a6c1adb 100644 --- a/impeller/entity/contents/content_context.h +++ b/impeller/entity/contents/content_context.h @@ -291,12 +291,12 @@ using UvComputeShaderPipeline = ComputePipelineBuilder; /// Flutter application may easily require building hundreds of PSOs in total, /// but they shouldn't require e.g. 10s of thousands. struct ContentContextOptions { - SampleCount sample_count = SampleCount::kCount4; + SampleCount sample_count = SampleCount::kCount1; BlendMode blend_mode = BlendMode::kSourceOver; CompareFunction stencil_compare = CompareFunction::kEqual; StencilOperation stencil_operation = StencilOperation::kKeep; PrimitiveType primitive_type = PrimitiveType::kTriangle; - PixelFormat color_attachment_pixel_format = PixelFormat::kUnknown; + std::optional color_attachment_pixel_format; bool has_stencil_attachment = true; bool wireframe = false; @@ -820,9 +820,7 @@ class ContentContext { return found->second->WaitAndGet(); } - auto prototype = container.find( - {.color_attachment_pixel_format = - context_->GetCapabilities()->GetDefaultColorFormat()}); + auto prototype = container.find({}); // The prototype must always be initialized in the constructor. FML_CHECK(prototype != container.end()); diff --git a/impeller/renderer/pipeline_descriptor.h b/impeller/renderer/pipeline_descriptor.h index 599a615c186af..3d0eddf880e28 100644 --- a/impeller/renderer/pipeline_descriptor.h +++ b/impeller/renderer/pipeline_descriptor.h @@ -133,7 +133,7 @@ class PipelineDescriptor final : public Comparable { private: std::string label_; - SampleCount sample_count_ = SampleCount::kCount4; + SampleCount sample_count_ = SampleCount::kCount1; WindingOrder winding_order_ = WindingOrder::kClockwise; CullMode cull_mode_ = CullMode::kNone; std::map> entrypoints_; diff --git a/impeller/renderer/renderer_unittests.cc b/impeller/renderer/renderer_unittests.cc index d18a4eaab4fb7..39d01c62eba4e 100644 --- a/impeller/renderer/renderer_unittests.cc +++ b/impeller/renderer/renderer_unittests.cc @@ -288,8 +288,6 @@ TEST_P(RendererTest, CanRenderToTexture) { using BoxPipelineBuilder = PipelineBuilder; auto pipeline_desc = BoxPipelineBuilder::MakeDefaultPipelineDescriptor(*context); - pipeline_desc->SetSampleCount(SampleCount::kCount1); - ASSERT_TRUE(pipeline_desc.has_value()); auto box_pipeline = context->GetPipelineLibrary()->GetPipeline(pipeline_desc).Get();