Skip to content

Commit 629be4c

Browse files
committed
Release v1.2.8
1 parent 95283c0 commit 629be4c

File tree

3 files changed

+227
-83
lines changed

3 files changed

+227
-83
lines changed

CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
179179
<!-- Section for Reference Links -->
180180

181181
[vNext]: https://github.com/jakoch/install-vulkan-sdk-action/compare/v1.2.8...HEAD
182-
[1.2.7]: https://github.com/jakoch/install-vulkan-sdk-action/compare/v1.2.7...v1.2.8
182+
[1.2.8]: https://github.com/jakoch/install-vulkan-sdk-action/compare/v1.2.7...v1.2.8
183183
[1.2.7]: https://github.com/jakoch/install-vulkan-sdk-action/compare/v1.2.6...v1.2.7
184184
[1.2.6]: https://github.com/jakoch/install-vulkan-sdk-action/compare/v1.2.5...v1.2.6
185185
[1.2.5]: https://github.com/jakoch/install-vulkan-sdk-action/compare/v1.2.4...v1.2.5

README.md

Lines changed: 154 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44

55
# Github Action: Install Vulkan SDK <!-- omit in toc -->
66

7-
A Github Action to install the Vulkan SDK and runtime library. It also supports installing SwiftShader and Lavapipe software rasterizers.
7+
A Github Action to install the Vulkan SDK and runtime library.
8+
9+
It also supports installing SwiftShader and Lavapipe software rasterizers.
810

911
## Contents <!-- omit in toc -->
1012

