tree: 7122e026ac541beb983b45756bbac9e9fe533995 [path history] [tgz]
  1. docs/
  2. ext/
  3. include/
  4. platforms/
  5. BUILD.gn
  6. composition.c
  7. composition.h
  8. context.c
  9. context.h
  10. core.h
  11. core_c.h
  12. path_builder.c
  13. path_builder.h
  14. raster_builder.c
  15. raster_builder.h
  16. README.md
  17. spinel_assert.c
  18. state_assert.h
  19. styling.c
  20. styling.h
  21. swapchain.c
  22. swapchain.h
  23. weakref.c
  24. weakref.h
src/graphics/lib/compute/spinel/README.md

Spinel

Spinel is a high-performance GPU-accelerated vector graphics, compositing and image processing pipeline for Vulkan 1.2 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.

Advantages

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

Spinel scales with available GFLOPS

All processing is offloaded to the GPU and every stage in the rendering pipeline is parallelized. This drives both performance and efficiency.

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.

Support

Vulkan

The following Vulkan 1.2 devices are supported:

VendorArchitectureStatusNotes
AMDGCN3+
ARMBifrost (4-wide)
ARMBifrost (8-wide)
ARMValhall (16-wide)🚧Under construction
NVIDIANon-mobile: sm_35+
NVIDIAMobile: sm_30,sm_32,sm_53,sm_62🚧Under construction
IntelGEN8+
IntelAPL/GLK using a 2x9 or 1x12 thread pool🚧Under construction

Benchmarks

🚧

Programming Idioms

🚧

Spinel API blocks

Architecture

🚧

Spinel pipeline diagram

Future Enhancements

🚧