TMNT: Splintered Fate
Not about video: it guards one D3D12 call that ends the process instead of returning an error.
GPL-3.0-or-laterThis fix in MacGameFix
What you see
Opens a window, then closes about three seconds later. No dialog, no error, nothing in any log
Why it happens
D3D12CreateRootSignatureDeserializer ends the process instead of returning an error
What the fix changes
Look in the container first, and answer for it when there is nothing to find
The code
A shader container with no root signature is answered E_INVALIDARG, as Windows does, instead of letting D3DMetal read past the part it did not find.
fixes/d3d12-guards.c ยท my_deserialize, lines 207โ220c
static HRESULT WINAPI my_deserialize(const void *blob, SIZE_T len, REFIID iid, void **out)
{
if (!has_root_signature(blob, len))
{
if (InterlockedIncrement(&refused) <= 8)
logf_("no RTS0 in a %llu byte container -- answering E_INVALIDARG "
"instead of letting it be dereferenced",
(unsigned long long)len);
if (out) *out = NULL;
return E_INVALIDARG;
}
InterlockedIncrement(&passed);
return real_deserialize(blob, len, iid, out);
}Details
- Needs
- D3DMetal, D3D12
- Installer
- install-tmnt-fix.sh
- Executable
- TMNTSF.exe
- Built from
- d3d12-guards.c
- Verified on
- Stable 26.3, on a copy of it carrying this project's
winegstreamer(2026-08-31)