u/sylvinus

I got Beyond All Reason running (almost) on an M2 Pro Mac

I got Beyond All Reason running (almost) on an M2 Pro Mac

https://preview.redd.it/qsnm860z3x1h1.png?width=3456&format=png&auto=webp&s=6aa1b9244bcf138b09747d2c10973ef5cbe62220

(Disclaimer: this was heavily assisted by Claude.)

So my setup is:

  • macOS Sequoia on M2 Pro
  • UTM 5.0.3 beta running QEMU with the Apple Hypervisor backend
  • Debian 13 ARM64 guest with paravirtualized virtio-gpu
  • Mesa's Venus Vulkan driver in the guest, forwarded to the host
  • virglrenderer + MoltenVK on the host, translating Vulkan → Metal → Apple GPU
  • FEX-Emu running BAR's x86_64 binaries on aarch64

In the screenshot, BAR is running through llvmpipe — Mesa's CPU software rasterizer — not the GPU. The GPU-accelerated path (Zink → Venus → MoltenVK) crashes on a specific, probably fixable feature gap. Framerate is unusable, but the engine loaded a map, spawned an AI, ran Lua widgets and rendered. Crashes on window resize (separate Mesa bug, workaround: don't resize). As you can see the UI widgets look messed up but they briefly showed correctly at the beginning.

I guess getting into a game at all is already progress, thanks to latest advances in the Venus driver?

Reproduction:

UTM 5.0.3 beta (stable 4.x lacks Venus):

brew install --cask utm@beta

Create a new VM (with virtualize, not emulate):

  • System: ARM64, QEMU backend
  • Display: Emulated card = virtio-gpu-gl-pci, GPU Supported on, Vulkan = MoltenVK, Renderer Backend = Default
  • Apple Virtualization: OFF

Install Debian 13 ARM64. Verify Venus loaded:

vulkaninfo --summary | grep -A2 "GPU0"

You want driverName = venus. If you only see llvmpipe, the UTM display settings are wrong.

Install FEX-Emu (the InstallFEX.py path doesn't work on Debian 13):

sudo apt install curl
curl -fsSL "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xEDB98BFE8A2310DC9C4A376E76DBFEBEA206F5AC" \
  | sudo gpg --dearmor -o /etc/apt/keyrings/fex.gpg
echo "deb [signed-by=/etc/apt/keyrings/fex.gpg] https://ppa.launchpadcontent.net/fex-emu/fex/ubuntu noble main" \
  | sudo tee /etc/apt/sources.list.d/fex.list
sudo apt update
sudo apt install fex-emu-armv8.4
FEXRootFSFetcher   # pick Ubuntu_24_04
FEXBash -c "uname -m"   # should print x86_64

Get BAR (extract — the AppImage's FUSE path doesn't work under FEX):

mkdir ~/bar && cd ~/bar
wget https://github.com/beyond-all-reason/BYAR-Chobby/releases/download/v1.2988.0/Beyond-All-Reason-1.2988.0.AppImage
chmod +x Beyond-All-Reason-1.2988.0.AppImage
./Beyond-All-Reason-1.2988.0.AppImage --appimage-extract
cd squashfs-root

Run through llvmpipe (the working path):

LIBGL_ALWAYS_SOFTWARE=1 \
GALLIUM_DRIVER=llvmpipe \
MESA_LOADER_DRIVER_OVERRIDE=llvmpipe \
__GLX_VENDOR_LIBRARY_NAME=mesa \
FEXInterpreter ./beyond-all-reason --no-sandbox

Host a skirmish vs AI, pick any map, don't resize the window.

The broken GPU path uses MESA_LOADER_DRIVER_OVERRIDE=zink MESA_GL_VERSION_OVERRIDE=4.5 MESA_GLSL_VERSION_OVERRIDE=450 instead — UTM's QEMU dies with VK_ERROR_INITIALIZATION_FAILED: Vertex shader function could not be compiled into pipeline.

Existing issues that could use a boost to get the GPU working:

UTM ships MoltenVK without MVK_USE_METAL_PRIVATE_API=1**.** This single build flag would expose VkPhysicalDeviceFeatures::logicOp, which Zink complains about at startup. The flag exists because it disqualifies a binary from Mac App Store distribution — but UTM's GitHub build isn't App Store, so it could ship with the flag. MoltenVK README documents this: https://github.com/KhronosGroup/MoltenVK#optionally-build-with-metal-private-api . UTM maintains its own MoltenVK fork at https://github.com/utmapp/MoltenVK . No existing UTM issue requests this; the closest is DXVK support #7575 (https://github.com/utmapp/UTM/issues/7575), which hits the same root cause — logicOp: 0 blocks DXVK at D3D feature level 10+. Same fix unlocks both. I'll file a new issue and cross-link.

VK_EXT_custom_border_color is closed-as-not-planned on MoltenVK: https://github.com/KhronosGroup/MoltenVK/issues/1987 . Metal genuinely doesn't expose this. MoltenVK doesn't seem interested. Can we make them change their mind? Another more realistic ask is Mesa/Zink degrading gracefully instead — Maintainer might be responsive to these reports at https://gitlab.freedesktop.org/mesa/mesa/-/issues

Separate MoltenVK shader-compilation NULL deref at MVKCmdBindGraphicsPipeline::isTessellationPipeline() on the Zink path. I got a crash with this that should be fixed in MoltenVK.

Mesa/llvmpipe resize crash — SIGSEGV in _mesa_glapi_set_dispatch after SDL_WINDOWEVENT_SIZE_CHANGED, looks like a thread-safety bug.

That's it, I humbly hope this contributes somewhat to progress towards a Mac build :)

Thanks for such a great RTS game :)

reddit.com
u/sylvinus — 3 days ago