# Horizon v0.2.97 vs vanilla 26.3 on Windows 11: Ryzen 7 9800X3D + RTX 5080 (2026-10-29, RD 8 and 32 rerun 2026-10-30) The first `tools/perf_bench.py` run on Windows ([docs/benchmark.md](../../docs/benchmark.md)): Horizon, vanilla 26.3 and vanilla with performance mods, render distances 8, 16 and 32, 1280x720, three games each, every game from a fresh world. The reports are the `*-win-9800x3d-5080-rd*.json` files next to this page. ```sh python tools/perf_bench.py --table horizon-win-9800x3d-5080 vanilla-win-9800x3d-5080 vanilla-mods-win-9800x3d-5080 ``` ## Setup - **Machine:** AMD Ryzen 7 9800X3D (8 cores, 16 threads), 94 GB RAM (DDR5, EXPO off), NVIDIA GeForce RTX 5080 (driver 617.42), Windows 11 Pro 26200, Balanced power plan, desktop. One 1920x1080 120 Hz display. The game windows were on the desktop of an unlocked session. - **Horizon:** release v0.2.97 as the launcher installs it (`--build %APPDATA%\horizon-launcher\versions\v0.2.97`, `--resources` its `.local\horizon-client\26.3`), Vulkan. - **Vanilla:** the 26.3 client jar with Fabric Loader 0.19.5 and the driver mod, Java 25.0.5 (Temurin), `-Xmx2G` with the launcher's G1 flags and the manifest's `-XX:StackShadowPages=32`, OpenGL 3.3. - **Vanilla + mods:** the same with Sodium mc26.3-0.9.2, Lithium mc26.3-0.26.2, FerriteCore 9.0.0 and ImmediatelyFast 1.17.1 (`tools/benchmark-deps/mods.lock.json`). - **Commands:** `python tools/perf_bench.py --game --label -win-9800x3d-5080 --distances --sizes 1280x720 --repeats 3` (plus `--build` and `--resources` for Horizon), with the games taking turns at each distance. - **Memory** is the working set on Windows (what Task Manager shows), sampled from outside the process. Horizon's GPU figure is its own Vulkan allocator total. `nvidia-smi` gives no per-process figure under WDDM, so vanilla has none. ## Load Windows has no load average, so the reports have no `load_avg_1m`. Every game ran on an otherwise idle machine: - **RD 8 and RD 32** (rerun on 2026-10-30, after the first pass had builds running alongside): a script started each game only once no `rustc`, `cargo`, `link` (or other compiler) process and no other game (`horizon-client`, `java`, `javaw`, Minecraft) was running, and the machine's CPU load had stayed under 15 % in every 5-second sample for 30 seconds. During each game it sampled every 2 seconds the machine's CPU load and the CPU of everything outside the benchmark's own processes. A game during which a compiler or another game ran, or other processes used over 15 % of the machine for 10 seconds, was discarded and run again: two of the 20 games were (vanilla + mods at RD 32, a build started during one, background processes during the other). - **RD 16** (2026-10-29): no `rustc`, `cargo` or `link` process at any point, the load logged every 5 seconds. | Game | RD | Mean / max CPU load (machine, the game included) | Other processes' CPU, mean / max | Compiler processes | |---|---|---|---|---| | Horizon | 8 | 18 % / 49 % | 6 % / 12 % | 0 | | Vanilla | 8 | 28 % / 75 % | 7 % / 20 % | 0 | | Vanilla + mods | 8 | 30 % / 81 % | 7 % / 20 % | 0 | | Horizon | 16 | 29 % / 80 % | – | 0 | | Vanilla | 16 | 41 % / 91 % | – | 0 | | Vanilla + mods | 16 | 51 % / 90 % | – | 0 | | Horizon | 32 | 36 % / 100 % | 5 % / 15 % | 0 | | Vanilla | 32 | 39 % / 73 % | 6 % / 18 % | 0 | | Vanilla + mods | 32 | 42 % / 88 % | 6 % / 21 % | 0 | "Other processes" is the machine's load minus the benchmark's own processes (the game and `perf_bench.py`), in 2-second samples. Most of it is the system's share of the game's own drawing (the graphics driver and the compositor), which no process of the benchmark is charged for; the desktop apps left open (a browser, chat apps) briefly reached 5 % at most. RD 16's load was logged from outside every 5 seconds, so it has no such split, and its mean includes the time between games. Compared with the first pass, the idle RD 8 runs give Horizon about 10 % higher averages and about 50 % higher 1% lows, and vanilla up to 10 % higher averages. ## Results Mean of 3 games ± 95% confidence interval. FPS over the 12-second flight at 16 blocks/s (average / 1% low / 0.1% low): | RD | scene | Horizon v0.2.97 | Vanilla 26.3 | Vanilla + mods | | --- | --- | --- | --- | --- | | 8 | forest | 3495 ±276 / 1295 ±397 / 859 ±298 | 2457 ±836 / 625 ±224 / 252 ±52 | 2425 ±65 / 733 ±30 / 250 ±22 | | 8 | mountain | 3376 ±67 / 1384 ±168 / 850 ±256 | 2605 ±811 / 700 ±218 / 264 ±71 | 2538 ±167 / 760 ±34 / 241 ±44 | | 8 | ocean | 3346 ±147 / 1358 ±237 / 912 ±235 | 2470 ±828 / 689 ±241 / 286 ±53 | 2432 ±82 / 764 ±37 / 262 ±37 | | 8 | village | 2942 ±197 / 1271 ±146 / 839 ±94 | 2217 ±112 / 545 ±37 / 215 ±14 | 2104 ±101 / 577 ±84 / 196 ±47 | | 16 | forest | 2424 ±138 / 709 ±165 / 401 ±100 | 1912 ±324 / 402 ±89 / 149 ±25 | 1746 ±32 / 461 ±27 / 179 ±9 | | 16 | mountain | 1961 ±99 / 537 ±96 / 297 ±75 | 1653 ±153 / 332 ±27 / 113 ±8 | 1500 ±55 / 408 ±40 / 140 ±10 | | 16 | ocean | 2201 ±183 / 554 ±251 / 325 ±326 | 1861 ±289 / 446 ±142 / 165 ±29 | 1815 ±119 / 514 ±142 / 192 ±58 | | 16 | village | 1712 ±192 / 593 ±80 / 358 ±69 | 1218 ±65 / 318 ±16 / 127 ±5 | 1282 ±162 / 343 ±25 / 132 ±12 | | 32 | forest | 1389 ±70 / 504 ±33 / 330 ±118 | 1203 ±51 / 228 ±13 / 108 ±12 | 929 ±8 / 313 ±41 / 129 ±32 | | 32 | mountain | 1086 ±34 / 258 ±78 / 108 ±37 | 815 ±61 / 55 ±13 / 8 ±3 | 645 ±10 / 166 ±12 / 86 ±21 | | 32 | ocean | 1189 ±27 / 155 ±9 / 68 ±8 | 1223 ±33 / 236 ±17 / 99 ±21 | 1017 ±14 / 325 ±38 / 117 ±28 | | 32 | village | 1164 ±9 / 416 ±39 / 216 ±86 | 882 ±48 / 184 ±12 / 83 ±17 | 926 ±17 / 250 ±5 / 93 ±11 | Startup, loading and memory (means of 3 games): | RD | | Horizon v0.2.97 | Vanilla 26.3 | Vanilla + mods | | --- | --- | --- | --- | --- | | 8 | start to title / in-world | 3.0 s / 6.1 s | 7.7 s / 13.9 s | 11.1 s / 17.6 s | | 8 | mean scene load | 1.3 s | 4.0 s | 3.6 s | | 8 | working set, steady / peak | 1082 / 1172 MB | 1913 / 2120 MB | 1904 / 2053 MB | | 16 | start to title / in-world | 3.2 s / 7.2 s | 7.7 s / 19.9 s | 10.8 s / 23.5 s | | 16 | mean scene load | 2.4 s | 9.2 s | 9.0 s | | 16 | working set, steady / peak | 1236 / 1459 MB | 2300 / 2540 MB | 2327 / 2496 MB | | 32 | start to title / in-world | 2.9 s / 10.5 s | 7.5 s / 35.4 s | 11.0 s / 39.2 s | | 32 | mean scene load | 5.7 s | 21.1 s | 19.9 s | | 32 | working set, steady / peak | 1730 / 2045 MB | 2799 / 2892 MB | 2895 / 2965 MB | ## What it shows - At RD 8 and 16, Horizon's average FPS is 18–42 % above vanilla's in every scene. Its 1% lows are 1.2–2.3 times vanilla's and its 0.1% lows 2.0–3.9 times. On this CPU and GPU the performance mods leave vanilla's averages level or slightly lower, and raise its 1% lows by 6–23 %. - At RD 32, Horizon's average is 15–33 % above vanilla's over the forest, the mountain and the village, with 1% lows 2.2–4.7 times vanilla's. Over the ocean its average is level with vanilla's, but its lows are lower than vanilla's and the modded client's (155 vs 236 and 325 FPS 1% low, 68 vs 99 and 117 FPS 0.1% low), on an idle machine too. That scene is worth a closer look. - Horizon reaches the title screen 2.4–2.6 times faster than vanilla (3.4–3.8 times faster than the modded client) and loads a scene's chunks 3–4 times faster. Its steady working set is 38–46 % smaller. - Each game uses its own graphics API: Horizon Vulkan, vanilla OpenGL. That difference is part of what's compared.