309#if defined(IMPELLER_ENABLE_OPENGLES) && !defined(FML_OS_EMSCRIPTEN)
310 Variants<TiledTextureExternalPipeline> tiled_texture_external;
311 Variants<TiledTextureUvExternalPipeline> tiled_texture_uv_external;
314#if defined(IMPELLER_ENABLE_OPENGLES)
315 Variants<TextureDownsampleGlesPipeline> texture_downsample_gles;
550 std::shared_ptr<Context> context,
551 std::shared_ptr<TypographerContext> typographer_context,
552 std::shared_ptr<RenderTargetAllocator> render_target_allocator)
553 : context_(
std::move(context)),
558 context_->GetCapabilities()->Supports32BitPrimitiveIndices())),
559 render_target_cache_(render_target_allocator == nullptr
561 context_->GetResourceAllocator())
562 :
std::move(render_target_allocator)),
564 context_->GetResourceAllocator(),
565 context_->GetIdleWaiter(),
566 context_->GetCapabilities()->GetMinimumUniformAlignment())),
568 if (!context_ || !context_->IsValid()) {
576 indexes_host_buffer_ =
577 context_->GetCapabilities()->NeedsPartitionedHostBuffer()
579 context_->GetResourceAllocator(), context_->GetIdleWaiter(),
580 context_->GetCapabilities()->GetMinimumUniformAlignment())
587 empty_texture_ =
GetContext()->GetResourceAllocator()->CreateTexture(desc);
590 std::shared_ptr<CommandBuffer> cmd_buffer =
592 std::shared_ptr<BlitPass> blit_pass = cmd_buffer->CreateBlitPass();
597 if (!blit_pass->EncodeCommands() || !
GetContext()
599 ->Submit({std::move(cmd_buffer)})
607 .color_attachment_pixel_format =
608 context_->GetCapabilities()->GetDefaultColorFormat()};
612 .color_attachment_pixel_format =
613 context_->GetCapabilities()->GetDefaultColorFormat()};
617 .color_attachment_pixel_format =
618 context_->GetCapabilities()->GetDefaultColorFormat(),
619 .has_depth_stencil_attachments =
false};
620 const auto supports_decal =
static_cast<Scalar>(
621 context_->GetCapabilities()->SupportsDecalSamplerAddressMode());
627 pipelines_->glyph_atlas.CreateDefault(
630 GetContext()->GetCapabilities()->GetDefaultGlyphAtlasFormat() ==
632 pipelines_->solid_fill.CreateDefault(*context_, options);
633 pipelines_->texture.CreateDefault(*context_, options);
634 pipelines_->fast_gradient.CreateDefault(*context_, options);
635 pipelines_->line.CreateDefault(*context_, options);
636 pipelines_->circle.CreateDefault(*context_, options);
638 if (context_->GetCapabilities()->SupportsSSBO()) {
639 pipelines_->linear_gradient_ssbo_fill.CreateDefault(*context_, options);
640 pipelines_->radial_gradient_ssbo_fill.CreateDefault(*context_, options);
641 pipelines_->conical_gradient_ssbo_fill.CreateDefault(*context_, options,
643 pipelines_->conical_gradient_ssbo_fill_radial.CreateDefault(
644 *context_, options, {1.0});
645 pipelines_->conical_gradient_ssbo_fill_strip.CreateDefault(
646 *context_, options, {2.0});
647 pipelines_->conical_gradient_ssbo_fill_strip_and_radial.CreateDefault(
648 *context_, options, {0.0});
649 pipelines_->sweep_gradient_ssbo_fill.CreateDefault(*context_, options);
651 pipelines_->linear_gradient_uniform_fill.CreateDefault(*context_,
653 pipelines_->radial_gradient_uniform_fill.CreateDefault(*context_,
655 pipelines_->conical_gradient_uniform_fill.CreateDefault(*context_,
657 pipelines_->conical_gradient_uniform_fill_radial.CreateDefault(*context_,
659 pipelines_->conical_gradient_uniform_fill_strip.CreateDefault(*context_,
661 pipelines_->conical_gradient_uniform_fill_strip_and_radial.CreateDefault(
663 pipelines_->sweep_gradient_uniform_fill.CreateDefault(*context_, options);
665 pipelines_->linear_gradient_fill.CreateDefault(*context_, options);
666 pipelines_->radial_gradient_fill.CreateDefault(*context_, options);
667 pipelines_->conical_gradient_fill.CreateDefault(*context_, options);
668 pipelines_->conical_gradient_fill_radial.CreateDefault(*context_,
670 pipelines_->conical_gradient_fill_strip.CreateDefault(*context_, options);
671 pipelines_->conical_gradient_fill_strip_and_radial.CreateDefault(
673 pipelines_->sweep_gradient_fill.CreateDefault(*context_, options);
677 auto clip_pipeline_descriptor =
678 ClipPipeline::Builder::MakeDefaultPipelineDescriptor(*context_);
679 if (!clip_pipeline_descriptor.has_value()) {
684 .color_attachment_pixel_format =
685 context_->GetCapabilities()->GetDefaultColorFormat()}
686 .ApplyToPipelineDescriptor(*clip_pipeline_descriptor);
688 auto clip_color_attachments =
689 clip_pipeline_descriptor->GetColorAttachmentDescriptors();
690 for (
auto& color_attachment : clip_color_attachments) {
693 clip_pipeline_descriptor->SetColorAttachmentDescriptors(
694 std::move(clip_color_attachments));
695 if (
GetContext()->GetFlags().lazy_shader_mode) {
696 pipelines_->clip.SetDefaultDescriptor(clip_pipeline_descriptor);
697 pipelines_->clip.SetDefault(options,
nullptr);
699 pipelines_->clip.SetDefault(
701 std::make_unique<ClipPipeline>(*context_, clip_pipeline_descriptor));
703 pipelines_->texture_downsample.CreateDefault(
704 *context_, options_no_msaa_no_depth_stencil);
705 pipelines_->texture_downsample_bounded.CreateDefault(
706 *context_, options_no_msaa_no_depth_stencil);
707 pipelines_->rrect_blur.CreateDefault(*context_, options_trianglestrip);
708 pipelines_->rsuperellipse_blur.CreateDefault(*context_,
709 options_trianglestrip);
710 pipelines_->texture_strict_src.CreateDefault(*context_, options);
711 pipelines_->tiled_texture.CreateDefault(*context_, options,
713 pipelines_->gaussian_blur.CreateDefault(
714 *context_, options_no_msaa_no_depth_stencil, {supports_decal});
715 pipelines_->border_mask_blur.CreateDefault(*context_,
716 options_trianglestrip);
717 pipelines_->color_matrix_color_filter.CreateDefault(*context_,
718 options_trianglestrip);
719 pipelines_->shadow_vertices_.CreateDefault(*context_, options);
720 pipelines_->vertices_uber_1_.CreateDefault(*context_, options,
722 pipelines_->vertices_uber_2_.CreateDefault(*context_, options,
725 const std::array<std::vector<Scalar>, 15> porter_duff_constants =
727 pipelines_->clear_blend.CreateDefault(*context_, options_trianglestrip,
728 porter_duff_constants[0]);
729 pipelines_->source_blend.CreateDefault(*context_, options_trianglestrip,
730 porter_duff_constants[1]);
731 pipelines_->destination_blend.CreateDefault(
732 *context_, options_trianglestrip, porter_duff_constants[2]);
733 pipelines_->source_over_blend.CreateDefault(
734 *context_, options_trianglestrip, porter_duff_constants[3]);
735 pipelines_->destination_over_blend.CreateDefault(
736 *context_, options_trianglestrip, porter_duff_constants[4]);
737 pipelines_->source_in_blend.CreateDefault(*context_, options_trianglestrip,
738 porter_duff_constants[5]);
739 pipelines_->destination_in_blend.CreateDefault(
740 *context_, options_trianglestrip, porter_duff_constants[6]);
741 pipelines_->source_out_blend.CreateDefault(*context_, options_trianglestrip,
742 porter_duff_constants[7]);
743 pipelines_->destination_out_blend.CreateDefault(
744 *context_, options_trianglestrip, porter_duff_constants[8]);
745 pipelines_->source_a_top_blend.CreateDefault(
746 *context_, options_trianglestrip, porter_duff_constants[9]);
747 pipelines_->destination_a_top_blend.CreateDefault(
748 *context_, options_trianglestrip, porter_duff_constants[10]);
749 pipelines_->xor_blend.CreateDefault(*context_, options_trianglestrip,
750 porter_duff_constants[11]);
751 pipelines_->plus_blend.CreateDefault(*context_, options_trianglestrip,
752 porter_duff_constants[12]);
753 pipelines_->modulate_blend.CreateDefault(*context_, options_trianglestrip,
754 porter_duff_constants[13]);
755 pipelines_->screen_blend.CreateDefault(*context_, options_trianglestrip,
756 porter_duff_constants[14]);
759 if (context_->GetCapabilities()->SupportsFramebufferFetch()) {
760 pipelines_->framebuffer_blend_color.CreateDefault(
761 *context_, options_trianglestrip,
763 pipelines_->framebuffer_blend_colorburn.CreateDefault(
764 *context_, options_trianglestrip,
766 pipelines_->framebuffer_blend_colordodge.CreateDefault(
767 *context_, options_trianglestrip,
769 pipelines_->framebuffer_blend_darken.CreateDefault(
770 *context_, options_trianglestrip,
772 pipelines_->framebuffer_blend_difference.CreateDefault(
773 *context_, options_trianglestrip,
775 pipelines_->framebuffer_blend_exclusion.CreateDefault(
776 *context_, options_trianglestrip,
778 pipelines_->framebuffer_blend_hardlight.CreateDefault(
779 *context_, options_trianglestrip,
781 pipelines_->framebuffer_blend_hue.CreateDefault(
782 *context_, options_trianglestrip,
784 pipelines_->framebuffer_blend_lighten.CreateDefault(
785 *context_, options_trianglestrip,
787 pipelines_->framebuffer_blend_luminosity.CreateDefault(
788 *context_, options_trianglestrip,
790 pipelines_->framebuffer_blend_multiply.CreateDefault(
791 *context_, options_trianglestrip,
793 pipelines_->framebuffer_blend_overlay.CreateDefault(
794 *context_, options_trianglestrip,
796 pipelines_->framebuffer_blend_saturation.CreateDefault(
797 *context_, options_trianglestrip,
799 pipelines_->framebuffer_blend_screen.CreateDefault(
800 *context_, options_trianglestrip,
802 pipelines_->framebuffer_blend_softlight.CreateDefault(
803 *context_, options_trianglestrip,
806 pipelines_->blend_color.CreateDefault(
807 *context_, options_trianglestrip,
809 pipelines_->blend_colorburn.CreateDefault(
810 *context_, options_trianglestrip,
812 pipelines_->blend_colordodge.CreateDefault(
813 *context_, options_trianglestrip,
815 pipelines_->blend_darken.CreateDefault(
816 *context_, options_trianglestrip,
818 pipelines_->blend_difference.CreateDefault(
819 *context_, options_trianglestrip,
821 pipelines_->blend_exclusion.CreateDefault(
822 *context_, options_trianglestrip,
824 pipelines_->blend_hardlight.CreateDefault(
825 *context_, options_trianglestrip,
827 pipelines_->blend_hue.CreateDefault(
828 *context_, options_trianglestrip,
830 pipelines_->blend_lighten.CreateDefault(
831 *context_, options_trianglestrip,
833 pipelines_->blend_luminosity.CreateDefault(
834 *context_, options_trianglestrip,
836 pipelines_->blend_multiply.CreateDefault(
837 *context_, options_trianglestrip,
839 pipelines_->blend_overlay.CreateDefault(
840 *context_, options_trianglestrip,
842 pipelines_->blend_saturation.CreateDefault(
843 *context_, options_trianglestrip,
845 pipelines_->blend_screen.CreateDefault(
846 *context_, options_trianglestrip,
848 pipelines_->blend_softlight.CreateDefault(
849 *context_, options_trianglestrip,
853 pipelines_->morphology_filter.CreateDefault(*context_, options_trianglestrip,
855 pipelines_->linear_to_srgb_filter.CreateDefault(*context_,
856 options_trianglestrip);
857 pipelines_->srgb_to_linear_filter.CreateDefault(*context_,
858 options_trianglestrip);
859 pipelines_->yuv_to_rgb_filter.CreateDefault(*context_, options_trianglestrip);
862#if defined(IMPELLER_ENABLE_OPENGLES) && !defined(FML_OS_MACOSX) && \
863 !defined(FML_OS_EMSCRIPTEN)
865 pipelines_->tiled_texture_external.CreateDefault(*context_, options);
866 pipelines_->tiled_texture_uv_external.CreateDefault(*context_, options);
869#if defined(IMPELLER_ENABLE_OPENGLES)
870 pipelines_->texture_downsample_gles.CreateDefault(*context_,
871 options_trianglestrip);
876 InitializeCommonlyUsedShadersIfNeeded();