Files
Ali Sakanak 8798519c32 Pipeline macOS rendering with a frame latency of two
The macOS surface workaround ran before Bevy 0.20 applied the window
extraction commands, so the first pipelined frame still created the Metal
surface on the render thread and panicked. Applying them first lets
pipelining run, and a frame latency of two stops the render thread waiting
on the display before every frame; with a latency of one pipelining gains
nothing.

Apple M4 Pro, mp_rust, 8 bots, bench recorder, 3456x2168 fullscreen:
uncapped 95 -> 238 fps (frame p95 12.9 -> 7.0 ms); vsync on 71 fps
alternating between 60 and 120 -> steady 120 (p95 20.5 -> 8.7 ms).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 23:21:36 +02:00

2.1 KiB

Build dependencies

Rust stable via rustup (rust-toolchain.toml pins it), plus a C toolchain and the Bevy system libs. IW4L enables both x11 and wayland (Cargo.toml), so the Wayland headers stay required. Gamepad input and rumble (bevy_gilrs) link libudev, so the udev headers (systemd-devel / libudev-dev) are required too.

# Fedora
sudo dnf install gcc-c++ pkgconf-pkg-config libX11-devel alsa-lib-devel systemd-devel wayland-devel libxkbcommon-devel

# Debian / Ubuntu
sudo apt install g++ pkg-config libx11-dev libasound2-dev libudev-dev libwayland-dev libxkbcommon-dev

# Arch / Manjaro
sudo pacman -S gcc pkgconf libx11 alsa-lib systemd wayland libxkbcommon libxcursor libxrandr libxi

Upstream list (other distros, GPU Vulkan drivers): Bevy linux_dependencies.md.

What is not needed for a native Linux build: clang / llvm / lld / glibc-static — plain gcc-c++ links it. llvm (the llvm-lib tool) is only required for the Windows cross build:

sudo dnf install llvm        # Fedora: provides llvm-lib
make setup-windows           # rustup target + cargo-xwin, once

macOS needs only the Xcode command line tools (xcode-select --install) and rustup: winit, wgpu (Metal), CoreAudio and gilrs link system frameworks, and the x11 / wayland features compile to nothing. Menu and make map mp_boneyard run on Apple silicon (M2 Max, M4 Pro, Metal). Rendering is pipelined with a frame latency of 2 there; IW4L_PIPELINED_RENDERING=0 and IW4L_FRAME_LATENCY=1 restore the serialised arm. Game data: the Windows depot of a Steam copy, steamcmd +@sSteamCmdForcePlatformType windows +force_install_dir ~/Games/MW2 +login <user> +app_update 10190 +quit, then IW4L_GAMES=~/Games.

Then follow README.md (Build and run): copy .env.example, set IW4L_GAMES, make map mp_boneyard. Portable Windows is WINDOWS.md.

Match metadata uses the Git commit count as its numeric build number. Release builders can set IW4L_BUILD_NUMBER; source archives need this variable. The package version remains the textual build version.