Frame-level misalignment between color and depth in OpenXR apps on UE5.3 / UE5.6

When running OpenXR applications built with Unreal Engine 5.3 and 5.6, we are encountering a frame-by-frame misalignment between the color image and depth information, and the depth data is not being correctly passed to the OpenXR runtime.

This issue does not occur consistently; it depends on the combination of RenderRHI, GPU type, and driver version.

Expected Behavior

  • Depth information should be correctly synchronized with the color image across all RHIs without any frame-level offset.

Questions

  1. Are there Unreal Engine settings or GPU/OS configurations that can ensure correct depth synchronization?

  2. If there is a reliable combination of RHI, GPU, and driver version that achieves the expected behavior, could you define or suggest it?

  3. Are there any Unreal Engine tools or workflows for diagnosing depth/color frame-tearing in OpenXR?

-–

Observations

UE5.3.2

  • D3D12: Misalignment occurs depending on GPU and driver version

  • Vulkan: Misalignment always occurs

UE5.6.1

  • D3D12: Misalignment occurs depending on GPU and driver version

  • Vulkan: Misalignment always occurs

Detailed combination data can be provided if needed.

-–

Environment

  • Unreal Engine: 5.3, 5.6

  • Plugins: OpenXR, OpenXRHandTracking

  • OS: Windows 11

  • GPUs: RTX 4080, RTX 3070 Ti

  • Driver Versions: 566.36, 580.97, 581.08

-–

If anyone has experienced similar issues or knows best practices for UE/OpenXR, your input would be greatly appreciated.

-–

Recommended Tags

Unreal Engine UE5 OpenXR Depth Buffer RHI Vulkan D3D12 Rendering XR Development

2 Likes

For tools I’d suggest looking at a frame with RenderDoc, and seeing if it’s actually submitting the incorrect depth map. If it’s inconsistent with driver versions, it could be a driver or runtime issue. Have you checked if it’s consistent between different runtimes or headsets?

How are you capturing and analyzing the frames? If it’s an inline tool like and API layer, it could be pulling the wrong swapchain image, or a stale one.