Flutter Impeller
impeller::ContentContext Class Reference

#include <content_context.h>

Inheritance diagram for impeller::ContentContext:
impeller::testing::FlushTestContentContext

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
 
TessellatorGetTessellator () 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< TextureGetEmptyTexture () const
 
std::shared_ptr< ContextGetContext () const
 
const CapabilitiesGetDeviceCapabilities () const
 
fml::StatusOr< RenderTargetMakeSubpass (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< RenderTargetMakeSubpass (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
 
HostBufferGetTransientsIndexesBuffer () const
 Retrieve the current host buffer for transient storage of indexes used for indexed draws. More...
 
HostBufferGetTransientsDataBuffer () 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...
 
TextShadowCacheGetTextShadowCache () 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

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()
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() ==
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 =
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 }
BufferView buffer_view
HostBuffer & GetTransientsDataBuffer() const
Retrieve the current host buffer for transient storage of other non-index data.
std::shared_ptr< Context > GetContext() const
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
float Scalar
Definition: scalar.h:19
std::array< std::vector< Scalar >, 15 > GetPorterDuffSpecConstants(bool supports_decal)
ISize64 ISize
Definition: size.h:162
std::array< uint8_t, 4 > ToR8G8B8A8() const
Convert to R8G8B8A8 representation.
Definition: color.h:246
static constexpr Color BlackTransparent()
Definition: color.h:270
static std::optional< PipelineDescriptor > MakeDefaultPipelineDescriptor(const Context &context, const std::vector< Scalar > &constants={})
Create a default pipeline descriptor using the combination reflected shader information....
std::shared_ptr< const fml::Mapping > data
Definition: texture_gles.cc:69
#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);
1124  return GetPipeline(
1125  this, pipelines_->conical_gradient_fill_strip_and_radial, opts);
1126  }
1127 }

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);
1097  return GetPipeline(
1098  this, pipelines_->conical_gradient_ssbo_fill_strip_and_radial, opts);
1099  }
1100 }
const Capabilities & GetDeviceCapabilities() const

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);
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()

◆ 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()

◆ 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 }

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:
1246  case BlendMode::kColorBurn:
1247  case BlendMode::kHardLight:
1248  case BlendMode::kSoftLight:
1250  case BlendMode::kExclusion:
1251  case BlendMode::kMultiply:
1252  case BlendMode::kHue:
1254  case BlendMode::kColor:
1256  VALIDATION_LOG << "Invalid porter duff blend mode "
1257  << BlendModeToString(mode);
1258  return GetClearBlendPipeline(opts);
1259  break;
1260  }
1261 }
PipelineRef GetSourceInBlendPipeline(ContentContextOptions opts) const
PipelineRef GetSourceOutBlendPipeline(ContentContextOptions opts) const
PipelineRef GetScreenBlendPipeline(ContentContextOptions opts) const
PipelineRef GetPlusBlendPipeline(ContentContextOptions opts) const
PipelineRef GetModulateBlendPipeline(ContentContextOptions opts) const
PipelineRef GetDestinationATopBlendPipeline(ContentContextOptions opts) const
PipelineRef GetClearBlendPipeline(ContentContextOptions opts) const
PipelineRef GetDestinationOutBlendPipeline(ContentContextOptions opts) const
PipelineRef GetSourceATopBlendPipeline(ContentContextOptions opts) const
PipelineRef GetXorBlendPipeline(ContentContextOptions opts) const
PipelineRef GetSourceBlendPipeline(ContentContextOptions opts) const
PipelineRef GetDestinationBlendPipeline(ContentContextOptions opts) const
PipelineRef GetDestinationOverBlendPipeline(ContentContextOptions opts) const
PipelineRef GetSourceOverBlendPipeline(ContentContextOptions opts) const
PipelineRef GetDestinationInBlendPipeline(ContentContextOptions opts) const
const char * BlendModeToString(BlendMode blend_mode)
Definition: color.cc:47

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

◆ 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()

◆ 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 }
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=*/
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 }
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...
const std::shared_ptr< RenderTargetAllocator > & GetRenderTargetCache() const
static constexpr AttachmentConfig kDefaultColorAttachmentConfig
Definition: render_target.h:55
static constexpr AttachmentConfigMSAA kDefaultColorAttachmentConfigMSAA
Definition: render_target.h:61
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: