protonscr

[BUG][OpenXR][OpenGL] SteamVR Windows enumerates GL_RGBA16 via xrEnumerateSwapchainFormats but fails on submission

steamvrclosed appid 32859bug
ValveSoftware/SteamVR-for-Linux#1015 · opened 2026-10-14 by leethemaxuser · updated 2026-10-14 · 1 comments · github · game page · search this game
Lleethemaxuser 2026-10-14 github

Describe the Bug

The SteamVR OpenXR Windows runtime incorrectly exposes GL_RGBA16 via xrEnumerateSwapchainFormats.

Because standard SDK sample applications (like the official Khronos Group hello_xr reference sample) parse the runtime array and choose the highest-fidelity color depth available, hello_xr defaults to GL_RGBA16 out-of-the-box. While xrCreateSwapchain succeeds for the format, the moment the texture handles are passed to the compositor, ComposeLayerProjection fails entirely with VRCompositorError_TextureUsesUnsupportedFormat. Switching the selection logic manually to floating-point GL_RGBA16F fixes the bug completely.

A historical precedent exists for this issue: Valve explicitly resolved this exact behavior for Linux in SteamVR 1.24 ("xrEnumerateSwapchainFormats no longer returns the following formats on Linux as they are not properly supported: GL_RGBA16"). This cleanup was never ported to the Windows runtime side.

Environment & Reproducible Steps

  1. OS: Windows 10/11 (Tested with NVIDIA driver stack nvwgf2umx.dll)
  2. Runtime: SteamVR OpenXR Runtime
  3. API: OpenGL
  4. Application: Official Khronos OpenXR SDK sample (hello_xr using OpenGL graphics plugin module).
  5. Out of the box, hello_xr enumerates the formats, evaluates 32859 (GL_RGBA16) as preferred, generates the color swapchain, and fails frame submission immediately. (hello_xr.exe -g OpenGL -ff Hmd -vc Stereo -v)

Raw Execution Logs

[Verbose] Swapchain Formats:  [32859] 34842 34843 35905 35907 [33189] 33190 36012
[Info   ] Creating color and depth swapchain for view 0 with dimensions Width=2496 Height=2688 SampleCount=1
[Info] - CreateSwapchain
[Info] -     format: 32859, sampleCount: 1
[Info] -     size: 2496 2688
[Info] - CreateSwapchain
[Info] -     format: 33189, sampleCount: 1
...
[Error] - ComposeLayerProjection: failed to submit view 0: VRCompositorError_TextureUsesUnsupportedFormat
[Error] - ComposeLayerProjection: failed to submit view 1: VRCompositorError_TextureUsesUnsupportedFormat

Exact Format Analysis

The Windows runtime is returning these precise decimal identifiers:
32859 34842 34843 35905 35907 33189 33190 36012

Here is what SteamVR is offering to the OpenXR layer:

Decimal Token OpenGL Hex OpenGL Format Name Status Type
32859 0x805B GL_RGBA16 ❌ Broken Color Swapchain (Triggers submission crash) (Tested)
34842 0x881A GL_RGBA16F Valid Color Swapchain (Works fine) (Tested)
34843 0x881B GL_RGB16F ⚠️ Suspect Color Swapchain (Missing Alpha)
35905 0x8C41 GL_SRGB8 Valid Color Swapchain
35907 0x8C43 GL_SRGB8_ALPHA8 Valid Color Swapchain
33189 0x81A5 GL_DEPTH_COMPONENT16 Valid Depth Buffer
33190 0x81A6 GL_DEPTH_COMPONENT24 Valid Depth Buffer
36012 0x8C1A GL_RGBA32F Valid Color Swapchain

Expected Behavior

SteamVR's Windows OpenXR runtime should strip GL_RGBA16 (32859) from the xrEnumerateSwapchainFormats return array. If the runtime cannot safely translate unorm 16-bit textures across its cross-API Vulkan interop path, it should not advertise them to OpenXR applications looking for a valid swapchain target.

Kkisak-valve maintainer 2026-10-14 github

Hello @leethemaxuser, SteamVR for Windows is out of scope for this issue tracker. Feel free to post this feedback on the community forums at https://steamcommunity.com/app/250820/discussions/3/.

DLLs