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 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 138 of file content_context.h.

Member Typedef Documentation

◆ SubpassCallback

Definition at line 245 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 547 of file content_context.cc.

551  : context_(std::move(context)),
552  lazy_glyph_atlas_(
553  std::make_shared<LazyGlyphAtlas>(std::move(typographer_context))),
554  pipelines_(new Pipelines()),
555  tessellator_(std::make_shared<Tessellator>(
556  context_->GetCapabilities()->Supports32BitPrimitiveIndices())),
557  render_target_cache_(render_target_allocator == nullptr
558  ? std::make_shared<RenderTargetCache>(
559  context_->GetResourceAllocator())
560  : std::move(render_target_allocator)),
561  data_host_buffer_(HostBuffer::Create(
562  context_->GetResourceAllocator(),
563  context_->GetIdleWaiter(),
564  context_->GetCapabilities()->GetMinimumUniformAlignment())),
565  text_shadow_cache_(std::make_unique<TextShadowCache>()) {
566  if (!context_ || !context_->IsValid()) {
567  return;
568  }
569 
570  // On most backends, indexes and other data can be allocated into the same
571  // buffers. However, some backends (namely WebGL) require indexes used in
572  // indexed draws to be allocated separately from other data. For those
573  // backends, we allocate a separate host buffer just for indexes.
574  indexes_host_buffer_ =
575  context_->GetCapabilities()->NeedsPartitionedHostBuffer()
577  context_->GetResourceAllocator(), context_->GetIdleWaiter(),
578  context_->GetCapabilities()->GetMinimumUniformAlignment())
579  : data_host_buffer_;
580  {
581  TextureDescriptor desc;
582  desc.storage_mode = StorageMode::kDevicePrivate;
583  desc.format = PixelFormat::kR8G8B8A8UNormInt;
584  desc.size = ISize{1, 1};
585  empty_texture_ = GetContext()->GetResourceAllocator()->CreateTexture(desc);
586 
587  std::array<uint8_t, 4> data = Color::BlackTransparent().ToR8G8B8A8();
588  std::shared_ptr<CommandBuffer> cmd_buffer =
589  GetContext()->CreateCommandBuffer();
590  std::shared_ptr<BlitPass> blit_pass = cmd_buffer->CreateBlitPass();
591  HostBuffer& data_host_buffer = GetTransientsDataBuffer();
592  BufferView buffer_view = data_host_buffer.Emplace(data);
593  blit_pass->AddCopy(buffer_view, empty_texture_);
594 
595  if (!blit_pass->EncodeCommands() || !GetContext()
596  ->GetCommandQueue()
597  ->Submit({std::move(cmd_buffer)})
598  .ok()) {
599  VALIDATION_LOG << "Failed to create empty texture.";
600  }
601  }
602 
603  auto options = ContentContextOptions{
604  .sample_count = SampleCount::kCount4,
605  .color_attachment_pixel_format =
606  context_->GetCapabilities()->GetDefaultColorFormat()};
607  auto options_trianglestrip = ContentContextOptions{
608  .sample_count = SampleCount::kCount4,
609  .primitive_type = PrimitiveType::kTriangleStrip,
610  .color_attachment_pixel_format =
611  context_->GetCapabilities()->GetDefaultColorFormat()};
612  auto options_no_msaa_no_depth_stencil = ContentContextOptions{
613  .sample_count = SampleCount::kCount1,
614  .primitive_type = PrimitiveType::kTriangleStrip,
615  .color_attachment_pixel_format =
616  context_->GetCapabilities()->GetDefaultColorFormat(),
617  .has_depth_stencil_attachments = false};
618  const auto supports_decal = static_cast<Scalar>(
619  context_->GetCapabilities()->SupportsDecalSamplerAddressMode());
620 
621  // Futures for the following pipelines may block in case the first frame is
622  // rendered without the pipelines being ready. Put pipelines that are more
623  // likely to be used first.
624  {
625  pipelines_->glyph_atlas.CreateDefault(
626  *context_, options,
627  {static_cast<Scalar>(
628  GetContext()->GetCapabilities()->GetDefaultGlyphAtlasFormat() ==
630  pipelines_->solid_fill.CreateDefault(*context_, options);
631  pipelines_->texture.CreateDefault(*context_, options);
632  pipelines_->fast_gradient.CreateDefault(*context_, options);
633  pipelines_->line.CreateDefault(*context_, options);
634  pipelines_->circle.CreateDefault(*context_, options);
635 
636  if (context_->GetCapabilities()->SupportsSSBO()) {
637  pipelines_->linear_gradient_ssbo_fill.CreateDefault(*context_, options);
638  pipelines_->radial_gradient_ssbo_fill.CreateDefault(*context_, options);
639  pipelines_->conical_gradient_ssbo_fill.CreateDefault(*context_, options,
640  {3.0});
641  pipelines_->conical_gradient_ssbo_fill_radial.CreateDefault(
642  *context_, options, {1.0});
643  pipelines_->conical_gradient_ssbo_fill_strip.CreateDefault(
644  *context_, options, {2.0});
645  pipelines_->conical_gradient_ssbo_fill_strip_and_radial.CreateDefault(
646  *context_, options, {0.0});
647  pipelines_->sweep_gradient_ssbo_fill.CreateDefault(*context_, options);
648  } else {
649  pipelines_->linear_gradient_uniform_fill.CreateDefault(*context_,
650  options);
651  pipelines_->radial_gradient_uniform_fill.CreateDefault(*context_,
652  options);
653  pipelines_->conical_gradient_uniform_fill.CreateDefault(*context_,
654  options);
655  pipelines_->conical_gradient_uniform_fill_radial.CreateDefault(*context_,
656  options);
657  pipelines_->conical_gradient_uniform_fill_strip.CreateDefault(*context_,
658  options);
659  pipelines_->conical_gradient_uniform_fill_strip_and_radial.CreateDefault(
660  *context_, options);
661  pipelines_->sweep_gradient_uniform_fill.CreateDefault(*context_, options);
662 
663  pipelines_->linear_gradient_fill.CreateDefault(*context_, options);
664  pipelines_->radial_gradient_fill.CreateDefault(*context_, options);
665  pipelines_->conical_gradient_fill.CreateDefault(*context_, options);
666  pipelines_->conical_gradient_fill_radial.CreateDefault(*context_,
667  options);
668  pipelines_->conical_gradient_fill_strip.CreateDefault(*context_, options);
669  pipelines_->conical_gradient_fill_strip_and_radial.CreateDefault(
670  *context_, options);
671  pipelines_->sweep_gradient_fill.CreateDefault(*context_, options);
672  }
673 
674  /// Setup default clip pipeline.
675  auto clip_pipeline_descriptor =
677  if (!clip_pipeline_descriptor.has_value()) {
678  return;
679  }
680  ContentContextOptions{
681  .sample_count = SampleCount::kCount4,
682  .color_attachment_pixel_format =
683  context_->GetCapabilities()->GetDefaultColorFormat()}
684  .ApplyToPipelineDescriptor(*clip_pipeline_descriptor);
685  // Disable write to all color attachments.
686  auto clip_color_attachments =
687  clip_pipeline_descriptor->GetColorAttachmentDescriptors();
688  for (auto& color_attachment : clip_color_attachments) {
689  color_attachment.second.write_mask = ColorWriteMaskBits::kNone;
690  }
691  clip_pipeline_descriptor->SetColorAttachmentDescriptors(
692  std::move(clip_color_attachments));
693  if (GetContext()->GetFlags().lazy_shader_mode) {
694  pipelines_->clip.SetDefaultDescriptor(clip_pipeline_descriptor);
695  pipelines_->clip.SetDefault(options, nullptr);
696  } else {
697  pipelines_->clip.SetDefault(
698  options,
699  std::make_unique<ClipPipeline>(*context_, clip_pipeline_descriptor));
700  }
701  pipelines_->texture_downsample.CreateDefault(
702  *context_, options_no_msaa_no_depth_stencil);
703  pipelines_->rrect_blur.CreateDefault(*context_, options_trianglestrip);
704  pipelines_->rsuperellipse_blur.CreateDefault(*context_,
705  options_trianglestrip);
706  pipelines_->texture_strict_src.CreateDefault(*context_, options);
707  pipelines_->tiled_texture.CreateDefault(*context_, options,
708  {supports_decal});
709  pipelines_->gaussian_blur.CreateDefault(
710  *context_, options_no_msaa_no_depth_stencil, {supports_decal});
711  pipelines_->border_mask_blur.CreateDefault(*context_,
712  options_trianglestrip);
713  pipelines_->color_matrix_color_filter.CreateDefault(*context_,
714  options_trianglestrip);
715  pipelines_->vertices_uber_1_.CreateDefault(*context_, options,
716  {supports_decal});
717  pipelines_->vertices_uber_2_.CreateDefault(*context_, options,
718  {supports_decal});
719 
720  const std::array<std::vector<Scalar>, 15> porter_duff_constants =
721  GetPorterDuffSpecConstants(supports_decal);
722  pipelines_->clear_blend.CreateDefault(*context_, options_trianglestrip,
723  porter_duff_constants[0]);
724  pipelines_->source_blend.CreateDefault(*context_, options_trianglestrip,
725  porter_duff_constants[1]);
726  pipelines_->destination_blend.CreateDefault(
727  *context_, options_trianglestrip, porter_duff_constants[2]);
728  pipelines_->source_over_blend.CreateDefault(
729  *context_, options_trianglestrip, porter_duff_constants[3]);
730  pipelines_->destination_over_blend.CreateDefault(
731  *context_, options_trianglestrip, porter_duff_constants[4]);
732  pipelines_->source_in_blend.CreateDefault(*context_, options_trianglestrip,
733  porter_duff_constants[5]);
734  pipelines_->destination_in_blend.CreateDefault(
735  *context_, options_trianglestrip, porter_duff_constants[6]);
736  pipelines_->source_out_blend.CreateDefault(*context_, options_trianglestrip,
737  porter_duff_constants[7]);
738  pipelines_->destination_out_blend.CreateDefault(
739  *context_, options_trianglestrip, porter_duff_constants[8]);
740  pipelines_->source_a_top_blend.CreateDefault(
741  *context_, options_trianglestrip, porter_duff_constants[9]);
742  pipelines_->destination_a_top_blend.CreateDefault(
743  *context_, options_trianglestrip, porter_duff_constants[10]);
744  pipelines_->xor_blend.CreateDefault(*context_, options_trianglestrip,
745  porter_duff_constants[11]);
746  pipelines_->plus_blend.CreateDefault(*context_, options_trianglestrip,
747  porter_duff_constants[12]);
748  pipelines_->modulate_blend.CreateDefault(*context_, options_trianglestrip,
749  porter_duff_constants[13]);
750  pipelines_->screen_blend.CreateDefault(*context_, options_trianglestrip,
751  porter_duff_constants[14]);
752  }
753 
754  if (context_->GetCapabilities()->SupportsFramebufferFetch()) {
755  pipelines_->framebuffer_blend_color.CreateDefault(
756  *context_, options_trianglestrip,
757  {static_cast<Scalar>(BlendSelectValues::kColor), supports_decal});
758  pipelines_->framebuffer_blend_colorburn.CreateDefault(
759  *context_, options_trianglestrip,
760  {static_cast<Scalar>(BlendSelectValues::kColorBurn), supports_decal});
761  pipelines_->framebuffer_blend_colordodge.CreateDefault(
762  *context_, options_trianglestrip,
763  {static_cast<Scalar>(BlendSelectValues::kColorDodge), supports_decal});
764  pipelines_->framebuffer_blend_darken.CreateDefault(
765  *context_, options_trianglestrip,
766  {static_cast<Scalar>(BlendSelectValues::kDarken), supports_decal});
767  pipelines_->framebuffer_blend_difference.CreateDefault(
768  *context_, options_trianglestrip,
769  {static_cast<Scalar>(BlendSelectValues::kDifference), supports_decal});
770  pipelines_->framebuffer_blend_exclusion.CreateDefault(
771  *context_, options_trianglestrip,
772  {static_cast<Scalar>(BlendSelectValues::kExclusion), supports_decal});
773  pipelines_->framebuffer_blend_hardlight.CreateDefault(
774  *context_, options_trianglestrip,
775  {static_cast<Scalar>(BlendSelectValues::kHardLight), supports_decal});
776  pipelines_->framebuffer_blend_hue.CreateDefault(
777  *context_, options_trianglestrip,
778  {static_cast<Scalar>(BlendSelectValues::kHue), supports_decal});
779  pipelines_->framebuffer_blend_lighten.CreateDefault(
780  *context_, options_trianglestrip,
781  {static_cast<Scalar>(BlendSelectValues::kLighten), supports_decal});
782  pipelines_->framebuffer_blend_luminosity.CreateDefault(
783  *context_, options_trianglestrip,
784  {static_cast<Scalar>(BlendSelectValues::kLuminosity), supports_decal});
785  pipelines_->framebuffer_blend_multiply.CreateDefault(
786  *context_, options_trianglestrip,
787  {static_cast<Scalar>(BlendSelectValues::kMultiply), supports_decal});
788  pipelines_->framebuffer_blend_overlay.CreateDefault(
789  *context_, options_trianglestrip,
790  {static_cast<Scalar>(BlendSelectValues::kOverlay), supports_decal});
791  pipelines_->framebuffer_blend_saturation.CreateDefault(
792  *context_, options_trianglestrip,
793  {static_cast<Scalar>(BlendSelectValues::kSaturation), supports_decal});
794  pipelines_->framebuffer_blend_screen.CreateDefault(
795  *context_, options_trianglestrip,
796  {static_cast<Scalar>(BlendSelectValues::kScreen), supports_decal});
797  pipelines_->framebuffer_blend_softlight.CreateDefault(
798  *context_, options_trianglestrip,
799  {static_cast<Scalar>(BlendSelectValues::kSoftLight), supports_decal});
800  } else {
801  pipelines_->blend_color.CreateDefault(
802  *context_, options_trianglestrip,
803  {static_cast<Scalar>(BlendSelectValues::kColor), supports_decal});
804  pipelines_->blend_colorburn.CreateDefault(
805  *context_, options_trianglestrip,
806  {static_cast<Scalar>(BlendSelectValues::kColorBurn), supports_decal});
807  pipelines_->blend_colordodge.CreateDefault(
808  *context_, options_trianglestrip,
809  {static_cast<Scalar>(BlendSelectValues::kColorDodge), supports_decal});
810  pipelines_->blend_darken.CreateDefault(
811  *context_, options_trianglestrip,
812  {static_cast<Scalar>(BlendSelectValues::kDarken), supports_decal});
813  pipelines_->blend_difference.CreateDefault(
814  *context_, options_trianglestrip,
815  {static_cast<Scalar>(BlendSelectValues::kDifference), supports_decal});
816  pipelines_->blend_exclusion.CreateDefault(
817  *context_, options_trianglestrip,
818  {static_cast<Scalar>(BlendSelectValues::kExclusion), supports_decal});
819  pipelines_->blend_hardlight.CreateDefault(
820  *context_, options_trianglestrip,
821  {static_cast<Scalar>(BlendSelectValues::kHardLight), supports_decal});
822  pipelines_->blend_hue.CreateDefault(
823  *context_, options_trianglestrip,
824  {static_cast<Scalar>(BlendSelectValues::kHue), supports_decal});
825  pipelines_->blend_lighten.CreateDefault(
826  *context_, options_trianglestrip,
827  {static_cast<Scalar>(BlendSelectValues::kLighten), supports_decal});
828  pipelines_->blend_luminosity.CreateDefault(
829  *context_, options_trianglestrip,
830  {static_cast<Scalar>(BlendSelectValues::kLuminosity), supports_decal});
831  pipelines_->blend_multiply.CreateDefault(
832  *context_, options_trianglestrip,
833  {static_cast<Scalar>(BlendSelectValues::kMultiply), supports_decal});
834  pipelines_->blend_overlay.CreateDefault(
835  *context_, options_trianglestrip,
836  {static_cast<Scalar>(BlendSelectValues::kOverlay), supports_decal});
837  pipelines_->blend_saturation.CreateDefault(
838  *context_, options_trianglestrip,
839  {static_cast<Scalar>(BlendSelectValues::kSaturation), supports_decal});
840  pipelines_->blend_screen.CreateDefault(
841  *context_, options_trianglestrip,
842  {static_cast<Scalar>(BlendSelectValues::kScreen), supports_decal});
843  pipelines_->blend_softlight.CreateDefault(
844  *context_, options_trianglestrip,
845  {static_cast<Scalar>(BlendSelectValues::kSoftLight), supports_decal});
846  }
847 
848  pipelines_->morphology_filter.CreateDefault(*context_, options_trianglestrip,
849  {supports_decal});
850  pipelines_->linear_to_srgb_filter.CreateDefault(*context_,
851  options_trianglestrip);
852  pipelines_->srgb_to_linear_filter.CreateDefault(*context_,
853  options_trianglestrip);
854  pipelines_->yuv_to_rgb_filter.CreateDefault(*context_, options_trianglestrip);
855 
856 #if defined(IMPELLER_ENABLE_OPENGLES)
857  if (GetContext()->GetBackendType() == Context::BackendType::kOpenGLES) {
858 #if !defined(FML_OS_MACOSX)
859  // GLES only shader that is unsupported on macOS.
860  pipelines_->tiled_texture_external.CreateDefault(*context_, options);
861  pipelines_->tiled_texture_uv_external.CreateDefault(*context_, options);
862 #endif // !defined(FML_OS_MACOSX)
863  pipelines_->texture_downsample_gles.CreateDefault(*context_,
864  options_trianglestrip);
865  }
866 #endif // IMPELLER_ENABLE_OPENGLES
867 
868  is_valid_ = true;
869  InitializeCommonlyUsedShadersIfNeeded();
870 }
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 983 of file content_context.cc.

984  {
985 #ifdef IMPELLER_DEBUG
986  // destroying in-use pipleines is a validation error.
987  const auto& idle_waiter = GetContext()->GetIdleWaiter();
988  if (idle_waiter) {
989  idle_waiter->WaitIdle();
990  }
991 #endif // IMPELLER_DEBUG
992  for (auto it = runtime_effect_pipelines_.begin();
993  it != runtime_effect_pipelines_.end();) {
994  if (it->first.unique_entrypoint_name == unique_entrypoint_name) {
995  it = runtime_effect_pipelines_.erase(it);
996  } else {
997  it++;
998  }
999  }
1000 }

References GetContext().

◆ GetBlendColorBurnPipeline()

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

Definition at line 1336 of file content_context.cc.

1337  {
1338  return GetPipeline(this, pipelines_->blend_colorburn, opts);
1339 }

References pipelines_.

◆ GetBlendColorDodgePipeline()

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

Definition at line 1341 of file content_context.cc.

1342  {
1343  return GetPipeline(this, pipelines_->blend_colordodge, opts);
1344 }

References pipelines_.

◆ GetBlendColorPipeline()

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

Definition at line 1331 of file content_context.cc.

1332  {
1333  return GetPipeline(this, pipelines_->blend_color, opts);
1334 }

References pipelines_.

◆ GetBlendDarkenPipeline()

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

Definition at line 1346 of file content_context.cc.

1347  {
1348  return GetPipeline(this, pipelines_->blend_darken, opts);
1349 }

References pipelines_.

◆ GetBlendDifferencePipeline()

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

Definition at line 1351 of file content_context.cc.

1352  {
1353  return GetPipeline(this, pipelines_->blend_difference, opts);
1354 }

References pipelines_.

◆ GetBlendExclusionPipeline()

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

Definition at line 1356 of file content_context.cc.

1357  {
1358  return GetPipeline(this, pipelines_->blend_exclusion, opts);
1359 }

References pipelines_.

◆ GetBlendHardLightPipeline()

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

Definition at line 1361 of file content_context.cc.

1362  {
1363  return GetPipeline(this, pipelines_->blend_hardlight, opts);
1364 }

References pipelines_.

◆ GetBlendHuePipeline()

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

Definition at line 1366 of file content_context.cc.

1367  {
1368  return GetPipeline(this, pipelines_->blend_hue, opts);
1369 }

References pipelines_.

◆ GetBlendLightenPipeline()

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

Definition at line 1371 of file content_context.cc.

1372  {
1373  return GetPipeline(this, pipelines_->blend_lighten, opts);
1374 }

References pipelines_.

◆ GetBlendLuminosityPipeline()

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

Definition at line 1376 of file content_context.cc.

1377  {
1378  return GetPipeline(this, pipelines_->blend_luminosity, opts);
1379 }

References pipelines_.

◆ GetBlendMultiplyPipeline()

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

Definition at line 1381 of file content_context.cc.

1382  {
1383  return GetPipeline(this, pipelines_->blend_multiply, opts);
1384 }

References pipelines_.

◆ GetBlendOverlayPipeline()

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

Definition at line 1386 of file content_context.cc.

1387  {
1388  return GetPipeline(this, pipelines_->blend_overlay, opts);
1389 }

References pipelines_.

◆ GetBlendSaturationPipeline()

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

Definition at line 1391 of file content_context.cc.

1392  {
1393  return GetPipeline(this, pipelines_->blend_saturation, opts);
1394 }

References pipelines_.

◆ GetBlendScreenPipeline()

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

Definition at line 1396 of file content_context.cc.

1397  {
1398  return GetPipeline(this, pipelines_->blend_screen, opts);
1399 }

References pipelines_.

◆ GetBlendSoftLightPipeline()

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

Definition at line 1401 of file content_context.cc.

1402  {
1403  return GetPipeline(this, pipelines_->blend_softlight, opts);
1404 }

References pipelines_.

◆ GetBorderMaskBlurPipeline()

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

Definition at line 1162 of file content_context.cc.

1163  {
1164  return GetPipeline(this, pipelines_->border_mask_blur, opts);
1165 }

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 970 of file content_context.cc.

974  {
975  RuntimeEffectPipelineKey key{unique_entrypoint_name, options};
976  auto it = runtime_effect_pipelines_.find(key);
977  if (it == runtime_effect_pipelines_.end()) {
978  it = runtime_effect_pipelines_.insert(it, {key, create_callback()});
979  }
980  return raw_ptr(it->second);
981 }

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

◆ GetCirclePipeline()

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

Definition at line 1511 of file content_context.cc.

1512  {
1513  return GetPipeline(this, pipelines_->circle, opts);
1514 }

References pipelines_.

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

◆ GetClearBlendPipeline()

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

Definition at line 1256 of file content_context.cc.

1257  {
1258  return GetPipeline(this, pipelines_->clear_blend, opts);
1259 }

References pipelines_.

Referenced by GetPorterDuffPipeline().

◆ GetClipPipeline()

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

Definition at line 1187 of file content_context.cc.

1187  {
1188  return GetPipeline(this, pipelines_->clip, opts);
1189 }

References pipelines_.

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

◆ GetColorMatrixColorFilterPipeline()

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

Definition at line 1172 of file content_context.cc.

1173  {
1174  return GetPipeline(this, pipelines_->color_matrix_color_filter, opts);
1175 }

References pipelines_.

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

◆ GetConicalGradientFillPipeline()

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

Definition at line 1106 of file content_context.cc.

1108  {
1109  switch (kind) {
1110  case ConicalKind::kConical:
1111  return GetPipeline(this, pipelines_->conical_gradient_fill, opts);
1112  case ConicalKind::kRadial:
1113  return GetPipeline(this, pipelines_->conical_gradient_fill_radial, opts);
1114  case ConicalKind::kStrip:
1115  return GetPipeline(this, pipelines_->conical_gradient_fill_strip, opts);
1117  return GetPipeline(
1118  this, pipelines_->conical_gradient_fill_strip_and_radial, opts);
1119  }
1120 }

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

◆ GetConicalGradientSSBOFillPipeline()

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

Definition at line 1076 of file content_context.cc.

1078  {
1079  FML_DCHECK(GetDeviceCapabilities().SupportsSSBO());
1080  switch (kind) {
1081  case ConicalKind::kConical:
1082  return GetPipeline(this, pipelines_->conical_gradient_ssbo_fill, opts);
1083  case ConicalKind::kRadial:
1084  return GetPipeline(this, pipelines_->conical_gradient_ssbo_fill_radial,
1085  opts);
1086  case ConicalKind::kStrip:
1087  return GetPipeline(this, pipelines_->conical_gradient_ssbo_fill_strip,
1088  opts);
1090  return GetPipeline(
1091  this, pipelines_->conical_gradient_ssbo_fill_strip_and_radial, opts);
1092  }
1093 }
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 1057 of file content_context.cc.

1059  {
1060  switch (kind) {
1061  case ConicalKind::kConical:
1062  return GetPipeline(this, pipelines_->conical_gradient_uniform_fill, opts);
1063  case ConicalKind::kRadial:
1064  return GetPipeline(this, pipelines_->conical_gradient_uniform_fill_radial,
1065  opts);
1066  case ConicalKind::kStrip:
1067  return GetPipeline(this, pipelines_->conical_gradient_uniform_fill_strip,
1068  opts);
1070  return GetPipeline(
1071  this, pipelines_->conical_gradient_uniform_fill_strip_and_radial,
1072  opts);
1073  }
1074 }

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

◆ GetContext()

◆ GetDestinationATopBlendPipeline()

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

Definition at line 1306 of file content_context.cc.

1307  {
1308  return GetPipeline(this, pipelines_->destination_a_top_blend, opts);
1309 }

References pipelines_.

Referenced by GetPorterDuffPipeline().

◆ GetDestinationBlendPipeline()

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

Definition at line 1266 of file content_context.cc.

1267  {
1268  return GetPipeline(this, pipelines_->destination_blend, opts);
1269 }

References pipelines_.

Referenced by GetPorterDuffPipeline().

◆ GetDestinationInBlendPipeline()

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

Definition at line 1286 of file content_context.cc.

1287  {
1288  return GetPipeline(this, pipelines_->destination_in_blend, opts);
1289 }

References pipelines_.

Referenced by GetPorterDuffPipeline().

◆ GetDestinationOutBlendPipeline()

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

Definition at line 1296 of file content_context.cc.

1297  {
1298  return GetPipeline(this, pipelines_->destination_out_blend, opts);
1299 }

References pipelines_.

Referenced by GetPorterDuffPipeline().

◆ GetDestinationOverBlendPipeline()

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

Definition at line 1276 of file content_context.cc.

1277  {
1278  return GetPipeline(this, pipelines_->destination_over_blend, opts);
1279 }

References pipelines_.

Referenced by GetPorterDuffPipeline().

◆ GetDeviceCapabilities()

◆ GetDownsamplePipeline()

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

Definition at line 1406 of file content_context.cc.

1407  {
1408  return GetPipeline(this, pipelines_->texture_downsample, opts);
1409 }

References pipelines_.

◆ GetDrawVerticesUberPipeline()

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

Definition at line 1501 of file content_context.cc.

1503  {
1504  if (blend_mode <= BlendMode::kHardLight) {
1505  return GetPipeline(this, pipelines_->vertices_uber_1_, opts);
1506  } else {
1507  return GetPipeline(this, pipelines_->vertices_uber_2_, opts);
1508  }
1509 }

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 878 of file content_context.cc.

878  {
879  return empty_texture_;
880 }

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

◆ GetFastGradientPipeline()

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

Definition at line 1020 of file content_context.cc.

1021  {
1022  return GetPipeline(this, pipelines_->fast_gradient, opts);
1023 }

References pipelines_.

◆ GetFramebufferBlendColorBurnPipeline()

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

Definition at line 1417 of file content_context.cc.

1418  {
1419  FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch());
1420  return GetPipeline(this, pipelines_->framebuffer_blend_colorburn, opts);
1421 }

References GetDeviceCapabilities(), and pipelines_.

◆ GetFramebufferBlendColorDodgePipeline()

PipelineRef impeller::ContentContext::GetFramebufferBlendColorDodgePipeline ( 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_colordodge, opts);
1427 }

