| Flutter Impeller |

Classes | Public Types | Public Member Functions | Protected Member Functions | List of all members
impeller::ContentContext Class Reference

`#include <content_context.h>`

Inheritance diagram for impeller::ContentContext:

## Classes
struct | Pipelines

## Public Types
using | SubpassCallback = std::function< bool(const ContentContext &, RenderPass &)>

## Public Member Functions
| ContentContext (std::shared_ptr< Context > context, std::shared_ptr< TypographerContext > typographer_context, std::shared_ptr< RenderTargetAllocator > render_target_allocator=nullptr)
| ~ContentContext ()
bool | IsValid () const
Tessellator & | GetTessellator () const
PipelineRef | GetBlendColorBurnPipeline (ContentContextOptions opts) const
PipelineRef | GetBlendColorDodgePipeline (ContentContextOptions opts) const
PipelineRef | GetBlendColorPipeline (ContentContextOptions opts) const
PipelineRef | GetBlendDarkenPipeline (ContentContextOptions opts) const
PipelineRef | GetBlendDifferencePipeline (ContentContextOptions opts) const
PipelineRef | GetBlendExclusionPipeline (ContentContextOptions opts) const
PipelineRef | GetBlendHardLightPipeline (ContentContextOptions opts) const
PipelineRef | GetBlendHuePipeline (ContentContextOptions opts) const
PipelineRef | GetBlendLightenPipeline (ContentContextOptions opts) const
PipelineRef | GetBlendLuminosityPipeline (ContentContextOptions opts) const
PipelineRef | GetBlendMultiplyPipeline (ContentContextOptions opts) const
PipelineRef | GetBlendOverlayPipeline (ContentContextOptions opts) const
PipelineRef | GetBlendSaturationPipeline (ContentContextOptions opts) const
PipelineRef | GetBlendScreenPipeline (ContentContextOptions opts) const
PipelineRef | GetBlendSoftLightPipeline (ContentContextOptions opts) const
PipelineRef | GetBorderMaskBlurPipeline (ContentContextOptions opts) const
PipelineRef | GetCirclePipeline (ContentContextOptions opts) const
PipelineRef | GetClearBlendPipeline (ContentContextOptions opts) const
PipelineRef | GetClipPipeline (ContentContextOptions opts) const
PipelineRef | GetColorMatrixColorFilterPipeline (ContentContextOptions opts) const
PipelineRef | GetConicalGradientFillPipeline (ContentContextOptions opts, ConicalKind kind) const
PipelineRef | GetConicalGradientSSBOFillPipeline (ContentContextOptions opts, ConicalKind kind) const
PipelineRef | GetConicalGradientUniformFillPipeline (ContentContextOptions opts, ConicalKind kind) const
PipelineRef | GetDestinationATopBlendPipeline (ContentContextOptions opts) const
PipelineRef | GetDestinationBlendPipeline (ContentContextOptions opts) const
PipelineRef | GetDestinationInBlendPipeline (ContentContextOptions opts) const
PipelineRef | GetDestinationOutBlendPipeline (ContentContextOptions opts) const
PipelineRef | GetDestinationOverBlendPipeline (ContentContextOptions opts) const
PipelineRef | GetDownsamplePipeline (ContentContextOptions opts) const
PipelineRef | GetDrawShadowVerticesPipeline (ContentContextOptions opts) const
PipelineRef | GetDownsampleBoundedPipeline (ContentContextOptions opts) const
PipelineRef | GetDrawVerticesUberPipeline (BlendMode blend_mode, ContentContextOptions opts) const
PipelineRef | GetFastGradientPipeline (ContentContextOptions opts) const
PipelineRef | GetFramebufferBlendColorBurnPipeline (ContentContextOptions opts) const
PipelineRef | GetFramebufferBlendColorDodgePipeline (ContentContextOptions opts) const
PipelineRef | GetFramebufferBlendColorPipeline (ContentContextOptions opts) const
PipelineRef | GetFramebufferBlendDarkenPipeline (ContentContextOptions opts) const
PipelineRef | GetFramebufferBlendDifferencePipeline (ContentContextOptions opts) const
PipelineRef | GetFramebufferBlendExclusionPipeline (ContentContextOptions opts) const
PipelineRef | GetFramebufferBlendHardLightPipeline (ContentContextOptions opts) const
PipelineRef | GetFramebufferBlendHuePipeline (ContentContextOptions opts) const
PipelineRef | GetFramebufferBlendLightenPipeline (ContentContextOptions opts) const
PipelineRef | GetFramebufferBlendLuminosityPipeline (ContentContextOptions opts) const
PipelineRef | GetFramebufferBlendMultiplyPipeline (ContentContextOptions opts) const
PipelineRef | GetFramebufferBlendOverlayPipeline (ContentContextOptions opts) const
PipelineRef | GetFramebufferBlendSaturationPipeline (ContentContextOptions opts) const
PipelineRef | GetFramebufferBlendScreenPipeline (ContentContextOptions opts) const
PipelineRef | GetFramebufferBlendSoftLightPipeline (ContentContextOptions opts) const
PipelineRef | GetGaussianBlurPipeline (ContentContextOptions opts) const
PipelineRef | GetGlyphAtlasPipeline (ContentContextOptions opts) const
PipelineRef | GetLinePipeline (ContentContextOptions opts) const
PipelineRef | GetLinearGradientFillPipeline (ContentContextOptions opts) const
PipelineRef | GetLinearGradientSSBOFillPipeline (ContentContextOptions opts) const
PipelineRef | GetLinearGradientUniformFillPipeline (ContentContextOptions opts) const
PipelineRef | GetLinearToSrgbFilterPipeline (ContentContextOptions opts) const
PipelineRef | GetModulateBlendPipeline (ContentContextOptions opts) const
PipelineRef | GetMorphologyFilterPipeline (ContentContextOptions opts) const
PipelineRef | GetPlusBlendPipeline (ContentContextOptions opts) const
PipelineRef | GetPorterDuffPipeline (BlendMode mode, ContentContextOptions opts) const
PipelineRef | GetRadialGradientFillPipeline (ContentContextOptions opts) const
PipelineRef | GetRadialGradientSSBOFillPipeline (ContentContextOptions opts) const
PipelineRef | GetRadialGradientUniformFillPipeline (ContentContextOptions opts) const
PipelineRef | GetRRectBlurPipeline (ContentContextOptions opts) const
PipelineRef | GetRSuperellipseBlurPipeline (ContentContextOptions opts) const
PipelineRef | GetScreenBlendPipeline (ContentContextOptions opts) const
PipelineRef | GetSolidFillPipeline (ContentContextOptions opts) const
PipelineRef | GetSourceATopBlendPipeline (ContentContextOptions opts) const
PipelineRef | GetSourceBlendPipeline (ContentContextOptions opts) const
PipelineRef | GetSourceInBlendPipeline (ContentContextOptions opts) const
PipelineRef | GetSourceOutBlendPipeline (ContentContextOptions opts) const
PipelineRef | GetSourceOverBlendPipeline (ContentContextOptions opts) const
PipelineRef | GetSrgbToLinearFilterPipeline (ContentContextOptions opts) const
PipelineRef | GetSweepGradientFillPipeline (ContentContextOptions opts) const
PipelineRef | GetSweepGradientSSBOFillPipeline (ContentContextOptions opts) const
PipelineRef | GetSweepGradientUniformFillPipeline (ContentContextOptions opts) const
PipelineRef | GetTexturePipeline (ContentContextOptions opts) const
PipelineRef | GetTextureStrictSrcPipeline (ContentContextOptions opts) const
PipelineRef | GetTiledTexturePipeline (ContentContextOptions opts) const
PipelineRef | GetXorBlendPipeline (ContentContextOptions opts) const
PipelineRef | GetYUVToRGBFilterPipeline (ContentContextOptions opts) const
std::shared_ptr< Texture > | GetEmptyTexture () const
std::shared_ptr< Context > | GetContext () const
const Capabilities & | GetDeviceCapabilities () const
fml::StatusOr< RenderTarget > | MakeSubpass (std::string_view label, ISize texture_size, const std::shared_ptr< CommandBuffer > &command_buffer, const SubpassCallback &subpass_callback, bool msaa_enabled=true, bool depth_stencil_enabled=false, int32_t mip_count=1) const
| Creates a new texture of size `texture_size` and calls `subpass_callback` with a `RenderPass` for drawing to the texture. More...
fml::StatusOr< RenderTarget > | MakeSubpass (std::string_view label, const RenderTarget &subpass_target, const std::shared_ptr< CommandBuffer > &command_buffer, const SubpassCallback &subpass_callback) const
| Makes a subpass that will render to `subpass_target`. More...
const std::shared_ptr< LazyGlyphAtlas > & | GetLazyGlyphAtlas () const
const std::shared_ptr< RenderTargetAllocator > & | GetRenderTargetCache () const
PipelineRef | GetCachedRuntimeEffectPipeline (const std::string &unique_entrypoint_name, const ContentContextOptions &options, const std::function< std::shared_ptr< Pipeline< PipelineDescriptor >>()> &create_callback) const
void | ClearCachedRuntimeEffectPipeline (const std::string &unique_entrypoint_name) const
HostBuffer & | GetTransientsIndexesBuffer () const
| Retrieve the current host buffer for transient storage of indexes used for indexed draws. More...
HostBuffer & | GetTransientsDataBuffer () const
| Retrieve the current host buffer for transient storage of other non-index data. More...
void | ResetTransientsBuffers ()
| Resets the transients buffers held onto by the content context. More...
TextShadowCache & | GetTextShadowCache () const

## Protected Member Functions
void | SetTransientsIndexesBuffer (std::shared_ptr< HostBuffer > host_buffer)
void | SetTransientsDataBuffer (std::shared_ptr< HostBuffer > host_buffer)

## Detailed Description

Definition at line 122 of file content_context.h.

## Member Typedef Documentation

## ◆ SubpassCallback

using impeller::ContentContext::SubpassCallback = std::function<bool(const ContentContext&, RenderPass&)>

Definition at line 233 of file content_context.h.

## Constructor & Destructor Documentation

## ◆ ContentContext()

