Skip to content

[Impeller] JIT construction of PSO variants causes jank on Vulkan. #129050

@jonahwilliams

Description

@jonahwilliams

Split off from #128919

Continuation of #128963

Unlike Metal, constructing new PSO variants in vulkan is incredibly expensive - on the order of milliseconds. Current the content_context.cc setup will attempt to construct a default PSO for every shader we have. Unfortunately some of the defaults don't match what the application will end up using, so aside from wasting time at startup we're guaranteeing that we'll need to compile a PSO in a frame workload.

In no particular order:

All PSOs are generated with sample count of 1, whereas 4 is the default MSAA config
Several PSOs appear to have an unknown pixel format, meaning they're not actually valid. Perhaps a race between knowing which pixel format to use and the offscreen format.
The primitive type defaults to kTriangle but some shaders only use kTriangleStrip like clips. This should be configured.
SrcOver is the default blend mode, but SrcOver to Src cooercsion will commonly apply to several variants and should be pre-cached.
Stencil operations frequently mismatch. The default is kEqual, but textures use kAlways and strokes use kLess

Metadata

Metadata

Assignees

No one assigned

    Labels

    P1High-priority issues at the top of the work liste: impellerImpeller rendering backend issues and features requestsengineflutter/engine related. See also e: labels.team-engineOwned by Engine teamtriaged-engineTriaged by Engine team

    Type

    No type

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions