Repository navigation
Games
Titles we have deliberately taken on, and what was measured on each. This is not an inventory of anyone's library — a game gets a row when there was a reason to work on it.
Tested on an M4 Max, macOS 27, against stable CrossOver 26.3 — copies of it patched by this project. The CrossOver column has one answer on every row, the GPTK column which toolkit, and the Motor column what the engine itself had to carry — a cell reading Stock means a CrossOver as CodeWeavers shipped it, and the rows that name winevideo or an engine of ours are the ones where that was not enough.
| Game | Engine | Symptom | Fix | Backend | DX | GPTK | Motor | CrossOver | Status |
|---|---|---|---|---|---|---|---|---|---|
| METAL GEAR SOLID: Peace Walker | Konami, Master Collection | Dies the moment a pre-rendered cutscene starts | Engine patch mgvf-0001: 2D-capable buffers from the media source | D3DMetal | 11 | not measured -- the engine was the variable | Ours | 26.3, our winegstreamer | Fixed -- crash cured; a green band in some cutscenes is unexplained |
| Mortal Shell 2 | Unreal Engine 5.6.1 | Crash on the first cutscene | Runtime patch, 4 sites | D3DMetal | 12 | not measured | Stock | 26.3, our winegstreamer | Fixed |
| Life is Strange: Reunion | Unreal Engine 5 | Freezes after a while, anywhere | DXGI node guard | D3DMetal | 12 | 4.0b2 only -- 3.0 crashes it | Stock | 26.3, our winegstreamer | Runaway node walk stopped; no freeze-free session recorded |
| Life is Strange: Double Exposure | Unreal Engine 5 | Freezes after a while, anywhere | DXGI node guard, same DLL | D3DMetal | 12 | 4.0b2 only -- 3.0 crashes it | Stock | 26.3, our winegstreamer | Guard installs; the freeze was never reproduced or cured |
| DYNASTY WARRIORS: ORIGINS | Koei Tecmo, in-house | Cutscene runs with sound, picture black | Video bridge, D3D11 to D3D12 | D3DMetal | 12 | 4.0b2 | Stock† | 26.3, our winegstreamer | Fixed |
| Beast of Reincarnation | Unreal Engine 5 | Startup video plays with sound, no picture | Console variable found by name; software path from engine patch 0006; needs winevideo | D3DMetal | 12 | not measured | winevideo | 26.3, our winegstreamer | Fixed |
| Persona 5 Strikers | Koei Tecmo, in-house | Video never starts; sound only | Its own VC-1 and WMA Pro reader, and a D3D9 to D3D11 bridge | DXMT | 11 | not measured | Stock | 26.3, our winegstreamer | Fixed |
| NINJA GAIDEN 3: Razor's Edge | Koei Tecmo, in-house | Will not start: "Insufficient VRAM" | d9vk, and winevideo's DirectShow filters | DXVK | 9 | not measured | Stock | 26.3, our winegstreamer | Starts, 60 fps, in-game cutscenes; the boot movie freezes, one click skips it |
| Nioh | Koei Tecmo, in-house | Cutscene refuses to play, then crashes | Its own WMV3 reader for DirectShow, and the same D3D9 to D3D11 bridge | DXMT | 11 | 4.0b2 | Stock† | 26.3, our winegstreamer | Fixed |
| Nioh 2 | Koei Tecmo, in-house | Cutscene refuses to play, then crashes | The same bridge as Nioh; its own WMV3 reader on Media Foundation | DXMT | 11 | 4.0b2 | Stock† | 26.3, our winegstreamer | Fixed |
| Nioh 3 | Koei Tecmo, in-house | Failed to play movie | The DYNASTY WARRIORS bridge, with ordinal hooking added for this title | D3DMetal | 12 | 4.0b2 | Stock† | 26.3, our winegstreamer | Fixed |
| Wo Long: Fallen Dynasty | Koei Tecmo, in-house | Cutscene runs with sound, picture black | The DYNASTY WARRIORS bridge, with ordinal hooking | D3DMetal | 12 | 4.0b2 | Stock† | 26.3, our winegstreamer | Bridge installs; picture measured only on a patched engine |
| NieR Replicant ver.1.22474487139 | Toylogic, in-house | Crashes when the first video starts | Software decode, and the frame written into the game's target | D3DMetal | 11 | 4.0b2 | Stock | 26.3, our winegstreamer | Fixed |
| KINGDOM HEARTS Dream Drop Distance | Square Enix, in-house | Cutscene runs with sound, picture solid green; a crash dialog on leaving | Software decode with the planes written into the game's own textures, and the shutdown fault swallowed | D3DMetal | 11 + 12 | not measured | Stock† | 26.3, our winegstreamer | Picture restored; the exit dialog was measured on 1.5+2.5 |
| KINGDOM HEARTS 0.2 Birth by Sleep | Unreal Engine 4 | Would not start from a launcher; ran fine launched by hand | None from us. The launcher had to declare microphone use -- see the page | D3DMetal | 11 | not measured | None | 26.3, our winegstreamer | Works with nothing of ours -- fixed in the launcher |
| KINGDOM HEARTS HD 1.5+2.5 ReMIX | Square Enix, in-house | Cutscene runs with sound, picture solid green; a crash dialog on leaving | The Dream Drop Distance fix, unchanged -- six executables, same route | D3DMetal | 11 + 12 | not measured | Stock | 26.3, our winegstreamer | Fixed |
| TMNT: Splintered Fate | Rebirth, in-house | Opens a window, then closes silently | A guard on the D3D12 call that ends the process instead of failing | D3DMetal | 12 | 4.0b2 | Stock | 26.3, our winegstreamer | Fixed |
| Tormented Souls 2 | Unreal Engine 5 | Fatal error before the first frame | 16:9 modes added to a list that offered none | D3DMetal | 12 | 4.0b2 | Stock | 26.3, our winegstreamer | Fixed |
| Devil May Cry 5 | RE Engine | Crashes when a skill preview video plays | Its own VC-1 reader, handed what Media Foundation refuses | D3DMetal | 12 | not measured | Stock | 26.3, our winegstreamer | Fixed |
| RESIDENT EVIL 2 | RE Engine | Crashes when a video plays | The same reader as Devil May Cry 5, on its own build of the proxy | D3DMetal | 12 | not measured | Stock | 26.3, our winegstreamer | Fixed |
| RESIDENT EVIL 3 | RE Engine | Crashes when a video plays | The same reader and proxy as RESIDENT EVIL 2 | D3DMetal | 12 | not measured | Stock | 26.3, our winegstreamer | Fixed |
| NINJA GAIDEN 4 | Koei Tecmo, in-house | Says the VP9 codec is missing, then exits | Staged Matroska demuxer, and the MFT gate answered | D3DMetal | 12 | 3.0, or 4.0b3 with the fence repair this fix carries -- on 4.0b2 without it nothing is ever presented; 4.0b2 with it was not run | Stock | 26.3, our winegstreamer | Fixed |
| RESONANCE: A PLAGUE TALE LEGACY | Asobo, in-house | Fatal error: Shader Model 6.7 is not supported | Shader model floor lowered in memory; HDR10 off in ENGINESETTINGS | D3DMetal | 12 | not measured | Stock | 26.3, our winegstreamer | Plays at the desktop resolution with HDR10 off -- its cutscenes have never been visible |
| CONTROL Resonant | Northlight, Remedy in-house | Windows light up in flat violet, cyan and yellow | The window-interior shader kept from drawing; Metal 4 off | D3DMetal | 12 | 4.0b2 | Stock | 26.3, our winegstreamer | Plays with Metal 4 off; lit rooms behind windows show as dark glass |
| The Witcher 3: Wild Hunt | REDengine 3 | Black screen at start; DLSS said to be unsupported | The stream-output pipeline refused; Streamline's Wine check answered | D3DMetal | 12 | 4.0b2 | Stock | 26.3, our winegstreamer | Reaches the menu and plays; DLSS works, frame generation does not. Ray tracing stays off since the game's 2026-10-08 update: one of its ray-tracing shaders uses a 64-bit atomic compare-exchange that Metal refuses to compile (measured on an M4 Max) |
| Marvel's Spider-Man 2 | Insomniac, in-house | Characters stay in a T-pose; the symbiote breaks; brief black blocks in the sandstorm | macprotips' raw views for the 2 GB mesh pool, and a barrier after the fog copy | D3DMetal | 12 | 4.0b2 | Stock | Preview 27, through NotProton | Fixed -- T-pose and symbiote; the black blocks were not seen again in a session with the barrier |
| God of War | Santa Monica, in-house | White specks on characters in dim light | The EQUAL depth test after the prepass created as GREATER_EQUAL | DXMT | 11 | not measured | Stock | Preview 27, through NotProton | Fixed under Rosetta and under FEX; D3DMetal not measured |
One engine, and update its toolkit. The supported engine is stable
CrossOver 26.3.0.39832 and nothing else: the winegstreamer pair this project
ships was built against that engine, and install-engine-media.sh refuses any
other version rather than installing onto a wine it was not compiled for. Every
fix here was written against Apple's Game Porting Toolkit 4.0b2, which 26.3 does
not ship -- it carries D3DMetal 3.0, and on 3.0 these patches do not find
what they were written to find. So 26.3 is a perfectly good engine for all of
this once its toolkit is replaced, and a poor one until then. The app does the
replacing in a copy of the CrossOver you point it at, and keeps both halves of
the original inside that copy, so on that route the CrossOver you installed is
not touched. With the copy turned off in Set up, a toolkit you ask for goes into
the CrossOver you installed instead, and the app says so where that choice is
made.
The exception is NINJA GAIDEN 4, which was the other way round: measured working on 3.0, and on 4.0b2 its cutscene played its audio and no picture appeared. Where the frames stopped is now established -- two D3DMetal 4 fence faults, which the title's fix repairs since 2026-10-14 -- and with that repair it renders on 4.0b3, Metal 4 on and off.
The GPTK column is the one that decides. Apple's Game Porting Toolkit is what actually draws these games, and CrossOver ships it inside the bundle rather than as something you pick: 26.3 carries D3DMetal 3.0. A launcher can put another generation in front of it -- RaccoonBot carries d3dMetal3 and d3dMetal4 side by side and injects one at launch -- and that is how the rows needing 4.0b2 run on this engine. So "this only works on the Preview build" meant, for three of the rows here, "this needs the newer toolkit" and nothing about Wine at all -- which is why dropping Preview costs the table nothing.
Those three rows in bold are where that stops being a footnote, and they fall
into two camps pointing opposite ways. NINJA GAIDEN 4 is measured working on
3.0, and on 4.0b2 without its fence repair nothing is ever presented -- the
game runs blind while every Present succeeds; with the repair it renders on
4.0b3. Life is Strange -- both packages -- runs on 4.0b2 and crashes on 3.0.
Opposite requirements, same machine, so there is no single toolkit that serves
the whole table. Both were measured by moving the toolkit under a fixed
CrossOver, which is the only way to separate the two.
Everywhere else the column says "not measured", and that is deliberate. 4.0b2 is what these titles need as a general rule, with NINJA GAIDEN 4 the exception at 3.0 unless its fence repair is in place -- but a rule is not a run, and a row whose toolkit nobody varied has no measurement of its own to report. The cells that used to hold one were derived from the CrossOver build rather than run, and that derivation is gone: a launcher chooses the generation, so the build implies nothing about it.
Backend and DX are not preferences, they are requirements. Persona 5
Strikers, Nioh and Nioh 2 only work on DXMT: all three need a shared D3D9
surface handle, and DXMT implements sharing where D3DMetal has none to build on.
Nioh 3, despite the name, belongs with the other group -- it is D3D12 on
D3DMetal and never touches D3D9, and NieR Replicant is D3D11 on D3DMetal. The
rest run on
D3DMetal with the D3D12 renderer, which is also what keeps PSO precompilation
-- -dx11 dodges some of these faults and costs permanent shader-compilation
stutter.
Which CrossOver. Every measurement here was taken on stable CrossOver 26.3, on an engine carrying this project's winegstreamer, except the two rows the next paragraph but one names, and the column says so row by row. Both halves of it are load-bearing: the version is stable 26.3, and the engine carries this project's winegstreamer rather than the one CodeWeavers ships. What a fix needs an engine to carry is a different question, and the Motor column answers it per row.
CrossOver Preview is no longer a supported engine. It was measured against here, and on 2026-08-31 it was dropped rather than half-supported: only titles patched without winegstreamer could have worked on it, and the rest were out of the equation. The findings below that mention it are kept, because they record what was measured and a deleted measurement is not a correction. They are history. None of them is guidance about where to run a game.
Two rows were measured on Preview 27, through NotProton: Marvel's Spider-Man 2 and God of War. Their fixes sit in the game folder and need nothing from the engine, which is exactly the kind of title Preview could always run, so their CrossOver cell names where the runs were made.
The KINGDOM HEARTS 2.8 package holds three entries, not two -- Dream Drop Distance, 0.2 Birth by Sleep and the Back Cover film -- and they do not share a fault. Dream Drop Distance needs the bridge and has it. 0.2 needs nothing at all: no installer here has ever covered it, its executable lives in a subfolder this project does not reach, and launched directly it runs and plays its video, four times out of four.
0.2 would not start from a launcher because the launcher declared no
microphone use. Steam initialises voice detection at startup; without
NSMicrophoneUsageDescription macOS can neither prompt nor grant, the request
never resolves, and Steam's own main loop wedges -- its assertion says so. A
stalled Steam never answers the second request this package makes of it, which
is why no ordinary title showed the same fault. Declaring the permission fixed
it, and fixes any title that touches the microphone.
Its status says Fixed because this column answers "does the title work", and it does. Its Fix column says "none needed", and that is the half to read before concluding anything was shipped for it: nothing was. Every other Fixed row in this table names something this project installs; this one names nothing.
History: NINJA GAIDEN 4 and Beast of Reincarnation were both measured stalling on Preview, and both were recorded working on 26.3, which is the opposite direction to the one this project expected. NINJA GAIDEN 4 stalled there before any video call, with no thread in it touching D3D12, DXGI, Media Foundation or winegstreamer, and what held it was never established. Beast of Reincarnation stalled there as well, and carries a separate requirement of its own: it needs winevideo since the game update of 2026-08-24. The shared lesson is that "runs on Preview" was never the safe assumption this project began with.
Two lessons paid for by rows that were wrong for a while, and are worth more than the statuses they corrected:
- A staged codec is built against one CrossOver and is not usable under another. Persona 5 Strikers was recorded as not working on 26.3 after a first attempt failed there; the codec simply had not been built for 26.3 yet.
-
A fix that reports itself installed is not necessarily loaded. NieR
Replicant was recorded as Preview-only because its 26.3 runs died at the first
video. The bridge was never executing in those runs: the registry override it
depends on had gone missing, and the installer answered
installedfrom the files alone.
The Motor column says what the engine itself has to carry, and for most rows it is nothing. Those ask nothing of ours from the engine: the fix sits beside the game and, where the video needs one, a plugin goes in front of it. That was not true when this project started, and it is the single biggest thing that changed. The exceptions are the rows that name something instead: Beast of Reincarnation needs a winegstreamer carrying winevideo's patches, and METAL GEAR SOLID: Peace Walker is the first title here whose whole fix is an engine patch of ours, with nothing installed beside the game at all -- it was tried on a stable 26.3 as CodeWeavers ships it and could not play its cutscenes there, which is the measurement that puts Ours in its cell.
A dagger on "Stock" means inferred rather than run. No run on those rows
isolated the engine's own winegstreamer as the thing that carried the video,
so Stock there is read off the mechanism rather than established. That is not a
smaller claim than Stock; it is an untested one, and the column says which rows
it applies to. It is not a statement about the CrossOver cell beside it. That
cell records what the runs were made on -- stable 26.3 with this project's
winegstreamer in the engine, on all but two rows -- and Motor records what a fix needs
an engine to carry. A row reading Stock in one and our winegstreamer in the
other is not two claims in contradiction: the runs were made on the engine this
project supports, and Stock says the fix does not depend on it.
History, and the finding that closed a gap. Both builds decoded VP9 the
same way, and for a long time what only Preview could do was open a WebM --
which was the whole of the difference. DYNASTY WARRIORS ships 355 .webm
cutscenes and could not get as far as decoding on stable, while Mortal Shell 2
ships the same codec in .mp4, which both builds handled. The plugin-by-plugin
comparison that conclusion rested on is in Findings, under The
container, not the codec.
That gap is closed, and it was a missing plugin rather than a missing
engine. Stable 26.3 ships libgstmatroska for neither architecture and the
Preview build shipped it for both -- so the difference between them on a WebM
was one plugin the whole time. Staging it beside the decoder gives 26.3 one
too, and NINJA GAIDEN 4 is where that was measured: it plays on stock 26.3,
video and all, with nothing patched into CrossOver.
Several titles need a codec no CrossOver ships -- VC-1, WMV3, WMV2 or WMA --
and where it comes from depends on the engine. On a stock CrossOver the plugin
is staged from a GStreamer runtime you installed, one staging per engine, with
the bottle pointed at it; on an engine copy this project makes, the same plugins
are already inside the engine's own lib64/gstreamer-1.0 and nothing is staged
at all. Neither route patches a decoder into a CrossOver you installed. Which
titles, and which plugin each one needs, is the Codec column of
what each title actually loads; the
count is derived there rather than repeated here, because the number written
here was three for as long as it took two more titles to join the list. Nioh 3
needs none: its video is already NV12 by the time Media Foundation is asked for
it.
None of these fixes decodes anything. The frames existed all along; they were being crashed on, mislabelled, or thrown away.
Every row is a title we deliberately took on, and every claim on the linked page comes from a measurement on an installed copy.
Apple released 4.0b3 on 2026-10-13. Every fix in the table was written against 4.0b2, so the question was which of them 4.0b3 makes unnecessary. It was answered the plain way: every game-folder fix removed, each title played on D3DMetal 4.0b3, on CrossOver Preview 27 through NotProton. The titles were played by the user on 2026-10-13 and 14.
| Game | Without its fix on 4.0b3 | Fix needed on 4.0b3 |
|---|---|---|
| CONTROL Resonant | Windows drawn correctly | No |
| RESONANCE: A Plague Tale Legacy | Starts and plays | No |
| Life is Strange: Double Exposure | Played without problems, over five minutes | No |
| Life is Strange: Reunion | Played without problems | No |
| Mortal Shell 2 | Played without its fix, cutscenes included (2026-10-14) | No |
| Marvel's Spider-Man 2 | Its faults return | Yes |
| The Witcher 3: Wild Hunt | Its faults return | Yes |
| Tormented Souls 2 | Its fault returns | Yes |
| TMNT: Splintered Fate | Its fault returns | Yes |
| Wo Long: Fallen Dynasty | Its fault returns | Yes |
| God of War | Runs on DXMT, which the toolkit does not change | Yes |
For the first four that played, the fix was checked to be absent rather than assumed:
the installer's --status said absent, the game's own DLL was in place, and
the fix's log in the prefix had not been written since before the toolkit
changed. Both Life is Strange titles played without problems and the user
judged their fixes unnecessary on 4.0b3. Their freeze was never reproduced on
demand on 4.0b2 either, so what these sessions show is that nothing went wrong,
not that a fault was seen and then cured.
Every fix stays. They are for whoever runs 4.0b2 or earlier, and on 4.0b3 the ones no longer needed do nothing worse than hide a fault that is no longer there. Which change in 4.0b3 cured CONTROL Resonant's windows or RESONANCE's start has not been measured. The GPTK column of the table above still records what each fix was measured against, and for these titles that is 4.0b2.
4.0b3 adds a file the toolkit directory must carry: its d3d12.dll imports
d3d12core.dll, so a toolkit installed without it runs Apple's d3d12 over
Wine's own d3d12core.
The table above says whether a title works. This one says what it is made of: which DLL the fix rides on, which bridge it was built from, which plugin has to be in front of CrossOver before the video plays, and whether Wine has to be told to prefer our file at all.
| Game | Backend | DX | GPTK | Carrier | Kept as | Bridge | Codec | Env levers | Registry |
|---|---|---|---|---|---|---|---|---|---|
| METAL GEAR SOLID: Peace Walker | D3DMetal | 11 | not measured -- the engine was the variable | — | — | — | in the engine | — | — |
| Mortal Shell 2 | D3DMetal | 12 | not measured | libogg_64.dll |
libogg_64_real.dll |
ue5-media-fix.c |
— | — | — |
| Life is Strange: Reunion | D3DMetal | 12 | 4.0b2 only -- 3.0 crashes it | libogg_64.dll |
libogg_64_real.dll |
ue5-media-fix.c |
— | — | — |
| Life is Strange: Double Exposure | D3DMetal | 12 | 4.0b2 only -- 3.0 crashes it | libogg_64.dll |
libogg_64_real.dll |
ue5-media-fix.c |
— | — | — |
| DYNASTY WARRIORS: ORIGINS | D3DMetal | 12 | 4.0b2 | libxess.dll |
libxess_real.dll |
dwo-video-bridge.c |
libgstmatroska |
— | — |
| Beast of Reincarnation | D3DMetal | 12 | not measured | libogg_64.dll |
libogg_64_real.dll |
ue5-media-fix.c |
— | — | — |
| Persona 5 Strikers | DXMT | 11 | not measured | amd_ags_x64.dll |
amd_ags_x64_real.dll |
p5s-video-bridge.c |
— |
BEAST_FORCE_NV12, BEAST_REFUSE_D3D_MANAGER
|
— |
| NINJA GAIDEN 3: Razor's Edge | DXVK | 9 | not measured | — | — | — | not measured | — | yes |
| Nioh | DXMT | 11 | 4.0b2 | GfeSDK.dll |
GfeSDK_real.dll |
p5s-video-bridge.c |
— |
BEAST_FORCE_NV12, BEAST_REFUSE_D3D_MANAGER
|
— |
| Nioh 2 | DXMT | 11 | 4.0b2 | GfeSDK.dll |
GfeSDK_real.dll |
p5s-video-bridge.c |
— |
BEAST_FORCE_NV12, BEAST_REFUSE_D3D_MANAGER
|
— |
| Nioh 3 | D3DMetal | 12 | 4.0b2 | amd_ags_x64.dll |
amd_ags_x64_real.dll |
dwo-video-bridge.c |
— | — | — |
| Wo Long: Fallen Dynasty | D3DMetal | 12 | 4.0b2 | libxess.dll |
libxess_real.dll |
dwo-video-bridge.c |
— | — | — |
| NieR Replicant ver.1.22474487139 | D3DMetal | 11 | 4.0b2 | dinput8.dll |
dinput8_real.dll |
dwo-video-bridge.c |
— | — | yes |
| KINGDOM HEARTS Dream Drop Distance | D3DMetal | 11 + 12 | not measured | dinput8.dll |
dinput8_real.dll |
dwo-video-bridge.c |
— | — | yes |
| KINGDOM HEARTS 0.2 Birth by Sleep | D3DMetal | 11 | not measured | — | — | — | not measured | — | — |
| KINGDOM HEARTS HD 1.5+2.5 ReMIX | D3DMetal | 11 + 12 | not measured | dinput8.dll |
dinput8_real.dll |
dwo-video-bridge.c |
— | — | yes |
| TMNT: Splintered Fate | D3DMetal | 12 | 4.0b2 | fmod.dll |
fmod_real.dll |
d3d12-guards.c |
— | — | — |
| Tormented Souls 2 | D3DMetal | 12 | 4.0b2 | OpenColorIO_2_3.dll |
OpenColorIO_2_3_real.dll |
d3d12-guards.c |
— | — | — |
| Devil May Cry 5 | D3DMetal | 12 | not measured | amd_ags_x64.dll |
amd_ags_x64_real.dll |
— | — | — | — |
| RESIDENT EVIL 2 | D3DMetal | 12 | not measured | amd_ags_x64.dll |
amd_ags_x64_real.dll |
— | — | — | — |
| RESIDENT EVIL 3 | D3DMetal | 12 | not measured | amd_ags_x64.dll |
amd_ags_x64_real.dll |
— | — | — | — |
| NINJA GAIDEN 4 | D3DMetal | 12 | 3.0, or 4.0b3 with the fence repair this fix carries -- on 4.0b2 without it nothing is ever presented; 4.0b2 with it was not run | dstorage.dll |
dstorage_real.dll |
ng4-observe.c |
libgstmatroska |
BEAST_FORCE_NV12, BEAST_REFUSE_D3D_MANAGER, NG4_ANSWER_MFT, NG4_CAPS_LIKE_3, NG4_CPU_DECOMP, NG4_FAKE_OPTIONS17, NG4_FLIP_MODEL, NG4_FORCE_PATCH, NG4_FORCE_WINDOWED, NG4_NO_D3D11_PATCH, NG4_NO_TEARING, NG4_NO_WAITABLE, NG4_PAINT_TEST, NG4_PATCH_D3D12, NG4_REFUSE_DSTORAGE, NG4_SELECT_STREAM, NG4_SMALL_STAGING, NG4_WATCH_CAPS, NG4_WATCH_D3D12_RESOURCES, NG4_WATCH_FENCES, NG4_WATCH_MOVIE_COPY, NG4_WATCH_PRESENT, NG4_WITHHOLD_D3D_FROM_MFT
|
— |
| RESONANCE: A PLAGUE TALE LEGACY | D3DMetal | 12 | not measured | NvCloth_x64.dll |
NvCloth_x64_real.dll |
shader-floor-fix.c |
— | — | — |
| CONTROL Resonant | D3DMetal | 12 | 4.0b2 | PxFoundation_x64.dll |
PxFoundation_x64_real.dll |
ctl-window-fix.c |
— | — | — |
| The Witcher 3: Wild Hunt | D3DMetal | 12 | 4.0b2 | amd_fidelityfx_loader_dx12.dll |
amd_fidelityfx_loader_dx12_real.dll |
w3-streamout-fix.c |
— | — | — |
| Marvel's Spider-Man 2 | D3DMetal | 12 | 4.0b2 | amd_ags_x64.dll |
amd_ags_x64_real.dll |
sm2-tpose-fix.c |
— | — | — |
| God of War | DXMT | 11 | not measured | libSceJobManager.dll |
libSceJobManager_real.dll |
gow-depth-fix.c |
— | — | — |
Carrier is the DLL the fix rides on -- one the game already loads, chosen because it has nothing to do with video. Kept as is what the original is renamed to; where the carrier is a DLL Wine implements itself, that original is a copy taken from your own CrossOver and nothing is redistributed. Bridge is the source the shipped proxy was built from: 10 sources serve every title here, so a fault found in one is often already fixed in the others.
Registry says whether Wine has to be told to prefer our DLL. 3 fixes
need it, and for the same reason: their carrier is dinput8, which Wine
implements, so without the override the file beside the game is never opened.
That key is the part that goes missing on its own -- a bottle reset, a bottle
made after a CrossOver upgrade -- and a fix whose files are present is not
therefore a fix that is running. Both installers check the registry now, and
answer broken rather than installed when it is gone.
Env levers are the environment variables the shipped DLL reads. They are levers, not requirements: each one defaults to the setting the fix was measured with, and they exist so a failing title can be bisected without a rebuild.
Codec is the plugin that has to be in front of CrossOver before the title
can play. 0 titles need a decoder no CrossOver ships, 2 need a
demuxer, and telling those two cases apart is most of the work -- see
How the codec staging works. Stable 26.3
ships no matroska plugin at all, so the demuxer rows say what has to be put
in front of it.
Where it comes from depends on the engine. On a stock CrossOver
stage-codecs.sh puts it there; on one of this project's engine copies the
plugins are already inside the engine, and that script finds them and stands
down, because a second copy on the search path means two GStreamer cores in one
process. The row marked in the engine is METAL GEAR SOLID: Peace Walker,
where that is the whole fix: nothing beside the game, and nothing staged.
CX_GRAPHICS_BACKEND divides them, and the Backend column above says which is
which. It now holds three values rather than two: the rows marked DXMT, the
rows marked DXVK, and the rest on d3dmetal. The DXMT group is there
because it needs a shared D3D9 surface handle, which DXMT implements and
D3DMetal has none to give. The DXVK row is Direct3D 9 only: CrossOver's own
DXVK cannot create a device for it, and the fix supplies a different D3D9
implementation for that one executable rather than changing what the rest of the
bottle uses — see its own page.
Steam libraries are shared between bottles, so giving that one a bottle of its own costs no disk and no re-download. Switching the backend by hand also works and means remembering to switch it — and a forgotten backend looks exactly like a fix that stopped working.
The older form of this question was "does a fix need winevideo?", which framed it as a codec problem. It is not one, and asking it that way produced the wrong answer for the single title it existed to describe. What separates these titles is what each fix needs CrossOver to have already done before it can start: open a container, decode a codec, or neither. The Codec column above answers it per title. The distinction behind it is the part worth carrying:
-
A demuxer is a container problem. DYNASTY WARRIORS: ORIGINS and NINJA
GAIDEN 4 both play WebM, and Media Foundation cannot open one without a
Matroska demuxer --
MFCreateSourceReaderFromByteStreamfails at the open and nothing reaches a decoder at all. It reports that asMF_E_UNSUPPORTED_BYTESTREAM_TYPE, which reads like a missing codec and is not one. This one depends on what the engine carries: stable 26.3 ships nomatroskaplugin for either architecture, so it has to be supplied — staged beside the bottle, or already inside an engine this project patched. The VP9 inside is decoded the same either way. -
A decoder is a codec problem. No CrossOver decodes VC-1, WMV3, WMV2 or
WMA, and the titles marked
libgstlibavin the Codec column play video in one of those — the RE Engine three, the two Nioh, Persona 5 Strikers, and NieR Replicant, which joined the list by measurement after years of being filed as needing nothing.libgstlibavis never patched into a CrossOver you installed: on a stock engine it is staged in front of it, and on an engine copy this project makes it is already inside. Either way those fixes depend on nothing CrossOver decodes and behave the same on both builds. - Neither, for the rest. Mortal Shell 2 decodes in-process with Electra's own libvpx; Beast of Reincarnation goes through an H.264 decoder both builds have; both Life is Strange freezes are inside DXGI and never touch video. One qualification on the last of those: the DLL those two install carries all three repairs, and its policy table arms only the node guard for them -- but the Media Foundation hooks it installs go in for every title regardless, and that unconditional instrumentation is the standing suspicion for why those two crash on 26.3. The fault has nothing to do with video; the DLL touches video anyway.
On winevideo. On a stable build it
ships a WebM demuxer, which is the thing DYNASTY WARRIORS has no other way to
get — stable 26.3 carries no matroska plugin, read out of the two installs.
That is a conclusion from what each build contains rather than a measurement of
winevideo: the title crashes on a stock 26.3 — that much was run — and plays on
26.3 once the engine is patched, but whether winevideo in particular would serve
it was never tried. One unbuilt alternative, and the
reasoning behind it, is in Findings, under The container, not
the codec.
Why each hook exists, which vtable slot each one takes, how a carrier DLL is picked and what was tried and did not work is in Findings. The division is deliberate: these pages carry the per-title findings and the wrong turns that came first, that one carries what is common to all of them.
Deliberately absent from the table above, and for a different reason from METAL GEAR SOLID 4: this title has a video fault, and it is not one we can repair.
What was fixed, and it is worth more than the title. The game ran at 7.30 frames a second with 83.50 ms of GPU time per frame, on a scene of 36 draw calls — a cost that cannot be the scene. The cause is its own setting:
Documents/KoeiTecmo/Ronin/config.xml
<RES_SCALING>XESS</RES_SCALING> -> OFF
| XESS | OFF | |
|---|---|---|
| FPS | 7.30 | 58.05 |
| GPU per frame | 83.50 ms | 3.51 ms |
| Dispatches | 19 | 2 |
The seventeen missing dispatches are XeSS's compute passes. Intel's upscaler has
no Intel GPU to run on under D3DMetal and falls back to a generic compute path
the translation layer makes ruinous. It is XeSS in particular, not upscaling:
DLSS in the same slot costs nothing, because it finds no NVIDIA hardware and
D3DMetal substitutes MetalFX. Any Koei Tecmo title shipping libxess.dll is
worth checking this way before the engine is blamed. No DLL, no code, no
install — one value in the game's own config.
What is not fixed. The opening cutscene plays its audio over a black screen for twenty to a hundred seconds, input ignored, and then the menu appears. This is not specific to macOS. GloriousEggroll/proton-ge-custom issue 165, filed for this title, reports it word for word — "wait for shaders to compile. It will then play the intro video with audio and a black screen" — and guesses the format as WebM. It varies by Proton build and has no identified cause and no released fix upstream.
Measured here, with every hook verified to install:
- Five Media Foundation entry points hooked —
MFTEnumEx, both source readers,IMFMediaEnginethroughCoCreateInstance, andMFCreateFile— and none is ever called.MFStartupruns three times and nothing follows. -
ID3D12VideoDeviceis never requested; the game asks its D3D12 device forID3D12Device1,ID3D12Device5and one vendor interface, all granted. - No NV12 or P010 among 67 distinct texture shapes. There is a 1920x1080
B8G8R8A8_TYPELESScreated 2.6 s in, in a game drawing at 2048x1152. -
libgstmatroskaandlibgstvpxare staged, the GStreamer registry lists both, and the bottle registers byte-stream handlers for.mkvand.webm— all legacy of the NINJA GAIDEN 4 work. Nothing that would normally be missing is. - During the black the game streams ~6 MB per 15 s from a 691 MB
.filewhose header isIDRK/TSRS/KTSR— Koei Tecmo Sound Resource, the soundtrack. All fifteen loose resource files are audio; there is no loose video in 149 GB.
So the game does not attempt playback at all here. That matches the state GE-Proton calls skipped rather than the one it calls black, and whatever it probes before deciding sits upstream of every door listed above.
A negative worth banking: sleep-yield-fix at divisor 64 cuts this title's
Sleep(0) storm from eight million per fifteen seconds to a quarter of a
million — a thirtyfold reduction, measured twice — and moves neither the frame
rate nor the length of the black screen. Real waste, no benefit. It is not a fix
for this game and is not shipped as one.
This title shipped a fix here between 2026-08-27 and 2026-08-28. It has been removed from the app, the installers and the release, and the page is kept as a record of how it got here.
The reading was wrong. The title showed a black window, a click of audio and
an exit, and the measured explanation was a busy-wait: four and a half million
Sleep(0) calls before the menu, Steam's client pipe timing out, and a fatal
assert. Turning every sixty-fourth Sleep(0) into a real Sleep(1) cut that to
36,160 spins and the title loaded. A control was even run — the fix built to set
only the environment variable, with the wrappers gone, and the title stopped
loading again — which seemed to isolate the yield as the cause.
What was actually happening. RaccoonBot was killing games that hand off from
their own launcher: the launcher exits once the game is running, that was read as
the title having finished, and the game went down with it. MGS4 is exactly that
shape — Launcher/launcher.exe starts MGS4/mgs4.exe. With the launcher fixed
on 2026-08-28, MGS4 reaches its menu with nothing of ours installed at all.
The busy-wait is real and the measurement stands. It was never the fault. The control did not catch it because anything that changes the timing — including a probe's own overhead — also changes whether a kill lands.
What this costs elsewhere. sleep-yield-fix.c stays in the tree with no
title to its name. It was measured again on RISE OF THE RONIN, where it cuts a
Sleep(0) storm thirtyfold and moves neither the frame rate nor anything the
player sees. Two titles, no benefit either time.
The rule that came out of it: a launcher that kills the game underneath it manufactures a defect that looks exactly like the game's own, and every reading of "it starts and then dies" taken before 2026-08-28 is suspect until re-run.
Run the survey on that game's folder, and if it misbehaves, the probe. Both
are in diagnostics/ and both are described in
Diagnosing a new game.
Paste what they print, and say which CrossOver build printed it. Measurements are the point of these pages, and a row without one is worse than no row.