impeller::ContentContext::ContentContext | ( | std::shared_ptr< Context > | context,
|  | std::shared_ptr< TypographerContext > | typographer_context,
|  | std::shared_ptr< RenderTargetAllocator > | render_target_allocator = `nullptr`
| ) |  |
| explicit

Setup default clip pipeline.

Definition at line 549 of file content_context.cc.

553 : context_(std::move(context)),
554 lazy_glyph_atlas_(
555 std::make_shared<LazyGlyphAtlas>(std::move(typographer_context))),
556 pipelines_(new Pipelines()),
557 tessellator_(std::make_shared<Tessellator>(
558 context_->GetCapabilities()->Supports32BitPrimitiveIndices())),
559 render_target_cache_(render_target_allocator == nullptr
560 ? std::make_shared<RenderTargetCache>(
561 context_->GetResourceAllocator())
562 : std::move(render_target_allocator)),
563 data_host_buffer_(HostBuffer::Create(
564 context_->GetResourceAllocator(),
565 context_->GetIdleWaiter(),
566 context_->GetCapabilities()->GetMinimumUniformAlignment())),
567 text_shadow_cache_(std::make_unique<TextShadowCache>()) {
568 if (!context_ || !context_->IsValid()) {
569 return;
570 }
571
572 // On most backends, indexes and other data can be allocated into the same
573 // buffers. However, some backends (namely WebGL) require indexes used in
574 // indexed draws to be allocated separately from other data. For those
575 // backends, we allocate a separate host buffer just for indexes.
576 indexes_host_buffer_ =
577 context_->GetCapabilities()->NeedsPartitionedHostBuffer()
578 ? HostBuffer::Create(
579 context_->GetResourceAllocator(), context_->GetIdleWaiter(),
580 context_->GetCapabilities()->GetMinimumUniformAlignment())
581 : data_host_buffer_;
582 {
583 TextureDescriptor desc;
584 desc.storage_mode = StorageMode::kDevicePrivate;
585 desc.format = PixelFormat::kR8G8B8A8UNormInt;
586 desc.size = ISize{1, 1};
587 empty_texture_ = GetContext()->GetResourceAllocator()->CreateTexture(desc);
588
589 std::array<uint8_t, 4> data = Color::BlackTransparent().ToR8G8B8A8();
590 std::shared_ptr<CommandBuffer> cmd_buffer =
591 GetContext()->CreateCommandBuffer();
592 std::shared_ptr<BlitPass> blit_pass = cmd_buffer->CreateBlitPass();
593 HostBuffer& data_host_buffer = GetTransientsDataBuffer();
594 BufferView buffer_view = data_host_buffer.Emplace(data);
595 blit_pass->AddCopy(buffer_view, empty_texture_);
596
597 if (!blit_pass->EncodeCommands() || !GetContext()
598 ->GetCommandQueue()
599 ->Submit({std::move(cmd_buffer)})
600 .ok()) {
601 VALIDATION_LOG << "Failed to create empty texture.";
602 }
603 }
604
605 auto options = ContentContextOptions{
606 .sample_count = SampleCount::kCount4,
607 .color_attachment_pixel_format =
608 context_->GetCapabilities()->GetDefaultColorFormat()};
609 auto options_trianglestrip = ContentContextOptions{
610 .sample_count = SampleCount::kCount4,
611 .primitive_type = PrimitiveType::kTriangleStrip,
612 .color_attachment_pixel_format =
613 context_->GetCapabilities()->GetDefaultColorFormat()};
614 auto options_no_msaa_no_depth_stencil = ContentContextOptions{
615 .sample_count = SampleCount::kCount1,
616 .primitive_type = PrimitiveType::kTriangleStrip,
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());
622
623 // Futures for the following pipelines may block in case the first frame is
624 // rendered without the pipelines being ready. Put pipelines that are more
625 // likely to be used first.
626 {
627 pipelines_->glyph_atlas.CreateDefault(
628 *context_, options,
629 {static_cast<Scalar>(
630 GetContext()->GetCapabilities()->GetDefaultGlyphAtlasFormat() ==
631 PixelFormat::kA8UNormInt)});
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);
637
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,
642 {3.0});
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);
650 } else {
651 pipelines_->linear_gradient_uniform_fill.CreateDefault(*context_,
652 options);
653 pipelines_->radial_gradient_uniform_fill.CreateDefault(*context_,
654 options);
655 pipelines_->conical_gradient_uniform_fill.CreateDefault(*context_,
656 options);
657 pipelines_->conical_gradient_uniform_fill_radial.CreateDefault(*context_,
658 options);
659 pipelines_->conical_gradient_uniform_fill_strip.CreateDefault(*context_,
660 options);
661 pipelines_->conical_gradient_uniform_fill_strip_and_radial.CreateDefault(
662 *context_, options);
663 pipelines_->sweep_gradient_uniform_fill.CreateDefault(*context_, options);
664
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_,
669 options);
670 pipelines_->conical_gradient_fill_strip.CreateDefault(*context_, options);
671 pipelines_->conical_gradient_fill_strip_and_radial.CreateDefault(
672 *context_, options);
673 pipelines_->sweep_gradient_fill.CreateDefault(*context_, options);
674 }
675
676 /// Setup default clip pipeline.
677 auto clip_pipeline_descriptor =
678 ClipPipeline::Builder::MakeDefaultPipelineDescriptor(*context_);
679 if (!clip_pipeline_descriptor.has_value()) {
680 return;
681 }
682 ContentContextOptions{
683 .sample_count = SampleCount::kCount4,
684 .color_attachment_pixel_format =
685 context_->GetCapabilities()->GetDefaultColorFormat()}
686 .ApplyToPipelineDescriptor(*clip_pipeline_descriptor);
687 // Disable write to all color attachments.
688 auto clip_color_attachments =
689 clip_pipeline_descriptor->GetColorAttachmentDescriptors();
690 for (auto& color_attachment : clip_color_attachments) {
691 color_attachment.second.write_mask = ColorWriteMaskBits::kNone;
692 }
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);
698 } else {
699 pipelines_->clip.SetDefault(
700 options,
701 std::make_unique<ClipPipeline>(*context_, clip_pipeline_descriptor));
702 }
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,
712 {supports_decal});
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,
721 {supports_decal});
722 pipelines_->vertices_uber_2_.CreateDefault(*context_, options,
723 {supports_decal});
724
725 const std::array<std::vector<Scalar>, 15> porter_duff_constants =
726 GetPorterDuffSpecConstants(supports_decal);
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]);
757 }
758
759 if (context_->GetCapabilities()->SupportsFramebufferFetch()) {
760 pipelines_->framebuffer_blend_color.CreateDefault(
761 *context_, options_trianglestrip,
762 {static_cast<Scalar>(BlendSelectValues::kColor), supports_decal});
763 pipelines_->framebuffer_blend_colorburn.CreateDefault(
764 *context_, options_trianglestrip,
765 {static_cast<Scalar>(BlendSelectValues::kColorBurn), supports_decal});
766 pipelines_->framebuffer_blend_colordodge.CreateDefault(
767 *context_, options_trianglestrip,
768 {static_cast<Scalar>(BlendSelectValues::kColorDodge), supports_decal});
769 pipelines_->framebuffer_blend_darken.CreateDefault(
770 *context_, options_trianglestrip,
771 {static_cast<Scalar>(BlendSelectValues::kDarken), supports_decal});
772 pipelines_->framebuffer_blend_difference.CreateDefault(
773 *context_, options_trianglestrip,
774 {static_cast<Scalar>(BlendSelectValues::kDifference), supports_decal});
775 pipelines_->framebuffer_blend_exclusion.CreateDefault(
776 *context_, options_trianglestrip,
777 {static_cast<Scalar>(BlendSelectValues::kExclusion), supports_decal});
778 pipelines_->framebuffer_blend_hardlight.CreateDefault(
779 *context_, options_trianglestrip,
780 {static_cast<Scalar>(BlendSelectValues::kHardLight), supports_decal});
781 pipelines_->framebuffer_blend_hue.CreateDefault(
782 *context_, options_trianglestrip,
783 {static_cast<Scalar>(BlendSelectValues::kHue), supports_decal});
784 pipelines_->framebuffer_blend_lighten.CreateDefault(
785 *context_, options_trianglestrip,
786 {static_cast<Scalar>(BlendSelectValues::kLighten), supports_decal});
787 pipelines_->framebuffer_blend_luminosity.CreateDefault(
788 *context_, options_trianglestrip,
789 {static_cast<Scalar>(BlendSelectValues::kLuminosity), supports_decal});
790 pipelines_->framebuffer_blend_multiply.CreateDefault(
791 *context_, options_trianglestrip,
792 {static_cast<Scalar>(BlendSelectValues::kMultiply), supports_decal});
793 pipelines_->framebuffer_blend_overlay.CreateDefault(
794 *context_, options_trianglestrip,
795 {static_cast<Scalar>(BlendSelectValues::kOverlay), supports_decal});
796 pipelines_->framebuffer_blend_saturation.CreateDefault(
797 *context_, options_trianglestrip,
798 {static_cast<Scalar>(BlendSelectValues::kSaturation), supports_decal});
799 pipelines_->framebuffer_blend_screen.CreateDefault(
800 *context_, options_trianglestrip,
801 {static_cast<Scalar>(BlendSelectValues::kScreen), supports_decal});
802 pipelines_->framebuffer_blend_softlight.CreateDefault(
803 *context_, options_trianglestrip,
804 {static_cast<Scalar>(BlendSelectValues::kSoftLight), supports_decal});
805 } else {
806 pipelines_->blend_color.CreateDefault(
807 *context_, options_trianglestrip,
808 {static_cast<Scalar>(BlendSelectValues::kColor), supports_decal});
809 pipelines_->blend_colorburn.CreateDefault(
810 *context_, options_trianglestrip,
811 {static_cast<Scalar>(BlendSelectValues::kColorBurn), supports_decal});
812 pipelines_->blend_colordodge.CreateDefault(
813 *context_, options_trianglestrip,
814 {static_cast<Scalar>(BlendSelectValues::kColorDodge), supports_decal});
815 pipelines_->blend_darken.CreateDefault(
816 *context_, options_trianglestrip,
817 {static_cast<Scalar>(BlendSelectValues::kDarken), supports_decal});
818 pipelines_->blend_difference.CreateDefault(
819 *context_, options_trianglestrip,
820 {static_cast<Scalar>(BlendSelectValues::kDifference), supports_decal});
821 pipelines_->blend_exclusion.CreateDefault(
822 *context_, options_trianglestrip,
823 {static_cast<Scalar>(BlendSelectValues::kExclusion), supports_decal});
824 pipelines_->blend_hardlight.CreateDefault(
825 *context_, options_trianglestrip,
826 {static_cast<Scalar>(BlendSelectValues::kHardLight), supports_decal});
827 pipelines_->blend_hue.CreateDefault(
828 *context_, options_trianglestrip,
829 {static_cast<Scalar>(BlendSelectValues::kHue), supports_decal});
830 pipelines_->blend_lighten.CreateDefault(
831 *context_, options_trianglestrip,
832 {static_cast<Scalar>(BlendSelectValues::kLighten), supports_decal});
833 pipelines_->blend_luminosity.CreateDefault(
834 *context_, options_trianglestrip,
835 {static_cast<Scalar>(BlendSelectValues::kLuminosity), supports_decal});
836 pipelines_->blend_multiply.CreateDefault(
837 *context_, options_trianglestrip,
838 {static_cast<Scalar>(BlendSelectValues::kMultiply), supports_decal});
839 pipelines_->blend_overlay.CreateDefault(
840 *context_, options_trianglestrip,
841 {static_cast<Scalar>(BlendSelectValues::kOverlay), supports_decal});
842 pipelines_->blend_saturation.CreateDefault(
843 *context_, options_trianglestrip,
844 {static_cast<Scalar>(BlendSelectValues::kSaturation), supports_decal});
845 pipelines_->blend_screen.CreateDefault(
846 *context_, options_trianglestrip,
847 {static_cast<Scalar>(BlendSelectValues::kScreen), supports_decal});
848 pipelines_->blend_softlight.CreateDefault(
849 *context_, options_trianglestrip,
850 {static_cast<Scalar>(BlendSelectValues::kSoftLight), supports_decal});
851 }
852
853 pipelines_->morphology_filter.CreateDefault(*context_, options_trianglestrip,
854 {supports_decal});
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);
860
861 if (GetContext()->GetBackendType() == Context::BackendType::kOpenGLES) {
862 #if defined(IMPELLER_ENABLE_OPENGLES) && !defined(FML_OS_MACOSX) && \
863 !defined(FML_OS_EMSCRIPTEN)
864 // GLES only shader that is unsupported on macOS and web.
865 pipelines_->tiled_texture_external.CreateDefault(*context_, options);
866 pipelines_->tiled_texture_uv_external.CreateDefault(*context_, options);
867 #endif // !defined(FML_OS_MACOSX)
868
869 #if defined(IMPELLER_ENABLE_OPENGLES)
870 pipelines_->texture_downsample_gles.CreateDefault(*context_,
871 options_trianglestrip);
872 #endif // IMPELLER_ENABLE_OPENGLES
873 }
874
875 is_valid_ = true;
876 InitializeCommonlyUsedShadersIfNeeded();
877 }
buffer_view
BufferView buffer_view
Definition: blit_command_gles.cc:154
impeller::ContentContext::GetTransientsDataBuffer
HostBuffer & GetTransientsDataBuffer() const
Retrieve the current host buffer for transient storage of other non-index data.
Definition: content_context.h:299
impeller::ContentContext::GetContext
std::shared_ptr< Context > GetContext() const
Definition: content_context.cc:969
impeller::Context::BackendType::kOpenGLES
@ kOpenGLES
impeller::HostBuffer::Create
static std::shared_ptr< HostBuffer > Create(const std::shared_ptr< Allocator > &allocator, const std::shared_ptr< const IdleWaiter > &idle_waiter, size_t minimum_uniform_alignment)
Definition: host_buffer.cc:21
impeller::PrimitiveType::kTriangleStrip
@ kTriangleStrip
impeller::Scalar
float Scalar
Definition: scalar.h:19
impeller::StorageMode::kDevicePrivate
@ kDevicePrivate
impeller::PixelFormat::kA8UNormInt
@ kA8UNormInt
impeller::PixelFormat::kR8G8B8A8UNormInt
@ kR8G8B8A8UNormInt
impeller::GetPorterDuffSpecConstants
std::array< std::vector< Scalar >, 15 > GetPorterDuffSpecConstants(bool supports_decal)
Definition: content_context.cc:510
impeller::ISize
ISize64 ISize
Definition: size.h:162
impeller::ColorWriteMaskBits::kNone
@ kNone
impeller::SampleCount::kCount4
@ kCount4
impeller::SampleCount::kCount1
@ kCount1
impeller::BlendSelectValues::kExclusion
@ kExclusion
impeller::BlendSelectValues::kSaturation
@ kSaturation
impeller::BlendSelectValues::kColorBurn
@ kColorBurn
impeller::BlendSelectValues::kLighten
@ kLighten
impeller::BlendSelectValues::kHue
@ kHue
impeller::BlendSelectValues::kMultiply
@ kMultiply
impeller::BlendSelectValues::kColorDodge
@ kColorDodge
impeller::BlendSelectValues::kScreen
@ kScreen
impeller::BlendSelectValues::kLuminosity
@ kLuminosity
impeller::BlendSelectValues::kSoftLight
@ kSoftLight
impeller::BlendSelectValues::kDifference
@ kDifference
impeller::BlendSelectValues::kOverlay
@ kOverlay
impeller::BlendSelectValues::kColor
@ kColor
impeller::BlendSelectValues::kHardLight
@ kHardLight
impeller::BlendSelectValues::kDarken
@ kDarken
impeller::Color::ToR8G8B8A8
std::array< uint8_t, 4 > ToR8G8B8A8() const
Convert to R8G8B8A8 representation.
Definition: color.h:246
impeller::Color::BlackTransparent
static constexpr Color BlackTransparent()
Definition: color.h:270
impeller::PipelineBuilder::MakeDefaultPipelineDescriptor
static std::optional< PipelineDescriptor > MakeDefaultPipelineDescriptor(const Context &context, const std::vector< Scalar > &constants={})
Create a default pipeline descriptor using the combination reflected shader information....
Definition: pipeline_builder.h:50
data
std::shared_ptr< const fml::Mapping > data
Definition: texture_gles.cc:69
VALIDATION_LOG
#define VALIDATION_LOG
Definition: validation.h:91

