Run the same-device Vulkan OpenXR backend on desktop Linux

Lepton's Vulkan driver has no external memory or sync fd extensions,
so the Steam Frame gets a native SteamOS build instead. Its backend is
the PC's: OpenXR creates Dawn's own Vulkan instance and device, and the
eyes are copied into the swapchain on Dawn's queue, with nothing shared
between devices.

- openxr_vulkan_win32 and Aurora's vulkan_win32_interop now compile on
  desktop Linux. Dawn links statically there, so the bridge calls the
  patched package's hooks directly, and exists only when the package's
  aurora-dawn.json declares the Vulkan hook ABI (AuroraDawnProvider
  turns AuroraVulkanAbi into AURORA_DAWN_VULKAN_HOOKS); a stock Dawn
  keeps the stubs and VR falls back to the desktop.
- openxr_integration.cpp gains a Linux branch: XR_KHR_vulkan_enable2,
  the timespec clock, refresh rate, performance level, the Frame
  controllers and eye gaze; fragment density maps are requested on
  Linux as on the Quest (fdm.cpp and gpu.cpp, AURORA_FDM=0/1 overrides).
- Controller motion uses XR_KHR_convert_timespec_time on any Linux.
- CMake: Vulkan headers are fetched for Linux OpenXR builds, the
  headset option is MKW_HEADSET on Android and Linux, and Linux aarch64
  builds take MKW_LINUX_CPU (cortex-x4 for the Steam Frame, else native).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019HBRGKTE1GnN2ah8gcZKr3
This commit is contained in:
Claude committed 2026-10-04 09:48:48 +00:00
1 parent da0d13bdd2
commit 28a25108c6
13 files changed
+137 -36

No files matched your search

+2 -2
View File
@@ -187,7 +187,7 @@ android {
}
// Valve's Steam Frame, through Lepton (SteamOS's Android layer) and SteamVR's Android
// OpenXR runtime. Its manifest (src/steamFrame) drops the Horizon OS entries, and
// MKW_ANDROID_HEADSET gives the runtime the Frame's defaults (runtime_config.h).
// MKW_HEADSET gives the runtime the Frame's defaults (runtime_config.h).
create("steamFrame") {
dimension = "headset"
// Horizon OS only; src/steamFrame/AndroidManifest.xml removes the entry.
@@ -199,7 +199,7 @@ android {
cmake {
arguments += listOf(
"-DMKW_ANDROID_CPU=${headsetCpus.getValue("steamFrame")}",
"-DMKW_ANDROID_HEADSET=steam_frame",
"-DMKW_HEADSET=steam_frame",
)
}
}