References GetDeviceCapabilities(), and pipelines_.

◆ GetFramebufferBlendColorPipeline()

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

Definition at line 1411 of file content_context.cc.

1412  {
1413  FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch());
1414  return GetPipeline(this, pipelines_->framebuffer_blend_color, opts);
1415 }

References GetDeviceCapabilities(), and pipelines_.

◆ GetFramebufferBlendDarkenPipeline()

PipelineRef impeller::ContentContext::GetFramebufferBlendDarkenPipeline ( 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_darken, opts);
1433 }

References GetDeviceCapabilities(), and pipelines_.

◆ GetFramebufferBlendDifferencePipeline()

PipelineRef impeller::ContentContext::GetFramebufferBlendDifferencePipeline ( 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_difference, opts);
1439 }

References GetDeviceCapabilities(), and pipelines_.

◆ GetFramebufferBlendExclusionPipeline()

PipelineRef impeller::ContentContext::GetFramebufferBlendExclusionPipeline ( 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_exclusion, opts);
1445 }

References GetDeviceCapabilities(), and pipelines_.

◆ GetFramebufferBlendHardLightPipeline()

PipelineRef impeller::ContentContext::GetFramebufferBlendHardLightPipeline ( 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_hardlight, opts);
1451 }

References GetDeviceCapabilities(), and pipelines_.