References impeller::Color::BlackTransparent(), buffer_view, impeller::HostBuffer::Create(), data, impeller::HostBuffer::Emplace(), impeller::TextureDescriptor::format, GetContext(), impeller::GetPorterDuffSpecConstants(), GetTransientsDataBuffer(), impeller::kA8UNormInt, impeller::kColor, impeller::kColorBurn, impeller::kColorDodge, impeller::kCount1, impeller::kCount4, impeller::kDarken, impeller::kDevicePrivate, impeller::kDifference, impeller::kExclusion, impeller::kHardLight, impeller::kHue, impeller::kLighten, impeller::kLuminosity, impeller::kMultiply, impeller::kNone, impeller::Context::kOpenGLES, impeller::kOverlay, impeller::kR8G8B8A8UNormInt, impeller::kSaturation, impeller::kScreen, impeller::kSoftLight, impeller::kTriangleStrip, impeller::PipelineBuilder< VertexShader_, FragmentShader_ >::MakeDefaultPipelineDescriptor(), pipelines_, impeller::ContentContextOptions::sample_count, impeller::TextureDescriptor::size, impeller::TextureDescriptor::storage_mode, impeller::Color::ToR8G8B8A8(), and VALIDATION_LOG.

## ◆ ~ContentContext()

impeller::ContentContext::~ContentContext | ( |  | ) |
| default

## Member Function Documentation

## ◆ ClearCachedRuntimeEffectPipeline()

void impeller::ContentContext::ClearCachedRuntimeEffectPipeline | ( | const std::string & | unique_entrypoint_name | ) | const

Used by hot reload/hot restart to clear a cached pipeline from GetCachedRuntimeEffectPipeline.

Definition at line 990 of file content_context.cc.

991 {
992 #ifdef IMPELLER_DEBUG
993 // destroying in-use pipleines is a validation error.
994 const auto& idle_waiter = GetContext()->GetIdleWaiter();
995 if (idle_waiter) {
996 idle_waiter->WaitIdle();
997 }
998 #endif // IMPELLER_DEBUG
999 for (auto it = runtime_effect_pipelines_.begin();
1000 it != runtime_effect_pipelines_.end();) {
1001 if (it->first.unique_entrypoint_name == unique_entrypoint_name) {
1002 it = runtime_effect_pipelines_.erase(it);
1003 } else {
1004 it++;
1005 }
1006 }
1007 }

References GetContext().

## ◆ GetBlendColorBurnPipeline()

PipelineRef impeller::ContentContext::GetBlendColorBurnPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1343 of file content_context.cc.

1344 {
1345 return GetPipeline(this, pipelines_->blend_colorburn, opts);
1346 }

References pipelines_.

## ◆ GetBlendColorDodgePipeline()

PipelineRef impeller::ContentContext::GetBlendColorDodgePipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1348 of file content_context.cc.

1349 {
1350 return GetPipeline(this, pipelines_->blend_colordodge, opts);
1351 }

References pipelines_.

## ◆ GetBlendColorPipeline()

PipelineRef impeller::ContentContext::GetBlendColorPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1338 of file content_context.cc.

1339 {
1340 return GetPipeline(this, pipelines_->blend_color, opts);
1341 }

References pipelines_.

## ◆ GetBlendDarkenPipeline()

PipelineRef impeller::ContentContext::GetBlendDarkenPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1353 of file content_context.cc.

1354 {
1355 return GetPipeline(this, pipelines_->blend_darken, opts);
1356 }

References pipelines_.

## ◆ GetBlendDifferencePipeline()

PipelineRef impeller::ContentContext::GetBlendDifferencePipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1358 of file content_context.cc.

1359 {
1360 return GetPipeline(this, pipelines_->blend_difference, opts);
1361 }

References pipelines_.

## ◆ GetBlendExclusionPipeline()

