Metal 3 includes key API features that are compatible with DirectX 12. One is mesh/object shaders. The other is the (very, very recently) removed restriction on argument buffer bind counts (
https://developer.apple.com/metal/Metal-Feature-Set-Tables.pdf). Previously, it was at 500k which is shy of 1M that DirectX needs. There was a Reddit thread (
https://www.reddit.com/r/macgaming/comments/sjcthy/directx_12_support_on_parallels_desktop) that said this was a blocking issue, but I (1) don't think it would have been blocking in the first place and (2) it has already been fixed. If there's enough user demand, which Parallels maintainers can definitely see there is, they could add some kind of "unsafe" mode that assumes the game dev keeps within 500k. Why would anyone use all 1M slots in the argument buffer anyway? If it crashes at runtime, there are already things that can crash at runtime, especially in a VM.
Besides that, the biggest block may have been things like "geometry shaders" and "domain shaders". That terminology is foreign to me, an experienced Metal developer. The addition of mesh/object shaders as described in the MSL specification may or may not fill that gap in functionality. Another blocker might be BC compression which is unsupported by Apple silicon, but that's part of DX11 (
https://docs.microsoft.com/en-us/windows/win32/direct3d11/texture-block-compression-in-direct3d-11) which Parallels already supports. If someone on the staff reads this, I'm curious how you pulled that off. Parallels is closed-source, but perhaps you could explain with a source code sample or a pointer to Metal features used.
I would be most interested if Parallels tackled DX12, Vulkan, and OpenCL at once. See (
https://www.codeweavers.com/blog/cj...etting-there-crossover-support-for-directx-12) for some technical limitations of DX12 and Vulkan. OpenCL has been ported on top of DX12, which should make adding OpenCL to Parallels easier. I would like to see that because I'm doing a project with OpenCL and would like to compile it in Windows. Another cool thing would be testing out Microsoft's DirectML backend for TensorFlow, which uses DX12 for compute shaders instead of OpenCL.