Skip to content

0.80-gamma

Choose a tag to compare

@elseform elseform released this 24 Sep 19:16
· 27 commits to release since this release

Fixes on top of upstream

  • Winemetal resource lifetime/argument-buffer hardening (059cd88). Takes each binding's GPU resource ID, exact native Metal resource and owning allocation from one snapshot, retains every native resource a command buffer uses until that command buffer completes, and moves the argument-buffer allocator from malloc'd memory to Metal-owned storage, closing a use-after-free/aliasing window implicated in a mid-gameplay GPU page fault. Hazard tracking stays untracked. One of several changes aimed at that fault; see "DynamicBuffer suballocation" and "PSO-failure skip-draw guard" below.
  • DynamicBuffer suballocation from one page regardless of Usage (3004e88). Map/Discard renames of a D3D11_USAGE_DYNAMIC buffer now suballocate from a single page unconditionally, instead of only for some usage patterns, removing another source of the same fault class.
  • PSO-failure skip-draw guard, with named shaders in the failure log (5d274b4, d13d7ed). A draw whose pipeline state object failed to compile is now skipped instead of proceeding with an invalid PSO, and the failure log names the shader (by digest) instead of only the Metal error — see gamma-project's PSO failure register for the digests this triage produced.
  • DLSS/NGX fixes (b4f5afc, 0861c6a, 7026b8e, 4f4c6a2). Fixes a DXMT-side NGX parameter-store type mismatch that made every NVSDK_NGX_D3D11_EvaluateFeature call fail silently, so DLSS upscaling never actually ran despite being reported available; bridges void* resource parameters through NGX to the right D3D11/D3D12 resource type; crops an oversized depth input and defaults a missing pre-exposure value; folds the DLSS depth-crop copy into the existing scaler blit encoder instead of an extra pass; and stops a GetParameters leak while logging EvaluateFeature only once instead of every frame. Confirmed working in-game.
  • d3d11.displaySync v-sync control (9f8b1aa, b7f6717). Makes CAMetalLayer.displaySyncEnabled follow the D3D11 Present sync interval (d3d11.displaySync config key: auto/true/false) instead of being hardcoded off, and stops changeDisplaySync() from pushing layer properties to the Metal layer while a pixel-format/size/sample-count/color-space change from changeLayerProperties() is still deferred. Runtime-verified: toggling v-sync in game and changing resolution both behave correctly.

Build

Branch: release (default). Built with Homebrew GCC 16.2.0, meson install --strip, MACOSX_DEPLOYMENT_TARGET=15.0.
SHA256: d383a2e04d9be6c56abf0538f98eb6e4bbab81444ea5ad889a0df3e789d49385

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