2019-01-03 13:35:19 -05:00
|
|
|
|
# Pathfinder 3 Architecture
|
|
|
|
|
|
|
|
|
|
## Rendering pipeline
|
|
|
|
|
|
|
|
|
|
![](architecture.svg)
|
|
|
|
|
|
|
|
|
|
Quoted timings are for the Ghostscript tiger at 1600×1600 pixels, 8-bit RGBA destination, 2017
|
|
|
|
|
MacBook Pro, Intel Core i7-7920HQ CPU @ 3.10GHz, (quad-core with hyperthreading), Intel HD Graphics
|
|
|
|
|
630 1536 MB.
|
|
|
|
|
|
|
|
|
|
### CPU
|
|
|
|
|
|
|
|
|
|
#### Simplify
|
|
|
|
|
|
|
|
|
|
Across all paths in parallel:
|
|
|
|
|
|
|
|
|
|
* Apply transforms.
|
|
|
|
|
|
|
|
|
|
* Convert strokes to fills.
|
|
|
|
|
|
|
|
|
|
* Make curves monotonic.
|
|
|
|
|
|
|
|
|
|
#### Tile
|
|
|
|
|
|
|
|
|
|
Across all paths in parallel:
|
|
|
|
|
|
|
|
|
|
* Cut paths into 16×16 tiles.
|
|
|
|
|
|
|
|
|
|
* Approximate curves with lines.
|
|
|
|
|
|
|
|
|
|
* Flag tiles that consist entirely of a solid color.
|
|
|
|
|
|
|
|
|
|
#### Cull
|
|
|
|
|
|
2019-01-03 13:40:31 -05:00
|
|
|
|
Sequentially (<span style="text-transform: lowercase; font-variant: small-caps">TODO</span>: in parallel):
|
2019-01-03 13:35:19 -05:00
|
|
|
|
|
|
|
|
|
* Cull tiles occluded by solid-color tiles.
|
|
|
|
|
|
|
|
|
|
#### Pack
|
|
|
|
|
|
|
|
|
|
Sequentially:
|
|
|
|
|
|
|
|
|
|
* Gather up and compress per-instance data produced by the tile pass into batches.
|
|
|
|
|
|
|
|
|
|
* Upload to GPU.
|
|
|
|
|
|
|
|
|
|
Approximate CPU time for the tile, cull, and pack passes: 2.2 ms.
|
|
|
|
|
|
|
|
|
|
### GPU
|
|
|
|
|
|
|
|
|
|
#### Fill
|
|
|
|
|
|
|
|
|
|
In parallel:
|
|
|
|
|
|
|
|
|
|
* Rasterize all edges to an alpha coverage framebuffer (16-bit single-channel floating point).
|
|
|
|
|
|
|
|
|
|
Approximate GPU time: 2.6 ms.
|
|
|
|
|
|
|
|
|
|
#### Shade
|
|
|
|
|
|
|
|
|
|
In parallel:
|
|
|
|
|
|
|
|
|
|
* Draw solid-color tiles. (Z-buffer is not needed because we did occlusion culling in software.)
|
|
|
|
|
|
|
|
|
|
* Shade tiles back-to-front using the alpha mask generated during the fill step.
|
|
|
|
|
|
|
|
|
|
Approximate GPU time: 2.3 ms.
|