protonscr

Train Simulator Classic uses D3D9on12

dxvkclosed d3d9
doitsujin/dxvk#3445 · opened 2023-05-23 by gatecat · updated 2023-05-24 · 9 comments · github
Ggatecat 2023-05-23 github

I'm trying to run the new DX12 Version of Train Simulator Classic under DXVK/Proton. It fails because ordinal 20 of d3d9.dll is not implemented, which after some research corresponds to Direct3DCreate9On12.

Software information

  • Train Simulator Classic (App ID: 24010, Build ID: 11297210)
  • latest Proton Experimental experimental-8.0-20230517

Log: steam-24010.log

Ggatecat 2023-05-23 github

Sorry, didn't spot that DXVK doesn't support DX12 at all!

Mmbriar 2023-05-23 github

DXVK still supports the d3d11on12 interop together with vkd3d-proton, so it might still be relevant (although I don't know if there is any interest to support this).

Ggatecat 2023-05-23 github

Oh, that's interesting to know - I thought they were separate projects and integration would be very difficult.

KK0bin maintainer 2023-05-23 github

So their understanding of a D3D12 version is to slap Microsofts D3D9on12 on it.

That's a translation layer similar to DXVK except that it translates D3D9 to D3D12 instead of Vulkan. It's also very slow. Last time I tried it, it was running at 1/3 the speed of DXVK.

So I really don't get what the Train Simulator devs are trying to achieve with this. Because it's definitely not gonna be faster on Windows.

BBlisto91 2023-05-23 github

I thought they were separate projects and integration would be very difficult.

They are different enough that it makes sense for separate repos, but they share some implementations like 11on12. Main dxvk dev also helps working on vkd3d-proton.

Anyway if it's to be supported it has to be implemented in both projects so it's legit to open a issue here.

KK0bin maintainer 2023-05-23 github

@Blisto91 I think VKD3D-Proton already has everything we would need.

Ggatecat 2023-05-23 github

In the end, at least for TSC at the moment, this isn't actually needed as the DX12 version is literally just using 9on12 - as far as I can tell, running the DX12 version with Direct3DCreate9On12 behaving like Direct3DCreate9 and no other changes rins just the same as the usual DX9 version; so it's not actually mixing 9 and 12 in any way.

Of course, maybe this is still useful for something else in the future.

KK0bin maintainer 2023-05-23 github

Yup, I agree.

I don't plan to implement this atm but I'll keep the issue open in case I change my mind.

Ddoitsujin maintainer 2023-05-23 github

Is there even any public documentation for this, including GUIDs for the interop interfaces?

Proton versions

DLLs