Skip to content

gamma-2026.09.27

Choose a tag to compare

@elseform elseform released this 26 Sep 23:30
· 13 commits to release since this release

Fixed

  • Startup crash. The game could crash during startup with unrecognized selector sent to instance 0xf in newComputePipelineStateWithDescriptor when it released its first Direct3D 11 device; clicking the splash screen repeatedly sometimes got past it. The shader compile worker threads were still running when the tasks they worked on were freed. They are now stopped first. (c3a5d2c)

  • In-game v-sync setting was ignored. Display sync was hardcoded off. It now follows the game's present sync interval (override: d3d11.displaySync), and no longer clashes with a pending resolution change. (9f8b1aa, b7f6717)

  • Rendering froze mid-game (GPU page fault) while audio continued. Draws whose pipeline failed to compile are now skipped instead of using the previous pipeline (5d274b4); renamed copies of frequently updated buffers come from one shared page instead of separate Metal buffers (3004e88); Metal resources stay alive until their command buffer completes (059cd88).

  • Pipeline failures were anonymous. The log now names the failing shaders by digest. (d13d7ed)

  • Memory growth and GPU timeout while loading textures created with their data. Textures created with initial data (in GAMMA, with r__no_ram_textures on) were staged for upload all at once: the staging area grew by the size of the whole level load, stayed allocated for the rest of the session, and the first in-game frame timed out on the GPU. Uploads now go out in batches of at most 64 MB. (c73e813)

  • DLSS showed garbage or a black image. Every DLSS evaluate call failed on a parameter type mismatch, so the upscale never ran. Parameters are now passed with the right type, oversized depth is cropped and a missing pre-exposure gets a default. (b4f5afc, 0861c6a)

  • DLSS overhead. The depth crop now runs inside the existing upscaler pass, the evaluate call is logged once instead of every frame, and a parameter leak is fixed. (7026b8e, 4f4c6a2)

  • Shader IR release (d3d11.releaseShaderIR, default on). After a shader's pipelines are built, its parsed intermediate representation is freed and rebuilt from the kept DXBC only if a new pipeline variant needs it, instead of staying in memory for the whole session. Also fixes a leak of each shader's argument-info buffer. Ported from NerRobDog/dxmt. (2d18458)

  • Blit encoder merging with DXMT_REORDER_BLITS=1. Moves independent copy and upload work together so fewer encoders and render passes are split per frame. Off by default. (05ba201)

Diagnostics

  • Memory accounting log at DXMT_LOG_LEVEL=debug: every 5 s, the Metal device's allocated size next to DXMT's buffer allocations, parked rename copies and staging blocks. (05cfcf7)

Build

Tag gamma-2026.09.27 on branch release. Built with Homebrew GCC 16.2.0 (mingw-w64), meson install --strip, MACOSX_DEPLOYMENT_TARGET=15.0 (Apple Silicon, macOS 15 or later).
SHA256 (tar.gz): 76cb36f1b6c9e9ba1ade596acd99ba19d3d808c276ad0011e9290dd516d20884

Contents: x86_64-unix/winemetal.so, x86_64-windows/{d3d10core,d3d11,d3d12,dxgi,nvapi64,nvngx,winemetal}.dll