PipelineRef impeller::ContentContext::GetBlendExclusionPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1363 of file content_context.cc.

1364 {
1365 return GetPipeline(this, pipelines_->blend_exclusion, opts);
1366 }

References pipelines_.

## ◆ GetBlendHardLightPipeline()

PipelineRef impeller::ContentContext::GetBlendHardLightPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1368 of file content_context.cc.

1369 {
1370 return GetPipeline(this, pipelines_->blend_hardlight, opts);
1371 }

References pipelines_.

## ◆ GetBlendHuePipeline()

PipelineRef impeller::ContentContext::GetBlendHuePipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1373 of file content_context.cc.

1374 {
1375 return GetPipeline(this, pipelines_->blend_hue, opts);
1376 }

References pipelines_.

## ◆ GetBlendLightenPipeline()

PipelineRef impeller::ContentContext::GetBlendLightenPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1378 of file content_context.cc.

1379 {
1380 return GetPipeline(this, pipelines_->blend_lighten, opts);
1381 }

References pipelines_.

## ◆ GetBlendLuminosityPipeline()

PipelineRef impeller::ContentContext::GetBlendLuminosityPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1383 of file content_context.cc.

1384 {
1385 return GetPipeline(this, pipelines_->blend_luminosity, opts);
1386 }

References pipelines_.

## ◆ GetBlendMultiplyPipeline()

PipelineRef impeller::ContentContext::GetBlendMultiplyPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1388 of file content_context.cc.

1389 {
1390 return GetPipeline(this, pipelines_->blend_multiply, opts);
1391 }

References pipelines_.

## ◆ GetBlendOverlayPipeline()

PipelineRef impeller::ContentContext::GetBlendOverlayPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1393 of file content_context.cc.

1394 {
1395 return GetPipeline(this, pipelines_->blend_overlay, opts);
1396 }

References pipelines_.

## ◆ GetBlendSaturationPipeline()

PipelineRef impeller::ContentContext::GetBlendSaturationPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1398 of file content_context.cc.

1399 {
1400 return GetPipeline(this, pipelines_->blend_saturation, opts);
1401 }

References pipelines_.

## ◆ GetBlendScreenPipeline()

PipelineRef impeller::ContentContext::GetBlendScreenPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1403 of file content_context.cc.

1404 {
1405 return GetPipeline(this, pipelines_->blend_screen, opts);
1406 }

References pipelines_.

## ◆ GetBlendSoftLightPipeline()

PipelineRef impeller::ContentContext::GetBlendSoftLightPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1408 of file content_context.cc.

1409 {
1410 return GetPipeline(this, pipelines_->blend_softlight, opts);
1411 }

References pipelines_.

## ◆ GetBorderMaskBlurPipeline()

PipelineRef impeller::ContentContext::GetBorderMaskBlurPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1169 of file content_context.cc.

1170 {
1171 return GetPipeline(this, pipelines_->border_mask_blur, opts);
1172 }

References pipelines_.

## ◆ GetCachedRuntimeEffectPipeline()

PipelineRef impeller::ContentContext::GetCachedRuntimeEffectPipeline | ( | const std::string & | unique_entrypoint_name,
|  | const ContentContextOptions & | options,
|  | const std::function< std::shared_ptr< Pipeline< PipelineDescriptor >>()> & | create_callback
| ) |  | const

RuntimeEffect pipelines must be obtained via this method to avoid re-creating them every frame.

The unique_entrypoint_name comes from RuntimeEffect::GetEntrypoint. Impellerc generates a unique entrypoint name for runtime effect shaders based on the input file name and shader stage.

The create_callback is synchronously invoked exactly once if a cached pipeline is not found.

Definition at line 977 of file content_context.cc.

981 {
982 RuntimeEffectPipelineKey key{unique_entrypoint_name, options};
983 auto it = runtime_effect_pipelines_.find(key);
984 if (it == runtime_effect_pipelines_.end()) {
985 it = runtime_effect_pipelines_.insert(it, {key, create_callback()});
986 }
987 return raw_ptr(it->second);
988 }

Referenced by impeller::RuntimeEffectContents::Render().

## ◆ GetCirclePipeline()

PipelineRef impeller::ContentContext::GetCirclePipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1528 of file content_context.cc.

1529 {
1530 return GetPipeline(this, pipelines_->circle, opts);
1531 }

References pipelines_.

Referenced by impeller::CircleContents::Render().

## ◆ GetClearBlendPipeline()

PipelineRef impeller::ContentContext::GetClearBlendPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1263 of file content_context.cc.

1264 {
1265 return GetPipeline(this, pipelines_->clear_blend, opts);
1266 }

References pipelines_.

Referenced by GetPorterDuffPipeline().

## ◆ GetClipPipeline()

PipelineRef impeller::ContentContext::GetClipPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1194 of file content_context.cc.

1194 {
1195 return GetPipeline(this, pipelines_->clip, opts);
1196 }

References pipelines_.

Referenced by impeller::ColorSourceContents::DrawGeometry(), and impeller::ClipContents::Render().

## ◆ GetColorMatrixColorFilterPipeline()

PipelineRef impeller::ContentContext::GetColorMatrixColorFilterPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1179 of file content_context.cc.

1180 {
1181 return GetPipeline(this, pipelines_->color_matrix_color_filter, opts);
1182 }

References pipelines_.

Referenced by impeller::ColorFilterAtlasContents::Render().

## ◆ GetConicalGradientFillPipeline()

PipelineRef impeller::ContentContext::GetConicalGradientFillPipeline | ( | ContentContextOptions | opts,
|  | ConicalKind | kind
| ) |  | const

Definition at line 1113 of file content_context.cc.

1115 {
1116 switch (kind) {
1117 case ConicalKind::kConical:
1118 return GetPipeline(this, pipelines_->conical_gradient_fill, opts);
1119 case ConicalKind::kRadial:
1120 return GetPipeline(this, pipelines_->conical_gradient_fill_radial, opts);
1121 case ConicalKind::kStrip:
1122 return GetPipeline(this, pipelines_->conical_gradient_fill_strip, opts);
1123 case ConicalKind::kStripAndRadial:
1124 return GetPipeline(
1125 this, pipelines_->conical_gradient_fill_strip_and_radial, opts);
1126 }
1127 }
impeller::kStripAndRadial
@ kStripAndRadial
Definition: content_context.h:116
impeller::kStrip
@ kStrip
Definition: content_context.h:115
impeller::kConical
@ kConical
Definition: content_context.h:113
impeller::kRadial
@ kRadial
Definition: content_context.h:114

References impeller::kConical, impeller::kRadial, impeller::kStrip, impeller::kStripAndRadial, and pipelines_.

## ◆ GetConicalGradientSSBOFillPipeline()

PipelineRef impeller::ContentContext::GetConicalGradientSSBOFillPipeline | ( | ContentContextOptions | opts,
|  | ConicalKind | kind
| ) |  | const

Definition at line 1083 of file content_context.cc.

1085 {
1086 FML_DCHECK(GetDeviceCapabilities().SupportsSSBO());
1087 switch (kind) {
1088 case ConicalKind::kConical:
1089 return GetPipeline(this, pipelines_->conical_gradient_ssbo_fill, opts);
1090 case ConicalKind::kRadial:
1091 return GetPipeline(this, pipelines_->conical_gradient_ssbo_fill_radial,
1092 opts);
1093 case ConicalKind::kStrip:
1094 return GetPipeline(this, pipelines_->conical_gradient_ssbo_fill_strip,
1095 opts);
1096 case ConicalKind::kStripAndRadial:
1097 return GetPipeline(
1098 this, pipelines_->conical_gradient_ssbo_fill_strip_and_radial, opts);
1099 }
1100 }
impeller::ContentContext::GetDeviceCapabilities
const Capabilities & GetDeviceCapabilities() const
Definition: content_context.cc:973

References GetDeviceCapabilities(), impeller::kConical, impeller::kRadial, impeller::kStrip, impeller::kStripAndRadial, and pipelines_.

## ◆ GetConicalGradientUniformFillPipeline()

PipelineRef impeller::ContentContext::GetConicalGradientUniformFillPipeline | ( | ContentContextOptions | opts,
|  | ConicalKind | kind
| ) |  | const

Definition at line 1064 of file content_context.cc.

1066 {
1067 switch (kind) {
1068 case ConicalKind::kConical:
1069 return GetPipeline(this, pipelines_->conical_gradient_uniform_fill, opts);
1070 case ConicalKind::kRadial:
1071 return GetPipeline(this, pipelines_->conical_gradient_uniform_fill_radial,
1072 opts);
1073 case ConicalKind::kStrip:
1074 return GetPipeline(this, pipelines_->conical_gradient_uniform_fill_strip,
1075 opts);
1076 case ConicalKind::kStripAndRadial:
1077 return GetPipeline(
1078 this, pipelines_->conical_gradient_uniform_fill_strip_and_radial,
1079 opts);
1080 }
1081 }

References impeller::kConical, impeller::kRadial, impeller::kStrip, impeller::kStripAndRadial, and pipelines_.

## ◆ GetContext()

std::shared_ptr< Context > impeller::ContentContext::GetContext | ( |  | ) | const

Definition at line 969 of file content_context.cc.

969 {
970 return context_;
971 }

Referenced by impeller::AdvancedBlend(), impeller::RuntimeEffectContents::BootstrapShader(), ClearCachedRuntimeEffectPipeline(), ContentContext(), impeller::testing::CreateTestCanvas(), impeller::Canvas::DrawLine(), impeller::InlinePassContext::EndPass(), impeller::EntityPassTarget::Flip(), impeller::InlinePassContext::GetRenderPass(), MakeSubpass(), impeller::PipelineBlend(), impeller::AtlasContents::Render(), impeller::ColorFilterAtlasContents::Render(), impeller::LineContents::Render(), impeller::RuntimeEffectContents::Render(), impeller::TextContents::Render(), impeller::TextureContents::Render(), impeller::TiledTextureContents::Render(), impeller::VerticesSimpleBlendContents::Render(), impeller::Contents::RenderToSnapshot(), impeller::Canvas::SaveLayer(), and impeller::testing::TEST_P().

## ◆ GetDestinationATopBlendPipeline()

