|
|
|
|
@@ -30,7 +30,7 @@ void ContentContextOptions::ApplyToPipelineDescriptor(
|
|
|
|
|
desc.SetSampleCount(sample_count);
|
|
|
|
|
|
|
|
|
|
ColorAttachmentDescriptor color0 = *desc.GetColorAttachmentDescriptor(0u);
|
|
|
|
|
color0.format = color_attachment_pixel_format.value_or(PixelFormat::kUnknown);
|
|
|
|
|
color0.format = color_attachment_pixel_format;
|
|
|
|
|
color0.alpha_blend_op = BlendOperation::kAdd;
|
|
|
|
|
color0.color_blend_op = BlendOperation::kAdd;
|
|
|
|
|
|
|
|
|
|
@@ -165,130 +165,139 @@ ContentContext::ContentContext(std::shared_ptr<Context> context)
|
|
|
|
|
if (!context_ || !context_->IsValid()) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
auto default_options = ContentContextOptions{
|
|
|
|
|
.color_attachment_pixel_format =
|
|
|
|
|
context_->GetCapabilities()->GetDefaultColorFormat()};
|
|
|
|
|
|
|
|
|
|
#ifdef IMPELLER_DEBUG
|
|
|
|
|
checkerboard_pipelines_[{}] =
|
|
|
|
|
checkerboard_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<CheckerboardPipeline>(*context_);
|
|
|
|
|
#endif // IMPELLER_DEBUG
|
|
|
|
|
|
|
|
|
|
solid_fill_pipelines_[{}] =
|
|
|
|
|
solid_fill_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<SolidFillPipeline>(*context_);
|
|
|
|
|
linear_gradient_fill_pipelines_[{}] =
|
|
|
|
|
CreateDefaultPipeline<LinearGradientFillPipeline>(*context_);
|
|
|
|
|
radial_gradient_fill_pipelines_[{}] =
|
|
|
|
|
CreateDefaultPipeline<RadialGradientFillPipeline>(*context_);
|
|
|
|
|
conical_gradient_fill_pipelines_[{}] =
|
|
|
|
|
CreateDefaultPipeline<ConicalGradientFillPipeline>(*context_);
|
|
|
|
|
|
|
|
|
|
if (context_->GetCapabilities()->SupportsSSBO()) {
|
|
|
|
|
linear_gradient_ssbo_fill_pipelines_[{}] =
|
|
|
|
|
linear_gradient_ssbo_fill_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<LinearGradientSSBOFillPipeline>(*context_);
|
|
|
|
|
radial_gradient_ssbo_fill_pipelines_[{}] =
|
|
|
|
|
radial_gradient_ssbo_fill_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<RadialGradientSSBOFillPipeline>(*context_);
|
|
|
|
|
conical_gradient_ssbo_fill_pipelines_[{}] =
|
|
|
|
|
conical_gradient_ssbo_fill_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<ConicalGradientSSBOFillPipeline>(*context_);
|
|
|
|
|
sweep_gradient_ssbo_fill_pipelines_[{}] =
|
|
|
|
|
sweep_gradient_ssbo_fill_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<SweepGradientSSBOFillPipeline>(*context_);
|
|
|
|
|
} else {
|
|
|
|
|
linear_gradient_fill_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<LinearGradientFillPipeline>(*context_);
|
|
|
|
|
radial_gradient_fill_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<RadialGradientFillPipeline>(*context_);
|
|
|
|
|
conical_gradient_fill_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<ConicalGradientFillPipeline>(*context_);
|
|
|
|
|
sweep_gradient_fill_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<SweepGradientFillPipeline>(*context_);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (context_->GetCapabilities()->SupportsFramebufferFetch()) {
|
|
|
|
|
framebuffer_blend_color_pipelines_[{}] =
|
|
|
|
|
framebuffer_blend_color_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<FramebufferBlendColorPipeline>(*context_);
|
|
|
|
|
framebuffer_blend_colorburn_pipelines_[{}] =
|
|
|
|
|
framebuffer_blend_colorburn_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<FramebufferBlendColorBurnPipeline>(*context_);
|
|
|
|
|
framebuffer_blend_colordodge_pipelines_[{}] =
|
|
|
|
|
framebuffer_blend_colordodge_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<FramebufferBlendColorDodgePipeline>(*context_);
|
|
|
|
|
framebuffer_blend_darken_pipelines_[{}] =
|
|
|
|
|
framebuffer_blend_darken_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<FramebufferBlendDarkenPipeline>(*context_);
|
|
|
|
|
framebuffer_blend_difference_pipelines_[{}] =
|
|
|
|
|
framebuffer_blend_difference_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<FramebufferBlendDifferencePipeline>(*context_);
|
|
|
|
|
framebuffer_blend_exclusion_pipelines_[{}] =
|
|
|
|
|
framebuffer_blend_exclusion_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<FramebufferBlendExclusionPipeline>(*context_);
|
|
|
|
|
framebuffer_blend_hardlight_pipelines_[{}] =
|
|
|
|
|
framebuffer_blend_hardlight_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<FramebufferBlendHardLightPipeline>(*context_);
|
|
|
|
|
framebuffer_blend_hue_pipelines_[{}] =
|
|
|
|
|
framebuffer_blend_hue_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<FramebufferBlendHuePipeline>(*context_);
|
|
|
|
|
framebuffer_blend_lighten_pipelines_[{}] =
|
|
|
|
|
framebuffer_blend_lighten_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<FramebufferBlendLightenPipeline>(*context_);
|
|
|
|
|
framebuffer_blend_luminosity_pipelines_[{}] =
|
|
|
|
|
framebuffer_blend_luminosity_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<FramebufferBlendLuminosityPipeline>(*context_);
|
|
|
|
|
framebuffer_blend_multiply_pipelines_[{}] =
|
|
|
|
|
framebuffer_blend_multiply_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<FramebufferBlendMultiplyPipeline>(*context_);
|
|
|
|
|
framebuffer_blend_overlay_pipelines_[{}] =
|
|
|
|
|
framebuffer_blend_overlay_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<FramebufferBlendOverlayPipeline>(*context_);
|
|
|
|
|
framebuffer_blend_saturation_pipelines_[{}] =
|
|
|
|
|
framebuffer_blend_saturation_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<FramebufferBlendSaturationPipeline>(*context_);
|
|
|
|
|
framebuffer_blend_screen_pipelines_[{}] =
|
|
|
|
|
framebuffer_blend_screen_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<FramebufferBlendScreenPipeline>(*context_);
|
|
|
|
|
framebuffer_blend_softlight_pipelines_[{}] =
|
|
|
|
|
framebuffer_blend_softlight_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<FramebufferBlendSoftLightPipeline>(*context_);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
blend_color_pipelines_[{}] =
|
|
|
|
|
blend_color_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<BlendColorPipeline>(*context_);
|
|
|
|
|
blend_colorburn_pipelines_[{}] =
|
|
|
|
|
blend_colorburn_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<BlendColorBurnPipeline>(*context_);
|
|
|
|
|
blend_colordodge_pipelines_[{}] =
|
|
|
|
|
blend_colordodge_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<BlendColorDodgePipeline>(*context_);
|
|
|
|
|
blend_darken_pipelines_[{}] =
|
|
|
|
|
blend_darken_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<BlendDarkenPipeline>(*context_);
|
|
|
|
|
blend_difference_pipelines_[{}] =
|
|
|
|
|
blend_difference_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<BlendDifferencePipeline>(*context_);
|
|
|
|
|
blend_exclusion_pipelines_[{}] =
|
|
|
|
|
blend_exclusion_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<BlendExclusionPipeline>(*context_);
|
|
|
|
|
blend_hardlight_pipelines_[{}] =
|
|
|
|
|
blend_hardlight_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<BlendHardLightPipeline>(*context_);
|
|
|
|
|
blend_hue_pipelines_[{}] = CreateDefaultPipeline<BlendHuePipeline>(*context_);
|
|
|
|
|
blend_lighten_pipelines_[{}] =
|
|
|
|
|
blend_hue_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<BlendHuePipeline>(*context_);
|
|
|
|
|
blend_lighten_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<BlendLightenPipeline>(*context_);
|
|
|
|
|
blend_luminosity_pipelines_[{}] =
|
|
|
|
|
blend_luminosity_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<BlendLuminosityPipeline>(*context_);
|
|
|
|
|
blend_multiply_pipelines_[{}] =
|
|
|
|
|
blend_multiply_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<BlendMultiplyPipeline>(*context_);
|
|
|
|
|
blend_overlay_pipelines_[{}] =
|
|
|
|
|
blend_overlay_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<BlendOverlayPipeline>(*context_);
|
|
|
|
|
blend_saturation_pipelines_[{}] =
|
|
|
|
|
blend_saturation_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<BlendSaturationPipeline>(*context_);
|
|
|
|
|
blend_screen_pipelines_[{}] =
|
|
|
|
|
blend_screen_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<BlendScreenPipeline>(*context_);
|
|
|
|
|
blend_softlight_pipelines_[{}] =
|
|
|
|
|
blend_softlight_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<BlendSoftLightPipeline>(*context_);
|
|
|
|
|
sweep_gradient_fill_pipelines_[{}] =
|
|
|
|
|
CreateDefaultPipeline<SweepGradientFillPipeline>(*context_);
|
|
|
|
|
rrect_blur_pipelines_[{}] =
|
|
|
|
|
|
|
|
|
|
rrect_blur_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<RRectBlurPipeline>(*context_);
|
|
|
|
|
texture_blend_pipelines_[{}] =
|
|
|
|
|
texture_blend_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<BlendPipeline>(*context_);
|
|
|
|
|
texture_pipelines_[{}] = CreateDefaultPipeline<TexturePipeline>(*context_);
|
|
|
|
|
position_uv_pipelines_[{}] =
|
|
|
|
|
texture_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<TexturePipeline>(*context_);
|
|
|
|
|
position_uv_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<PositionUVPipeline>(*context_);
|
|
|
|
|
tiled_texture_pipelines_[{}] =
|
|
|
|
|
tiled_texture_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<TiledTexturePipeline>(*context_);
|
|
|
|
|
gaussian_blur_alpha_decal_pipelines_[{}] =
|
|
|
|
|
gaussian_blur_alpha_decal_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<GaussianBlurAlphaDecalPipeline>(*context_);
|
|
|
|
|
gaussian_blur_alpha_nodecal_pipelines_[{}] =
|
|
|
|
|
gaussian_blur_alpha_nodecal_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<GaussianBlurAlphaPipeline>(*context_);
|
|
|
|
|
gaussian_blur_noalpha_decal_pipelines_[{}] =
|
|
|
|
|
gaussian_blur_noalpha_decal_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<GaussianBlurDecalPipeline>(*context_);
|
|
|
|
|
gaussian_blur_noalpha_nodecal_pipelines_[{}] =
|
|
|
|
|
gaussian_blur_noalpha_nodecal_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<GaussianBlurPipeline>(*context_);
|
|
|
|
|
border_mask_blur_pipelines_[{}] =
|
|
|
|
|
border_mask_blur_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<BorderMaskBlurPipeline>(*context_);
|
|
|
|
|
morphology_filter_pipelines_[{}] =
|
|
|
|
|
morphology_filter_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<MorphologyFilterPipeline>(*context_);
|
|
|
|
|
color_matrix_color_filter_pipelines_[{}] =
|
|
|
|
|
color_matrix_color_filter_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<ColorMatrixColorFilterPipeline>(*context_);
|
|
|
|
|
linear_to_srgb_filter_pipelines_[{}] =
|
|
|
|
|
linear_to_srgb_filter_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<LinearToSrgbFilterPipeline>(*context_);
|
|
|
|
|
srgb_to_linear_filter_pipelines_[{}] =
|
|
|
|
|
srgb_to_linear_filter_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<SrgbToLinearFilterPipeline>(*context_);
|
|
|
|
|
glyph_atlas_pipelines_[{}] =
|
|
|
|
|
glyph_atlas_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<GlyphAtlasPipeline>(*context_);
|
|
|
|
|
glyph_atlas_color_pipelines_[{}] =
|
|
|
|
|
glyph_atlas_color_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<GlyphAtlasColorPipeline>(*context_);
|
|
|
|
|
geometry_color_pipelines_[{}] =
|
|
|
|
|
geometry_color_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<GeometryColorPipeline>(*context_);
|
|
|
|
|
yuv_to_rgb_filter_pipelines_[{}] =
|
|
|
|
|
yuv_to_rgb_filter_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<YUVToRGBFilterPipeline>(*context_);
|
|
|
|
|
porter_duff_blend_pipelines_[{}] =
|
|
|
|
|
porter_duff_blend_pipelines_[default_options] =
|
|
|
|
|
CreateDefaultPipeline<PorterDuffBlendPipeline>(*context_);
|
|
|
|
|
|
|
|
|
|
if (context_->GetCapabilities()->SupportsCompute()) {
|
|
|
|
|
@@ -303,7 +312,8 @@ ContentContext::ContentContext(std::shared_ptr<Context> context)
|
|
|
|
|
context_->GetPipelineLibrary()->GetPipeline(uv_pipeline_desc).Get();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
auto maybe_pipeline_desc = solid_fill_pipelines_[{}]->GetDescriptor();
|
|
|
|
|
auto maybe_pipeline_desc =
|
|
|
|
|
solid_fill_pipelines_[default_options]->GetDescriptor();
|
|
|
|
|
if (maybe_pipeline_desc.has_value()) {
|
|
|
|
|
auto clip_pipeline_descriptor = maybe_pipeline_desc.value();
|
|
|
|
|
clip_pipeline_descriptor.SetLabel("Clip Pipeline");
|
|
|
|
|
@@ -316,7 +326,7 @@ ContentContext::ContentContext(std::shared_ptr<Context> context)
|
|
|
|
|
}
|
|
|
|
|
clip_pipeline_descriptor.SetColorAttachmentDescriptors(
|
|
|
|
|
std::move(color_attachments));
|
|
|
|
|
clip_pipelines_[{}] =
|
|
|
|
|
clip_pipelines_[default_options] =
|
|
|
|
|
std::make_unique<ClipPipeline>(*context_, clip_pipeline_descriptor);
|
|
|
|
|
} else {
|
|
|
|
|
return;
|
|
|
|
|
|