tree: c170b16c37c9aaa4e5487507b2e2b0b38ea49534 [path history] [tgz]
  3. allocator_host.c
  4. allocator_host.h
  5. composition.c
  6. composition.h
  7. context.c
  8. context.h
  9. core.h
  10. core_c.h
  11. docs/
  12. ext/
  13. include/
  14. path_builder.c
  15. path_builder.h
  16. platforms/
  17. raster_builder.c
  18. raster_builder.h
  19. spinel_assert.c
  20. state_assert.h
  21. styling.c
  22. styling.h
  23. suballocator.c
  24. suballocator.h
  25. trace.h
  26. weakref.c
  27. weakref.h


Spinel is a high-performance GPU-accelerated vector graphics, compositing and image processing pipeline for Vulkan 1.1 GPUs.

Spinel differs from other vector graphics implementations by providing explicit APIs for defining:

  • Paths: first-class standalone objects
  • Rasters: transformed-to-screen-space rasterized Paths
  • Compositions: an arrangement of Rasters on Layers
  • Stylings: rendering instructions for each Layer in a Composition

These new explicit sub-APIs allow new programming idioms that “untangle” the canonical immediate-mode 2D API.


The Spinel API and its new idioms achieve a number of advantages over existing 2D APIs. These include:

Spinel scales with available GFLOPS

Every stage in the pipeline is parallelized. This drives both performance and efficiency. It also frees the CPU to perform other processing.

Contrast this to traditional APIs that are either single-threaded or GPU-starved because.

Spinel’s rendering model is extensible

Most of the Spinel pipeline is focused on rasterizing paths, building a proto-scene graph of where these paths appear on layers, and encoding how each layer is rendered. These inputs are passed to an extremely performant tile-based renderer that is effectively a small “virtual machine” for rendering vector graphics, blending layers, applying masks, and more.

Spinel’s Composition and Styling idioms enable both animation and inexpensive “redraw”

Layers are explicit and their rules and stylings can be defined in any order.

Furthermore, rasters can be “placed” onto layers in any order.

These two capabilities can enable significant work reuse.




There is a Vulkan 1.1 implementation that targets modern GPUs.


The following architectures are under development:

AMDGCN3+🚧Under construction
ARMBifrost (4-wide)🚧Under construction
ARMBifrost (8-wide)🚧Under construction
NVIDIAsm_35,sm_37,sm_50,sm_52,sm_60,sm_61,sm_70🚧Under construction
IntelGEN8+🚧Under construction
IntelAPL/GLK using a 2x9 or 1x12 thread pool

Programming Idioms


Spinel API blocks



Spinel pipeline diagram

Future Enhancements