PipelineRef impeller::ContentContext::GetDestinationATopBlendPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1313 of file content_context.cc.

1314 {
1315 return GetPipeline(this, pipelines_->destination_a_top_blend, opts);
1316 }

References pipelines_.

Referenced by GetPorterDuffPipeline().

## ◆ GetDestinationBlendPipeline()

PipelineRef impeller::ContentContext::GetDestinationBlendPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1273 of file content_context.cc.

1274 {
1275 return GetPipeline(this, pipelines_->destination_blend, opts);
1276 }

References pipelines_.

Referenced by GetPorterDuffPipeline().

## ◆ GetDestinationInBlendPipeline()

PipelineRef impeller::ContentContext::GetDestinationInBlendPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1293 of file content_context.cc.

1294 {
1295 return GetPipeline(this, pipelines_->destination_in_blend, opts);
1296 }

References pipelines_.

Referenced by GetPorterDuffPipeline().

## ◆ GetDestinationOutBlendPipeline()

PipelineRef impeller::ContentContext::GetDestinationOutBlendPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1303 of file content_context.cc.

1304 {
1305 return GetPipeline(this, pipelines_->destination_out_blend, opts);
1306 }

References pipelines_.

Referenced by GetPorterDuffPipeline().

## ◆ GetDestinationOverBlendPipeline()

PipelineRef impeller::ContentContext::GetDestinationOverBlendPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1283 of file content_context.cc.

1284 {
1285 return GetPipeline(this, pipelines_->destination_over_blend, opts);
1286 }

References pipelines_.

Referenced by GetPorterDuffPipeline().

## ◆ GetDeviceCapabilities()

const Capabilities & impeller::ContentContext::GetDeviceCapabilities | ( |  | ) | const

Definition at line 973 of file content_context.cc.

973 {
974 return *context_->GetCapabilities();
975 }

Referenced by impeller::testing::CreateTestCanvas(), GetConicalGradientSSBOFillPipeline(), GetFramebufferBlendColorBurnPipeline(), GetFramebufferBlendColorDodgePipeline(), GetFramebufferBlendColorPipeline(), GetFramebufferBlendDarkenPipeline(), GetFramebufferBlendDifferencePipeline(), GetFramebufferBlendExclusionPipeline(), GetFramebufferBlendHardLightPipeline(), GetFramebufferBlendHuePipeline(), GetFramebufferBlendLightenPipeline(), GetFramebufferBlendLuminosityPipeline(), GetFramebufferBlendMultiplyPipeline(), GetFramebufferBlendOverlayPipeline(), GetFramebufferBlendSaturationPipeline(), GetFramebufferBlendScreenPipeline(), GetFramebufferBlendSoftLightPipeline(), GetLinearGradientSSBOFillPipeline(), GetRadialGradientSSBOFillPipeline(), GetSweepGradientSSBOFillPipeline(), impeller::ConicalGradientContents::Render(), impeller::LinearGradientContents::Render(), impeller::RadialGradientContents::Render(), impeller::SweepGradientContents::Render(), impeller::TiledTextureContents::Render(), impeller::VerticesSimpleBlendContents::Render(), impeller::RequiresReadbackForBlends(), impeller::Canvas::Restore(), impeller::Canvas::SaveLayer(), and impeller::testing::TEST_P().

## ◆ GetDownsampleBoundedPipeline()

PipelineRef impeller::ContentContext::GetDownsampleBoundedPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1418 of file content_context.cc.

1419 {
1420 return GetPipeline(this, pipelines_->texture_downsample_bounded, opts);
1421 }

References pipelines_.

## ◆ GetDownsamplePipeline()

PipelineRef impeller::ContentContext::GetDownsamplePipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1413 of file content_context.cc.

1414 {
1415 return GetPipeline(this, pipelines_->texture_downsample, opts);
1416 }

References pipelines_.

## ◆ GetDrawShadowVerticesPipeline()

PipelineRef impeller::ContentContext::GetDrawShadowVerticesPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1513 of file content_context.cc.

1514 {
1515 return GetPipeline(this, pipelines_->shadow_vertices_, opts);
1516 }

References pipelines_.

Referenced by impeller::ShadowVerticesContents::Render().

## ◆ GetDrawVerticesUberPipeline()

PipelineRef impeller::ContentContext::GetDrawVerticesUberPipeline | ( | BlendMode | blend_mode,
|  | ContentContextOptions | opts
| ) |  | const

Definition at line 1518 of file content_context.cc.

1520 {
1521 if (blend_mode <= BlendMode::kHardLight) {
1522 return GetPipeline(this, pipelines_->vertices_uber_1_, opts);
1523 } else {
1524 return GetPipeline(this, pipelines_->vertices_uber_2_, opts);
1525 }
1526 }
impeller::BlendMode::kHardLight
@ kHardLight

References impeller::kHardLight, and pipelines_.

Referenced by impeller::AtlasContents::Render(), and impeller::VerticesSimpleBlendContents::Render().

## ◆ GetEmptyTexture()

std::shared_ptr< Texture > impeller::ContentContext::GetEmptyTexture | ( |  | ) | const

Definition at line 885 of file content_context.cc.

885 {
886 return empty_texture_;
887 }

Referenced by impeller::VerticesSimpleBlendContents::Render().

## ◆ GetFastGradientPipeline()

PipelineRef impeller::ContentContext::GetFastGradientPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1027 of file content_context.cc.

1028 {
1029 return GetPipeline(this, pipelines_->fast_gradient, opts);
1030 }

References pipelines_.

## ◆ GetFramebufferBlendColorBurnPipeline()

PipelineRef impeller::ContentContext::GetFramebufferBlendColorBurnPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1429 of file content_context.cc.

1430 {
1431 FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch());
1432 return GetPipeline(this, pipelines_->framebuffer_blend_colorburn, opts);
1433 }

References GetDeviceCapabilities(), and pipelines_.

## ◆ GetFramebufferBlendColorDodgePipeline()

PipelineRef impeller::ContentContext::GetFramebufferBlendColorDodgePipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1435 of file content_context.cc.

1436 {
1437 FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch());
1438 return GetPipeline(this, pipelines_->framebuffer_blend_colordodge, opts);
1439 }

References GetDeviceCapabilities(), and pipelines_.

## ◆ GetFramebufferBlendColorPipeline()

PipelineRef impeller::ContentContext::GetFramebufferBlendColorPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1423 of file content_context.cc.

1424 {
1425 FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch());
1426 return GetPipeline(this, pipelines_->framebuffer_blend_color, opts);
1427 }

References GetDeviceCapabilities(), and pipelines_.

## ◆ GetFramebufferBlendDarkenPipeline()

PipelineRef impeller::ContentContext::GetFramebufferBlendDarkenPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1441 of file content_context.cc.

1442 {
1443 FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch());
1444 return GetPipeline(this, pipelines_->framebuffer_blend_darken, opts);
1445 }

References GetDeviceCapabilities(), and pipelines_.

## ◆ GetFramebufferBlendDifferencePipeline()

PipelineRef impeller::ContentContext::GetFramebufferBlendDifferencePipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1447 of file content_context.cc.

1448 {
1449 FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch());
1450 return GetPipeline(this, pipelines_->framebuffer_blend_difference, opts);
1451 }

References GetDeviceCapabilities(), and pipelines_.

## ◆ GetFramebufferBlendExclusionPipeline()

PipelineRef impeller::ContentContext::GetFramebufferBlendExclusionPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1453 of file content_context.cc.

1454 {
1455 FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch());
1456 return GetPipeline(this, pipelines_->framebuffer_blend_exclusion, opts);
1457 }

References GetDeviceCapabilities(), and pipelines_.

## ◆ GetFramebufferBlendHardLightPipeline()

PipelineRef impeller::ContentContext::GetFramebufferBlendHardLightPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1459 of file content_context.cc.

1460 {
1461 FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch());
1462 return GetPipeline(this, pipelines_->framebuffer_blend_hardlight, opts);
1463 }

References GetDeviceCapabilities(), and pipelines_.

## ◆ GetFramebufferBlendHuePipeline()

PipelineRef impeller::ContentContext::GetFramebufferBlendHuePipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1465 of file content_context.cc.

1466 {
1467 FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch());
1468 return GetPipeline(this, pipelines_->framebuffer_blend_hue, opts);
1469 }

References GetDeviceCapabilities(), and pipelines_.

## ◆ GetFramebufferBlendLightenPipeline()

PipelineRef impeller::ContentContext::GetFramebufferBlendLightenPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1471 of file content_context.cc.

1472 {
1473 FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch());
1474 return GetPipeline(this, pipelines_->framebuffer_blend_lighten, opts);
1475 }

References GetDeviceCapabilities(), and pipelines_.

## ◆ GetFramebufferBlendLuminosityPipeline()

PipelineRef impeller::ContentContext::GetFramebufferBlendLuminosityPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1477 of file content_context.cc.

1478 {
1479 FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch());
1480 return GetPipeline(this, pipelines_->framebuffer_blend_luminosity, opts);
1481 }

References GetDeviceCapabilities(), and pipelines_.

## ◆ GetFramebufferBlendMultiplyPipeline()

PipelineRef impeller::ContentContext::GetFramebufferBlendMultiplyPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1483 of file content_context.cc.

1484 {
1485 FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch());
1486 return GetPipeline(this, pipelines_->framebuffer_blend_multiply, opts);
1487 }

References GetDeviceCapabilities(), and pipelines_.

## ◆ GetFramebufferBlendOverlayPipeline()

PipelineRef impeller::ContentContext::GetFramebufferBlendOverlayPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1489 of file content_context.cc.

1490 {
1491 FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch());
1492 return GetPipeline(this, pipelines_->framebuffer_blend_overlay, opts);
1493 }

References GetDeviceCapabilities(), and pipelines_.

## ◆ GetFramebufferBlendSaturationPipeline()

PipelineRef impeller::ContentContext::GetFramebufferBlendSaturationPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1495 of file content_context.cc.

1496 {
1497 FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch());
1498 return GetPipeline(this, pipelines_->framebuffer_blend_saturation, opts);
1499 }

References GetDeviceCapabilities(), and pipelines_.

## ◆ GetFramebufferBlendScreenPipeline()