◆ GetFramebufferBlendHuePipeline()

PipelineRef impeller::ContentContext::GetFramebufferBlendHuePipeline ( 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_hue, opts);
1457 }

References GetDeviceCapabilities(), and pipelines_.

◆ GetFramebufferBlendLightenPipeline()

PipelineRef impeller::ContentContext::GetFramebufferBlendLightenPipeline ( 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_lighten, opts);
1463 }

References GetDeviceCapabilities(), and pipelines_.

◆ GetFramebufferBlendLuminosityPipeline()

PipelineRef impeller::ContentContext::GetFramebufferBlendLuminosityPipeline ( 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_luminosity, opts);
1469 }

References GetDeviceCapabilities(), and pipelines_.

◆ GetFramebufferBlendMultiplyPipeline()

PipelineRef impeller::ContentContext::GetFramebufferBlendMultiplyPipeline ( 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_multiply, opts);
1475 }

References GetDeviceCapabilities(), and pipelines_.

◆ GetFramebufferBlendOverlayPipeline()

PipelineRef impeller::ContentContext::GetFramebufferBlendOverlayPipeline ( 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_overlay, opts);
1481 }

References GetDeviceCapabilities(), and pipelines_.

◆ GetFramebufferBlendSaturationPipeline()

PipelineRef impeller::ContentContext::GetFramebufferBlendSaturationPipeline ( 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_saturation, opts);
1487 }