@@ -20,9 +22,17 @@ A Github Action to install the Vulkan SDK and runtime library. It also supports
2022
- [What is the Vulkan SDK for ARM?](#what-is-the-vulkan-sdk-for-arm)
2123
- [What is the Vulkan Runtime?](#what-is-the-vulkan-runtime)
2224
- [What are Installable Client Drivers (ICDs)?](#what-are-installable-client-drivers-icds)
23-
- [About SwiftShader](#about-swiftshader)
24-
- [Installing SwiftShader](#installing-swiftshader)
25-
- [Registering SwiftShader as Vulkan Driver](#registering-swiftshader-as-vulkan-driver)
25+
- [Where to find Vulkan Documentation](#where-to-find-vulkan-documentation)
26+
- [Software Rasterizers](#software-rasterisers)
27+
- [SwiftShader](#about-swiftshader)
28+
- [What is SwiftShader?](#what-is-swiftshader)
29+
- [Installing SwiftShader](#installing-swiftshader)
30+
- [Registering SwiftShader as Vulkan Driver](#registering-swiftshader-as-vulkan-driver)
31+
- [LLVMPipe and Lavapipe](#llvmpipe-and-lavapipe)
32+
- [What is LLVMPipe? What is Lavapipe?](#what-is-llvmpipe-what-is-lavapipe)
33+
- [Installing Lavapipe](#installing-lavapipe)
34+
- [Registering Lavapipe as Vulkan Driver](#registering-lavapipe-as-vulkan-driver)
35+
- [Troubleshooting Loader Issues](#troubleshooting-loader-issues)
2636
- [License](#license)
2737
- [Development Reminder](#development-reminder)
2838

@@ -33,9 +43,10 @@ This action has the following features:
3343
- This action can be used to install the Vulkan SDK in your Github Action workflows.
3444
- The action automatically retrieves the latest Vulkan SDK version if no specific version is provided.
3545
- The installation of optional SDK components is supported.
36-
- The action can be used to install the Vulkan Runtime (only on Windows) using download retries and automatic version lowering.
46+
- The action can be used to install the Vulkan Runtime (Windows only) using download retries and automatic version lowering.
47+
- This action allows you to install just the Vulkan Runtime, without the full Vulkan SDK (Windows only).
3748
- The action supports Github Actions cache (for the Vulkan SDK and runtime).
38-
- The size of the installed SDK is reduced to achieve a smaller cache package size (only on Windows).
49+
- The size of the installed SDK is reduced to achieve a smaller cache package size (Windows only).
3950
- The installer supports runners for Windows, Linux, macOS, Windows-ARM, and Linux-ARM.
4051
- The repository [https://github.com/jakoch/vulkan-sdk-arm](https://github.com/jakoch/vulkan-sdk-arm) is used to build and package the Vulkan SDK for ARM64 runners.
4152
- The action can be used to install the software rasterizers: Google SwiftShader and Mesa Lavapipe.
@@ -88,7 +99,7 @@ The following inputs can be used as `steps.with` keys:
8899
| `destination` | String | The Vulkan SDK installation folder. | Windows: `C:\VulkanSDK`. Linux/MacOS: `%HOME/vulkan-sdk` | false |
89100
| `optional_components` | String | Comma-separated list of components to install. | Default: no optional components. | false |
90101
| `install_runtime` | bool | Windows only. Installs the vulkan runtime ('vulkan-1.dll') into a `runtime` folder inside `destination`, if true. Windows: `C:\VulkanSDK\{vulkan_version}\runtime\{x86,x64}`. | true | false |
91-
| `install_runtime_only` | bool | Windows only. Installs only the Vulkan Runtime components. Disables the installation of the Vulkan SDK. Implicitly sets `install_runtime` to true. | false |
102+
| `install_runtime_only` | bool | Windows only. Installs just the Vulkan Runtime components and disables the installation of the Vulkan SDK. Implicitly sets `install_runtime` to true. | false | false |
92103
| `cache` | bool | Cache the Vulkan installation folder. | true | false |
93104
| `stripdown` | bool | Windows only. Whether to reduce the size of the SDK, before caching. | false | false |
94105
| `install_swiftshader` | bool | Windows only. Installs Google's SwiftShader software rasterizer. Default: false. | false | false
@@ -198,22 +209,56 @@ In order to work with a driver, you have to register them in the Windows registr
198209

199210
#### Typical Driver Loading Flow
200211

201-
When you run something like `vulkaninfoSDK.exe`:
212+
When you run the Vulkan Info Tool (`vulkaninfoSDK.exe`):
202213

203214
1. The Vulkan loader checks the registry at `HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\Vulkan\Drivers`.
204215
2. It finds all .json ICD files listed there.
205216
3. It loads each ICD and queries its capabilities (e.g., from AMD, NVIDIA, Intel, SwiftShader, Lavapipe, etc.).
206217
4. It reports back all devices and properties in your system.
207218

208-
## About SwiftShader
219+
### Where to find Vulkan Documentation?
220+
221+
#### Vulkan Specification
222+
223+
- [HTML](https://vulkan.lunarg.com/doc/view/latest/windows/antora/spec/latest/index.html)
224+
- [PDF](https://registry.khronos.org/vulkan/specs/latest/pdf/vkspec.pdf)
225+
226+
#### Vulkan Docs
227+
228+
- [Vulkan Documentation](https://docs.vulkan.org/spec/latest/index.html)
229+
- [Khronos Vulkan Registry](https://registry.khronos.org/vulkan/)
230+
- [vulkan.gpuinfo.org by Sascha Willems](https://vulkan.gpuinfo.org/)
231+
232+
#### Vulkan SDK
233+
234+
- Vulkan SDK: [Release Notes](https://vulkan.lunarg.com/doc/sdk/latest/windows/release_notes.html?ref=vkconfig), [Download Page](https://vulkan.lunarg.com/sdk/home?ref=vkconfig), [API](https://vulkan.lunarg.com/content/view/latest-sdk-version-api)
235+
- Vulkan Configurator: [Readme](https://github.com/LunarG/VulkanTools/blob/main/vkconfig_gui/README.md), [Changelog](https://github.com/LunarG/VulkanTools/blob/main/vkconfig_gui/CHANGELOG.md)
236+
- Vulkan Loader: [Layer Configuration](https://vulkan.lunarg.com/doc/view/latest/windows/layer_configuration.html?ref=vkconfig), [Loader Debugging Guide](https://github.com/KhronosGroup/Vulkan-Loader/blob/main/docs/LoaderDebugging.md)
237+
- Vulkan Validation Layer: [Readme](https://vulkan.lunarg.com/doc/sdk/1.4.328.1/windows/khronos_validation_layer.html), [Coverage Report / Error Database](https://vulkan.lunarg.com/doc/sdk/latest/windows/validation_error_database.html?ref=vkconfig)
238+
- Vulkan API Capture and Replay - GFXReconstruct: [Usage](https://vulkan.lunarg.com/doc/sdk/1.4.328.1/windows/capture_tools.html)
239+
- Vulkan Profiles Toools: [Overview](https://github.com/KhronosGroup/Vulkan-Profiles/blob/main/OVERVIEW.md), [Changelog](https://github.com/KhronosGroup/Vulkan-Profiles/blob/main/CHANGELOG.md), [Whitepaper](https://www.lunarg.com/wp-content/uploads/2024/04/The-Vulkan-Profiles-Tools-LunarG-Christophe-Riccio-04-11-2024.pdf?ref=vkconfig)
240+
241+
#### Vulkan Community
242+
243+
- [Vulkan Discord](https://discord.com/invite/vulkan), [Reddit](https://www.reddit.com/r/vulkan/), [StackOverflow](https://stackoverflow.com/questions/tagged/vulkan), [Mastodon](https://fosstodon.org/@vulkan)
244+
245+
- Community Layers and Tools: [Vulkan Introspection Layer](https://github.com/nyorain/vil), [MangoHud](https://github.com/flightlessmango/MangoHud)
246+
247+
## Software Rasterisers
248+
249+
This action allows you to optionally install the CPU-based software rasterizers, SwiftShader and Lavapipe, which enable Vulkan API rendering on systems without dedicated GPU hardware.
250+
251+
### SwiftShader
252+
253+
#### What is SwiftShader?
209254

210255
[Swiftshader](https://github.com/google/swiftshader), developed by Google,
211256
delivers a high-performance CPU-based implementation of the Vulkan and
212257
OpenGL ES APIs, ensuring graphics rendering on systems without GPU acceleration.
213258

214-
### Installing SwiftShader
259+
#### Installing SwiftShader
215260

216-
You can install it using `install_swiftshader: true`.
261+
You can install SwiftShader using `install_swiftshader: true`.
217262

218263
The install location can be changed using `swiftshader_destination`.
219264

@@ -227,17 +272,21 @@ vk_swiftshader_icd.json
227272
vulkan-1.dll
228273
```
229274

230-
### Registering SwiftShader as Vulkan Driver
275+
#### Registering SwiftShader as Vulkan Driver
231276

232-
To register SwiftShader as a Vulkan Installable Client Driver (ICD), you need to add its ICD manifest file to the Windows registry.
277+
To make SwiftShader available as a Vulkan renderer, you must register it as an Installable Client Driver (ICD).
278+
279+
This is done by placing its JSON manifest file, which identifies the ICD and provides the path to the driver DLL, into the Windows registry.
233280

234281
You can do this using PowerShell with the following command:
235282

236283
```
237284
reg add "HKLM\SOFTWARE\Khronos\Vulkan\Drivers" /v "C:\Swiftshader\vk_swiftshader_icd.json" /t REG_DWORD /d 0 /f
238285
```
239286

240-
Once registered, you can verify that the driver loads correctly and inspect its capabilities using the Vulkan SDK’s vulkaninfo tool:
287+
This allows the Vulkan loader to enumerate SwiftShader among available ICDs and instantiate it as needed by Vulkan applications.
288+
289+
Once registered, you can verify that the driver loads correctly and inspect its capabilities using the Vulkan SDK’s `vulkaninfo` tool:
241290

242291
```
243292
vulkaninfoSDK.exe -j -o swiftshader_profile.json
@@ -257,21 +306,109 @@ To confirm that, you can use `jq` to extract the device name:
257306
jq -r '.capabilities.device.properties.VkPhysicalDeviceProperties.deviceName' swiftshader_profile.json
258307
```
259308

260-
This should output:
309+
This should output a line similar too:
261310

262311
```
263312
SwiftShader Device (LLVM 10.0.0)
264313
```
265314

315+
### LLVMPipe and Lavapipe
316+
317+
#### What is LLVMpipe? What is Lavapipe?
318+
319+
Mesa's LLVMpipe is a CPU-based software rasterizer in the Mesa 3D Graphics Library that enables OpenGL rendering without dedicated GPU hardware.
320+
It leverages the LLVM compiler infrastructure to translate graphics operations, including vertex processing, shader execution,
321+
and rasterization of points, lines, and triangles, into LLVM Intermediate Representation (IR).
322+
This IR is then dynamically compiled into optimized machine code for the host CPU architecture (such as x86, x86_64, or ppc64le),
323+
delivering a flexible and performant fallback renderer for systems lacking GPU support.
324+
325+
Mesa's Lavapipe is CPU-based software driver for the Vulkan API.
326+
Like LLVMpipe, it uses LLVM to compile Vulkan shaders into native machine code, providing a fully functional Vulkan
327+
implementation that runs entirely on the CPU. Lavapipe serves as a critical fallback for environments without compatible
328+
GPU drivers, such as virtual machines or headless systems, ensuring Vulkan applications can still run when no hardware acceleration is available.
329+
330+
In short:
331+
- LLVMpipe = OpenGL on the CPU
332+
- Lavapipe = Vulkan on the CPU
333+
334+
As this action focuses on providing the Vulkan SDK and drivers, we focus on the installation of Lavapipe.
335+
336+
#### Installing Lavapipe
337+
338+
You can install Lavapipe using `install_lavapipe: true`.
339+
340+
The install location can be changed using `lavapipe_destination`.
341+
342+
The default location for Windows is `C:\Lavapipe`.
343+
344+
The installation folder will contain 3 files:
345+
346+
```
347+
vulkan_lvp.dll
348+
vulkan_lvp.lib
349+
share\vulkan\icd.d\lvp_icd.x86_64.json
350+
```
351+
352+
#### Registering Lavapipe as Vulkan Driver
353+
354+
To make Lavapipe available as a Vulkan renderer, you must register it as an Installable Client Driver (ICD).
355+
356+
This is done by placing its JSON manifest file, which identifies the ICD and provides the path to the driver DLL, into the Windows registry.
357+
358+
You can do this using PowerShell with the following command:
359+
360+
```
361+
reg add "HKLM\SOFTWARE\Khronos\Vulkan\Drivers" /v "C:\lavapipe\share\vulkan\icd.d\lvp_icd.x86_64.json" /t REG_DWORD /d 0 /f
362+
```
363+
364+
This allows the Vulkan loader to enumerate Lavapipe among available ICDs and instantiate it as needed by Vulkan applications.
365+
366+
Once registered, you can verify that the driver loads correctly and inspect its capabilities using the Vulkan SDK’s `vulkaninfo` tool:
367+
368+
```
369+
vulkaninfoSDK.exe -j -o lavapipe_profile.json
370+
371+
Get-Content -Raw lavapipe_profile.json
372+
```
373+
374+
This command generates a JSON file (`lavapipe_profile.json`) containing detailed information about the
375+
SwiftShader Vulkan driver, including supported extensions, features, and device properties.
376+
377+
The json file should contain an entry `capabilities.device.properties.VkPhysicalDeviceProperties` with a line similar to:
378+
`"deviceName": "llvmpipe (LLVM 21.1.4, 256 bits)"`.
379+
380+
To confirm that, you can use `jq` to extract the device name:
381+
382+
```
383+
jq -r '.capabilities.device.properties.VkPhysicalDeviceProperties.deviceName' lavapipe_profile.json
384+
```
385+
386+
This should output a line similar too:
387+
```
388+
llvmpipe (LLVM 21.1.4, 256 bits)
389+
```
390+
391+
### Troubleshooting Loader Issues
392+
393+
The Vulkan loader has added logging functionality that can be enabled by using the `VK_LOADER_DEBUG` environment variable.
394+
395+
```
396+
set VK_LOADER_DEBUG=error,warn,info
397+
```
398+
399+
See [Loader Debugging](https://vulkan.lunarg.com/doc/view/latest/windows/LoaderDebugging.html).
400+
266401
## License
267402
268403
All the content in this repository is licensed under the [MIT License](https://github.com/jakoch/install-vulkan-sdk-action/blob/main/LICENSE).
269404
270405
Copyright (c) 2021 Jens A. Koch
271406
272-
## Development Reminder
407+
## Development Notes
408+
409+
This section contains development field notes and acts as reminder for other devs and myself.
273410
274-
To make a new release:
411+
### How to make a new release?
275412
276413
- **Step 1.** Bump version number in package.json
277414
- **Step 2.** Run `npm run npm:install` to install the dependencies

0 commit comments

Comments
 (0)