PipelineRef impeller::ContentContext::GetFramebufferBlendScreenPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1501 of file content_context.cc.

1502 {
1503 FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch());
1504 return GetPipeline(this, pipelines_->framebuffer_blend_screen, opts);
1505 }

References GetDeviceCapabilities(), and pipelines_.

## ◆ GetFramebufferBlendSoftLightPipeline()

PipelineRef impeller::ContentContext::GetFramebufferBlendSoftLightPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1507 of file content_context.cc.

1508 {
1509 FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch());
1510 return GetPipeline(this, pipelines_->framebuffer_blend_softlight, opts);
1511 }

References GetDeviceCapabilities(), and pipelines_.

## ◆ GetGaussianBlurPipeline()

PipelineRef impeller::ContentContext::GetGaussianBlurPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1164 of file content_context.cc.

1165 {
1166 return GetPipeline(this, pipelines_->gaussian_blur, opts);
1167 }

References pipelines_.

## ◆ GetGlyphAtlasPipeline()

PipelineRef impeller::ContentContext::GetGlyphAtlasPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1198 of file content_context.cc.

1199 {
1200 return GetPipeline(this, pipelines_->glyph_atlas, opts);
1201 }

References pipelines_.

Referenced by impeller::TextContents::Render().

## ◆ GetLazyGlyphAtlas()

const std::shared_ptr<LazyGlyphAtlas>& impeller::ContentContext::GetLazyGlyphAtlas | ( |  | ) | const
| inline

Definition at line 254 of file content_context.h.

254 {
255 return lazy_glyph_atlas_;
256 }

Referenced by impeller::FirstPassDispatcher::drawText(), impeller::TextContents::Render(), impeller::RenderToTarget(), and impeller::testing::TEST_P().

## ◆ GetLinearGradientFillPipeline()

PipelineRef impeller::ContentContext::GetLinearGradientFillPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1032 of file content_context.cc.

1033 {
1034 return GetPipeline(this, pipelines_->linear_gradient_fill, opts);
1035 }

References pipelines_.

## ◆ GetLinearGradientSSBOFillPipeline()

PipelineRef impeller::ContentContext::GetLinearGradientSSBOFillPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1052 of file content_context.cc.

1053 {
1054 FML_DCHECK(GetDeviceCapabilities().SupportsSSBO());
1055 return GetPipeline(this, pipelines_->linear_gradient_ssbo_fill, opts);
1056 }

References GetDeviceCapabilities(), and pipelines_.

## ◆ GetLinearGradientUniformFillPipeline()

PipelineRef impeller::ContentContext::GetLinearGradientUniformFillPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1037 of file content_context.cc.

1038 {
1039 return GetPipeline(this, pipelines_->linear_gradient_uniform_fill, opts);
1040 }

References pipelines_.

## ◆ GetLinearToSrgbFilterPipeline()

PipelineRef impeller::ContentContext::GetLinearToSrgbFilterPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1184 of file content_context.cc.

1185 {
1186 return GetPipeline(this, pipelines_->linear_to_srgb_filter, opts);
1187 }

References pipelines_.

## ◆ GetLinePipeline()

PipelineRef impeller::ContentContext::GetLinePipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1533 of file content_context.cc.

1533 {
1534 return GetPipeline(this, pipelines_->line, opts);
1535 }

References pipelines_.

Referenced by impeller::LineContents::Render().

## ◆ GetModulateBlendPipeline()

PipelineRef impeller::ContentContext::GetModulateBlendPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1328 of file content_context.cc.

1329 {
1330 return GetPipeline(this, pipelines_->modulate_blend, opts);
1331 }

References pipelines_.

Referenced by GetPorterDuffPipeline().

## ◆ GetMorphologyFilterPipeline()

PipelineRef impeller::ContentContext::GetMorphologyFilterPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1174 of file content_context.cc.

1175 {
1176 return GetPipeline(this, pipelines_->morphology_filter, opts);
1177 }

References pipelines_.

## ◆ GetPlusBlendPipeline()

PipelineRef impeller::ContentContext::GetPlusBlendPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1323 of file content_context.cc.

1324 {
1325 return GetPipeline(this, pipelines_->plus_blend, opts);
1326 }

References pipelines_.

Referenced by GetPorterDuffPipeline().

## ◆ GetPorterDuffPipeline()

PipelineRef impeller::ContentContext::GetPorterDuffPipeline | ( | BlendMode | mode,
|  | ContentContextOptions | opts
| ) |  | const

Definition at line 1208 of file content_context.cc.

1210 {
1211 switch (mode) {
1212 case BlendMode::kClear:
1213 return GetClearBlendPipeline(opts);
1214 case BlendMode::kSrc:
1215 return GetSourceBlendPipeline(opts);
1216 case BlendMode::kDst:
1217 return GetDestinationBlendPipeline(opts);
1218 case BlendMode::kSrcOver:
1219 return GetSourceOverBlendPipeline(opts);
1220 case BlendMode::kDstOver:
1221 return GetDestinationOverBlendPipeline(opts);
1222 case BlendMode::kSrcIn:
1223 return GetSourceInBlendPipeline(opts);
1224 case BlendMode::kDstIn:
1225 return GetDestinationInBlendPipeline(opts);
1226 case BlendMode::kSrcOut:
1227 return GetSourceOutBlendPipeline(opts);
1228 case BlendMode::kDstOut:
1229 return GetDestinationOutBlendPipeline(opts);
1230 case BlendMode::kSrcATop:
1231 return GetSourceATopBlendPipeline(opts);
1232 case BlendMode::kDstATop:
1233 return GetDestinationATopBlendPipeline(opts);
1234 case BlendMode::kXor:
1235 return GetXorBlendPipeline(opts);
1236 case BlendMode::kPlus:
1237 return GetPlusBlendPipeline(opts);
1238 case BlendMode::kModulate:
1239 return GetModulateBlendPipeline(opts);
1240 case BlendMode::kScreen:
1241 return GetScreenBlendPipeline(opts);
1242 case BlendMode::kOverlay:
1243 case BlendMode::kDarken:
1244 case BlendMode::kLighten:
1245 case BlendMode::kColorDodge:
1246 case BlendMode::kColorBurn:
1247 case BlendMode::kHardLight:
1248 case BlendMode::kSoftLight:
1249 case BlendMode::kDifference:
1250 case BlendMode::kExclusion:
1251 case BlendMode::kMultiply:
1252 case BlendMode::kHue:
1253 case BlendMode::kSaturation:
1254 case BlendMode::kColor:
1255 case BlendMode::kLuminosity:
1256 VALIDATION_LOG << "Invalid porter duff blend mode "
1257 << BlendModeToString(mode);
1258 return GetClearBlendPipeline(opts);
1259 break;
1260 }
1261 }
impeller::ContentContext::GetSourceInBlendPipeline
PipelineRef GetSourceInBlendPipeline(ContentContextOptions opts) const
Definition: content_context.cc:1288
impeller::ContentContext::GetSourceOutBlendPipeline
PipelineRef GetSourceOutBlendPipeline(ContentContextOptions opts) const
Definition: content_context.cc:1298
impeller::ContentContext::GetScreenBlendPipeline
PipelineRef GetScreenBlendPipeline(ContentContextOptions opts) const
Definition: content_context.cc:1333
impeller::ContentContext::GetPlusBlendPipeline
PipelineRef GetPlusBlendPipeline(ContentContextOptions opts) const
Definition: content_context.cc:1323
impeller::ContentContext::GetModulateBlendPipeline
PipelineRef GetModulateBlendPipeline(ContentContextOptions opts) const
Definition: content_context.cc:1328
impeller::ContentContext::GetDestinationATopBlendPipeline
PipelineRef GetDestinationATopBlendPipeline(ContentContextOptions opts) const
Definition: content_context.cc:1313
impeller::ContentContext::GetClearBlendPipeline
PipelineRef GetClearBlendPipeline(ContentContextOptions opts) const
Definition: content_context.cc:1263
impeller::ContentContext::GetDestinationOutBlendPipeline
PipelineRef GetDestinationOutBlendPipeline(ContentContextOptions opts) const
Definition: content_context.cc:1303
impeller::ContentContext::GetSourceATopBlendPipeline
PipelineRef GetSourceATopBlendPipeline(ContentContextOptions opts) const
Definition: content_context.cc:1308
impeller::ContentContext::GetXorBlendPipeline
PipelineRef GetXorBlendPipeline(ContentContextOptions opts) const
Definition: content_context.cc:1318
impeller::ContentContext::GetSourceBlendPipeline
PipelineRef GetSourceBlendPipeline(ContentContextOptions opts) const
Definition: content_context.cc:1268
impeller::ContentContext::GetDestinationBlendPipeline
PipelineRef GetDestinationBlendPipeline(ContentContextOptions opts) const
Definition: content_context.cc:1273
impeller::ContentContext::GetDestinationOverBlendPipeline
PipelineRef GetDestinationOverBlendPipeline(ContentContextOptions opts) const
Definition: content_context.cc:1283
impeller::ContentContext::GetSourceOverBlendPipeline
PipelineRef GetSourceOverBlendPipeline(ContentContextOptions opts) const
Definition: content_context.cc:1278
impeller::ContentContext::GetDestinationInBlendPipeline
PipelineRef GetDestinationInBlendPipeline(ContentContextOptions opts) const
Definition: content_context.cc:1293
impeller::BlendModeToString
const char * BlendModeToString(BlendMode blend_mode)
Definition: color.cc:47
impeller::BlendMode::kSrcOut
@ kSrcOut
impeller::BlendMode::kExclusion
@ kExclusion
impeller::BlendMode::kSaturation
@ kSaturation
impeller::BlendMode::kColorBurn
@ kColorBurn
impeller::BlendMode::kPlus
@ kPlus
impeller::BlendMode::kLighten
@ kLighten
impeller::BlendMode::kHue
@ kHue
impeller::BlendMode::kDst
@ kDst
impeller::BlendMode::kDstIn
@ kDstIn
impeller::BlendMode::kModulate
@ kModulate
impeller::BlendMode::kMultiply
@ kMultiply
impeller::BlendMode::kColorDodge
@ kColorDodge
impeller::BlendMode::kScreen
@ kScreen
impeller::BlendMode::kSrcOver
@ kSrcOver
impeller::BlendMode::kXor
@ kXor
impeller::BlendMode::kSrc
@ kSrc
impeller::BlendMode::kLuminosity
@ kLuminosity
impeller::BlendMode::kSoftLight
@ kSoftLight
impeller::BlendMode::kDifference
@ kDifference
impeller::BlendMode::kOverlay
@ kOverlay
impeller::BlendMode::kSrcATop
@ kSrcATop
impeller::BlendMode::kDstATop
@ kDstATop
impeller::BlendMode::kDstOver
@ kDstOver
impeller::BlendMode::kColor
@ kColor
impeller::BlendMode::kDstOut
@ kDstOut
impeller::BlendMode::kDarken
@ kDarken
impeller::BlendMode::kSrcIn
@ kSrcIn
impeller::BlendMode::kClear
@ kClear