References GetDeviceCapabilities(), and pipelines_.

◆ GetFramebufferBlendScreenPipeline()

PipelineRef impeller::ContentContext::GetFramebufferBlendScreenPipeline ( 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_screen, opts);
1493 }

References GetDeviceCapabilities(), and pipelines_.

◆ GetFramebufferBlendSoftLightPipeline()

PipelineRef impeller::ContentContext::GetFramebufferBlendSoftLightPipeline ( 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_softlight, opts);
1499 }

References GetDeviceCapabilities(), and pipelines_.

◆ GetGaussianBlurPipeline()

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

Definition at line 1157 of file content_context.cc.

1158  {
1159  return GetPipeline(this, pipelines_->gaussian_blur, opts);
1160 }

References pipelines_.

◆ GetGlyphAtlasPipeline()

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

Definition at line 1191 of file content_context.cc.

1192  {
1193  return GetPipeline(this, pipelines_->glyph_atlas, opts);
1194 }

References pipelines_.

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

◆ GetLazyGlyphAtlas()

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

Definition at line 266 of file content_context.h.

266  {
267  return lazy_glyph_atlas_;
268  }

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 1025 of file content_context.cc.

1026  {
1027  return GetPipeline(this, pipelines_->linear_gradient_fill, opts);
1028 }

