diff --git a/engine/src/flutter/impeller/entity/contents/content_context.cc b/engine/src/flutter/impeller/entity/contents/content_context.cc index fed8fb9230..fe38c47047 100644 --- a/engine/src/flutter/impeller/entity/contents/content_context.cc +++ b/engine/src/flutter/impeller/entity/contents/content_context.cc @@ -669,4 +669,499 @@ void ContentContext::InitializeCommonlyUsedShadersIfNeeded() const { GetContext()->InitializeCommonlyUsedShadersIfNeeded(); } +PipelineRef ContentContext::GetFastGradientPipeline( + ContentContextOptions opts) const { + return GetPipeline(fast_gradient_pipelines_, opts); +} + +PipelineRef ContentContext::GetLinearGradientFillPipeline( + ContentContextOptions opts) const { + return GetPipeline(linear_gradient_fill_pipelines_, opts); +} + +PipelineRef ContentContext::GetLinearGradientUniformFillPipeline( + ContentContextOptions opts) const { + return GetPipeline(linear_gradient_uniform_fill_pipelines_, opts); +} + +PipelineRef ContentContext::GetRadialGradientUniformFillPipeline( + ContentContextOptions opts) const { + return GetPipeline(radial_gradient_uniform_fill_pipelines_, opts); +} + +PipelineRef ContentContext::GetSweepGradientUniformFillPipeline( + ContentContextOptions opts) const { + return GetPipeline(sweep_gradient_uniform_fill_pipelines_, opts); +} + +PipelineRef ContentContext::GetLinearGradientSSBOFillPipeline( + ContentContextOptions opts) const { + FML_DCHECK(GetDeviceCapabilities().SupportsSSBO()); + return GetPipeline(linear_gradient_ssbo_fill_pipelines_, opts); +} + +PipelineRef ContentContext::GetRadialGradientSSBOFillPipeline( + ContentContextOptions opts) const { + FML_DCHECK(GetDeviceCapabilities().SupportsSSBO()); + return GetPipeline(radial_gradient_ssbo_fill_pipelines_, opts); +} + +PipelineRef ContentContext::GetConicalGradientUniformFillPipeline( + ContentContextOptions opts, + ConicalKind kind) const { + switch (kind) { + case ConicalKind::kConical: + return GetPipeline(conical_gradient_uniform_fill_pipelines_, opts); + case ConicalKind::kRadial: + return GetPipeline(conical_gradient_uniform_fill_radial_pipelines_, opts); + case ConicalKind::kStrip: + return GetPipeline(conical_gradient_uniform_fill_strip_pipelines_, opts); + case ConicalKind::kStripAndRadial: + return GetPipeline( + conical_gradient_uniform_fill_strip_and_radial_pipelines_, opts); + } +} + +PipelineRef ContentContext::GetConicalGradientSSBOFillPipeline( + ContentContextOptions opts, + ConicalKind kind) const { + FML_DCHECK(GetDeviceCapabilities().SupportsSSBO()); + switch (kind) { + case ConicalKind::kConical: + return GetPipeline(conical_gradient_ssbo_fill_pipelines_, opts); + case ConicalKind::kRadial: + return GetPipeline(conical_gradient_ssbo_fill_radial_pipelines_, opts); + case ConicalKind::kStrip: + return GetPipeline(conical_gradient_ssbo_fill_strip_pipelines_, opts); + case ConicalKind::kStripAndRadial: + return GetPipeline(conical_gradient_ssbo_fill_strip_and_radial_pipelines_, + opts); + } +} + +PipelineRef ContentContext::GetSweepGradientSSBOFillPipeline( + ContentContextOptions opts) const { + FML_DCHECK(GetDeviceCapabilities().SupportsSSBO()); + return GetPipeline(sweep_gradient_ssbo_fill_pipelines_, opts); +} + +PipelineRef ContentContext::GetRadialGradientFillPipeline( + ContentContextOptions opts) const { + return GetPipeline(radial_gradient_fill_pipelines_, opts); +} + +PipelineRef ContentContext::GetConicalGradientFillPipeline( + ContentContextOptions opts, + ConicalKind kind) const { + switch (kind) { + case ConicalKind::kConical: + return GetPipeline(conical_gradient_fill_pipelines_, opts); + case ConicalKind::kRadial: + return GetPipeline(conical_gradient_fill_radial_pipelines_, opts); + case ConicalKind::kStrip: + return GetPipeline(conical_gradient_fill_strip_pipelines_, opts); + case ConicalKind::kStripAndRadial: + return GetPipeline(conical_gradient_fill_strip_and_radial_pipelines_, + opts); + } +} + +PipelineRef ContentContext::GetRRectBlurPipeline( + ContentContextOptions opts) const { + return GetPipeline(rrect_blur_pipelines_, opts); +} + +PipelineRef ContentContext::GetSweepGradientFillPipeline( + ContentContextOptions opts) const { + return GetPipeline(sweep_gradient_fill_pipelines_, opts); +} + +PipelineRef ContentContext::GetSolidFillPipeline( + ContentContextOptions opts) const { + return GetPipeline(solid_fill_pipelines_, opts); +} + +PipelineRef ContentContext::GetTexturePipeline( + ContentContextOptions opts) const { + return GetPipeline(texture_pipelines_, opts); +} + +PipelineRef ContentContext::GetTextureStrictSrcPipeline( + ContentContextOptions opts) const { + return GetPipeline(texture_strict_src_pipelines_, opts); +} + +PipelineRef ContentContext::GetTiledTexturePipeline( + ContentContextOptions opts) const { + return GetPipeline(tiled_texture_pipelines_, opts); +} + +PipelineRef ContentContext::GetGaussianBlurPipeline( + ContentContextOptions opts) const { + return GetPipeline(gaussian_blur_pipelines_, opts); +} + +PipelineRef ContentContext::GetBorderMaskBlurPipeline( + ContentContextOptions opts) const { + return GetPipeline(border_mask_blur_pipelines_, opts); +} + +PipelineRef ContentContext::GetMorphologyFilterPipeline( + ContentContextOptions opts) const { + return GetPipeline(morphology_filter_pipelines_, opts); +} + +PipelineRef ContentContext::GetColorMatrixColorFilterPipeline( + ContentContextOptions opts) const { + return GetPipeline(color_matrix_color_filter_pipelines_, opts); +} + +PipelineRef ContentContext::GetLinearToSrgbFilterPipeline( + ContentContextOptions opts) const { + return GetPipeline(linear_to_srgb_filter_pipelines_, opts); +} + +PipelineRef ContentContext::GetSrgbToLinearFilterPipeline( + ContentContextOptions opts) const { + return GetPipeline(srgb_to_linear_filter_pipelines_, opts); +} + +PipelineRef ContentContext::GetClipPipeline(ContentContextOptions opts) const { + return GetPipeline(clip_pipelines_, opts); +} + +PipelineRef ContentContext::GetGlyphAtlasPipeline( + ContentContextOptions opts) const { + return GetPipeline(glyph_atlas_pipelines_, opts); +} + +PipelineRef ContentContext::GetYUVToRGBFilterPipeline( + ContentContextOptions opts) const { + return GetPipeline(yuv_to_rgb_filter_pipelines_, opts); +} + +PipelineRef ContentContext::GetPorterDuffPipeline( + BlendMode mode, + ContentContextOptions opts) const { + switch (mode) { + case BlendMode::kClear: + return GetClearBlendPipeline(opts); + case BlendMode::kSource: + return GetSourceBlendPipeline(opts); + case BlendMode::kDestination: + return GetDestinationBlendPipeline(opts); + case BlendMode::kSourceOver: + return GetSourceOverBlendPipeline(opts); + case BlendMode::kDestinationOver: + return GetDestinationOverBlendPipeline(opts); + case BlendMode::kSourceIn: + return GetSourceInBlendPipeline(opts); + case BlendMode::kDestinationIn: + return GetDestinationInBlendPipeline(opts); + case BlendMode::kSourceOut: + return GetSourceOutBlendPipeline(opts); + case BlendMode::kDestinationOut: + return GetDestinationOutBlendPipeline(opts); + case BlendMode::kSourceATop: + return GetSourceATopBlendPipeline(opts); + case BlendMode::kDestinationATop: + return GetDestinationATopBlendPipeline(opts); + case BlendMode::kXor: + return GetXorBlendPipeline(opts); + case BlendMode::kPlus: + return GetPlusBlendPipeline(opts); + case BlendMode::kModulate: + return GetModulateBlendPipeline(opts); + case BlendMode::kScreen: + return GetScreenBlendPipeline(opts); + case BlendMode::kOverlay: + case BlendMode::kDarken: + case BlendMode::kLighten: + case BlendMode::kColorDodge: + case BlendMode::kColorBurn: + case BlendMode::kHardLight: + case BlendMode::kSoftLight: + case BlendMode::kDifference: + case BlendMode::kExclusion: + case BlendMode::kMultiply: + case BlendMode::kHue: + case BlendMode::kSaturation: + case BlendMode::kColor: + case BlendMode::kLuminosity: + VALIDATION_LOG << "Invalid porter duff blend mode " + << BlendModeToString(mode); + return GetClearBlendPipeline(opts); + break; + } +} + +PipelineRef ContentContext::GetClearBlendPipeline( + ContentContextOptions opts) const { + return GetPipeline(clear_blend_pipelines_, opts); +} + +PipelineRef ContentContext::GetSourceBlendPipeline( + ContentContextOptions opts) const { + return GetPipeline(source_blend_pipelines_, opts); +} + +PipelineRef ContentContext::GetDestinationBlendPipeline( + ContentContextOptions opts) const { + return GetPipeline(destination_blend_pipelines_, opts); +} + +PipelineRef ContentContext::GetSourceOverBlendPipeline( + ContentContextOptions opts) const { + return GetPipeline(source_over_blend_pipelines_, opts); +} + +PipelineRef ContentContext::GetDestinationOverBlendPipeline( + ContentContextOptions opts) const { + return GetPipeline(destination_over_blend_pipelines_, opts); +} + +PipelineRef ContentContext::GetSourceInBlendPipeline( + ContentContextOptions opts) const { + return GetPipeline(source_in_blend_pipelines_, opts); +} + +PipelineRef ContentContext::GetDestinationInBlendPipeline( + ContentContextOptions opts) const { + return GetPipeline(destination_in_blend_pipelines_, opts); +} + +PipelineRef ContentContext::GetSourceOutBlendPipeline( + ContentContextOptions opts) const { + return GetPipeline(source_out_blend_pipelines_, opts); +} + +PipelineRef ContentContext::GetDestinationOutBlendPipeline( + ContentContextOptions opts) const { + return GetPipeline(destination_out_blend_pipelines_, opts); +} + +PipelineRef ContentContext::GetSourceATopBlendPipeline( + ContentContextOptions opts) const { + return GetPipeline(source_a_top_blend_pipelines_, opts); +} + +PipelineRef ContentContext::GetDestinationATopBlendPipeline( + ContentContextOptions opts) const { + return GetPipeline(destination_a_top_blend_pipelines_, opts); +} + +PipelineRef ContentContext::GetXorBlendPipeline( + ContentContextOptions opts) const { + return GetPipeline(xor_blend_pipelines_, opts); +} + +PipelineRef ContentContext::GetPlusBlendPipeline( + ContentContextOptions opts) const { + return GetPipeline(plus_blend_pipelines_, opts); +} + +PipelineRef ContentContext::GetModulateBlendPipeline( + ContentContextOptions opts) const { + return GetPipeline(modulate_blend_pipelines_, opts); +} + +PipelineRef ContentContext::GetScreenBlendPipeline( + ContentContextOptions opts) const { + return GetPipeline(screen_blend_pipelines_, opts); +} + +PipelineRef ContentContext::GetBlendColorPipeline( + ContentContextOptions opts) const { + return GetPipeline(blend_color_pipelines_, opts); +} + +PipelineRef ContentContext::GetBlendColorBurnPipeline( + ContentContextOptions opts) const { + return GetPipeline(blend_colorburn_pipelines_, opts); +} + +PipelineRef ContentContext::GetBlendColorDodgePipeline( + ContentContextOptions opts) const { + return GetPipeline(blend_colordodge_pipelines_, opts); +} + +PipelineRef ContentContext::GetBlendDarkenPipeline( + ContentContextOptions opts) const { + return GetPipeline(blend_darken_pipelines_, opts); +} + +PipelineRef ContentContext::GetBlendDifferencePipeline( + ContentContextOptions opts) const { + return GetPipeline(blend_difference_pipelines_, opts); +} + +PipelineRef ContentContext::GetBlendExclusionPipeline( + ContentContextOptions opts) const { + return GetPipeline(blend_exclusion_pipelines_, opts); +} + +PipelineRef ContentContext::GetBlendHardLightPipeline( + ContentContextOptions opts) const { + return GetPipeline(blend_hardlight_pipelines_, opts); +} + +PipelineRef ContentContext::GetBlendHuePipeline( + ContentContextOptions opts) const { + return GetPipeline(blend_hue_pipelines_, opts); +} + +PipelineRef ContentContext::GetBlendLightenPipeline( + ContentContextOptions opts) const { + return GetPipeline(blend_lighten_pipelines_, opts); +} + +PipelineRef ContentContext::GetBlendLuminosityPipeline( + ContentContextOptions opts) const { + return GetPipeline(blend_luminosity_pipelines_, opts); +} + +PipelineRef ContentContext::GetBlendMultiplyPipeline( + ContentContextOptions opts) const { + return GetPipeline(blend_multiply_pipelines_, opts); +} + +PipelineRef ContentContext::GetBlendOverlayPipeline( + ContentContextOptions opts) const { + return GetPipeline(blend_overlay_pipelines_, opts); +} + +PipelineRef ContentContext::GetBlendSaturationPipeline( + ContentContextOptions opts) const { + return GetPipeline(blend_saturation_pipelines_, opts); +} + +PipelineRef ContentContext::GetBlendScreenPipeline( + ContentContextOptions opts) const { + return GetPipeline(blend_screen_pipelines_, opts); +} + +PipelineRef ContentContext::GetBlendSoftLightPipeline( + ContentContextOptions opts) const { + return GetPipeline(blend_softlight_pipelines_, opts); +} + +PipelineRef ContentContext::GetDownsamplePipeline( + ContentContextOptions opts) const { + return GetPipeline(texture_downsample_pipelines_, opts); +} + +PipelineRef ContentContext::GetFramebufferBlendColorPipeline( + ContentContextOptions opts) const { + FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch()); + return GetPipeline(framebuffer_blend_color_pipelines_, opts); +} + +PipelineRef ContentContext::GetFramebufferBlendColorBurnPipeline( + ContentContextOptions opts) const { + FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch()); + return GetPipeline(framebuffer_blend_colorburn_pipelines_, opts); +} + +PipelineRef ContentContext::GetFramebufferBlendColorDodgePipeline( + ContentContextOptions opts) const { + FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch()); + return GetPipeline(framebuffer_blend_colordodge_pipelines_, opts); +} + +PipelineRef ContentContext::GetFramebufferBlendDarkenPipeline( + ContentContextOptions opts) const { + FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch()); + return GetPipeline(framebuffer_blend_darken_pipelines_, opts); +} + +PipelineRef ContentContext::GetFramebufferBlendDifferencePipeline( + ContentContextOptions opts) const { + FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch()); + return GetPipeline(framebuffer_blend_difference_pipelines_, opts); +} + +PipelineRef ContentContext::GetFramebufferBlendExclusionPipeline( + ContentContextOptions opts) const { + FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch()); + return GetPipeline(framebuffer_blend_exclusion_pipelines_, opts); +} + +PipelineRef ContentContext::GetFramebufferBlendHardLightPipeline( + ContentContextOptions opts) const { + FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch()); + return GetPipeline(framebuffer_blend_hardlight_pipelines_, opts); +} + +PipelineRef ContentContext::GetFramebufferBlendHuePipeline( + ContentContextOptions opts) const { + FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch()); + return GetPipeline(framebuffer_blend_hue_pipelines_, opts); +} + +PipelineRef ContentContext::GetFramebufferBlendLightenPipeline( + ContentContextOptions opts) const { + FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch()); + return GetPipeline(framebuffer_blend_lighten_pipelines_, opts); +} + +PipelineRef ContentContext::GetFramebufferBlendLuminosityPipeline( + ContentContextOptions opts) const { + FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch()); + return GetPipeline(framebuffer_blend_luminosity_pipelines_, opts); +} + +PipelineRef ContentContext::GetFramebufferBlendMultiplyPipeline( + ContentContextOptions opts) const { + FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch()); + return GetPipeline(framebuffer_blend_multiply_pipelines_, opts); +} + +PipelineRef ContentContext::GetFramebufferBlendOverlayPipeline( + ContentContextOptions opts) const { + FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch()); + return GetPipeline(framebuffer_blend_overlay_pipelines_, opts); +} + +PipelineRef ContentContext::GetFramebufferBlendSaturationPipeline( + ContentContextOptions opts) const { + FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch()); + return GetPipeline(framebuffer_blend_saturation_pipelines_, opts); +} + +PipelineRef ContentContext::GetFramebufferBlendScreenPipeline( + ContentContextOptions opts) const { + FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch()); + return GetPipeline(framebuffer_blend_screen_pipelines_, opts); +} + +PipelineRef ContentContext::GetFramebufferBlendSoftLightPipeline( + ContentContextOptions opts) const { + FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch()); + return GetPipeline(framebuffer_blend_softlight_pipelines_, opts); +} + +PipelineRef ContentContext::GetDrawVerticesUberShader( + ContentContextOptions opts) const { + return GetPipeline(vertices_uber_shader_, opts); +} + +#ifdef IMPELLER_ENABLE_OPENGLES +PipelineRef ContentContext::GetDownsampleTextureGlesPipeline( + ContentContextOptions opts) const { + return GetPipeline(texture_downsample_gles_pipelines_, opts); +} + +PipelineRef ContentContext::GetTiledTextureExternalPipeline( + ContentContextOptions opts) const { + FML_DCHECK(GetContext()->GetBackendType() == Context::BackendType::kOpenGLES); + return GetPipeline(tiled_texture_external_pipelines_, opts); +} + +PipelineRef ContentContext::GetTiledTextureUvExternalPipeline( + ContentContextOptions opts) const { + FML_DCHECK(GetContext()->GetBackendType() == Context::BackendType::kOpenGLES); + return GetPipeline(tiled_texture_uv_external_pipelines_, opts); +} +#endif // IMPELLER_ENABLE_OPENGLES + } // namespace impeller diff --git a/engine/src/flutter/impeller/entity/contents/content_context.h b/engine/src/flutter/impeller/entity/contents/content_context.h index 9b0a379128..733293e914 100644 --- a/engine/src/flutter/impeller/entity/contents/content_context.h +++ b/engine/src/flutter/impeller/entity/contents/content_context.h @@ -88,195 +88,86 @@ namespace impeller { -using FastGradientPipeline = - RenderPipelineHandle; -using LinearGradientFillPipeline = - RenderPipelineHandle; -using SolidFillPipeline = - RenderPipelineHandle; -using RadialGradientFillPipeline = - RenderPipelineHandle; -using ConicalGradientFillConicalPipeline = - RenderPipelineHandle; -using ConicalGradientFillStripPipeline = - RenderPipelineHandle; -using ConicalGradientFillRadialPipeline = - RenderPipelineHandle; -using ConicalGradientFillStripRadialPipeline = - RenderPipelineHandle; -using SweepGradientFillPipeline = - RenderPipelineHandle; -using LinearGradientUniformFillPipeline = - RenderPipelineHandle; -using ConicalGradientUniformFillConicalPipeline = - RenderPipelineHandle; -using ConicalGradientUniformFillStripPipeline = - RenderPipelineHandle; -using ConicalGradientUniformFillRadialPipeline = - RenderPipelineHandle; -using ConicalGradientUniformFillStripRadialPipeline = - RenderPipelineHandle; -using RadialGradientUniformFillPipeline = - RenderPipelineHandle; -using SweepGradientUniformFillPipeline = - RenderPipelineHandle; -using LinearGradientSSBOFillPipeline = - RenderPipelineHandle; -using ConicalGradientSSBOFillPipeline = - RenderPipelineHandle; -using RadialGradientSSBOFillPipeline = - RenderPipelineHandle; -using SweepGradientSSBOFillPipeline = - RenderPipelineHandle; -using RRectBlurPipeline = - RenderPipelineHandle; -using TexturePipeline = - RenderPipelineHandle; -using TextureDownsamplePipeline = - RenderPipelineHandle; -using TextureStrictSrcPipeline = - RenderPipelineHandle; -using TiledTexturePipeline = - RenderPipelineHandle; -using GaussianBlurPipeline = - RenderPipelineHandle; -using BorderMaskBlurPipeline = - RenderPipelineHandle; -using MorphologyFilterPipeline = - RenderPipelineHandle; -using ColorMatrixColorFilterPipeline = - RenderPipelineHandle; -using LinearToSrgbFilterPipeline = - RenderPipelineHandle; -using SrgbToLinearFilterPipeline = - RenderPipelineHandle; -using YUVToRGBFilterPipeline = - RenderPipelineHandle; +template +using GradientPipelineHandle = + RenderPipelineHandle; -using GlyphAtlasPipeline = - RenderPipelineHandle; +using AdvancedBlendPipelineHandle = + RenderPipelineHandle; -using PorterDuffBlendPipeline = - RenderPipelineHandle; +using FramebufferBlendPipelineHandle = + RenderPipelineHandle; + +// clang-format off +using BlendColorBurnPipeline = AdvancedBlendPipelineHandle; +using BlendColorDodgePipeline = AdvancedBlendPipelineHandle; +using BlendColorPipeline = AdvancedBlendPipelineHandle; +using BlendDarkenPipeline = AdvancedBlendPipelineHandle; +using BlendDifferencePipeline = AdvancedBlendPipelineHandle; +using BlendExclusionPipeline = AdvancedBlendPipelineHandle; +using BlendHardLightPipeline = AdvancedBlendPipelineHandle; +using BlendHuePipeline = AdvancedBlendPipelineHandle; +using BlendLightenPipeline = AdvancedBlendPipelineHandle; +using BlendLuminosityPipeline = AdvancedBlendPipelineHandle; +using BlendMultiplyPipeline = AdvancedBlendPipelineHandle; +using BlendOverlayPipeline = AdvancedBlendPipelineHandle; +using BlendSaturationPipeline = AdvancedBlendPipelineHandle; +using BlendScreenPipeline = AdvancedBlendPipelineHandle; +using BlendSoftLightPipeline = AdvancedBlendPipelineHandle; +using BorderMaskBlurPipeline = RenderPipelineHandle; using ClipPipeline = RenderPipelineHandle; - -// Advanced blends -using BlendColorPipeline = RenderPipelineHandle; -using BlendColorBurnPipeline = - RenderPipelineHandle; -using BlendColorDodgePipeline = - RenderPipelineHandle; -using BlendDarkenPipeline = RenderPipelineHandle; -using BlendDifferencePipeline = - RenderPipelineHandle; -using BlendExclusionPipeline = - RenderPipelineHandle; -using BlendHardLightPipeline = - RenderPipelineHandle; -using BlendHuePipeline = RenderPipelineHandle; -using BlendLightenPipeline = RenderPipelineHandle; -using BlendLuminosityPipeline = - RenderPipelineHandle; -using BlendMultiplyPipeline = RenderPipelineHandle; -using BlendOverlayPipeline = RenderPipelineHandle; -using BlendSaturationPipeline = - RenderPipelineHandle; -using BlendScreenPipeline = RenderPipelineHandle; -using BlendSoftLightPipeline = - RenderPipelineHandle; -// Framebuffer Advanced Blends -using FramebufferBlendColorPipeline = - RenderPipelineHandle; -using FramebufferBlendColorBurnPipeline = - RenderPipelineHandle; -using FramebufferBlendColorDodgePipeline = - RenderPipelineHandle; -using FramebufferBlendDarkenPipeline = - RenderPipelineHandle; -using FramebufferBlendDifferencePipeline = - RenderPipelineHandle; -using FramebufferBlendExclusionPipeline = - RenderPipelineHandle; -using FramebufferBlendHardLightPipeline = - RenderPipelineHandle; -using FramebufferBlendHuePipeline = - RenderPipelineHandle; -using FramebufferBlendLightenPipeline = - RenderPipelineHandle; -using FramebufferBlendLuminosityPipeline = - RenderPipelineHandle; -using FramebufferBlendMultiplyPipeline = - RenderPipelineHandle; -using FramebufferBlendOverlayPipeline = - RenderPipelineHandle; -using FramebufferBlendSaturationPipeline = - RenderPipelineHandle; -using FramebufferBlendScreenPipeline = - RenderPipelineHandle; -using FramebufferBlendSoftLightPipeline = - RenderPipelineHandle; - -/// Draw Vertices/Atlas Uber Shader -using VerticesUberShader = RenderPipelineHandle; +using ColorMatrixColorFilterPipeline = RenderPipelineHandle; +using ConicalGradientFillConicalPipeline = GradientPipelineHandle; +using ConicalGradientFillRadialPipeline = GradientPipelineHandle; +using ConicalGradientFillStripPipeline = GradientPipelineHandle; +using ConicalGradientFillStripRadialPipeline = GradientPipelineHandle; +using ConicalGradientSSBOFillPipeline = GradientPipelineHandle; +using ConicalGradientUniformFillConicalPipeline = GradientPipelineHandle; +using ConicalGradientUniformFillRadialPipeline = GradientPipelineHandle; +using ConicalGradientUniformFillStripPipeline = GradientPipelineHandle; +using ConicalGradientUniformFillStripRadialPipeline = GradientPipelineHandle; +using FastGradientPipeline = RenderPipelineHandle; +using FramebufferBlendColorBurnPipeline = FramebufferBlendPipelineHandle; +using FramebufferBlendColorDodgePipeline = FramebufferBlendPipelineHandle; +using FramebufferBlendColorPipeline = FramebufferBlendPipelineHandle; +using FramebufferBlendDarkenPipeline = FramebufferBlendPipelineHandle; +using FramebufferBlendDifferencePipeline = FramebufferBlendPipelineHandle; +using FramebufferBlendExclusionPipeline = FramebufferBlendPipelineHandle; +using FramebufferBlendHardLightPipeline = FramebufferBlendPipelineHandle; +using FramebufferBlendHuePipeline = FramebufferBlendPipelineHandle; +using FramebufferBlendLightenPipeline = FramebufferBlendPipelineHandle; +using FramebufferBlendLuminosityPipeline = FramebufferBlendPipelineHandle; +using FramebufferBlendMultiplyPipeline = FramebufferBlendPipelineHandle; +using FramebufferBlendOverlayPipeline = FramebufferBlendPipelineHandle; +using FramebufferBlendSaturationPipeline = FramebufferBlendPipelineHandle; +using FramebufferBlendScreenPipeline = FramebufferBlendPipelineHandle; +using FramebufferBlendSoftLightPipeline = FramebufferBlendPipelineHandle; +using GaussianBlurPipeline = RenderPipelineHandle; +using GlyphAtlasPipeline = RenderPipelineHandle; +using LinearGradientFillPipeline = GradientPipelineHandle; +using LinearGradientSSBOFillPipeline = GradientPipelineHandle; +using LinearGradientUniformFillPipeline = GradientPipelineHandle; +using LinearToSrgbFilterPipeline = RenderPipelineHandle; +using MorphologyFilterPipeline = RenderPipelineHandle; +using PorterDuffBlendPipeline = RenderPipelineHandle; +using RadialGradientFillPipeline = GradientPipelineHandle; +using RadialGradientSSBOFillPipeline = GradientPipelineHandle; +using RadialGradientUniformFillPipeline = GradientPipelineHandle; +using RRectBlurPipeline = RenderPipelineHandle; +using SolidFillPipeline = RenderPipelineHandle; +using SrgbToLinearFilterPipeline = RenderPipelineHandle; +using SweepGradientFillPipeline = GradientPipelineHandle; +using SweepGradientSSBOFillPipeline = GradientPipelineHandle; +using SweepGradientUniformFillPipeline = GradientPipelineHandle; +using TextureDownsamplePipeline = RenderPipelineHandle; +using TexturePipeline = RenderPipelineHandle; +using TextureStrictSrcPipeline = RenderPipelineHandle; +using TiledTexturePipeline = RenderPipelineHandle; +using VerticesUberShader = RenderPipelineHandle; +using YUVToRGBFilterPipeline = RenderPipelineHandle; +// clang-format on #ifdef IMPELLER_ENABLE_OPENGLES using TiledTextureExternalPipeline = @@ -412,457 +303,88 @@ class ContentContext { Tessellator& GetTessellator() const; - PipelineRef GetFastGradientPipeline(ContentContextOptions opts) const { - return GetPipeline(fast_gradient_pipelines_, opts); - } - - PipelineRef GetLinearGradientFillPipeline(ContentContextOptions opts) const { - return GetPipeline(linear_gradient_fill_pipelines_, opts); - } - - PipelineRef GetLinearGradientUniformFillPipeline( - ContentContextOptions opts) const { - return GetPipeline(linear_gradient_uniform_fill_pipelines_, opts); - } - - PipelineRef GetRadialGradientUniformFillPipeline( - ContentContextOptions opts) const { - return GetPipeline(radial_gradient_uniform_fill_pipelines_, opts); - } - - PipelineRef GetConicalGradientUniformFillPipeline(ContentContextOptions opts, - ConicalKind kind) const { - switch (kind) { - case ConicalKind::kConical: - return GetPipeline(conical_gradient_uniform_fill_pipelines_, opts); - case ConicalKind::kRadial: - return GetPipeline(conical_gradient_uniform_fill_radial_pipelines_, - opts); - case ConicalKind::kStrip: - return GetPipeline(conical_gradient_uniform_fill_strip_pipelines_, - opts); - case ConicalKind::kStripAndRadial: - return GetPipeline( - conical_gradient_uniform_fill_strip_and_radial_pipelines_, opts); - } - } - - PipelineRef GetSweepGradientUniformFillPipeline( - ContentContextOptions opts) const { - return GetPipeline(sweep_gradient_uniform_fill_pipelines_, opts); - } - - PipelineRef GetLinearGradientSSBOFillPipeline( - ContentContextOptions opts) const { - FML_DCHECK(GetDeviceCapabilities().SupportsSSBO()); - return GetPipeline(linear_gradient_ssbo_fill_pipelines_, opts); - } - - PipelineRef GetRadialGradientSSBOFillPipeline( - ContentContextOptions opts) const { - FML_DCHECK(GetDeviceCapabilities().SupportsSSBO()); - return GetPipeline(radial_gradient_ssbo_fill_pipelines_, opts); - } - - PipelineRef GetConicalGradientSSBOFillPipeline(ContentContextOptions opts, - ConicalKind kind) const { - FML_DCHECK(GetDeviceCapabilities().SupportsSSBO()); - switch (kind) { - case ConicalKind::kConical: - return GetPipeline(conical_gradient_ssbo_fill_pipelines_, opts); - case ConicalKind::kRadial: - return GetPipeline(conical_gradient_ssbo_fill_radial_pipelines_, opts); - case ConicalKind::kStrip: - return GetPipeline(conical_gradient_ssbo_fill_strip_pipelines_, opts); - case ConicalKind::kStripAndRadial: - return GetPipeline( - conical_gradient_ssbo_fill_strip_and_radial_pipelines_, opts); - } - } - - PipelineRef GetSweepGradientSSBOFillPipeline( - ContentContextOptions opts) const { - FML_DCHECK(GetDeviceCapabilities().SupportsSSBO()); - return GetPipeline(sweep_gradient_ssbo_fill_pipelines_, opts); - } - - PipelineRef GetRadialGradientFillPipeline(ContentContextOptions opts) const { - return GetPipeline(radial_gradient_fill_pipelines_, opts); - } - - PipelineRef GetConicalGradientFillPipeline(ContentContextOptions opts, - ConicalKind kind) const { - switch (kind) { - case ConicalKind::kConical: - return GetPipeline(conical_gradient_fill_pipelines_, opts); - case ConicalKind::kRadial: - return GetPipeline(conical_gradient_fill_radial_pipelines_, opts); - case ConicalKind::kStrip: - return GetPipeline(conical_gradient_fill_strip_pipelines_, opts); - case ConicalKind::kStripAndRadial: - return GetPipeline(conical_gradient_fill_strip_and_radial_pipelines_, - opts); - } - } - - PipelineRef GetRRectBlurPipeline(ContentContextOptions opts) const { - return GetPipeline(rrect_blur_pipelines_, opts); - } - - PipelineRef GetSweepGradientFillPipeline(ContentContextOptions opts) const { - return GetPipeline(sweep_gradient_fill_pipelines_, opts); - } - - PipelineRef GetSolidFillPipeline(ContentContextOptions opts) const { - return GetPipeline(solid_fill_pipelines_, opts); - } - - PipelineRef GetTexturePipeline(ContentContextOptions opts) const { - return GetPipeline(texture_pipelines_, opts); - } - - PipelineRef GetTextureStrictSrcPipeline(ContentContextOptions opts) const { - return GetPipeline(texture_strict_src_pipelines_, opts); - } - + // clang-format off + 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 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 GetDrawVerticesUberShader(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 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 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; #ifdef IMPELLER_ENABLE_OPENGLES - PipelineRef GetDownsampleTextureGlesPipeline( - ContentContextOptions opts) const { - return GetPipeline(texture_downsample_gles_pipelines_, opts); - } - - PipelineRef GetTiledTextureExternalPipeline( - ContentContextOptions opts) const { - FML_DCHECK(GetContext()->GetBackendType() == - Context::BackendType::kOpenGLES); - return GetPipeline(tiled_texture_external_pipelines_, opts); - } - - PipelineRef GetTiledTextureUvExternalPipeline( - ContentContextOptions opts) const { - FML_DCHECK(GetContext()->GetBackendType() == - Context::BackendType::kOpenGLES); - return GetPipeline(tiled_texture_uv_external_pipelines_, opts); - } + PipelineRef GetDownsampleTextureGlesPipeline(ContentContextOptions opts) const; + PipelineRef GetTiledTextureExternalPipeline(ContentContextOptions opts) const; + PipelineRef GetTiledTextureUvExternalPipeline(ContentContextOptions opts) const; #endif // IMPELLER_ENABLE_OPENGLES - - PipelineRef GetTiledTexturePipeline(ContentContextOptions opts) const { - return GetPipeline(tiled_texture_pipelines_, opts); - } - - PipelineRef GetGaussianBlurPipeline(ContentContextOptions opts) const { - return GetPipeline(gaussian_blur_pipelines_, opts); - } - - PipelineRef GetBorderMaskBlurPipeline(ContentContextOptions opts) const { - return GetPipeline(border_mask_blur_pipelines_, opts); - } - - PipelineRef GetMorphologyFilterPipeline(ContentContextOptions opts) const { - return GetPipeline(morphology_filter_pipelines_, opts); - } - - PipelineRef GetColorMatrixColorFilterPipeline( - ContentContextOptions opts) const { - return GetPipeline(color_matrix_color_filter_pipelines_, opts); - } - - PipelineRef GetLinearToSrgbFilterPipeline(ContentContextOptions opts) const { - return GetPipeline(linear_to_srgb_filter_pipelines_, opts); - } - - PipelineRef GetSrgbToLinearFilterPipeline(ContentContextOptions opts) const { - return GetPipeline(srgb_to_linear_filter_pipelines_, opts); - } - - PipelineRef GetClipPipeline(ContentContextOptions opts) const { - return GetPipeline(clip_pipelines_, opts); - } - - PipelineRef GetGlyphAtlasPipeline(ContentContextOptions opts) const { - return GetPipeline(glyph_atlas_pipelines_, opts); - } - - PipelineRef GetYUVToRGBFilterPipeline(ContentContextOptions opts) const { - return GetPipeline(yuv_to_rgb_filter_pipelines_, opts); - } - - // Porter-Duff combined blends. - PipelineRef GetPorterDuffPipeline(BlendMode mode, - ContentContextOptions opts) const { - switch (mode) { - case BlendMode::kClear: - return GetClearBlendPipeline(opts); - case BlendMode::kSource: - return GetSourceBlendPipeline(opts); - case BlendMode::kDestination: - return GetDestinationBlendPipeline(opts); - case BlendMode::kSourceOver: - return GetSourceOverBlendPipeline(opts); - case BlendMode::kDestinationOver: - return GetDestinationOverBlendPipeline(opts); - case BlendMode::kSourceIn: - return GetSourceInBlendPipeline(opts); - case BlendMode::kDestinationIn: - return GetDestinationInBlendPipeline(opts); - case BlendMode::kSourceOut: - return GetSourceOutBlendPipeline(opts); - case BlendMode::kDestinationOut: - return GetDestinationOutBlendPipeline(opts); - case BlendMode::kSourceATop: - return GetSourceATopBlendPipeline(opts); - case BlendMode::kDestinationATop: - return GetDestinationATopBlendPipeline(opts); - case BlendMode::kXor: - return GetXorBlendPipeline(opts); - case BlendMode::kPlus: - return GetPlusBlendPipeline(opts); - case BlendMode::kModulate: - return GetModulateBlendPipeline(opts); - case BlendMode::kScreen: - return GetScreenBlendPipeline(opts); - case BlendMode::kOverlay: - case BlendMode::kDarken: - case BlendMode::kLighten: - case BlendMode::kColorDodge: - case BlendMode::kColorBurn: - case BlendMode::kHardLight: - case BlendMode::kSoftLight: - case BlendMode::kDifference: - case BlendMode::kExclusion: - case BlendMode::kMultiply: - case BlendMode::kHue: - case BlendMode::kSaturation: - case BlendMode::kColor: - case BlendMode::kLuminosity: - VALIDATION_LOG << "Invalid porter duff blend mode " - << BlendModeToString(mode); - return GetClearBlendPipeline(opts); - break; - } - } - - PipelineRef GetClearBlendPipeline(ContentContextOptions opts) const { - return GetPipeline(clear_blend_pipelines_, opts); - } - - PipelineRef GetSourceBlendPipeline(ContentContextOptions opts) const { - return GetPipeline(source_blend_pipelines_, opts); - } - - PipelineRef GetDestinationBlendPipeline(ContentContextOptions opts) const { - return GetPipeline(destination_blend_pipelines_, opts); - } - - PipelineRef GetSourceOverBlendPipeline(ContentContextOptions opts) const { - return GetPipeline(source_over_blend_pipelines_, opts); - } - - PipelineRef GetDestinationOverBlendPipeline( - ContentContextOptions opts) const { - return GetPipeline(destination_over_blend_pipelines_, opts); - } - - PipelineRef GetSourceInBlendPipeline(ContentContextOptions opts) const { - return GetPipeline(source_in_blend_pipelines_, opts); - } - - PipelineRef GetDestinationInBlendPipeline(ContentContextOptions opts) const { - return GetPipeline(destination_in_blend_pipelines_, opts); - } - - PipelineRef GetSourceOutBlendPipeline(ContentContextOptions opts) const { - return GetPipeline(source_out_blend_pipelines_, opts); - } - - PipelineRef GetDestinationOutBlendPipeline(ContentContextOptions opts) const { - return GetPipeline(destination_out_blend_pipelines_, opts); - } - - PipelineRef GetSourceATopBlendPipeline(ContentContextOptions opts) const { - return GetPipeline(source_a_top_blend_pipelines_, opts); - } - - PipelineRef GetDestinationATopBlendPipeline( - ContentContextOptions opts) const { - return GetPipeline(destination_a_top_blend_pipelines_, opts); - } - - PipelineRef GetXorBlendPipeline(ContentContextOptions opts) const { - return GetPipeline(xor_blend_pipelines_, opts); - } - - PipelineRef GetPlusBlendPipeline(ContentContextOptions opts) const { - return GetPipeline(plus_blend_pipelines_, opts); - } - - PipelineRef GetModulateBlendPipeline(ContentContextOptions opts) const { - return GetPipeline(modulate_blend_pipelines_, opts); - } - - PipelineRef GetScreenBlendPipeline(ContentContextOptions opts) const { - return GetPipeline(screen_blend_pipelines_, opts); - } - - // Advanced blends. - - PipelineRef GetBlendColorPipeline(ContentContextOptions opts) const { - return GetPipeline(blend_color_pipelines_, opts); - } - - PipelineRef GetBlendColorBurnPipeline(ContentContextOptions opts) const { - return GetPipeline(blend_colorburn_pipelines_, opts); - } - - PipelineRef GetBlendColorDodgePipeline(ContentContextOptions opts) const { - return GetPipeline(blend_colordodge_pipelines_, opts); - } - - PipelineRef GetBlendDarkenPipeline(ContentContextOptions opts) const { - return GetPipeline(blend_darken_pipelines_, opts); - } - - PipelineRef GetBlendDifferencePipeline(ContentContextOptions opts) const { - return GetPipeline(blend_difference_pipelines_, opts); - } - - PipelineRef GetBlendExclusionPipeline(ContentContextOptions opts) const { - return GetPipeline(blend_exclusion_pipelines_, opts); - } - - PipelineRef GetBlendHardLightPipeline(ContentContextOptions opts) const { - return GetPipeline(blend_hardlight_pipelines_, opts); - } - - PipelineRef GetBlendHuePipeline(ContentContextOptions opts) const { - return GetPipeline(blend_hue_pipelines_, opts); - } - - PipelineRef GetBlendLightenPipeline(ContentContextOptions opts) const { - return GetPipeline(blend_lighten_pipelines_, opts); - } - - PipelineRef GetBlendLuminosityPipeline(ContentContextOptions opts) const { - return GetPipeline(blend_luminosity_pipelines_, opts); - } - - PipelineRef GetBlendMultiplyPipeline(ContentContextOptions opts) const { - return GetPipeline(blend_multiply_pipelines_, opts); - } - - PipelineRef GetBlendOverlayPipeline(ContentContextOptions opts) const { - return GetPipeline(blend_overlay_pipelines_, opts); - } - - PipelineRef GetBlendSaturationPipeline(ContentContextOptions opts) const { - return GetPipeline(blend_saturation_pipelines_, opts); - } - - PipelineRef GetBlendScreenPipeline(ContentContextOptions opts) const { - return GetPipeline(blend_screen_pipelines_, opts); - } - - PipelineRef GetBlendSoftLightPipeline(ContentContextOptions opts) const { - return GetPipeline(blend_softlight_pipelines_, opts); - } - - PipelineRef GetDownsamplePipeline(ContentContextOptions opts) const { - return GetPipeline(texture_downsample_pipelines_, opts); - } - - // Framebuffer Advanced Blends - PipelineRef GetFramebufferBlendColorPipeline( - ContentContextOptions opts) const { - FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch()); - return GetPipeline(framebuffer_blend_color_pipelines_, opts); - } - - PipelineRef GetFramebufferBlendColorBurnPipeline( - ContentContextOptions opts) const { - FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch()); - return GetPipeline(framebuffer_blend_colorburn_pipelines_, opts); - } - - PipelineRef GetFramebufferBlendColorDodgePipeline( - ContentContextOptions opts) const { - FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch()); - return GetPipeline(framebuffer_blend_colordodge_pipelines_, opts); - } - - PipelineRef GetFramebufferBlendDarkenPipeline( - ContentContextOptions opts) const { - FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch()); - return GetPipeline(framebuffer_blend_darken_pipelines_, opts); - } - - PipelineRef GetFramebufferBlendDifferencePipeline( - ContentContextOptions opts) const { - FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch()); - return GetPipeline(framebuffer_blend_difference_pipelines_, opts); - } - - PipelineRef GetFramebufferBlendExclusionPipeline( - ContentContextOptions opts) const { - FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch()); - return GetPipeline(framebuffer_blend_exclusion_pipelines_, opts); - } - - PipelineRef GetFramebufferBlendHardLightPipeline( - ContentContextOptions opts) const { - FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch()); - return GetPipeline(framebuffer_blend_hardlight_pipelines_, opts); - } - - PipelineRef GetFramebufferBlendHuePipeline(ContentContextOptions opts) const { - FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch()); - return GetPipeline(framebuffer_blend_hue_pipelines_, opts); - } - - PipelineRef GetFramebufferBlendLightenPipeline( - ContentContextOptions opts) const { - FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch()); - return GetPipeline(framebuffer_blend_lighten_pipelines_, opts); - } - - PipelineRef GetFramebufferBlendLuminosityPipeline( - ContentContextOptions opts) const { - FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch()); - return GetPipeline(framebuffer_blend_luminosity_pipelines_, opts); - } - - PipelineRef GetFramebufferBlendMultiplyPipeline( - ContentContextOptions opts) const { - FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch()); - return GetPipeline(framebuffer_blend_multiply_pipelines_, opts); - } - - PipelineRef GetFramebufferBlendOverlayPipeline( - ContentContextOptions opts) const { - FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch()); - return GetPipeline(framebuffer_blend_overlay_pipelines_, opts); - } - - PipelineRef GetFramebufferBlendSaturationPipeline( - ContentContextOptions opts) const { - FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch()); - return GetPipeline(framebuffer_blend_saturation_pipelines_, opts); - } - - PipelineRef GetFramebufferBlendScreenPipeline( - ContentContextOptions opts) const { - FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch()); - return GetPipeline(framebuffer_blend_screen_pipelines_, opts); - } - - PipelineRef GetFramebufferBlendSoftLightPipeline( - ContentContextOptions opts) const { - FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch()); - return GetPipeline(framebuffer_blend_softlight_pipelines_, opts); - } - - PipelineRef GetDrawVerticesUberShader(ContentContextOptions opts) const { - return GetPipeline(vertices_uber_shader_, opts); - } + // clang-format on // An empty 1x1 texture for binding drawVertices/drawAtlas or other cases // that don't always have a texture (due to blending). @@ -1048,92 +570,10 @@ class ContentContext { // variants requested from that are lazily created and cached in the variants // map. - mutable Variants solid_fill_pipelines_; - mutable Variants fast_gradient_pipelines_; - mutable Variants linear_gradient_fill_pipelines_; - mutable Variants radial_gradient_fill_pipelines_; - mutable Variants - conical_gradient_fill_pipelines_; - mutable Variants - conical_gradient_fill_radial_pipelines_; - mutable Variants - conical_gradient_fill_strip_pipelines_; - mutable Variants - conical_gradient_fill_strip_and_radial_pipelines_; - mutable Variants sweep_gradient_fill_pipelines_; - mutable Variants - linear_gradient_uniform_fill_pipelines_; - mutable Variants - radial_gradient_uniform_fill_pipelines_; - mutable Variants - conical_gradient_uniform_fill_pipelines_; - mutable Variants - conical_gradient_uniform_fill_radial_pipelines_; - mutable Variants - conical_gradient_uniform_fill_strip_pipelines_; - mutable Variants - conical_gradient_uniform_fill_strip_and_radial_pipelines_; - mutable Variants - sweep_gradient_uniform_fill_pipelines_; - mutable Variants - linear_gradient_ssbo_fill_pipelines_; - mutable Variants - radial_gradient_ssbo_fill_pipelines_; - mutable Variants - conical_gradient_ssbo_fill_pipelines_; - mutable Variants - conical_gradient_ssbo_fill_radial_pipelines_; - mutable Variants - conical_gradient_ssbo_fill_strip_pipelines_; - mutable Variants - conical_gradient_ssbo_fill_strip_and_radial_pipelines_; - mutable Variants - sweep_gradient_ssbo_fill_pipelines_; - mutable Variants rrect_blur_pipelines_; - mutable Variants texture_pipelines_; - mutable Variants texture_downsample_pipelines_; - mutable Variants texture_strict_src_pipelines_; -#ifdef IMPELLER_ENABLE_OPENGLES - mutable Variants - tiled_texture_external_pipelines_; - mutable Variants - texture_downsample_gles_pipelines_; - mutable Variants - tiled_texture_uv_external_pipelines_; -#endif // IMPELLER_ENABLE_OPENGLES - mutable Variants tiled_texture_pipelines_; - mutable Variants gaussian_blur_pipelines_; - mutable Variants border_mask_blur_pipelines_; - mutable Variants morphology_filter_pipelines_; - mutable Variants - color_matrix_color_filter_pipelines_; - mutable Variants linear_to_srgb_filter_pipelines_; - mutable Variants srgb_to_linear_filter_pipelines_; - mutable Variants clip_pipelines_; - mutable Variants glyph_atlas_pipelines_; - mutable Variants yuv_to_rgb_filter_pipelines_; - - // Porter Duff Blends. - mutable Variants clear_blend_pipelines_; - mutable Variants source_blend_pipelines_; - mutable Variants destination_blend_pipelines_; - mutable Variants source_over_blend_pipelines_; - mutable Variants destination_over_blend_pipelines_; - mutable Variants source_in_blend_pipelines_; - mutable Variants destination_in_blend_pipelines_; - mutable Variants source_out_blend_pipelines_; - mutable Variants destination_out_blend_pipelines_; - mutable Variants source_a_top_blend_pipelines_; - mutable Variants destination_a_top_blend_pipelines_; - mutable Variants xor_blend_pipelines_; - mutable Variants plus_blend_pipelines_; - mutable Variants modulate_blend_pipelines_; - mutable Variants screen_blend_pipelines_; - - // Advanced blends. - mutable Variants blend_color_pipelines_; + // clang-format off mutable Variants blend_colorburn_pipelines_; mutable Variants blend_colordodge_pipelines_; + mutable Variants blend_color_pipelines_; mutable Variants blend_darken_pipelines_; mutable Variants blend_difference_pipelines_; mutable Variants blend_exclusion_pipelines_; @@ -1146,38 +586,81 @@ class ContentContext { mutable Variants blend_saturation_pipelines_; mutable Variants blend_screen_pipelines_; mutable Variants blend_softlight_pipelines_; - // Framebuffer Advanced blends. - mutable Variants - framebuffer_blend_color_pipelines_; - mutable Variants - framebuffer_blend_colorburn_pipelines_; - mutable Variants - framebuffer_blend_colordodge_pipelines_; - mutable Variants - framebuffer_blend_darken_pipelines_; - mutable Variants - framebuffer_blend_difference_pipelines_; - mutable Variants - framebuffer_blend_exclusion_pipelines_; - mutable Variants - framebuffer_blend_hardlight_pipelines_; - mutable Variants - framebuffer_blend_hue_pipelines_; - mutable Variants - framebuffer_blend_lighten_pipelines_; - mutable Variants - framebuffer_blend_luminosity_pipelines_; - mutable Variants - framebuffer_blend_multiply_pipelines_; - mutable Variants - framebuffer_blend_overlay_pipelines_; - mutable Variants - framebuffer_blend_saturation_pipelines_; - mutable Variants - framebuffer_blend_screen_pipelines_; - mutable Variants - framebuffer_blend_softlight_pipelines_; + mutable Variants border_mask_blur_pipelines_; + mutable Variants clip_pipelines_; + mutable Variants color_matrix_color_filter_pipelines_; + mutable Variants conical_gradient_fill_pipelines_; + mutable Variants conical_gradient_fill_radial_pipelines_; + mutable Variants conical_gradient_fill_strip_pipelines_; + mutable Variants conical_gradient_fill_strip_and_radial_pipelines_; + mutable Variants conical_gradient_ssbo_fill_pipelines_; + mutable Variants conical_gradient_ssbo_fill_radial_pipelines_; + mutable Variants conical_gradient_ssbo_fill_strip_and_radial_pipelines_; + mutable Variants conical_gradient_ssbo_fill_strip_pipelines_; + mutable Variants conical_gradient_uniform_fill_pipelines_; + mutable Variants conical_gradient_uniform_fill_radial_pipelines_; + mutable Variants conical_gradient_uniform_fill_strip_pipelines_; + mutable Variants conical_gradient_uniform_fill_strip_and_radial_pipelines_; + mutable Variants fast_gradient_pipelines_; + mutable Variants framebuffer_blend_colorburn_pipelines_; + mutable Variants framebuffer_blend_colordodge_pipelines_; + mutable Variants framebuffer_blend_color_pipelines_; + mutable Variants framebuffer_blend_darken_pipelines_; + mutable Variants framebuffer_blend_difference_pipelines_; + mutable Variants framebuffer_blend_exclusion_pipelines_; + mutable Variants framebuffer_blend_hardlight_pipelines_; + mutable Variants framebuffer_blend_hue_pipelines_; + mutable Variants framebuffer_blend_lighten_pipelines_; + mutable Variants framebuffer_blend_luminosity_pipelines_; + mutable Variants framebuffer_blend_multiply_pipelines_; + mutable Variants framebuffer_blend_overlay_pipelines_; + mutable Variants framebuffer_blend_saturation_pipelines_; + mutable Variants framebuffer_blend_screen_pipelines_; + mutable Variants framebuffer_blend_softlight_pipelines_; + mutable Variants gaussian_blur_pipelines_; + mutable Variants glyph_atlas_pipelines_; + mutable Variants linear_gradient_fill_pipelines_; + mutable Variants linear_gradient_ssbo_fill_pipelines_; + mutable Variants linear_gradient_uniform_fill_pipelines_; + mutable Variants linear_to_srgb_filter_pipelines_; + mutable Variants morphology_filter_pipelines_; + mutable Variants clear_blend_pipelines_; + mutable Variants destination_a_top_blend_pipelines_; + mutable Variants destination_blend_pipelines_; + mutable Variants destination_in_blend_pipelines_; + mutable Variants destination_out_blend_pipelines_; + mutable Variants destination_over_blend_pipelines_; + mutable Variants modulate_blend_pipelines_; + mutable Variants plus_blend_pipelines_; + mutable Variants screen_blend_pipelines_; + mutable Variants source_a_top_blend_pipelines_; + mutable Variants source_blend_pipelines_; + mutable Variants source_in_blend_pipelines_; + mutable Variants source_out_blend_pipelines_; + mutable Variants source_over_blend_pipelines_; + mutable Variants xor_blend_pipelines_; + mutable Variants radial_gradient_fill_pipelines_; + mutable Variants radial_gradient_ssbo_fill_pipelines_; + mutable Variants radial_gradient_uniform_fill_pipelines_; + mutable Variants rrect_blur_pipelines_; + mutable Variants solid_fill_pipelines_; + mutable Variants srgb_to_linear_filter_pipelines_; + mutable Variants sweep_gradient_fill_pipelines_; + mutable Variants sweep_gradient_ssbo_fill_pipelines_; + mutable Variants sweep_gradient_uniform_fill_pipelines_; + mutable Variants texture_downsample_pipelines_; + mutable Variants texture_pipelines_; + mutable Variants texture_strict_src_pipelines_; + mutable Variants tiled_texture_pipelines_; mutable Variants vertices_uber_shader_; + mutable Variants yuv_to_rgb_filter_pipelines_; + +#ifdef IMPELLER_ENABLE_OPENGLES + mutable Variants tiled_texture_external_pipelines_; + mutable Variants texture_downsample_gles_pipelines_; + mutable Variants tiled_texture_uv_external_pipelines_; +#endif // IMPELLER_ENABLE_OPENGLES + // clang-format on template PipelineRef GetPipeline(Variants& container,