Metal: First pass at async pipelineState creation.

Trying a basic approach to generating pipelineStates asynchronously.
Rather than managing the caching ourselves, we depend on the Apple
cache. When a pipelineState is created during the regular path, it
should find it in the Apple cache and return immediately.

To avoid too much duplication of the shader compilation step we cache
the MTLLibrarys locally until the final PSO is cached.

Bug: skia:12141
Change-Id: Id8f6ba7caee33b4c7f6a5af0e8ad5b84993b1246
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/421321
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Jim Van Verth <jvanverth@google.com>
3 files changed