References pipelines_.

◆ GetLinearGradientSSBOFillPipeline()

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

Definition at line 1045 of file content_context.cc.

1046  {
1047  FML_DCHECK(GetDeviceCapabilities().SupportsSSBO());
1048  return GetPipeline(this, pipelines_->linear_gradient_ssbo_fill, opts);
1049 }

References GetDeviceCapabilities(), and pipelines_.

◆ GetLinearGradientUniformFillPipeline()

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

Definition at line 1030 of file content_context.cc.

1031  {
1032  return GetPipeline(this, pipelines_->linear_gradient_uniform_fill, opts);
1033 }

References pipelines_.

◆ GetLinearToSrgbFilterPipeline()

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

Definition at line 1177 of file content_context.cc.

1178  {
1179  return GetPipeline(this, pipelines_->linear_to_srgb_filter, opts);
1180 }

References pipelines_.

◆ GetLinePipeline()

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

Definition at line 1516 of file content_context.cc.

1516  {
1517  return GetPipeline(this, pipelines_->line, opts);
1518 }

References pipelines_.

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

◆ GetModulateBlendPipeline()

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

Definition at line 1321 of file content_context.cc.

1322  {
1323  return GetPipeline(this, pipelines_->modulate_blend, opts);
1324 }

References pipelines_.

