# arm-software/arm-2d architecture

> Architecture diagram of the GitHub repository arm-software/arm-2d, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-13). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/arm-software/arm-2d
- Repository: https://github.com/arm-software/arm-2d

## Overview

Arm-2D is an embedded 2.5D image-processing library, not a GUI. Its documented workflow accepts application operations through API wrappers, validates and simplifies them in a frontend, then dispatches low-level pixel algorithms to software, Helium SIMD, or optional hardware acceleration. The tree also shows helper services for display/frame handling and scene-oriented applications. Relationships among unsampled subsystems are omitted unless the README documents them; the graph is therefore a product map, not a complete call graph.

Main entry points: [`Library/Include/arm_2d.h`](https://github.com/arm-software/arm-2d/blob/main/Library/Include/arm_2d.h) (API wrappers), [`Library/Include/__arm_2d_impl.h`](https://github.com/arm-software/arm-2d/blob/main/Library/Include/__arm_2d_impl.h) (Pixel backend), [`Library/Source/arm_2d.c`](https://github.com/arm-software/arm-2d/blob/main/Library/Source/arm_2d.c) (Task frontend), [`Library/Source/arm_2d_helium.c`](https://github.com/arm-software/arm-2d/blob/main/Library/Source/arm_2d_helium.c) (Helium SIMD)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_pipeline["Pixel pipeline"]
  node_api["API wrappers<br/>[arm_2d.h]"]
  node_frontend["Task frontend<br/>[arm_2d.c]"]
  node_backend["Pixel backend<br/>[__arm_2d_impl.h]"]
end

subgraph group_ops["Image operations"]
  node_tile["Tiles and regions<br/>[arm_2d_tile.h]"]
  node_draw["Drawing<br/>[arm_2d_draw.c]"]
  node_blend["Alpha and masks"]
  node_convert["Colour conversion"]
  node_transform["Transform and blit<br/>[arm_2d_transform.h]"]
  node_filter["Image filters<br/>[arm_2d_filter.c]"]
end

subgraph group_accel["Acceleration"]
  node_software["Software algorithms"]
  node_helium["Helium SIMD<br/>[arm_2d_helium.c]"]
  node_aci["RGB565 accelerator"]
end

subgraph group_helpers["Display helpers"]
  node_pfb["Partial frame buffer"]
  node_display["Display adapter"]
  node_scenes["Scene support"]
  node_list["Helper lists"]
end

node_application(("Application engineer"))
node_framebuffer[("Display framebuffer")]

node_application -->|"uses operations"| node_api
node_api -->|"creates tasks"| node_frontend
node_frontend -->|"simplifies tasks"| node_backend
node_backend -->|"runs algorithms"| node_software
node_backend -.->|"uses SIMD"| node_helium
node_backend -.->|"supports accelerators"| node_aci
node_backend -.->|"processes pixels"| node_framebuffer
node_api -->|"exposes tile APIs"| node_tile
node_api -->|"exposes drawing"| node_draw
node_api -->|"exposes blending"| node_blend
node_api -->|"exposes conversion"| node_convert
node_api -->|"exposes transforms"| node_transform
node_api -->|"exposes filters"| node_filter
node_helium -->|"implements SIMD transforms"| node_transform
node_pfb -.->|"provides frame data"| node_display
node_scenes -.->|"uses frame service"| node_pfb
node_list -.->|"supports scene lists"| node_scenes

click node_api "https://github.com/arm-software/arm-2d/blob/main/Library/Include/arm_2d.h"
click node_frontend "https://github.com/arm-software/arm-2d/blob/main/Library/Source/arm_2d.c"
click node_backend "https://github.com/arm-software/arm-2d/blob/main/Library/Include/__arm_2d_impl.h"
click node_tile "https://github.com/arm-software/arm-2d/blob/main/Library/Include/arm_2d_tile.h"
click node_draw "https://github.com/arm-software/arm-2d/blob/main/Library/Source/arm_2d_draw.c"
click node_blend "https://github.com/arm-software/arm-2d/blob/main/Library/Include/arm_2d_alpha_blending.h"
click node_convert "https://github.com/arm-software/arm-2d/blob/main/Library/Source/arm_2d_conversion.c"
click node_transform "https://github.com/arm-software/arm-2d/blob/main/Library/Include/arm_2d_transform.h"
click node_filter "https://github.com/arm-software/arm-2d/blob/main/Library/Source/arm_2d_filter.c"
click node_software "https://github.com/arm-software/arm-2d/blob/main/Library/Source/__arm_2d_fill_colour_with_alpha_gradient_and_mask.c"
click node_helium "https://github.com/arm-software/arm-2d/blob/main/Library/Source/arm_2d_helium.c"
click node_aci "https://github.com/arm-software/arm-2d/blob/main/Acceleration/Arm/ACI/arm_2d_rgb565_aci_lib.c"
click node_pfb "https://github.com/arm-software/arm-2d/blob/main/Helper/Source/arm_2d_helper_pfb.c"
click node_display "https://github.com/arm-software/arm-2d/blob/main/Helper/template/arm_2d_disp_adapter.c"
click node_scenes "https://github.com/arm-software/arm-2d/blob/main/Helper/Source/arm_2d_helper_scene.c"
click node_list "https://github.com/arm-software/arm-2d/blob/main/Helper/Source/arm_2d_helper_list.c"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_api,node_frontend,node_backend toneBlue
class node_tile,node_draw,node_blend,node_convert,node_transform,node_filter,node_framebuffer toneAmber
class node_software,node_helium,node_aci toneMint
class node_pfb,node_display,node_scenes,node_list toneRose
class node_application toneIndigo
```

## Components

### Pixel pipeline

- [API wrappers](https://github.com/arm-software/arm-2d/blob/main/Library/Include/arm_2d.h): `Library/Include/arm_2d.h`
- [Task frontend](https://github.com/arm-software/arm-2d/blob/main/Library/Source/arm_2d.c): `Library/Source/arm_2d.c`
- [Pixel backend](https://github.com/arm-software/arm-2d/blob/main/Library/Include/__arm_2d_impl.h): `Library/Include/__arm_2d_impl.h`

### Image operations

- [Tiles and regions](https://github.com/arm-software/arm-2d/blob/main/Library/Include/arm_2d_tile.h): `Library/Include/arm_2d_tile.h`
- [Drawing](https://github.com/arm-software/arm-2d/blob/main/Library/Source/arm_2d_draw.c): `Library/Source/arm_2d_draw.c`
- [Alpha and masks](https://github.com/arm-software/arm-2d/blob/main/Library/Include/arm_2d_alpha_blending.h): `Library/Include/arm_2d_alpha_blending.h`
- [Colour conversion](https://github.com/arm-software/arm-2d/blob/main/Library/Source/arm_2d_conversion.c): `Library/Source/arm_2d_conversion.c`
- [Transform and blit](https://github.com/arm-software/arm-2d/blob/main/Library/Include/arm_2d_transform.h): `Library/Include/arm_2d_transform.h`
- [Image filters](https://github.com/arm-software/arm-2d/blob/main/Library/Source/arm_2d_filter.c): `Library/Source/arm_2d_filter.c`

### Acceleration

- [Software algorithms](https://github.com/arm-software/arm-2d/blob/main/Library/Source/__arm_2d_fill_colour_with_alpha_gradient_and_mask.c): `Library/Source/__arm_2d_fill_colour_with_alpha_gradient_and_mask.c`
- [Helium SIMD](https://github.com/arm-software/arm-2d/blob/main/Library/Source/arm_2d_helium.c): `Library/Source/arm_2d_helium.c`
- [RGB565 accelerator](https://github.com/arm-software/arm-2d/blob/main/Acceleration/Arm/ACI/arm_2d_rgb565_aci_lib.c): `Acceleration/Arm/ACI/arm_2d_rgb565_aci_lib.c`

### Display helpers

- [Partial frame buffer](https://github.com/arm-software/arm-2d/blob/main/Helper/Source/arm_2d_helper_pfb.c): `Helper/Source/arm_2d_helper_pfb.c`
- [Display adapter](https://github.com/arm-software/arm-2d/blob/main/Helper/template/arm_2d_disp_adapter.c): `Helper/template/arm_2d_disp_adapter.c`
- [Scene support](https://github.com/arm-software/arm-2d/blob/main/Helper/Source/arm_2d_helper_scene.c): `Helper/Source/arm_2d_helper_scene.c`
- [Helper lists](https://github.com/arm-software/arm-2d/blob/main/Helper/Source/arm_2d_helper_list.c): `Helper/Source/arm_2d_helper_list.c`

### Other components

- **Application engineer**
- **Display framebuffer**

## Connections

- Application engineer → API wrappers: uses operations (evidence: `README.md`)
- API wrappers → Task frontend: creates tasks (evidence: `README.md`)
- Task frontend → Pixel backend: simplifies tasks (evidence: `README.md`)
- Pixel backend → Software algorithms: runs algorithms (evidence: `README.md`)
- Pixel backend → Helium SIMD: uses SIMD (evidence: `README.md`)
- Pixel backend → RGB565 accelerator: supports accelerators (evidence: `README.md`)
- Pixel backend → Display framebuffer: processes pixels (evidence: `README.md`)
- API wrappers → Tiles and regions: exposes tile APIs (evidence: `Library/Include/arm_2d.h`)
- API wrappers → Drawing: exposes drawing (evidence: `Library/Include/arm_2d.h`)
- API wrappers → Alpha and masks: exposes blending (evidence: `Library/Include/arm_2d.h`)
- API wrappers → Colour conversion: exposes conversion (evidence: `Library/Include/arm_2d.h`)
- API wrappers → Transform and blit: exposes transforms (evidence: `Library/Include/arm_2d.h`)
- API wrappers → Image filters: exposes filters (evidence: `Library/Include/arm_2d.h`)
- Helium SIMD → Transform and blit: implements SIMD transforms (evidence: `Library/Source/arm_2d_helium.c`)
- Partial frame buffer → Display adapter: provides frame data
- Scene support → Partial frame buffer: uses frame service
- Helper lists → Scene support: supports scene lists
