305#ifdef IMPELLER_ENABLE_OPENGLES
306 Variants<TiledTextureExternalPipeline> tiled_texture_external;
307 Variants<TextureDownsampleGlesPipeline> texture_downsample_gles;
308 Variants<TiledTextureUvExternalPipeline> tiled_texture_uv_external;
548 std::shared_ptr<Context> context,
549 std::shared_ptr<TypographerContext> typographer_context,
550 std::shared_ptr<RenderTargetAllocator> render_target_allocator)
551 : context_(
std::move(context)),
556 render_target_cache_(render_target_allocator == nullptr
558 context_->GetResourceAllocator())
559 :
std::move(render_target_allocator)),
561 context_->GetResourceAllocator(),
562 context_->GetIdleWaiter(),
563 context_->GetCapabilities()->GetMinimumUniformAlignment())),
565 if (!context_ || !context_->IsValid()) {
573 indexes_host_buffer_ =
574 context_->GetCapabilities()->NeedsPartitionedHostBuffer()
576 context_->GetResourceAllocator(), context_->GetIdleWaiter(),
577 context_->GetCapabilities()->GetMinimumUniformAlignment())
584 empty_texture_ =
GetContext()->GetResourceAllocator()->CreateTexture(desc);
587 std::shared_ptr<CommandBuffer> cmd_buffer =
589 std::shared_ptr<BlitPass> blit_pass = cmd_buffer->CreateBlitPass();
594 if (!blit_pass->EncodeCommands() || !
GetContext()
596 ->Submit({std::move(cmd_buffer)})
604 .color_attachment_pixel_format =
605 context_->GetCapabilities()->GetDefaultColorFormat()};
609 .color_attachment_pixel_format =
610 context_->GetCapabilities()->GetDefaultColorFormat()};
614 .color_attachment_pixel_format =
615 context_->GetCapabilities()->GetDefaultColorFormat(),
616 .has_depth_stencil_attachments =
false};
617 const auto supports_decal =
static_cast<Scalar>(
618 context_->GetCapabilities()->SupportsDecalSamplerAddressMode());
624 pipelines_->glyph_atlas.CreateDefault(
627 GetContext()->GetCapabilities()->GetDefaultGlyphAtlasFormat() ==
629 pipelines_->solid_fill.CreateDefault(*context_, options);
630 pipelines_->texture.CreateDefault(*context_, options);
631 pipelines_->fast_gradient.CreateDefault(*context_, options);
632 pipelines_->line.CreateDefault(*context_, options);
633 pipelines_->circle.CreateDefault(*context_, options);
635 if (context_->GetCapabilities()->SupportsSSBO()) {
636 pipelines_->linear_gradient_ssbo_fill.CreateDefault(*context_, options);
637 pipelines_->radial_gradient_ssbo_fill.CreateDefault(*context_, options);
638 pipelines_->conical_gradient_ssbo_fill.CreateDefault(*context_, options,
640 pipelines_->conical_gradient_ssbo_fill_radial.CreateDefault(
641 *context_, options, {1.0});
642 pipelines_->conical_gradient_ssbo_fill_strip.CreateDefault(
643 *context_, options, {2.0});
644 pipelines_->conical_gradient_ssbo_fill_strip_and_radial.CreateDefault(
645 *context_, options, {0.0});
646 pipelines_->sweep_gradient_ssbo_fill.CreateDefault(*context_, options);
648 pipelines_->linear_gradient_uniform_fill.CreateDefault(*context_,
650 pipelines_->radial_gradient_uniform_fill.CreateDefault(*context_,
652 pipelines_->conical_gradient_uniform_fill.CreateDefault(*context_,
654 pipelines_->conical_gradient_uniform_fill_radial.CreateDefault(*context_,
656 pipelines_->conical_gradient_uniform_fill_strip.CreateDefault(*context_,
658 pipelines_->conical_gradient_uniform_fill_strip_and_radial.CreateDefault(
660 pipelines_->sweep_gradient_uniform_fill.CreateDefault(*context_, options);
662 pipelines_->linear_gradient_fill.CreateDefault(*context_, options);
663 pipelines_->radial_gradient_fill.CreateDefault(*context_, options);
664 pipelines_->conical_gradient_fill.CreateDefault(*context_, options);
665 pipelines_->conical_gradient_fill_radial.CreateDefault(*context_,
667 pipelines_->conical_gradient_fill_strip.CreateDefault(*context_, options);
668 pipelines_->conical_gradient_fill_strip_and_radial.CreateDefault(
670 pipelines_->sweep_gradient_fill.CreateDefault(*context_, options);
674 auto clip_pipeline_descriptor =
675 ClipPipeline::Builder::MakeDefaultPipelineDescriptor(*context_);
676 if (!clip_pipeline_descriptor.has_value()) {
681 .color_attachment_pixel_format =
682 context_->GetCapabilities()->GetDefaultColorFormat()}
683 .ApplyToPipelineDescriptor(*clip_pipeline_descriptor);
685 auto clip_color_attachments =
686 clip_pipeline_descriptor->GetColorAttachmentDescriptors();
687 for (
auto& color_attachment : clip_color_attachments) {
690 clip_pipeline_descriptor->SetColorAttachmentDescriptors(
691 std::move(clip_color_attachments));
692 if (
GetContext()->GetFlags().lazy_shader_mode) {
693 pipelines_->clip.SetDefaultDescriptor(clip_pipeline_descriptor);
694 pipelines_->clip.SetDefault(options,
nullptr);
696 pipelines_->clip.SetDefault(
698 std::make_unique<ClipPipeline>(*context_, clip_pipeline_descriptor));
700 pipelines_->texture_downsample.CreateDefault(
701 *context_, options_no_msaa_no_depth_stencil);
702 pipelines_->rrect_blur.CreateDefault(*context_, options_trianglestrip);
703 pipelines_->rsuperellipse_blur.CreateDefault(*context_,
704 options_trianglestrip);
705 pipelines_->texture_strict_src.CreateDefault(*context_, options);
706 pipelines_->tiled_texture.CreateDefault(*context_, options,
708 pipelines_->gaussian_blur.CreateDefault(
709 *context_, options_no_msaa_no_depth_stencil, {supports_decal});
710 pipelines_->border_mask_blur.CreateDefault(*context_,
711 options_trianglestrip);
712 pipelines_->color_matrix_color_filter.CreateDefault(*context_,
713 options_trianglestrip);
714 pipelines_->vertices_uber_1_.CreateDefault(*context_, options,
716 pipelines_->vertices_uber_2_.CreateDefault(*context_, options,
719 const std::array<std::vector<Scalar>, 15> porter_duff_constants =
721 pipelines_->clear_blend.CreateDefault(*context_, options_trianglestrip,
722 porter_duff_constants[0]);
723 pipelines_->source_blend.CreateDefault(*context_, options_trianglestrip,
724 porter_duff_constants[1]);
725 pipelines_->destination_blend.CreateDefault(
726 *context_, options_trianglestrip, porter_duff_constants[2]);
727 pipelines_->source_over_blend.CreateDefault(
728 *context_, options_trianglestrip, porter_duff_constants[3]);
729 pipelines_->destination_over_blend.CreateDefault(
730 *context_, options_trianglestrip, porter_duff_constants[4]);
731 pipelines_->source_in_blend.CreateDefault(*context_, options_trianglestrip,
732 porter_duff_constants[5]);
733 pipelines_->destination_in_blend.CreateDefault(
734 *context_, options_trianglestrip, porter_duff_constants[6]);
735 pipelines_->source_out_blend.CreateDefault(*context_, options_trianglestrip,
736 porter_duff_constants[7]);
737 pipelines_->destination_out_blend.CreateDefault(
738 *context_, options_trianglestrip, porter_duff_constants[8]);
739 pipelines_->source_a_top_blend.CreateDefault(
740 *context_, options_trianglestrip, porter_duff_constants[9]);
741 pipelines_->destination_a_top_blend.CreateDefault(
742 *context_, options_trianglestrip, porter_duff_constants[10]);
743 pipelines_->xor_blend.CreateDefault(*context_, options_trianglestrip,
744 porter_duff_constants[11]);
745 pipelines_->plus_blend.CreateDefault(*context_, options_trianglestrip,
746 porter_duff_constants[12]);
747 pipelines_->modulate_blend.CreateDefault(*context_, options_trianglestrip,
748 porter_duff_constants[13]);
749 pipelines_->screen_blend.CreateDefault(*context_, options_trianglestrip,
750 porter_duff_constants[14]);
753 if (context_->GetCapabilities()->SupportsFramebufferFetch()) {
754 pipelines_->framebuffer_blend_color.CreateDefault(
755 *context_, options_trianglestrip,
757 pipelines_->framebuffer_blend_colorburn.CreateDefault(
758 *context_, options_trianglestrip,
760 pipelines_->framebuffer_blend_colordodge.CreateDefault(
761 *context_, options_trianglestrip,
763 pipelines_->framebuffer_blend_darken.CreateDefault(
764 *context_, options_trianglestrip,
766 pipelines_->framebuffer_blend_difference.CreateDefault(
767 *context_, options_trianglestrip,
769 pipelines_->framebuffer_blend_exclusion.CreateDefault(
770 *context_, options_trianglestrip,
772 pipelines_->framebuffer_blend_hardlight.CreateDefault(
773 *context_, options_trianglestrip,
775 pipelines_->framebuffer_blend_hue.CreateDefault(
776 *context_, options_trianglestrip,
778 pipelines_->framebuffer_blend_lighten.CreateDefault(
779 *context_, options_trianglestrip,
781 pipelines_->framebuffer_blend_luminosity.CreateDefault(
782 *context_, options_trianglestrip,
784 pipelines_->framebuffer_blend_multiply.CreateDefault(
785 *context_, options_trianglestrip,
787 pipelines_->framebuffer_blend_overlay.CreateDefault(
788 *context_, options_trianglestrip,
790 pipelines_->framebuffer_blend_saturation.CreateDefault(
791 *context_, options_trianglestrip,
793 pipelines_->framebuffer_blend_screen.CreateDefault(
794 *context_, options_trianglestrip,
796 pipelines_->framebuffer_blend_softlight.CreateDefault(
797 *context_, options_trianglestrip,
800 pipelines_->blend_color.CreateDefault(
801 *context_, options_trianglestrip,
803 pipelines_->blend_colorburn.CreateDefault(
804 *context_, options_trianglestrip,
806 pipelines_->blend_colordodge.CreateDefault(
807 *context_, options_trianglestrip,
809 pipelines_->blend_darken.CreateDefault(
810 *context_, options_trianglestrip,
812 pipelines_->blend_difference.CreateDefault(
813 *context_, options_trianglestrip,
815 pipelines_->blend_exclusion.CreateDefault(
816 *context_, options_trianglestrip,
818 pipelines_->blend_hardlight.CreateDefault(
819 *context_, options_trianglestrip,
821 pipelines_->blend_hue.CreateDefault(
822 *context_, options_trianglestrip,
824 pipelines_->blend_lighten.CreateDefault(
825 *context_, options_trianglestrip,
827 pipelines_->blend_luminosity.CreateDefault(
828 *context_, options_trianglestrip,
830 pipelines_->blend_multiply.CreateDefault(
831 *context_, options_trianglestrip,
833 pipelines_->blend_overlay.CreateDefault(
834 *context_, options_trianglestrip,
836 pipelines_->blend_saturation.CreateDefault(
837 *context_, options_trianglestrip,
839 pipelines_->blend_screen.CreateDefault(
840 *context_, options_trianglestrip,
842 pipelines_->blend_softlight.CreateDefault(
843 *context_, options_trianglestrip,
847 pipelines_->morphology_filter.CreateDefault(*context_, options_trianglestrip,
849 pipelines_->linear_to_srgb_filter.CreateDefault(*context_,
850 options_trianglestrip);
851 pipelines_->srgb_to_linear_filter.CreateDefault(*context_,
852 options_trianglestrip);
853 pipelines_->yuv_to_rgb_filter.CreateDefault(*context_, options_trianglestrip);
855#if defined(IMPELLER_ENABLE_OPENGLES)
857#if !defined(FML_OS_MACOSX)
859 pipelines_->tiled_texture_external.CreateDefault(*context_, options);
860 pipelines_->tiled_texture_uv_external.CreateDefault(*context_, options);
862 pipelines_->texture_downsample_gles.CreateDefault(*context_,
863 options_trianglestrip);
868 InitializeCommonlyUsedShadersIfNeeded();