Referenced by GetPorterDuffPipeline().

◆ GetMorphologyFilterPipeline()

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

Definition at line 1167 of file content_context.cc.

1168  {
1169  return GetPipeline(this, pipelines_->morphology_filter, opts);
1170 }

References pipelines_.

◆ GetPlusBlendPipeline()

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

Definition at line 1316 of file content_context.cc.

1317  {
1318  return GetPipeline(this, pipelines_->plus_blend, opts);
1319 }

References pipelines_.

Referenced by GetPorterDuffPipeline().

◆ GetPorterDuffPipeline()

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

Definition at line 1201 of file content_context.cc.

1203  {
1204  switch (mode) {
1205  case BlendMode::kClear:
1206  return GetClearBlendPipeline(opts);
1207  case BlendMode::kSrc:
1208  return GetSourceBlendPipeline(opts);
1209  case BlendMode::kDst:
1210  return GetDestinationBlendPipeline(opts);
1211  case BlendMode::kSrcOver:
1212  return GetSourceOverBlendPipeline(opts);
1213  case BlendMode::kDstOver:
1214  return GetDestinationOverBlendPipeline(opts);
1215  case BlendMode::kSrcIn:
1216  return GetSourceInBlendPipeline(opts);
1217  case BlendMode::kDstIn:
1218  return GetDestinationInBlendPipeline(opts);
1219  case BlendMode::kSrcOut:
1220  return GetSourceOutBlendPipeline(opts);
1221  case BlendMode::kDstOut:
1222  return GetDestinationOutBlendPipeline(opts);
1223  case BlendMode::kSrcATop:
1224  return GetSourceATopBlendPipeline(opts);
1225  case BlendMode::kDstATop:
1226  return GetDestinationATopBlendPipeline(opts);
1227  case BlendMode::kXor:
1228  return GetXorBlendPipeline(opts);
1229  case BlendMode::kPlus:
1230  return GetPlusBlendPipeline(opts);
1231  case BlendMode::kModulate:
1232  return GetModulateBlendPipeline(opts);
1233  case BlendMode::kScreen:
1234  return GetScreenBlendPipeline(opts);
1235  case BlendMode::kOverlay:
1236  case BlendMode::kDarken:
1237  case BlendMode::kLighten:
1239  case BlendMode::kColorBurn:
1240  case BlendMode::kHardLight:
1241  case BlendMode::kSoftLight:
1243  case BlendMode::kExclusion:
1244  case BlendMode::kMultiply:
1245  case BlendMode::kHue:
1247  case BlendMode::kColor:
1249  VALIDATION_LOG << "Invalid porter duff blend mode "
1250  << BlendModeToString(mode);
1251  return GetClearBlendPipeline(opts);
1252  break;
1253  }
1254 }
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 1101 of file content_context.cc.

