Vulkan Validation Layers
Updated: Apr 17, 2026
The Vulkan validation layers included in the Meta Quest operating system make it easy to run validation layers for your app when you want to. These built-in validation layers save time compared to the traditional methods that require you to create special versions of your app to run the Khronos Vulkan validation layer libraries.
Vulkan validation layers are a Khronos-developed and community-contributed tool that measures whether a given Vulkan app conforms to the Vulkan spec. This is extremely important for developers whose apps are using the Vulkan graphics API, since apps that commit spec violations can lead to behavior ranging anywhere from slightly undesirable to complete rendering corruption.
One way where the Vulkan graphics API differs from its predecessor, OpenGL ES, is that GL performs error-checking in the graphics driver itself, but Vulkan graphics drivers have no error-checking responsibilities. This benefits performance, since the driver has less work to validate inputs, but it means that the inputs to these Vulkan functions must be correct; otherwise, undefined behavior can occur. At development time, the validation layers help verify that your app has full spec compliance. At ship time, you won’t have the layers on for performance reasons, but as long as you tested the layer usage strongly, you should have assurance that your app is not performing any large spec violations.
The layers are included directly in the Quest operating system, updated every few months. In the past, validation layers were bundled with Android NDKs that could be years old. The operating system-bundled layers are kept up to date, providing access to the latest validation capabilities.
Enabling Validation Layers for an App
To enable validation layers for an app, use the following command from a command prompt:
adb shell setprop debug.oculus.loadandinjectpackagedvvl.<APP_PACKAGE_NAME> 1
To disable validation layers, use the following command:
adb shell setprop debug.oculus.loadandinjectpackagedvvl.<APP_PACKAGE_NAME> 0
Validation Errors Are Sent to the App Log
Once enabled, the validation layers log Vulkan errors and warnings to the Android logging system. You can display these log messages with adb logcat.
Native Apps or Automated Testing:
The validation layer logging must first be activated with adb shell setprop debug.vvl.forcelayerlog 1 and then the validation layer tags each error with the tag “VALIDATION”. Use an adb command such as the following to view them:
Unreal Apps:
The validation layer tags errors with the tag “VALIDATION” each time an error occurs. Use an adb command such as the following to view them:
If you see this error:
Unable to find Vulkan instance validation layer VK_LAYER_LUNARG_standard_validation
It is trying to use the old LunarG validation instead of the Khronos validation.
The Khronos validation layer (VK_LAYER_KHRONOS_validation) replaced the deprecated LunarG meta-layer. To resolve this error, verify that r.Vulkan.StandardValidation is set to 2 in your DefaultEngine.ini file, which selects the Khronos layer. If using UE5, this CVar may not exist because the Khronos layer is selected by default.
Debugging Validation Errors
If you are building UE from source and want to pinpoint the source of a particular Vulkan validation layer (VVL) error, you can use the AGDE Android debugger. This is the simplest way to get a callstack for a particular VVL error.
- Install AGDE (https://developer.android.com/games/agde).
- Set a breakpoint in
VulkanDebug.cpp on the VULKAN_REPORT_LOG call. Search for this macro in the file; line numbers vary by engine version. - Make sure your project is selected as the startup project.
- Select configuration DebugGame and platform Android.
- Click the play button (or press F5). This builds an APK and launches it on the headset.
- When the breakpoint triggers, check
CallbackData->pMessage to see if this is the error you are looking for. If not, click Continue until you find the correct error.