@@ -292,7 +292,15 @@ ContentContext::ContentContext(
292
292
const auto supports_decal = static_cast <Scalar>(
293
293
context_->GetCapabilities ()->SupportsDecalSamplerAddressMode ());
294
294
295
+ // Futures for the following pipelines may block in case the first frame is
296
+ // rendered without the pipelines being ready. Put pipelines that are more
297
+ // likely to be used first.
295
298
{
299
+ glyph_atlas_pipelines_.CreateDefault (
300
+ *context_, options,
301
+ {static_cast <Scalar>(
302
+ GetContext ()->GetCapabilities ()->GetDefaultGlyphAtlasFormat () ==
303
+ PixelFormat::kA8UNormInt )});
296
304
solid_fill_pipelines_.CreateDefault (*context_, options);
297
305
texture_pipelines_.CreateDefault (*context_, options);
298
306
fast_gradient_pipelines_.CreateDefault (*context_, options);
@@ -310,7 +318,6 @@ ContentContext::ContentContext(
310
318
}
311
319
312
320
// / Setup default clip pipeline.
313
-
314
321
auto clip_pipeline_descriptor =
315
322
ClipPipeline::Builder::MakeDefaultPipelineDescriptor (*context_);
316
323
if (!clip_pipeline_descriptor.has_value ()) {
@@ -332,6 +339,20 @@ ContentContext::ContentContext(
332
339
clip_pipelines_.SetDefault (
333
340
options,
334
341
std::make_unique<ClipPipeline>(*context_, clip_pipeline_descriptor));
342
+ texture_downsample_pipelines_.CreateDefault (*context_,
343
+ options_trianglestrip);
344
+ rrect_blur_pipelines_.CreateDefault (*context_, options_trianglestrip);
345
+ texture_strict_src_pipelines_.CreateDefault (*context_, options);
346
+ tiled_texture_pipelines_.CreateDefault (*context_, options,
347
+ {supports_decal});
348
+ gaussian_blur_pipelines_.CreateDefault (*context_, options_trianglestrip,
349
+ {supports_decal});
350
+ border_mask_blur_pipelines_.CreateDefault (*context_, options_trianglestrip);
351
+ color_matrix_color_filter_pipelines_.CreateDefault (*context_,
352
+ options_trianglestrip);
353
+ porter_duff_blend_pipelines_.CreateDefault (*context_, options_trianglestrip,
354
+ {supports_decal});
355
+ vertices_uber_shader_.CreateDefault (*context_, options, {supports_decal});
335
356
}
336
357
337
358
if (context_->GetCapabilities ()->SupportsFramebufferFetch ()) {
@@ -428,30 +449,14 @@ ContentContext::ContentContext(
428
449
{static_cast <Scalar>(BlendSelectValues::kSoftLight ), supports_decal});
429
450
}
430
451
431
- texture_downsample_pipelines_.CreateDefault (*context_, options_trianglestrip);
432
- rrect_blur_pipelines_.CreateDefault (*context_, options_trianglestrip);
433
- texture_strict_src_pipelines_.CreateDefault (*context_, options);
434
- tiled_texture_pipelines_.CreateDefault (*context_, options, {supports_decal});
435
- gaussian_blur_pipelines_.CreateDefault (*context_, options_trianglestrip,
436
- {supports_decal});
437
- border_mask_blur_pipelines_.CreateDefault (*context_, options_trianglestrip);
438
452
morphology_filter_pipelines_.CreateDefault (*context_, options_trianglestrip,
439
453
{supports_decal});
440
- color_matrix_color_filter_pipelines_.CreateDefault (*context_,
441
- options_trianglestrip);
442
454
linear_to_srgb_filter_pipelines_.CreateDefault (*context_,
443
455
options_trianglestrip);
444
456
srgb_to_linear_filter_pipelines_.CreateDefault (*context_,
445
457
options_trianglestrip);
446
- glyph_atlas_pipelines_.CreateDefault (
447
- *context_, options,
448
- {static_cast <Scalar>(
449
- GetContext ()->GetCapabilities ()->GetDefaultGlyphAtlasFormat () ==
450
- PixelFormat::kA8UNormInt )});
451
458
yuv_to_rgb_filter_pipelines_.CreateDefault (*context_, options_trianglestrip);
452
- porter_duff_blend_pipelines_.CreateDefault (*context_, options_trianglestrip,
453
- {supports_decal});
454
- vertices_uber_shader_.CreateDefault (*context_, options, {supports_decal});
459
+
455
460
// GLES only shader that is unsupported on macOS.
456
461
#if defined(IMPELLER_ENABLE_OPENGLES) && !defined(FML_OS_MACOSX)
457
462
if (GetContext ()->GetBackendType () == Context::BackendType::kOpenGLES ) {
0 commit comments