1102  {
1103  return GetPipeline(this, pipelines_->radial_gradient_fill, opts);
1104 }

References pipelines_.

◆ GetRadialGradientSSBOFillPipeline()

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

Definition at line 1051 of file content_context.cc.

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

References GetDeviceCapabilities(), and pipelines_.

◆ GetRadialGradientUniformFillPipeline()

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

Definition at line 1035 of file content_context.cc.

1036  {
1037  return GetPipeline(this, pipelines_->radial_gradient_uniform_fill, opts);
1038 }

References pipelines_.

◆ GetRenderTargetCache()

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

◆ GetRRectBlurPipeline()

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

Definition at line 1122 of file content_context.cc.

1123  {
1124  return GetPipeline(this, pipelines_->rrect_blur, opts);
1125 }

References pipelines_.

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

◆ GetRSuperellipseBlurPipeline()

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

Definition at line 1127 of file content_context.cc.

1128  {
1129  return GetPipeline(this, pipelines_->rsuperellipse_blur, opts);
1130 }

References pipelines_.

◆ GetScreenBlendPipeline()

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

Definition at line 1326 of file content_context.cc.

1327  {
1328  return GetPipeline(this, pipelines_->screen_blend, opts);
1329 }

References pipelines_.

Referenced by GetPorterDuffPipeline().

◆ GetSolidFillPipeline()

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

Definition at line 1137 of file content_context.cc.

1138  {
1139  return GetPipeline(this, pipelines_->solid_fill, opts);
1140 }

References pipelines_.

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

◆ GetSourceATopBlendPipeline()

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

Definition at line 1301 of file content_context.cc.

1302  {
1303  return GetPipeline(this, pipelines_->source_a_top_blend, opts);
1304 }

References pipelines_.

Referenced by GetPorterDuffPipeline().

◆ GetSourceBlendPipeline()

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

Definition at line 1261 of file content_context.cc.

1262  {
1263  return GetPipeline(this, pipelines_->source_blend, opts);
1264 }

References pipelines_.

Referenced by GetPorterDuffPipeline().

◆ GetSourceInBlendPipeline()

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

Definition at line 1281 of file content_context.cc.

1282  {
1283  return GetPipeline(this, pipelines_->source_in_blend, opts);
1284 }

References pipelines_.

Referenced by GetPorterDuffPipeline().

◆ GetSourceOutBlendPipeline()

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

Definition at line 1291 of file content_context.cc.

1292  {
1293  return GetPipeline(this, pipelines_->source_out_blend, opts);
1294 }

References pipelines_.

Referenced by GetPorterDuffPipeline().

◆ GetSourceOverBlendPipeline()

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

Definition at line 1271 of file content_context.cc.

1272  {
1273  return GetPipeline(this, pipelines_->source_over_blend, opts);
1274 }

References pipelines_.

Referenced by GetPorterDuffPipeline().

◆ GetSrgbToLinearFilterPipeline()

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

Definition at line 1182 of file content_context.cc.

1183  {
1184  return GetPipeline(this, pipelines_->srgb_to_linear_filter, opts);
1185 }

References pipelines_.

◆ GetSweepGradientFillPipeline()

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

Definition at line 1132 of file content_context.cc.

