← Back to context

Comment by GeekyBear

3 months ago

Sorry, but DirectX games don't work on top of the Vulkan graphics API used by Linux without an emulation layer provided by the Proton fork of Wine.

Wine may not be an emulator, but Proton includes a completely necessary translation layer if you intend to play DirectX games on Linux.

On Mac, Apple provides an open source emulation layer, D3DMetal, to translate from DirectX to Metal which is used by Wine.

DXVK, VKD3D, D3DMetal, etc. are translation layers. You're implying they're far more heavyweight than they actually are. The real reason Windows games don't run as well on Macs is that they're usually built for x86_64 instead of ARM.

As someone who has used both Windows and Linux to game on the same x86_64 device, the performance hit with Proton is pretty much negligible (and sometimes games actually run faster on Linux).

  • > DXVK, VKD3D, D3DMetal, etc. are translation layers.

    Rosetta is a translation layer that only operates the first time you run a given x86 app on Mac, and creates an ARM translation that is written to disk and used in the future.

    Does that mean it has no overhead?

    • There is more substantial overhead translating to a different instruction set than in converting API calls to another API. Looking at basic benchmarks should be enough to demonstrate this. IIRC it's like 80% of the performance or something when using Rosetta as compared to native.

      Also, Rosetta is more like a transpiler, since it basically recompiles the binary, whereas the others are literally layers that basically take calls in one API and translate them to another. They're pretty much the same thing as ANGLE.

      2 replies →

That's not emulation, it compiles shaders to vulkan. DXVK commonly has a slight performance advantage over DX12 on Windows for some hardware.

  • > That's not emulation, it compiles shaders to vulkan.

    D3DMetal compiles shades into Metal.

    So it doesn't introduce overhead?

    • Not very much at runtime. The main problem with metal is that it's not really compatible with DX12 or vulkan. DX12 and Vulkan are very similar, metal is not. I'm sure the conversion isn't as 1-1 and you lose some performance by doing stuff esoterically.

      2 replies →