References impeller::BlendModeToString(), GetClearBlendPipeline(), GetDestinationATopBlendPipeline(), GetDestinationBlendPipeline(), GetDestinationInBlendPipeline(), GetDestinationOutBlendPipeline(), GetDestinationOverBlendPipeline(), GetModulateBlendPipeline(), GetPlusBlendPipeline(), GetScreenBlendPipeline(), GetSourceATopBlendPipeline(), GetSourceBlendPipeline(), GetSourceInBlendPipeline(), GetSourceOutBlendPipeline(), GetSourceOverBlendPipeline(), GetXorBlendPipeline(), impeller::kClear, impeller::kColor, impeller::kColorBurn, impeller::kColorDodge, impeller::kDarken, impeller::kDifference, impeller::kDst, impeller::kDstATop, impeller::kDstIn, impeller::kDstOut, impeller::kDstOver, impeller::kExclusion, impeller::kHardLight, impeller::kHue, impeller::kLighten, impeller::kLuminosity, impeller::kModulate, impeller::kMultiply, impeller::kOverlay, impeller::kPlus, impeller::kSaturation, impeller::kScreen, impeller::kSoftLight, impeller::kSrc, impeller::kSrcATop, impeller::kSrcIn, impeller::kSrcOut, impeller::kSrcOver, impeller::kXor, and VALIDATION_LOG.

Referenced by impeller::AtlasContents::Render(), and impeller::VerticesSimpleBlendContents::Render().

## ◆ GetRadialGradientFillPipeline()

PipelineRef impeller::ContentContext::GetRadialGradientFillPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1108 of file content_context.cc.

1109 {
1110 return GetPipeline(this, pipelines_->radial_gradient_fill, opts);
1111 }

References pipelines_.

## ◆ GetRadialGradientSSBOFillPipeline()

PipelineRef impeller::ContentContext::GetRadialGradientSSBOFillPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1058 of file content_context.cc.

1059 {
1060 FML_DCHECK(GetDeviceCapabilities().SupportsSSBO());
1061 return GetPipeline(this, pipelines_->radial_gradient_ssbo_fill, opts);
1062 }

References GetDeviceCapabilities(), and pipelines_.

## ◆ GetRadialGradientUniformFillPipeline()

PipelineRef impeller::ContentContext::GetRadialGradientUniformFillPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1042 of file content_context.cc.

1043 {
1044 return GetPipeline(this, pipelines_->radial_gradient_uniform_fill, opts);
1045 }

References pipelines_.

## ◆ GetRenderTargetCache()

const std::shared_ptr<RenderTargetAllocator>& impeller::ContentContext::GetRenderTargetCache | ( |  | ) | const
| inline

Definition at line 258 of file content_context.h.

258 {
259 return render_target_cache_;
260 }

Referenced by impeller::EntityPassTarget::Flip(), impeller::TextShadowCache::Lookup(), impeller::DlImageImpeller::MakeFromYUVTextures(), MakeSubpass(), impeller::EntityPlayground::OpenPlaygroundHere(), and impeller::testing::TEST_P().

## ◆ GetRRectBlurPipeline()

PipelineRef impeller::ContentContext::GetRRectBlurPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1129 of file content_context.cc.

1130 {
1131 return GetPipeline(this, pipelines_->rrect_blur, opts);
1132 }

References pipelines_.

Referenced by impeller::SolidRRectBlurContents::SetPassInfo().

## ◆ GetRSuperellipseBlurPipeline()

PipelineRef impeller::ContentContext::GetRSuperellipseBlurPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1134 of file content_context.cc.

1135 {
1136 return GetPipeline(this, pipelines_->rsuperellipse_blur, opts);
1137 }

References pipelines_.

## ◆ GetScreenBlendPipeline()

PipelineRef impeller::ContentContext::GetScreenBlendPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1333 of file content_context.cc.

1334 {
1335 return GetPipeline(this, pipelines_->screen_blend, opts);
1336 }

References pipelines_.

Referenced by GetPorterDuffPipeline().

## ◆ GetSolidFillPipeline()

PipelineRef impeller::ContentContext::GetSolidFillPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1144 of file content_context.cc.

1145 {
1146 return GetPipeline(this, pipelines_->solid_fill, opts);
1147 }

References pipelines_.

Referenced by impeller::SolidColorContents::Render(), and impeller::testing::TEST_P().

## ◆ GetSourceATopBlendPipeline()

PipelineRef impeller::ContentContext::GetSourceATopBlendPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1308 of file content_context.cc.

1309 {
1310 return GetPipeline(this, pipelines_->source_a_top_blend, opts);
1311 }

References pipelines_.

Referenced by GetPorterDuffPipeline().

## ◆ GetSourceBlendPipeline()

PipelineRef impeller::ContentContext::GetSourceBlendPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1268 of file content_context.cc.

1269 {
1270 return GetPipeline(this, pipelines_->source_blend, opts);
1271 }

References pipelines_.

Referenced by GetPorterDuffPipeline().

## ◆ GetSourceInBlendPipeline()

PipelineRef impeller::ContentContext::GetSourceInBlendPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1288 of file content_context.cc.

1289 {
1290 return GetPipeline(this, pipelines_->source_in_blend, opts);
1291 }

References pipelines_.

Referenced by GetPorterDuffPipeline().

## ◆ GetSourceOutBlendPipeline()

PipelineRef impeller::ContentContext::GetSourceOutBlendPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1298 of file content_context.cc.

1299 {
1300 return GetPipeline(this, pipelines_->source_out_blend, opts);
1301 }

References pipelines_.

Referenced by GetPorterDuffPipeline().

## ◆ GetSourceOverBlendPipeline()

PipelineRef impeller::ContentContext::GetSourceOverBlendPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1278 of file content_context.cc.

1279 {
1280 return GetPipeline(this, pipelines_->source_over_blend, opts);
1281 }

References pipelines_.

Referenced by GetPorterDuffPipeline().

## ◆ GetSrgbToLinearFilterPipeline()

PipelineRef impeller::ContentContext::GetSrgbToLinearFilterPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1189 of file content_context.cc.

1190 {
1191 return GetPipeline(this, pipelines_->srgb_to_linear_filter, opts);
1192 }

References pipelines_.

## ◆ GetSweepGradientFillPipeline()

PipelineRef impeller::ContentContext::GetSweepGradientFillPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1139 of file content_context.cc.

1140 {
1141 return GetPipeline(this, pipelines_->sweep_gradient_fill, opts);
1142 }

References pipelines_.

## ◆ GetSweepGradientSSBOFillPipeline()

PipelineRef impeller::ContentContext::GetSweepGradientSSBOFillPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1102 of file content_context.cc.

1103 {
1104 FML_DCHECK(GetDeviceCapabilities().SupportsSSBO());
1105 return GetPipeline(this, pipelines_->sweep_gradient_ssbo_fill, opts);
1106 }

References GetDeviceCapabilities(), and pipelines_.

## ◆ GetSweepGradientUniformFillPipeline()

PipelineRef impeller::ContentContext::GetSweepGradientUniformFillPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1047 of file content_context.cc.

1048 {
1049 return GetPipeline(this, pipelines_->sweep_gradient_uniform_fill, opts);
1050 }

References pipelines_.

## ◆ GetTessellator()

Tessellator & impeller::ContentContext::GetTessellator | ( |  | ) | const

Definition at line 965 of file content_context.cc.

965 {
966 return *tessellator_;
967 }

Referenced by impeller::CircleGeometry::GetPositionBuffer(), and impeller::StrokeRectGeometry::GetPositionBuffer().

## ◆ GetTextShadowCache()

TextShadowCache& impeller::ContentContext::GetTextShadowCache | ( |  | ) | const
| inline

Definition at line 304 of file content_context.h.

304 { return *text_shadow_cache_; }

Referenced by impeller::DisplayListToTexture(), impeller::RenderToTarget(), and impeller::testing::TEST_P().

## ◆ GetTexturePipeline()

PipelineRef impeller::ContentContext::GetTexturePipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1149 of file content_context.cc.

1150 {
1151 return GetPipeline(this, pipelines_->texture, opts);
1152 }

References pipelines_.

Referenced by impeller::PipelineBlend(), impeller::AtlasContents::Render(), and impeller::TextureContents::Render().

## ◆ GetTextureStrictSrcPipeline()

PipelineRef impeller::ContentContext::GetTextureStrictSrcPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1154 of file content_context.cc.

1155 {
1156 return GetPipeline(this, pipelines_->texture_strict_src, opts);
1157 }

References pipelines_.

Referenced by impeller::TextureContents::Render().

## ◆ GetTiledTexturePipeline()

PipelineRef impeller::ContentContext::GetTiledTexturePipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1159 of file content_context.cc.

1160 {
1161 return GetPipeline(this, pipelines_->tiled_texture, opts);
1162 }

References pipelines_.

Referenced by impeller::TiledTextureContents::Render().

## ◆ GetTransientsDataBuffer()

HostBuffer& impeller::ContentContext::GetTransientsDataBuffer | ( |  | ) | const
| inline

Retrieve the current host buffer for transient storage of other non-index data.

This is only safe to use from the raster threads. Other threads should allocate their own device buffers.

Definition at line 299 of file content_context.h.

299 { return *data_host_buffer_; }