1133  {
1134  return GetPipeline(this, pipelines_->sweep_gradient_fill, opts);
1135 }

References pipelines_.

◆ GetSweepGradientSSBOFillPipeline()

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

Definition at line 1095 of file content_context.cc.

1096  {
1097  FML_DCHECK(GetDeviceCapabilities().SupportsSSBO());
1098  return GetPipeline(this, pipelines_->sweep_gradient_ssbo_fill, opts);
1099 }

References GetDeviceCapabilities(), and pipelines_.

◆ GetSweepGradientUniformFillPipeline()

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

Definition at line 1040 of file content_context.cc.

1041  {
1042  return GetPipeline(this, pipelines_->sweep_gradient_uniform_fill, opts);
1043 }

References pipelines_.

◆ GetTessellator()

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

Definition at line 958 of file content_context.cc.

958  {
959  return *tessellator_;
960 }

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

◆ GetTextShadowCache()

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

Definition at line 316 of file content_context.h.

316 { 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 1142 of file content_context.cc.

1143  {
1144  return GetPipeline(this, pipelines_->texture, opts);
1145 }

References pipelines_.

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

◆ GetTextureStrictSrcPipeline()

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

Definition at line 1147 of file content_context.cc.

1148  {
1149  return GetPipeline(this, pipelines_->texture_strict_src, opts);
1150 }

References pipelines_.

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

◆ GetTiledTexturePipeline()

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

Definition at line 1152 of file content_context.cc.

1153  {
1154  return GetPipeline(this, pipelines_->tiled_texture, opts);
1155 }

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 302 of file content_context.h.

302  {
303  return *indexes_host_buffer_;
304  }

Referenced by 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 1311 of file content_context.cc.

1312  {
1313  return GetPipeline(this, pipelines_->xor_blend, opts);
1314 }

References pipelines_.

Referenced by GetPorterDuffPipeline().

◆ GetYUVToRGBFilterPipeline()

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

Definition at line 1196 of file content_context.cc.

1197  {
1198  return GetPipeline(this, pipelines_->yuv_to_rgb_filter, opts);
1199 }

References pipelines_.

◆ IsValid()

bool impeller::ContentContext::IsValid ( ) const

Definition at line 874 of file content_context.cc.

874  {
875  return is_valid_;
876 }

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 919 of file content_context.cc.

923  {
924  const std::shared_ptr<Context>& context = GetContext();
925 
926  auto subpass_texture = subpass_target.GetRenderTargetTexture();
927  if (!subpass_texture) {
928  return fml::Status(fml::StatusCode::kUnknown, "");
929  }
930 
931  auto sub_renderpass = command_buffer->CreateRenderPass(subpass_target);
932  if (!sub_renderpass) {
933  return fml::Status(fml::StatusCode::kUnknown, "");
934  }
935  sub_renderpass->SetLabel(label);
936 
937  if (!subpass_callback(*this, *sub_renderpass)) {
938  return fml::Status(fml::StatusCode::kUnknown, "");
939  }
940 
941  if (!sub_renderpass->EncodeCommands()) {
942  return fml::Status(fml::StatusCode::kUnknown, "");
943  }
944 
945  const std::shared_ptr<Texture>& target_texture =
946  subpass_target.GetRenderTargetTexture();
947  if (target_texture->GetMipCount() > 1) {
948  fml::Status mipmap_status =
949  AddMipmapGeneration(command_buffer, context, target_texture);
950  if (!mipmap_status.ok()) {
951  return mipmap_status;
952  }
953  }
954 
955  return subpass_target;
956 }
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 882 of file content_context.cc.

889  {
890  const std::shared_ptr<Context>& context = GetContext();
891  RenderTarget subpass_target;
892 
893  std::optional<RenderTarget::AttachmentConfig> depth_stencil_config =
894  depth_stencil_enabled ? RenderTarget::kDefaultStencilAttachmentConfig
895  : std::optional<RenderTarget::AttachmentConfig>();
896 
897  if (context->GetCapabilities()->SupportsOffscreenMSAA() && msaa_enabled) {
898  subpass_target = GetRenderTargetCache()->CreateOffscreenMSAA(
899  /*context=*/*context,
900  /*size=*/texture_size,
901  /*mip_count=*/mip_count,
902  /*label=*/label,
903  /*color_attachment_config=*/
905  /*stencil_attachment_config=*/depth_stencil_config,
906  /*existing_color_msaa_texture=*/nullptr,
907  /*existing_color_resolve_texture=*/nullptr,
908  /*existing_depth_stencil_texture=*/nullptr,
909  /*target_pixel_format=*/std::nullopt);
910  } else {
911  subpass_target = GetRenderTargetCache()->CreateOffscreen(
912  *context, texture_size,
913  /*mip_count=*/mip_count, label,
914  RenderTarget::kDefaultColorAttachmentConfig, depth_stencil_config);
915  }
916  return MakeSubpass(label, subpass_target, command_buffer, subpass_callback);
917 }
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 1002 of file content_context.cc.

1002  {
1003  data_host_buffer_->Reset();
1004 
1005  // We should only reset the indexes host buffer if it is actually different
1006  // from the data host buffer. Otherwise we'll end up resetting the same host
1007  // buffer twice.
1008  if (data_host_buffer_ != indexes_host_buffer_) {
1009  indexes_host_buffer_->Reset();
1010  }
1011 }

Referenced by impeller::RenderToTarget().

◆ SetTransientsDataBuffer()

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

Definition at line 325 of file content_context.h.

325  {
326  data_host_buffer_ = std::move(host_buffer);
327  }

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

◆ SetTransientsIndexesBuffer()

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

Definition at line 320 of file content_context.h.

320  {
321  indexes_host_buffer_ = std::move(host_buffer);
322  }

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


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