ShaderClass::Apply (GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/shader.cpp) sets D3DRS_PATCHSEGMENTS whenever the NPATCHENABLE shader bit flips. N-patch tessellation (ATI TruForm, 2002) doesn't exist in DXVK's D3D8/9 — it ignores the state and logs Unimplemented render state D3DRS_PATCHSEGMENTS per call. Measured on Android: ~72,000 log lines in a 12-minute session; your iOS build works around the same spam at the sink (the filtered stderr log with DXVK_LOG_LEVEL=none), but the writes still burn cycles in the hot path.
Source fix is one #ifdef — the state can only ever do something on real D3D8 hardware drivers, i.e. Windows:
// N-patch tessellation (ATI TruForm) does not exist in DXVK's D3D8/9
#ifdef _WIN32
if (diff&ShaderClass::MASK_NPATCHENABLE) { ... }
#endif
Fixed in b1186e717, verified on-device (warn count 72k → 0, no visual change — the tessellation never activated on DXVK anyway). Happy to open a PR.
ShaderClass::Apply(GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/shader.cpp) setsD3DRS_PATCHSEGMENTSwhenever theNPATCHENABLEshader bit flips. N-patch tessellation (ATI TruForm, 2002) doesn't exist in DXVK's D3D8/9 — it ignores the state and logsUnimplemented render state D3DRS_PATCHSEGMENTSper call. Measured on Android: ~72,000 log lines in a 12-minute session; your iOS build works around the same spam at the sink (the filtered stderr log withDXVK_LOG_LEVEL=none), but the writes still burn cycles in the hot path.Source fix is one
#ifdef— the state can only ever do something on real D3D8 hardware drivers, i.e. Windows:Fixed in
b1186e717, verified on-device (warn count 72k → 0, no visual change — the tessellation never activated on DXVK anyway). Happy to open a PR.