vrclient_translate_texture_d3d12() has no mapping for DXGI_FORMAT_B8G8R8A8_UNORM (0x57). A D3D12 app that submits a BGRA8 UNORM eye texture through IVRCompositor::Submit gets the untranslated D3D12 texture passed on to the native client, which faults, and the process dies on an assertion in vrclient_main.c.
This is the UNORM sibling of #8338 (0x5a, B8G8R8A8_TYPELESS), which ab78280b fixed by mapping only the TYPELESS format.
UEVR logs that its eye render target is width: 2644, height: 2644, format: 87 (DXGI_FORMAT_B8G8R8A8_UNORM).
Proton log (PROTON_LOG=1), around the crash
err:vrclient:vrclient_translate_texture_d3d12 Unsupported DXGI format 0x57.
trace:seh:handle_syscall_fault code=c0000005 flags=0 addr=0x7f9d02da2b8f ...
warn:seh:handle_syscall_fault backtrace: --- Exception 0xc0000005 at 0x7f9d02da2b8f: .../lib/wine/x86_64-unix/winevulkan.so ...
err:vulkan:vkCreateCommandPool Exception 0xc0000005 in Unix call.
warn:seh:handle_syscall_fault backtrace: --- Exception 0xc0000005 at 0x7f9a6a7f9fc4: .../lib/wine/x86_64-unix/vrclient_x64.so + 0x3dfc4.
err:msvcrt:_wassert (L"!status",L"../src-vrclient/vrclient_main.c",747)
Cause
The switch in vrclient_translate_texture_d3d12() only knows R8G8B8A8_UNORM_SRGB, R8G8B8A8_UNORM and B8G8R8A8_TYPELESS. Anything else hits default:, which logs the error and returns *texture unchanged, so a TextureType_DirectX12 handle reaches the native vrclient, and that crashes.
B8G8R8A8_UNORM and B8G8R8A8_UNORM_SRGB map directly to VK_FORMAT_B8G8R8A8_UNORM and VK_FORMAT_B8G8R8A8_SRGB, like the R8G8B8A8 pair. I'll open a PR that adds those two cases.
Workaround
Submitting through OpenXR instead (UEVR's OpenXR runtime) avoids this path, because wineopenxr already handles the B8G8R8A8 formats. D3D11 (-dx11, DXVK) through OpenVR is also unaffected.
vrclient_translate_texture_d3d12()has no mapping forDXGI_FORMAT_B8G8R8A8_UNORM(0x57). A D3D12 app that submits a BGRA8 UNORM eye texture throughIVRCompositor::Submitgets the untranslated D3D12 texture passed on to the native client, which faults, and the process dies on an assertion invrclient_main.c.This is the UNORM sibling of #8338 (
0x5a,B8G8R8A8_TYPELESS), which ab78280b fixed by mapping only the TYPELESS format.Proton version: Proton Experimental
experimental-11.0-20261014Game: Train Sim World 7 (4678800), with UEVR nightly 01143 injected,
-dx12(vkd3d-proton), OpenVR runtime, SteamVR build 25998080System: RTX 5080, NVIDIA 615.78.08 (open kernel module), kernel 7.2.8, Arch
Symptoms
The first VR frame crashes with a Wine assertion dialog:
UEVR logs that its eye render target is
width: 2644, height: 2644, format: 87(DXGI_FORMAT_B8G8R8A8_UNORM).Proton log (
PROTON_LOG=1), around the crashCause
The switch in
vrclient_translate_texture_d3d12()only knowsR8G8B8A8_UNORM_SRGB,R8G8B8A8_UNORMandB8G8R8A8_TYPELESS. Anything else hitsdefault:, which logs the error and returns*textureunchanged, so aTextureType_DirectX12handle reaches the native vrclient, and that crashes.B8G8R8A8_UNORMandB8G8R8A8_UNORM_SRGBmap directly toVK_FORMAT_B8G8R8A8_UNORMandVK_FORMAT_B8G8R8A8_SRGB, like the R8G8B8A8 pair. I'll open a PR that adds those two cases.Workaround
Submitting through OpenXR instead (UEVR's OpenXR runtime) avoids this path, because wineopenxr already handles the B8G8R8A8 formats. D3D11 (
-dx11, DXVK) through OpenVR is also unaffected.