protonscr

[BUG] Steam Frame: fdm_injection layer hangs vkCreateDevice for D3D11 OpenXR games launched through Proton outside Steam

steamvrclosed bug
ValveSoftware/SteamVR-for-Linux#972 · opened 2026-09-28 by DaVarga · updated 2026-10-20 · 2 comments · github
DDaVarga 2026-09-28 github

Describe the bug
The implicit OpenXR layer XR_APILAYER_VALVE_fdm_injection (/usr/share/openxr/1/api_layers/implicit.d/XrApiLayer_VALVE_fdm_injection.json) is active for every OpenXR app unless DISABLE_VULKAN_FDM_INJECTION_LAYER is set. When a D3D11 OpenXR game is started through Proton outside of the Steam client (mod managers such as BSManager, launch scripts), the game hangs forever while creating its D3D11 device (DXVK → vkCreateDevice). Launched from Steam it works, presumably because Steam sets the variable.

To Reproduce

  1. On a Steam Frame, install Beat Saber (D3D11, Unity OpenXR) and Proton 11.0 (ARM64).
  2. Start it with Proton directly, outside of Steam:
    STEAM_COMPAT_DATA_PATH=<prefix> STEAM_COMPAT_CLIENT_INSTALL_PATH=~/.local/share/Steam "<Proton 11.0 (ARM64)>/proton" run "Beat Saber.exe"
  3. The game never reaches its menu. Player.log stops at GfxDevice: creating device client (waited > 7 minutes).
  4. Same command with DISABLE_VULKAN_FDM_INJECTION_LAYER=1: the game passes device creation immediately.

Expected behavior
The layer either works for these apps or doesn't block device creation (e.g. time out and pass through).

System Information (please complete the following information):

  • Steam client version (build number or date): 1790377368 (beta, linux_arm64)
  • SteamVR version: deckard-steamvr-rel r25513384+0df0f3ff-1 (version.txt 1790270854), SteamOS beta channel
  • Distribution (e.g. Ubuntu): SteamOS (Steam Frame), build 20260925.6191901
  • Steam runtime diagnostics: attached (steam-runtime-diagnostics.txt)
  • Steam and SteamVR logs: attached (steam-logs.tar.gz)
  • Minidumps: none (the game hangs, it doesn't crash)

Screenshots
n/a

Additional context

  • Proton 11.0 (ARM64), proton-11.0-2c-arm64.
  • Also reproduced on the stable channel (SteamOS 20260922.6101926, SteamVR r25358740+28b72a4f-1).
  • Vulkan layer manifest: /usr/share/vulkan/explicit_layer.d/VkLayer_VALVE_fdm_injection.json names libVkLayer_VALVE_fdm_injection.so, but the library only exports prefixed entry points (fdm_injection_GetInstanceProcAddr, fdm_injection_GetDeviceProcAddr) and the manifest has no functions mapping. Enabling the layer by name (VK_INSTANCE_LAYERS=VK_LAYER_VALVE_fdm_injection) fails: Failed to find 'vkGetInstanceProcAddr' in layer "libVkLayer_VALVE_fdm_injection.so".

steam-logs.tar.gz
steam-runtime-diagnostics.txt

DDaVarga 2026-09-29 github

Correction:

The layer does work outside Steam if the same environment variables are set that Steam uses for games with Foveated Rendering enabled:

FDM_DEBUG=enable

VK_INSTANCE_LAYERS=VK_LAYER_VALVE_rpo:VK_LAYER_VALVE_fdm_injection

With these set, Beat Saber starts with proton run and the layer creates the density maps.

The hang only happens when the implicit OpenXR layer is active and neither of these variables is set. This is the normal case when starting something outside Steam.

I would expect the layer to stay inactive when FDM_DEBUG=enable is not set, or at least fail cleanly instead of hanging.

If the hang without FDM_DEBUG=enable is intended, feel free to close this; I'd then file the manifest issue separately.

DDaVarga 2026-10-20 github

This seems to be fixed on:

SteamOS 20261007.6125817 (stable, also on beta 20261015.6141207)
SteamVR r25765468
Steam 1792099137

Beat Saber now starts with proton run outside Steam without FDM_DEBUG / VK_INSTANCE_LAYERS set. The layer loads but stays inactive.

One thing that still hangs the same way: if /usr/share appears twice in XDG_DATA_DIRS (an AppImage's AppRun appends /usr/share/ again), the layer gets loaded twice and vkCreateDevice hangs. Not sure if that's worth handling on your side, so I'm closing this.