Referenced by impeller::AdvancedBlend(), impeller::Geometry::ComputePositionGeometry(), ContentContext(), impeller::ColorSourceContents::DrawGeometry(), impeller::ShadowVertices::GetPositionBuffer(), impeller::DlVerticesGeometry::GetPositionBuffer(), impeller::FillRectGeometry::GetPositionBuffer(), impeller::StrokeRectGeometry::GetPositionBuffer(), impeller::DlVerticesGeometry::GetPositionUVColorBuffer(), impeller::EntityPlayground::OpenPlaygroundHere(), impeller::PipelineBlend(), impeller::AtlasContents::Render(), impeller::ColorFilterAtlasContents::Render(), impeller::CircleContents::Render(), impeller::LineContents::Render(), impeller::RuntimeEffectContents::Render(), impeller::ShadowVerticesContents::Render(), impeller::SolidColorContents::Render(), impeller::SolidRRectLikeBlurContents::Render(), impeller::TextContents::Render(), impeller::TextureContents::Render(), impeller::TiledTextureContents::Render(), impeller::VerticesSimpleBlendContents::Render(), impeller::ClipContents::Render(), impeller::SolidRRectBlurContents::SetPassInfo(), and impeller::testing::TEST_P().

## ◆ GetTransientsIndexesBuffer()

HostBuffer& impeller::ContentContext::GetTransientsIndexesBuffer | ( |  | ) | const
| inline

Retrieve the current host buffer for transient storage of indexes used for indexed draws.

This may or may not return the same value as `GetTransientsDataBuffer` depending on the backend.

This is only safe to use from the raster threads. Other threads should allocate their own device buffers.

Definition at line 290 of file content_context.h.

290 {
291 return *indexes_host_buffer_;
292 }

Referenced by impeller::ShadowVertices::GetPositionBuffer(), impeller::DlVerticesGeometry::GetPositionBuffer(), impeller::DlVerticesGeometry::GetPositionUVColorBuffer(), impeller::EntityPlayground::OpenPlaygroundHere(), impeller::TextContents::Render(), and impeller::testing::TEST_P().

## ◆ GetXorBlendPipeline()

PipelineRef impeller::ContentContext::GetXorBlendPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1318 of file content_context.cc.

1319 {
1320 return GetPipeline(this, pipelines_->xor_blend, opts);
1321 }

References pipelines_.

Referenced by GetPorterDuffPipeline().

## ◆ GetYUVToRGBFilterPipeline()

PipelineRef impeller::ContentContext::GetYUVToRGBFilterPipeline | ( | ContentContextOptions | opts | ) | const

Definition at line 1203 of file content_context.cc.

1204 {
1205 return GetPipeline(this, pipelines_->yuv_to_rgb_filter, opts);
1206 }

References pipelines_.

## ◆ IsValid()

bool impeller::ContentContext::IsValid | ( |  | ) | const

Definition at line 881 of file content_context.cc.

881 {
882 return is_valid_;
883 }

Referenced by impeller::EntityPlayground::OpenPlaygroundHere().

## ◆ MakeSubpass() [1/2]

fml::StatusOr< RenderTarget > impeller::ContentContext::MakeSubpass | ( | std::string_view | label,
|  | const RenderTarget & | subpass_target,
|  | const std::shared_ptr< CommandBuffer > & | command_buffer,
|  | const SubpassCallback & | subpass_callback
| ) |  | const

Makes a subpass that will render to `subpass_target`.

Definition at line 926 of file content_context.cc.

930 {
931 const std::shared_ptr<Context>& context = GetContext();
932
933 auto subpass_texture = subpass_target.GetRenderTargetTexture();
934 if (!subpass_texture) {
935 return fml::Status(fml::StatusCode::kUnknown, "");
936 }
937
938 auto sub_renderpass = command_buffer->CreateRenderPass(subpass_target);
939 if (!sub_renderpass) {
940 return fml::Status(fml::StatusCode::kUnknown, "");
941 }
942 sub_renderpass->SetLabel(label);
943
944 if (!subpass_callback(*this, *sub_renderpass)) {
945 return fml::Status(fml::StatusCode::kUnknown, "");
946 }
947
948 if (!sub_renderpass->EncodeCommands()) {
949 return fml::Status(fml::StatusCode::kUnknown, "");
950 }
951
952 const std::shared_ptr<Texture>& target_texture =
953 subpass_target.GetRenderTargetTexture();
954 if (target_texture->GetMipCount() > 1) {
955 fml::Status mipmap_status =
956 AddMipmapGeneration(command_buffer, context, target_texture);
957 if (!mipmap_status.ok()) {
958 return mipmap_status;
959 }
960 }
961
962 return subpass_target;
963 }
impeller::AddMipmapGeneration
fml::Status AddMipmapGeneration(const std::shared_ptr< CommandBuffer > &command_buffer, const std::shared_ptr< Context > &context, const std::shared_ptr< Texture > &texture)
Adds a blit command to the render pass.
Definition: texture_util.cc:37

References impeller::AddMipmapGeneration(), GetContext(), and impeller::RenderTarget::GetRenderTargetTexture().

## ◆ MakeSubpass() [2/2]

fml::StatusOr< RenderTarget > impeller::ContentContext::MakeSubpass | ( | std::string_view | label,
|  | ISize | texture_size,
|  | const std::shared_ptr< CommandBuffer > & | command_buffer,
|  | const SubpassCallback & | subpass_callback,
|  | bool | msaa_enabled = `true`,
|  | bool | depth_stencil_enabled = `false`,
|  | int32_t | mip_count = `1`
| ) |  | const

Creates a new texture of size `texture_size` and calls `subpass_callback` with a `RenderPass` for drawing to the texture.

Definition at line 889 of file content_context.cc.

896 {
897 const std::shared_ptr<Context>& context = GetContext();
898 RenderTarget subpass_target;
899
900 std::optional<RenderTarget::AttachmentConfig> depth_stencil_config =
901 depth_stencil_enabled ? RenderTarget::kDefaultStencilAttachmentConfig
902 : std::optional<RenderTarget::AttachmentConfig>();
903
904 if (context->GetCapabilities()->SupportsOffscreenMSAA() && msaa_enabled) {
905 subpass_target = GetRenderTargetCache()->CreateOffscreenMSAA(
906 /*context=*/*context,
907 /*size=*/texture_size,
908 /*mip_count=*/mip_count,
909 /*label=*/label,
910 /*color_attachment_config=*/
911 RenderTarget::kDefaultColorAttachmentConfigMSAA,
912 /*stencil_attachment_config=*/depth_stencil_config,
913 /*existing_color_msaa_texture=*/nullptr,
914 /*existing_color_resolve_texture=*/nullptr,
915 /*existing_depth_stencil_texture=*/nullptr,
916 /*target_pixel_format=*/std::nullopt);
917 } else {
918 subpass_target = GetRenderTargetCache()->CreateOffscreen(
919 *context, texture_size,
920 /*mip_count=*/mip_count, label,
921 RenderTarget::kDefaultColorAttachmentConfig, depth_stencil_config);
922 }
923 return MakeSubpass(label, subpass_target, command_buffer, subpass_callback);
924 }
impeller::ContentContext::MakeSubpass
fml::StatusOr< RenderTarget > MakeSubpass(std::string_view label, ISize texture_size, const std::shared_ptr< CommandBuffer > &command_buffer, const SubpassCallback &subpass_callback, bool msaa_enabled=true, bool depth_stencil_enabled=false, int32_t mip_count=1) const
Creates a new texture of size texture_size and calls subpass_callback with a RenderPass for drawing t...
Definition: content_context.cc:889
impeller::ContentContext::GetRenderTargetCache
const std::shared_ptr< RenderTargetAllocator > & GetRenderTargetCache() const
Definition: content_context.h:258
impeller::RenderTarget::kDefaultColorAttachmentConfig
static constexpr AttachmentConfig kDefaultColorAttachmentConfig
Definition: render_target.h:55
impeller::RenderTarget::kDefaultColorAttachmentConfigMSAA
static constexpr AttachmentConfigMSAA kDefaultColorAttachmentConfigMSAA
Definition: render_target.h:61
impeller::RenderTarget::kDefaultStencilAttachmentConfig
static constexpr AttachmentConfig kDefaultStencilAttachmentConfig
Definition: render_target.h:68

References GetContext(), GetRenderTargetCache(), impeller::RenderTarget::kDefaultColorAttachmentConfig, impeller::RenderTarget::kDefaultColorAttachmentConfigMSAA, and impeller::RenderTarget::kDefaultStencilAttachmentConfig.

Referenced by impeller::AdvancedBlend(), impeller::PipelineBlend(), and impeller::Contents::RenderToSnapshot().

## ◆ ResetTransientsBuffers()

void impeller::ContentContext::ResetTransientsBuffers | ( |  | ) |

Resets the transients buffers held onto by the content context.

Definition at line 1009 of file content_context.cc.

1009 {
1010 data_host_buffer_->Reset();
1011
1012 // We should only reset the indexes host buffer if it is actually different
1013 // from the data host buffer. Otherwise we'll end up resetting the same host
1014 // buffer twice.
1015 if (data_host_buffer_ != indexes_host_buffer_) {
1016 indexes_host_buffer_->Reset();
1017 }
1018 }

Referenced by impeller::RenderToTarget().

## ◆ SetTransientsDataBuffer()

void impeller::ContentContext::SetTransientsDataBuffer | ( | std::shared_ptr< HostBuffer > | host_buffer | ) |
| inlineprotected

Definition at line 313 of file content_context.h.

313 {
314 data_host_buffer_ = std::move(host_buffer);
315 }

Referenced by impeller::testing::FlushTestContentContext::FlushTestContentContext().

## ◆ SetTransientsIndexesBuffer()

void impeller::ContentContext::SetTransientsIndexesBuffer | ( | std::shared_ptr< HostBuffer > | host_buffer | ) |
| inlineprotected

Definition at line 308 of file content_context.h.

308 {
309 indexes_host_buffer_ = std::move(host_buffer);
310 }

Referenced by impeller::testing::FlushTestContentContext::FlushTestContentContext().

The documentation for this class was generated from the following files:

- impeller/entity/contents/content_context.h
- impeller/entity/contents/content_context.cc