312#if defined(IMPELLER_ENABLE_OPENGLES) && !defined(FML_OS_EMSCRIPTEN)
313 Variants<TiledTextureExternalPipeline> tiled_texture_external;
314 Variants<TiledTextureUvExternalPipeline> tiled_texture_uv_external;
317#if defined(IMPELLER_ENABLE_OPENGLES)
318 Variants<TextureDownsampleGlesPipeline> texture_downsample_gles;
553 std::shared_ptr<Context>
context,
554 std::shared_ptr<TypographerContext> typographer_context,
555 std::shared_ptr<RenderTargetAllocator> render_target_allocator)
561 context_->GetCapabilities()->Supports32BitPrimitiveIndices())),
562 render_target_cache_(render_target_allocator == nullptr
564 context_->GetResourceAllocator())
565 :
std::move(render_target_allocator)),
567 context_->GetResourceAllocator(),
568 context_->GetIdleWaiter(),
569 context_->GetCapabilities()->GetMinimumUniformAlignment())),
571 if (!context_ || !context_->IsValid()) {
579 indexes_host_buffer_ =
580 context_->GetCapabilities()->NeedsPartitionedHostBuffer()
582 context_->GetResourceAllocator(), context_->GetIdleWaiter(),
583 context_->GetCapabilities()->GetMinimumUniformAlignment())
590 empty_texture_ =
GetContext()->GetResourceAllocator()->CreateTexture(desc);
593 std::shared_ptr<CommandBuffer> cmd_buffer =
595 std::shared_ptr<BlitPass> blit_pass = cmd_buffer->CreateBlitPass();
598 blit_pass->AddCopy(buffer_view, empty_texture_);
600 if (!blit_pass->EncodeCommands() || !
GetContext()
602 ->Submit({std::move(cmd_buffer)})
610 .color_attachment_pixel_format =
611 context_->GetCapabilities()->GetDefaultColorFormat()};
615 .color_attachment_pixel_format =
616 context_->GetCapabilities()->GetDefaultColorFormat()};
620 .color_attachment_pixel_format =
621 context_->GetCapabilities()->GetDefaultColorFormat(),
622 .has_depth_stencil_attachments =
false};
623 const auto supports_decal =
static_cast<Scalar>(
624 context_->GetCapabilities()->SupportsDecalSamplerAddressMode());
630 pipelines_->glyph_atlas.CreateDefault(
633 GetContext()->GetCapabilities()->GetDefaultGlyphAtlasFormat() ==
635 pipelines_->solid_fill.CreateDefault(*context_, options);
636 pipelines_->texture.CreateDefault(*context_, options);
637 pipelines_->fast_gradient.CreateDefault(*context_, options);
638 pipelines_->line.CreateDefault(*context_, options);
639 pipelines_->circle.CreateDefault(*context_, options);
640 if (context_->GetFlags().use_sdfs) {
641 pipelines_->uber_sdf.CreateDefault(*context_, options);
642 pipelines_->complex_rse.CreateDefault(*context_, options);
645 if (context_->GetCapabilities()->SupportsSSBO()) {
646 pipelines_->linear_gradient_ssbo_fill.CreateDefault(*context_, options);
647 pipelines_->radial_gradient_ssbo_fill.CreateDefault(*context_, options);
648 pipelines_->conical_gradient_ssbo_fill.CreateDefault(*context_, options,
650 pipelines_->conical_gradient_ssbo_fill_radial.CreateDefault(
651 *context_, options, {1.0});
652 pipelines_->conical_gradient_ssbo_fill_strip.CreateDefault(
653 *context_, options, {2.0});
654 pipelines_->conical_gradient_ssbo_fill_strip_and_radial.CreateDefault(
655 *context_, options, {0.0});
656 pipelines_->sweep_gradient_ssbo_fill.CreateDefault(*context_, options);
658 pipelines_->linear_gradient_uniform_fill.CreateDefault(*context_,
660 pipelines_->radial_gradient_uniform_fill.CreateDefault(*context_,
662 pipelines_->conical_gradient_uniform_fill.CreateDefault(*context_,
664 pipelines_->conical_gradient_uniform_fill_radial.CreateDefault(*context_,
666 pipelines_->conical_gradient_uniform_fill_strip.CreateDefault(*context_,
668 pipelines_->conical_gradient_uniform_fill_strip_and_radial.CreateDefault(
670 pipelines_->sweep_gradient_uniform_fill.CreateDefault(*context_, options);
672 pipelines_->linear_gradient_fill.CreateDefault(*context_, options);
673 pipelines_->radial_gradient_fill.CreateDefault(*context_, options);
674 pipelines_->conical_gradient_fill.CreateDefault(*context_, options);
675 pipelines_->conical_gradient_fill_radial.CreateDefault(*context_,
677 pipelines_->conical_gradient_fill_strip.CreateDefault(*context_, options);
678 pipelines_->conical_gradient_fill_strip_and_radial.CreateDefault(
680 pipelines_->sweep_gradient_fill.CreateDefault(*context_, options);
684 auto clip_pipeline_descriptor =
685 ClipPipeline::Builder::MakeDefaultPipelineDescriptor(*context_);
686 if (!clip_pipeline_descriptor.has_value()) {
691 .color_attachment_pixel_format =
692 context_->GetCapabilities()->GetDefaultColorFormat()}
693 .ApplyToPipelineDescriptor(*clip_pipeline_descriptor);
695 auto clip_color_attachments =
696 clip_pipeline_descriptor->GetColorAttachmentDescriptors();
697 for (
auto& color_attachment : clip_color_attachments) {
700 clip_pipeline_descriptor->SetColorAttachmentDescriptors(
701 std::move(clip_color_attachments));
702 pipelines_->clip.SetDefault(
704 std::make_unique<ClipPipeline>(*context_, clip_pipeline_descriptor));
705 pipelines_->texture_downsample.CreateDefault(
706 *context_, options_no_msaa_no_depth_stencil);
707 pipelines_->texture_downsample_bounded.CreateDefault(
708 *context_, options_no_msaa_no_depth_stencil);
709 pipelines_->rrect_blur.CreateDefault(*context_, options_trianglestrip);
710 pipelines_->rsuperellipse_blur.CreateDefault(*context_,
711 options_trianglestrip);
712 pipelines_->texture_strict_src.CreateDefault(*context_, options);
713 pipelines_->tiled_texture.CreateDefault(*context_, options,
715 pipelines_->gaussian_blur.CreateDefault(
716 *context_, options_no_msaa_no_depth_stencil, {supports_decal});
717 pipelines_->border_mask_blur.CreateDefault(*context_,
718 options_trianglestrip);
719 pipelines_->color_matrix_color_filter.CreateDefault(*context_,
720 options_trianglestrip);
721 pipelines_->shadow_vertices_.CreateDefault(*context_, options);
722 pipelines_->vertices_uber_1_.CreateDefault(*context_, options,
724 pipelines_->vertices_uber_2_.CreateDefault(*context_, options,
727 const std::array<std::vector<Scalar>, 15> porter_duff_constants =
729 pipelines_->clear_blend.CreateDefault(*context_, options_trianglestrip,
730 porter_duff_constants[0]);
731 pipelines_->source_blend.CreateDefault(*context_, options_trianglestrip,
732 porter_duff_constants[1]);
733 pipelines_->destination_blend.CreateDefault(
734 *context_, options_trianglestrip, porter_duff_constants[2]);
735 pipelines_->source_over_blend.CreateDefault(
736 *context_, options_trianglestrip, porter_duff_constants[3]);
737 pipelines_->destination_over_blend.CreateDefault(
738 *context_, options_trianglestrip, porter_duff_constants[4]);
739 pipelines_->source_in_blend.CreateDefault(*context_, options_trianglestrip,
740 porter_duff_constants[5]);
741 pipelines_->destination_in_blend.CreateDefault(
742 *context_, options_trianglestrip, porter_duff_constants[6]);
743 pipelines_->source_out_blend.CreateDefault(*context_, options_trianglestrip,
744 porter_duff_constants[7]);
745 pipelines_->destination_out_blend.CreateDefault(
746 *context_, options_trianglestrip, porter_duff_constants[8]);
747 pipelines_->source_a_top_blend.CreateDefault(
748 *context_, options_trianglestrip, porter_duff_constants[9]);
749 pipelines_->destination_a_top_blend.CreateDefault(
750 *context_, options_trianglestrip, porter_duff_constants[10]);
751 pipelines_->xor_blend.CreateDefault(*context_, options_trianglestrip,
752 porter_duff_constants[11]);
753 pipelines_->plus_blend.CreateDefault(*context_, options_trianglestrip,
754 porter_duff_constants[12]);
755 pipelines_->modulate_blend.CreateDefault(*context_, options_trianglestrip,
756 porter_duff_constants[13]);
757 pipelines_->screen_blend.CreateDefault(*context_, options_trianglestrip,
758 porter_duff_constants[14]);
761 if (context_->GetCapabilities()->SupportsFramebufferFetch()) {
762 pipelines_->framebuffer_blend_color.CreateDefault(
763 *context_, options_trianglestrip,
765 pipelines_->framebuffer_blend_colorburn.CreateDefault(
766 *context_, options_trianglestrip,
768 pipelines_->framebuffer_blend_colordodge.CreateDefault(
769 *context_, options_trianglestrip,
771 pipelines_->framebuffer_blend_darken.CreateDefault(
772 *context_, options_trianglestrip,
774 pipelines_->framebuffer_blend_difference.CreateDefault(
775 *context_, options_trianglestrip,
777 pipelines_->framebuffer_blend_exclusion.CreateDefault(
778 *context_, options_trianglestrip,
780 pipelines_->framebuffer_blend_hardlight.CreateDefault(
781 *context_, options_trianglestrip,
783 pipelines_->framebuffer_blend_hue.CreateDefault(
784 *context_, options_trianglestrip,
786 pipelines_->framebuffer_blend_lighten.CreateDefault(
787 *context_, options_trianglestrip,
789 pipelines_->framebuffer_blend_luminosity.CreateDefault(
790 *context_, options_trianglestrip,
792 pipelines_->framebuffer_blend_multiply.CreateDefault(
793 *context_, options_trianglestrip,
795 pipelines_->framebuffer_blend_overlay.CreateDefault(
796 *context_, options_trianglestrip,
798 pipelines_->framebuffer_blend_saturation.CreateDefault(
799 *context_, options_trianglestrip,
801 pipelines_->framebuffer_blend_screen.CreateDefault(
802 *context_, options_trianglestrip,
804 pipelines_->framebuffer_blend_softlight.CreateDefault(
805 *context_, options_trianglestrip,
808 pipelines_->blend_color.CreateDefault(
809 *context_, options_trianglestrip,
811 pipelines_->blend_colorburn.CreateDefault(
812 *context_, options_trianglestrip,
814 pipelines_->blend_colordodge.CreateDefault(
815 *context_, options_trianglestrip,
817 pipelines_->blend_darken.CreateDefault(
818 *context_, options_trianglestrip,
820 pipelines_->blend_difference.CreateDefault(
821 *context_, options_trianglestrip,
823 pipelines_->blend_exclusion.CreateDefault(
824 *context_, options_trianglestrip,
826 pipelines_->blend_hardlight.CreateDefault(
827 *context_, options_trianglestrip,
829 pipelines_->blend_hue.CreateDefault(
830 *context_, options_trianglestrip,
832 pipelines_->blend_lighten.CreateDefault(
833 *context_, options_trianglestrip,
835 pipelines_->blend_luminosity.CreateDefault(
836 *context_, options_trianglestrip,
838 pipelines_->blend_multiply.CreateDefault(
839 *context_, options_trianglestrip,
841 pipelines_->blend_overlay.CreateDefault(
842 *context_, options_trianglestrip,
844 pipelines_->blend_saturation.CreateDefault(
845 *context_, options_trianglestrip,
847 pipelines_->blend_screen.CreateDefault(
848 *context_, options_trianglestrip,
850 pipelines_->blend_softlight.CreateDefault(
851 *context_, options_trianglestrip,
855 pipelines_->morphology_filter.CreateDefault(*context_, options_trianglestrip,
857 pipelines_->linear_to_srgb_filter.CreateDefault(*context_,
858 options_trianglestrip);
859 pipelines_->srgb_to_linear_filter.CreateDefault(*context_,
860 options_trianglestrip);
861 pipelines_->yuv_to_rgb_filter.CreateDefault(*context_, options_trianglestrip);
864#if defined(IMPELLER_ENABLE_OPENGLES) && !defined(FML_OS_MACOSX) && \
865 !defined(FML_OS_EMSCRIPTEN)
867 pipelines_->tiled_texture_external.CreateDefault(*context_, options);
868 pipelines_->tiled_texture_uv_external.CreateDefault(*context_, options);
871#if defined(IMPELLER_ENABLE_OPENGLES)
872 pipelines_->texture_downsample_gles.CreateDefault(*context_,
873 options_trianglestrip);
878 InitializeCommonlyUsedShadersIfNeeded();