# Add Vulkan Test

> Add a Vulkan test or microbenchmark

- Skill: `arm-software/add-vulkan-test` (Agent Skill)
- Install (CLI): `npx skillmds@latest add arm-software/add-vulkan-test`
- Raw SKILL.md: https://api.skillmd.com/api/skills/arm-software/add-vulkan-test/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: arm-software (https://skillmd.com/u/arm-software)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/arm-software/add-vulkan-test

---


## Add A New Vulkan Test
- Create source `src/vulkan_<name>.cpp` and a bench file `benchmarking/vulkan_<name>.bench`.
- Register the test in `CMakeLists.txt` with `vulkan_test(<name>)` (or `vulkan_window_test` if it uses a surface).
- Build with 'make -j6'
- Run from build directory without GPU: `./vulkan_<name> -v --cpu`.
- Run from build directory with GPU: `./vulkan_<name> -v --gpu`.
- Fix any Vulkan validation errors shown in the output from the above runs.
- Use the check() function to test Vulkan call return values. Put it on a separate line after the Vulkan call. Do not wrap the Vulkan call.
- If asked to test an extension you are not familiar with, download the extension text from `https://docs.vulkan.org/refpages/latest/refpages/source/<extension name>.html`
  and read it.

Minimal `src/vulkan_<name>.cpp`:
```cpp
#include "vulkan_common.h"

int main(int argc, char** argv)
{
    vulkan_req_t reqs{};                       // Optional: set reqs.usage/cmdopt
    auto vk = test_init(argc, argv, "vulkan_<name>", reqs);
    bench_start_iteration(vk.bench);           // Start one deterministic iteration
    // ... do work here ...
    bench_stop_iteration(vk.bench);
    test_done(vk);
    return 0;
}
```

Minimal `benchmarking/vulkan_<name>.bench`:
```json
{ "name": "vulkan_<name>", "description": "<short description of test>" }
```

### Add a new shader file for Vulkan
- Shaders shall be in separate files with extension giving their type, eg .comp for compute shaders, like `vulkan_<name>.<ext>`.
- Generate SPIRV from the GLSL source code with `glslangValidator -V vulkan_<name>.<ext> -o vulkan_<name>_<ext>.spirv`
- Then generate an include file with `xxd -i vulkan_<name>_<ext>.spirv > vulkan_<name>_<ext>.inc`
- Include this file in the C++ source code with `#include "vulkan_<name>_<ext>.inc"`

