# Vulkan

> Information about the Vulkan graphics API including platform compatibility and supported features.

[Vulkan](https://www.vulkan.org) is a modern graphics API that works across multiple platforms including mobile and desktop. Unity supports Vulkan allowing you to target Vulkan-capable devices and providing direct control over the GPU.

## Platform compatibility

Unity supports the Vulkan API for developing applications on the following platforms:

* Android
* Embedded Linux
* Linux
* Windows

For developing [XR](/engine/6000.6/manual/xr.md) applications, Unity supports Vulkan on the Android platform. Vulkan isn't actively supported for XR on Windows, but Unity doesn't prevent you from enabling it.

## Vulkan on Android

When you create a new Android project, Unity enables Vulkan as the default graphics API. For other platforms where Vulkan isn't the default graphics API, you can enable it through Unity Editor's Player settings. For more information, refer to [Override default graphics APIs](/engine/6000.6/manual/platform-specific/cross-platform-features/graphics-apis/configure.md#override-default-gfxapi).

When developing a Unity Android project with Vulkan, consider the following recommendations and features:

### Vulkan device filtering

You can use [Vulkan hardware profiles](/engine/6000.6/manual/platform-specific/android/developing/graphics/vulkan-hardware-profiles.md) or the [Vulkan Device Filtering Asset](/engine/6000.6/manual/platform-specific/android/developing/graphics/vulkanapi-graphics-jobs-configuration/introduction-vulkan-device-filtering-asset.md) to control Vulkan support on Android devices.

It's recommended to use Vulkan hardware profiles as the primary method for device filtering. Hardware profiles let you filter for and target specified devices, select their graphics API, and apply or remove driver workarounds.

You can’t use Vulkan hardware profiles and Vulkan Device Filtering Assets at the same time. If both are present, Vulkan hardware profiles override the filtering asset.

### Swapchain pre-rotation

It's recommended to enable framebuffer orientation through the Android Player settings. For more information, refer to the documentation on [Framebuffer orientation](/engine/6000.6/manual/platform-specific/android/developing/graphics/vulkan-swapchain-pre-rotation.md).

### Vulkan validation layers

You can enable validation layers for debugging plug-ins that use the Vulkan graphics API through the `-force-vulkan-layers` command-line argument. For more information about the plug-in requirements when using validation layers, refer to [Plug-in using the Vulkan graphics API](/engine/6000.6/manual/programming-environment/plug-ins/native-plugin-interface/low-level-native-plugin-rendering-extensions.md#vulkan-plugin).

## Advantages and limitations

Consider the following advantages and limitations of using Vulkan as the graphics API in your Unity project.

* Vulkan enables [High Definition Render Pipeline (HDRP)](/engine/6000.6/manual/render-pipelines/high-definition-render-pipeline.md) support on Linux.
* On Linux and Android, Vulkan generally supports more capabilities, such as graphics jobs and direct control over the GPU, which aren't available in [OpenGL Core](/engine/6000.6/manual/platform-specific/cross-platform-features/graphics-apis/open-glcore-details.md) on Linux or OpenGL ES on Android.
* Unity doesn’t support Vulkan for Windows on Arm devices. If your application targets such devices, consider using alternative graphics APIs supported by Unity.
* On Windows, some features such as async compute and ray tracing are currently not implemented for Vulkan. Unity's best practice is to use [D3D12](/engine/6000.6/manual/platform-specific/cross-platform-features/graphics-apis/using-dx11gl3features.md) for these features.

## Key features and differences in Vulkan API

Vulkan supports several features and capabilities that differentiate it from other graphics APIs, such as OpenGL.

* [Graphics jobs](/engine/6000.6/manual/platform-specific/android/getting-started/class-player-settings.md#GraphicsJobsMode): Vulkan supports graphics jobs, a feature that allows rendering tasks to run on multiple threads. This might help improve performance of your application. Graphics jobs feature isn't supported with OpenGL.
* [Dynamic Resolution](/engine/6000.6/manual/cameras/resolution-scale/dynamic-resolution/introduction.md): Vulkan supports dynamic resolution scaling on devices allowing to adjust the resolution of the individual render targets in real time. This feature reduces workload on the GPU thereby improving performance of your application.
* [Memoryless Render Textures](/engine/6000.6/script-reference/unityengine/rendertexture/memorylessmode.md): On some Vulkan compatible platforms, memoryless render textures temporarily store data in the on-tile memory during rendering. This can help improve performance and reduce memory usage of your application.
* [Direct control over GPU](/engine/6000.6/manual/unity-editor/command-line-arguments/player.md): Unity uses Vulkan's direct GPU control capability to support the `-force-device-index` option, allowing you to specify which GPU Unity’s Standalone Player uses. This capability of Vulkan allows you to optimize your application for better performance. This feature isn't supported with OpenGL.
* [XR features](/engine/6000.6/manual/xr/graphics/untethered-device-optimization.md#vulkan): Unity's best practice is to use Vulkan for Android XR and Meta Quest devices because some newer graphics features are only supported with Vulkan. For example, [Multiview Render Regions](/engine/6000.6/manual/xr/graphics/multiview-render-regions.md) is a Vulkan-specific feature. Vulkan API is more stable and provides better performance compared to OpenGL in URP projects targeting XR platforms.

## Additional resources

* [Vulkan design guidelines](https://developer.android.com/ndk/guides/graphics/design-notes?authuser=3)
* [Vulkan validation layers on Android](https://developer.android.com/ndk/guides/graphics/validation-layer)
