Skip to content

Mullion v0.3

Pre-release
Pre-release

Choose a tag to compare

@dttdrv dttdrv released this 20 Oct 01:15

Mullion v0.3, built from main at 5dda0b9a. It is still a pre-release. 40 commits went in since v0.2.

God of War Ragnarök now plays on Direct3D 12. d3d12.dll exports functions of its own that call the core, as Windows' does, instead of forwarding them to D3D12Core.dll: an application that reads a function's address from the export table gets code, not a forwarder's name.

Pipeline statistics work on both APIs. Direct3D 12 query heaps count draws, dispatches, primitives and pixel shader runs, keep their results across lists and resolves, and start over each time a command list runs again. Direct3D 11 statistics queries count on deferred contexts too, a skipped predicated region counts nothing, and a deferred list ends the queries its context began when the immediate context executes it. Pixel shader runs are counted on the GPU, once per pixel under MSAA and also when the depth test fails.

Much of this release is work toward M1 and M2 (Apple7 and Apple8 GPUs). Geometry shader draws larger than a mesh draw's memory run in parts, indirect ones and DrawAuto included, compute shaders with emulated 64-bit atomics are dispatched in parts, a culled line of a strip collapses instead of being marked culled, a group sync on globallycoherent memory fences the device, and sine and cosine of a half are computed as floats. None of this has run on an M1 or M2 yet, so this preview still needs an M3 or later.

Direct3D 12 command lists answer ID3D12GraphicsCommandList8, ExecuteIndirect runs only the commands its count leaves, timestamps resolved into a custom write-back heap are readable by later GPU work, a held Present keeps the settings it was called with, and every 1D and 2D texture view is a one-layer array. frac of an infinity or a NaN is correct under fast math, and samplers that sample alike share one Metal sampler.

The source uses Mullion's name throughout, and the Metal HUD line reads Mullion. The DXMT_ variables and dxmt.conf of earlier builds still work. MULLION_TRACE_ENCODERS logs each Metal encoder with its passes and draws.

The Direct3D 11 video API (ID3D11VideoDevice and ID3D11VideoContext) is still missing.

Thanks to @partprogramming09 for the M1 and M2 work, the pipeline statistics on both APIs, the ExecuteIndirect resolver, command list 8, the custom write-back timestamps, the encoder trace, frac, and the tests for texture arrays and rare atomics.

To use it in CrossOver, rename CrossOver.app/Contents/SharedSupport/CrossOver/lib/dxmt to dxmt-original, put the unpacked mullion-v0.3 folder in its place, rename it to dxmt, and set the bottle to DXMT. Replace the whole folder: CrossOver's 32-bit DXMT cannot drive Mullion's unix library, and the empty i386-windows folder leaves 32-bit games on Wine's own Direct3D. On the first game launch macOS asks about winemetal.so; allow it in System Settings, Privacy & Security, and start the game again. A CrossOver update restores its own DXMT.

For any other Wine, run ./install.sh <wine> [prefix ...] as before. Mullion needs a Mac with an M3 or later, macOS 15 or later, and an x86_64 Wine. It runs 64-bit games.

Expect problems, and please report them.