68 lines
1.3 KiB
Markdown
68 lines
1.3 KiB
Markdown
# 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
|
||
|
||
Sequentially (<span style="text-transform: lowercase; font-variant: small-caps">TODO</span>: in parallel):
|
||
|
||
* 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.
|