# bylaws/libadrenotools architecture

> Architecture diagram of the GitHub repository bylaws/libadrenotools, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/bylaws/libadrenotools
- Repository: https://github.com/bylaws/libadrenotools

## Overview

Adreno Tools is a developer library for rootless Adreno driver modifications, not an end-user driver installer. An app calls the library to load a custom Vulkan driver and optionally enable file redirection or GPU mapping; the library configures and loads hook components, while a separate API applies BCn patches. The tree also contains Vulkan acceleration and Qualcomm mapper shims. Source excerpts do not establish how those standalone shims are consumed, so their integration links are omitted.

Main entry points: [`src/hook/hook_impl.cpp`](https://github.com/bylaws/libadrenotools/blob/master/src/hook/hook_impl.cpp) (Hook implementation), [`src/driver.cpp`](https://github.com/bylaws/libadrenotools/blob/master/src/driver.cpp) (Driver loader), [`tools/qtimapper-shim/ext/gr_utils.cpp`](https://github.com/bylaws/libadrenotools/blob/master/tools/qtimapper-shim/ext/gr_utils.cpp) (Gralloc utilities), [`tools/qtimapper-shim/shim.cpp`](https://github.com/bylaws/libadrenotools/blob/master/tools/qtimapper-shim/shim.cpp) (QTI mapper shim)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_driver["Driver loading"]
  node_driver_api["Driver API<br/>[driver.h]"]
  node_driver_loader["Driver loader<br/>[driver.cpp]"]
end

subgraph group_hooks["Runtime hooks"]
  node_hook_params["Hook parameters<br/>[hook_impl_params.h]"]
  node_main_hook["Hook entry<br/>[main_hook.c]"]
  node_hook_impl["Hook implementation<br/>[hook_impl.cpp]"]
  node_file_redirect["File redirection"]
  node_gsl_alloc["GSL allocation hook<br/>[gsl_alloc_hook.c]"]
  node_kgsl["KGSL interface<br/>[kgsl.h]"]
end

subgraph group_bcn["BCn support"]
  node_bcn_api["BCn API<br/>[bcenabler.h]"]
  node_bcn_impl["BCn enabler<br/>[bcenabler.cpp]"]
  node_bcn_patch["BCn patch data<br/>[bcenabler_patch.h]"]
end

subgraph group_shims["Compatibility shims"]
  node_acc_shim["Vulkan acceleration shim<br/>[vk_acc_shim.cpp]"]
  node_mapper_shim["QTI mapper shim<br/>[shim.cpp]"]
  node_mapper_utils["Gralloc utilities<br/>[gr_utils.cpp]"]
  node_adreno_info["Adreno format info<br/>[gr_adreno_info.cpp]"]
  node_mapper_types["Mapper interfaces<br/>[mapperextensions.h]"]
  node_gralloc_types["Gralloc definitions<br/>[gralloc_priv.h]"]
end

node_app(("Integrating app"))
node_gpu_driver["Android KGSL driver"]

node_app -->|"calls"| node_driver_api
node_driver_api -->|"invokes"| node_driver_loader
node_driver_loader -->|"initializes"| node_hook_params
node_driver_loader -->|"loads"| node_main_hook
node_main_hook -->|"uses"| node_hook_impl
node_file_redirect -->|"uses"| node_hook_impl
node_gsl_alloc -->|"uses"| node_hook_impl
node_hook_impl -->|"reads"| node_hook_params
node_hook_impl -->|"uses"| node_kgsl
node_driver_loader -->|"issues ioctls"| node_gpu_driver
node_hook_impl -.->|"interacts with"| node_gpu_driver
node_app -->|"calls"| node_bcn_api
node_bcn_api -->|"implemented by"| node_bcn_impl
node_bcn_impl -->|"uses patch"| node_bcn_patch
node_mapper_shim -->|"uses"| node_mapper_utils
node_mapper_shim -->|"uses"| node_mapper_types
node_mapper_utils -->|"uses"| node_adreno_info
node_mapper_utils -->|"uses"| node_gralloc_types

click node_driver_api "https://github.com/bylaws/libadrenotools/blob/master/include/adrenotools/driver.h"
click node_driver_loader "https://github.com/bylaws/libadrenotools/blob/master/src/driver.cpp"
click node_hook_params "https://github.com/bylaws/libadrenotools/blob/master/src/hook/hook_impl_params.h"
click node_main_hook "https://github.com/bylaws/libadrenotools/blob/master/src/hook/main_hook.c"
click node_hook_impl "https://github.com/bylaws/libadrenotools/blob/master/src/hook/hook_impl.cpp"
click node_file_redirect "https://github.com/bylaws/libadrenotools/blob/master/src/hook/file_redirect_hook.c"
click node_gsl_alloc "https://github.com/bylaws/libadrenotools/blob/master/src/hook/gsl_alloc_hook.c"
click node_kgsl "https://github.com/bylaws/libadrenotools/blob/master/src/hook/kgsl.h"
click node_bcn_api "https://github.com/bylaws/libadrenotools/blob/master/include/adrenotools/bcenabler.h"
click node_bcn_impl "https://github.com/bylaws/libadrenotools/blob/master/src/bcenabler.cpp"
click node_bcn_patch "https://github.com/bylaws/libadrenotools/blob/master/gen/bcenabler_patch.h"
click node_acc_shim "https://github.com/bylaws/libadrenotools/blob/master/tools/acc-shim/vk_acc_shim.cpp"
click node_mapper_shim "https://github.com/bylaws/libadrenotools/blob/master/tools/qtimapper-shim/shim.cpp"
click node_mapper_utils "https://github.com/bylaws/libadrenotools/blob/master/tools/qtimapper-shim/ext/gr_utils.cpp"
click node_adreno_info "https://github.com/bylaws/libadrenotools/blob/master/tools/qtimapper-shim/ext/gr_adreno_info.cpp"
click node_mapper_types "https://github.com/bylaws/libadrenotools/blob/master/tools/qtimapper-shim/ext/mapperextensions.h"
click node_gralloc_types "https://github.com/bylaws/libadrenotools/blob/master/tools/qtimapper-shim/ext/gralloc_priv.h"

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_driver_api,node_driver_loader toneBlue
class node_hook_params,node_main_hook,node_hook_impl,node_file_redirect,node_gsl_alloc,node_kgsl toneAmber
class node_bcn_api,node_bcn_impl,node_bcn_patch toneMint
class node_acc_shim,node_mapper_shim,node_mapper_utils,node_adreno_info,node_mapper_types,node_gralloc_types toneRose
class node_app,node_gpu_driver toneIndigo
```

## Components

### Driver loading

- [Driver API](https://github.com/bylaws/libadrenotools/blob/master/include/adrenotools/driver.h): `include/adrenotools/driver.h`
- [Driver loader](https://github.com/bylaws/libadrenotools/blob/master/src/driver.cpp): `src/driver.cpp`

### Runtime hooks

- [Hook parameters](https://github.com/bylaws/libadrenotools/blob/master/src/hook/hook_impl_params.h): `src/hook/hook_impl_params.h`
- [Hook entry](https://github.com/bylaws/libadrenotools/blob/master/src/hook/main_hook.c): `src/hook/main_hook.c`
- [Hook implementation](https://github.com/bylaws/libadrenotools/blob/master/src/hook/hook_impl.cpp): `src/hook/hook_impl.cpp`
- [File redirection](https://github.com/bylaws/libadrenotools/blob/master/src/hook/file_redirect_hook.c): `src/hook/file_redirect_hook.c`
- [GSL allocation hook](https://github.com/bylaws/libadrenotools/blob/master/src/hook/gsl_alloc_hook.c): `src/hook/gsl_alloc_hook.c`
- [KGSL interface](https://github.com/bylaws/libadrenotools/blob/master/src/hook/kgsl.h): `src/hook/kgsl.h`

### BCn support

- [BCn API](https://github.com/bylaws/libadrenotools/blob/master/include/adrenotools/bcenabler.h): `include/adrenotools/bcenabler.h`
- [BCn enabler](https://github.com/bylaws/libadrenotools/blob/master/src/bcenabler.cpp): `src/bcenabler.cpp`
- [BCn patch data](https://github.com/bylaws/libadrenotools/blob/master/gen/bcenabler_patch.h): `gen/bcenabler_patch.h`

### Compatibility shims

- [Vulkan acceleration shim](https://github.com/bylaws/libadrenotools/blob/master/tools/acc-shim/vk_acc_shim.cpp): `tools/acc-shim/vk_acc_shim.cpp`
- [QTI mapper shim](https://github.com/bylaws/libadrenotools/blob/master/tools/qtimapper-shim/shim.cpp): `tools/qtimapper-shim/shim.cpp`
- [Gralloc utilities](https://github.com/bylaws/libadrenotools/blob/master/tools/qtimapper-shim/ext/gr_utils.cpp): `tools/qtimapper-shim/ext/gr_utils.cpp`
- [Adreno format info](https://github.com/bylaws/libadrenotools/blob/master/tools/qtimapper-shim/ext/gr_adreno_info.cpp): `tools/qtimapper-shim/ext/gr_adreno_info.cpp`
- [Mapper interfaces](https://github.com/bylaws/libadrenotools/blob/master/tools/qtimapper-shim/ext/mapperextensions.h): `tools/qtimapper-shim/ext/mapperextensions.h`
- [Gralloc definitions](https://github.com/bylaws/libadrenotools/blob/master/tools/qtimapper-shim/ext/gralloc_priv.h): `tools/qtimapper-shim/ext/gralloc_priv.h`

### Other components

- **Integrating app**
- **Android KGSL driver**

## Connections

- Integrating app → Driver API: calls (evidence: `README.md`)
- Driver API → Driver loader: invokes (evidence: `src/driver.cpp`)
- Driver loader → Hook parameters: initializes (evidence: `src/driver.cpp`)
- Driver loader → Hook entry: loads (evidence: `src/driver.cpp`)
- Hook entry → Hook implementation: uses (evidence: `src/hook/main_hook.c`)
- File redirection → Hook implementation: uses (evidence: `src/hook/file_redirect_hook.c`)
- GSL allocation hook → Hook implementation: uses (evidence: `src/hook/gsl_alloc_hook.c`)
- Hook implementation → Hook parameters: reads (evidence: `src/hook/hook_impl.cpp`)
- Hook implementation → KGSL interface: uses (evidence: `src/hook/hook_impl.cpp`)
- Driver loader → Android KGSL driver: issues ioctls (evidence: `src/driver.cpp`)
- Hook implementation → Android KGSL driver: interacts with
- Integrating app → BCn API: calls (evidence: `README.md`)
- BCn API → BCn enabler: implemented by (evidence: `src/bcenabler.cpp`)
- BCn enabler → BCn patch data: uses patch (evidence: `src/bcenabler.cpp`)
- QTI mapper shim → Gralloc utilities: uses (evidence: `tools/qtimapper-shim/shim.cpp`)
- QTI mapper shim → Mapper interfaces: uses (evidence: `tools/qtimapper-shim/shim.cpp`)
- Gralloc utilities → Adreno format info: uses (evidence: `tools/qtimapper-shim/ext/gr_utils.cpp`)
- Gralloc utilities → Gralloc definitions: uses
