So, the symptoms in VR are the following:
I understand that in proton experimental the OpenXR initialization code works correctly (recent fix that will be eventually applied to proton stable), but the other issues remain. I am first sending a simple PROTON_LOG=1 %command% logfile and a video showing how it went.
Video is on youtube: https://youtu.be/zACPYqvIgtQ
Now I did the same as above but instead I've used as launch parameters: PROTON_LOG=+vrclient,+openxr,+file %command%
The result is this 86 MB logfile (uncompressed) I am attaching but zipped (2.2MB).
Still with PROTON_LOG=+vrclient,+openxr,+file %command% I did the same as above but with Proton 10.0-4. The VR screen never initializes, SteamVR doesn't fade to black, and in a very short time it generates a 431 MB logfile, attached here.
steam-2754090-proton10-04-vrclient-openxr-file.zip
So, I am trying to be thorough on my bug report because I am refunding right after this, being unable to provide more data before the game is sold at a considerable discount. No offense, but this game is expensive and I've opened many other bug reports (like the one for Glassbreakers) that have no activity at all for more than one month, so I don't know if in one hour I will receive a follow-up or if this issue will stay silent and take years to resolve.
Any news on that game? Even the flat version? It's on sale again.
I have had luck getting it to render in using proton-cachyos-11.0-20260506-slr-x86_64_v3 with the following launch command
PROTON_VKD3D_HEAP=1 VKD3D_CONFIG=enable_experimental_features,descriptor_heap,no_upload_hvv,single_queue %command%
What also solved the issues I was having with Forza Horizon 6
@Agent6472 you mean you are able to play the game? Are you playing it in VR or flatscreen?
@Patola can confirm flatscreen. Just moved from Pop_OS to Bazzite so I haven't had a chance to re-set up the vr but its looking good so far.
@Agent6472 what GPU and drivers do you have?
@Patola Nvidia 3060ti on 595.71.05
Seems like enable_experimental_features was the key. The non-VR version at least should work with the linked PR.
Seems like enable_experimental_features was the key. The non-VR version at least should work with the linked PR.
Now that the non-VR version is working, what do we need for the VR version to work?
Do you need more tests? More logs?
I have repurchased the game now and I want to play it in VR.
With the help of AI (claude) and a lot of test, I was able to find two major problem that affect this game in Proton.
Since an update of the game around september, it simply crash on start. This fix is very simple, you'll finds info below.
So the game can start and in flat it works flalessy.
In VR I found a second bug, that affect rendering pipeline.
With tests and logs analizing. Claude was able to find the root of the issue and fix it.
Below the extended report.
System
The two problems are independent, so I'm describing them separately.
d3d12.dll has no version resourceSymptom. The game starts with a fatal error:
Cannot find precompiled shaders for this videocard
(while looking for files compiledShaders/game.psXX.shdump.bin)
After that comes steam/ask_verify_content. The game only ships DX12 shaders (compiledShaders/gameDX12.ps50.shdump.bin), so the game.psXX it looks for is the DX11 path.
Root cause. Before creating a D3D12 device, aces.exe checks the file version of D3D12.dll (GetFileVersionInfoSizeA / GetFileVersionInfoA / VerQueryValue). It only accepts DX12 if the version is >= 10.0.18362.267. Otherwise it logs one of these two messages and silently falls back to DX11:
DX12: Unsupported OS, can't determine D3D12.dll's version
DX12: Unsupported OS, D3D12.dll's version %u.%u.%u.%u
vkd3d-proton's d3d12.dll has no VS_VERSIONINFO resource at all, so the check always fails, regardless of GPU vendor (tested here on NVIDIA only). This is consistent with the Proton log: d3d12.dll is loaded, but no D3D12 device is ever created and there isn't a single vkd3d line. Changing config.blk (driver:t="dx12") or using -config:video/driver:t=dx12 makes no difference, because the check happens first.
Fix. Give vkd3d-proton's d3d12.dll a version resource. I added VS_VERSIONINFO with FileVersion 10.0.19041.1 to the d3d12.dll in Proton's files/lib/wine/vkd3d-proton/x86_64-windows/, without touching the code, and the game started immediately in DX12. The DLL in the game prefix is not enough on its own, because Proton copies its own file over it on every launch. Putting a copy in the game folder doesn't work either, because the game loads D3D12.dll from system32 only. The clean fix would be a .rc version resource in vkd3d-proton's build. It's the same idea as the old DXVK discussion: https://github.com/doitsujin/dxvk/issues/980
Symptom. In VR only the sky, transparent surfaces (cockpit glass), fire, water and reflections are rendered. Terrain, aircraft, objects and menus are missing. Head tracking and locomotion work. The desktop mirror shows the same broken image, so it's not a compositor or wineopenxr issue.
Root cause. vkd3d-proton reports view instancing tier 2. In VR the game then uses D3D12 view instancing for stereo, and its game log confirms it:
VR multiview is supported through tier 2 view instancing.
The game's default stereo mode (vrMultiviewStereoMode = "vertical") puts both views on RenderTargetArrayIndex 0 with different ViewportArrayIndex, i.e. both eyes in one texture, split by viewport. d3d12_pipeline_state_validate_view_instancing() rejects this case ("The same RenderTargetArrayIndex is used for multiple ViewIDs. This is unsupported."). The result is that every opaque pipeline using the use_vr_multiview shader variants fails with E_NOTIMPL. The game log has around 17,500 errors like:
DX12: CreatePipelineState returned unknown return code 0x80004001
CreatePipelineState failed for <land_mesh){use_vr_multiview=[>=1],...}>, ... fb_layout was { hasDepth 1 depthStencilFormat DXGI_FORMAT_D16_UNORM colorTargetMask 0 ... }
The affected pipelines are land_mesh, heightmap, rendinst_*, dynamic_masked_chrome_bump, random_grass_gpu and others. The game doesn't allow disabling multiview from config.blk (Settings: 'xr/useVrMultiview' is not allowed for overwrite!), so there is no user-side workaround.
Fix: replay draws per view. I implemented a fallback in vkd3d-proton for configurations that plain Vulkan multiview cannot express:
DynamicViewInstancingOffsets), and Layer and ViewportIndex are exported by the shader. I added a new meta descriptor kind, DXIL_SPV_META_DESCRIPTOR_KIND_SPEC_CONSTANT, so that word (ViewID in the low 16 bits, layer in the high 16 bits) can come from a specialization constant instead of a UBO.multiview.replay. Shaders are compiled without VK multiview (view_mask = 0), and each view gets its own pipeline variant (vkd3d_pipeline_key.replay_view) with a different value of the new spec constant VKD3D_SHADER_VIEW_REPLAY_WORD_SPEC_CONSTANT. The pipeline library and the base pipeline cover view 0.DrawInstanced, DrawIndexedInstanced, ExecuteIndirect (both the plain MDI path and the state-template/DGC path, whose batch snapshots dynamic_state including the replay view) and DispatchMesh loop over the active views. They honour the view instance mask and bind the matching variant before each replay.VKD3D_VIEW_INSTANCING_REPLAY=1 forces this path for all view instancing PSOs. This is useful for testing, and for the "shader exports SV_RenderTargetArrayIndex" case, which is only detected at shader compile time and isn't handled automatically yet.Result. With the patched vkd3d-proton, the game logs RenderTargetArrayIndex 0 is used for multiple ViewIDs. Replaying draws per view. and VR renders correctly on the RTX 4070 Super, with an unmodified game executable. Performance feels in line with Windows on the same machine (dual boot). I saw some stutter early on, probably because the per-view variants are currently compiled lazily on first use. Compiling them at PSO creation time is an obvious follow-up.
I also checked the dxil-spirv side in isolation: test vertex and pixel shaders using SV_ViewID (compiled with DXC, SM 6.1) produce valid SPIR-V (spirv-val --target-env vulkan1.3) that reads ViewID and the layer from the spec constant and writes Layer / ViewportIndex correctly. This also holds when the shader itself exports SV_RenderTargetArrayIndex.
proton 10.0-4x3 2026-02proton experimentalx2 2026-02ge-proton10-28x1 2026-02ge-proton10-29x1 2026-02VKD3D_SHADER_VIEW_REPLAY_WORD_SPEC_CONSTANTx1 2026-10VKD3D_VIEW_INSTANCING_REPLAY=1x1 2026-10PROTON_VKD3D_HEAP=1x1 2026-05VKD3D_CONFIG=enable_experimental_features,descriptor_heap,no_upload_hvv,single_queuex1 2026-05PROTON_LOG=+vrclient,+openxr,+filex2 2026-02PROTON_LOG=1x1 2026-02d3d12.dllx1 2026-100x80004001x1 2026-10
steam-2754090-proton10-04.log
Compatibility Report
System Information
I confirm:
Note
This is a VR optional game. However, it is not starting correctly even in flatscreen mode. As a way to simplify treatment, I am first just saying the issues in flatscreen mode, and I will augment with VR data later.
Symptoms
Game shows the start screen, asks to press space to continue, says we're authorized, and throws the player in an empty field with some fire in the distance. In this empty field, some controls work (WASD + mouse-button to change the view), but there are no menus, no objects, no other controls working.
Reproduction
Just start the game.