github santiquiroz/gears-of-war-2-pc-port v0.4.4

one hour ago

Less memory traffic on phone GPUs, less work per draw on the GPU command thread, and a new option for the CPU core the game spins while it waits for the GPU. Everything from 0.4.3 is included.

Vulkan (Android, Linux and SteamOS, Vulkan on Windows)

  • Each render pass now covers only what it draws. The renderer sizes its render targets for the console's whole EDRAM (1520x3456 on the phone) and every render pass loaded and stored all of it, even when its draws touched only the 1280x720 of a 720p frame. Phone GPUs render in tiles and pay for every byte a pass loads and stores, so they moved about 5.7 times the memory they needed. Now each pass begins with only the area its draws and clears can write (SDK patch 0089). It follows the Vulkan rules, so the picture should not change; it has not been measured on a phone yet. If part of the picture looks missing or stale, set vulkan_tight_render_area = false in gow2.toml (it takes effect at once) and open an issue with the scene. Direct3D 12, the Windows default, is not affected.

Every platform

  • Less work per draw on the GPU command thread (SDK patch 0087): a check that looked an option up by name on every draw (2.6 % of that thread on the phone) now runs only for the draws that need it, and the vertex and index buffer requests stop allocating memory on every draw.
  • New, off by default: gow2_gpu_wait_sleep_us. While it waits for room in the GPU's command buffer, the game's render thread spins a whole CPU core. gow2_gpu_wait_sleep_us = 200 in gow2.toml makes it sleep between checks. On a Galaxy S25 Ultra that freed about half a core (the render thread went from 99 % to 43 % of a core), but the phone also gave about 7 % fewer frames per GPU clock, so it stays off. It may suit a Steam Deck on battery; it is not measured there. gow2_gpu_wait_stats = true logs a GPUWAIT line every five seconds.
  • For testing, off by default: gpu_read_pointer_writeback_blocks (SDK patch 0088) reports the GPU's progress to the game block by block, as the Xbox 360 does, instead of once per batch. On its own it changed nothing; it is there to measure together with the sleep above.

Linux and Android

  • Writes to memory the GPU caches skip a slow check (SDK patch 0086). Before handing such a write to the code that tracks textures and buffers, the fault handler reread the process's memory map from /proc/self/maps: in 0.4.3 that took 15.6 % of the render thread's time on the phone. Now the tracker gets the write first.

The Linux build has still only been tested on a software Vulkan driver, not on a real Steam Deck or Legion Go; please open an issue with your logs/gow2_*.log if something goes wrong.

Install / update

Windows: download gow2-recomp-0.4.4-win64.zip and copy the contents of its gow2-recomp-0.4.4-win64 folder into your game folder. Your gow2.toml and saves are kept.

Linux and SteamOS: download gow2-recomp-0.4.4-linux-x86_64.tar.gz, extract it on the device itself and copy everything inside its folder into the game folder, next to default.xex. Steps for Steam Deck and Legion Go in the README and docs/LINUX.md.

Android: install gow2-recomp-0.4.4-android-arm64.apk over the old one; the game files and settings are kept. Do not uninstall the old app first: that deletes the game files copied into it.

Everyone in a co-op session should run the same release.

Tested

  • Windows: the host tests pass. With Vulkan on a Radeon RX 7800 XT (the packaged build, chapter 2), the new render area switched on and off live four times gave the same picture and the same frame rate (192.9, 193.3, 193.0 and 192.5 fps: a desktop GPU does not render in tiles, so the gain is for phones).
  • Linux (WSL2, software Vulkan): the packaged build starts and reaches chapter 2 with real draws; the picture is the same with the new render area and without it, switched live in one session, and the Khronos validation layer reports no error about render areas or clear rectangles (its only message, about blending on a format the software driver cannot blend, comes from pipeline creation at boot, not from render passes).
  • Android: the APK builds and its libraries pass the build's checks, but this release was not run on a phone. The phone sessions of this cycle ran builds with patches 0086-0088 (the sleep and the read pointer measurements above); the new render area (0089) has not run on a phone yet.

SHA-256 (zip): B484EFF2DCC1666C52F6417CA5AF6445658CEB28739EE9A7648DEBFA712B67E2

SHA-256 (Linux): 54dd67675de67ae3c716f7a3f9cbdde2f0d5e6075aca6ca81f9b02ef02cf5ac5

SHA-256 (APK): 67D7BDA1A4FD8B723D4D20B7C1E7B3B91045D1705255396E9A4519ADBF541061

All three files were scanned with Microsoft Defender before upload. Windows 11 "Bad Image ... 0xc0e90002" is Smart App Control blocking the unsigned DLLs (see the README).

Don't miss a new gears-of-war-2-pc-port release

NewReleases is sending notifications on new releases.