Vulkan and OpenGL#
Porting Vulkan and OpenGL applications to Windows on ARM is mostly straightforward and often only requires recompiling the project for 64-bit ARM (ARM64). However, there are differences to consider for accessing all features and achieving optimal performance.
Native ICDs on the NVIDIA Windows on ARM Platform#
For platforms that do not support Vulkan and OpenGL natively, Microsoft offers the OpenCL, OpenGL, and Vulkan Compatibility Pack, which essentially implements each API on top of DirectX 12. While the compatibility pack is still functional on the NVIDIA ARM platform, it offers a subset of the features and incurs additional overhead compared to native Installable Client Drivers (ICDs).
It is therefore not recommended to install the compatibility pack, but to use the NVIDIA ARM ICDs, which support the same features as the x86_64 ones and offer the best performance.
Vulkan Runtime#
The NVIDIA driver for Windows on ARM includes a native ARM64 Vulkan loader. It is created from the official LunarG sources without modification, and therefore works with any ICD.
Note, however, that the Vulkan runtime requires additional binaries from the NVIDIA Windows on ARM driver, unlike on x86_64.
Starting with version 1.3.290.0, the Vulkan SDK also includes a native ARM64 runtime.
Because there is no separate system directory for ARM64 or x86_64 binaries,
the Vulkan loader (vulkan-1.dll) in C:\Windows\System32 needs to support both platforms
and is thus an ARM64X library.
The NVIDIA driver for Windows on ARM installs three Vulkan loader libraries:
vulkan-1-a64.dll- the native ARM64 Vulkan loadervulkan-1-a64ec.dll- the ARM64 Emulation Compatible (ARM64EC) Vulkan loadervulkan-1.dll- the ARM64X pure forwarder library that redirects ARM64 processes tovulkan-1-a64.dll, and ARM64EC/x86_64 processes tovulkan-1-a64ec.dll
Future releases of the NVIDIA driver will ship the LunarG distribution instead.
It contains only the ARM64X vulkan-1.dll library.
OpenGL Loader#
Microsoft Windows includes an ARM64X OpenGL loader and thus supports both native and emulation environments.
No action is required by developers, unlike for Vulkan.
The OpenGL utility library glu32.dll is included to support legacy applications.