There are some pain points that Apple could easily fix:
- Add a barrier API that more closely resembles that of Vulkan, which is easier to use and more flexible than both Metal and D3D12. Microsoft also basically copied the Vulkan barrier API in a D3D12 update but no games use that yet. The regular D3D12 barrier API can be implemented very well on top of the Vulkan barrier model but maps poorly to Metal.
- Open source MetalD3D and/or the Metal shader converter.
- Document the Metal shader bytecode format. It has been reverse engineered and it's mostly just LLVM bitcode anyway. Right now some tools like MoltenVK compile to Metal Shading Language (modified C++) which then gets compiled to Apple Intermediate Representation which then gets compiled to something the GPU can work with.
- Add a bunch of other Metal features like strict robustness guarantees (return 0 for out of bounds reads).
- Support optionally making specific folders in the file system case insensitive. The Linux kernel got support for that for Wine.
- Support the weird Windows NT sync edge cases in the kernel. The Linux kernel also recently got support for that for Wine.
- Add an API to Metal to allow mapping Metal buffers at a specific address in memory to help running 32 bit games.
- Add an optional reduced precision mode for x87 in Rosetta. (Turn the software emulated 80 bit floats into proper 64 bit floats).