mirror of
https://github.com/valentderah/totk-pc-recomp.git
synced 2026-11-12 10:21:02 +00:00
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
53 lines
2.2 KiB
Python
53 lines
2.2 KiB
Python
"""Write runtime/nvn_procs.inc: the NVN proc names TotK 1.2.1 loads.
|
|
|
|
Source names come from the MacNativeGames checkout in refs/ (MIT, Copyright (c) 2026 MacNativeGames contributors):
|
|
NVN/names.txt plus the NVN_EXTRA definitions of totk_nvn_ext.c, minus the two names 1.2.1 does not load. The file
|
|
list format follows d2r-mobile dm/gfx/tools/gen_protos.py (MIT). No game data is read.
|
|
|
|
Run with .venv: python tools/gen_nvn_procs.py
|
|
"""
|
|
|
|
import re
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
ROOT = Path(__file__).resolve().parent.parent
|
|
NVN_DIR = ROOT / "refs/MacNativeGames/games/totk/third_party/d2r_gfx/gfx/nvn"
|
|
OUT = ROOT / "runtime/nvn_procs.inc"
|
|
|
|
NOT_LOADED = {"nvnDeviceApplyDeferredFinalizes", "nvnQueueAcquireTexture"}
|
|
SUBSDK0 = [ # section 0.1: asked by the movie library through nvnDeviceGetProcAddress
|
|
"nvnDeviceGetProcAddress",
|
|
"nvnSyncFinalize",
|
|
"nvnSyncGetNvRmSyncNVX",
|
|
"nvnSyncInitializeFromNvRmSyncNVX",
|
|
"nvnTextureGetNvRmSurfaceNVX",
|
|
]
|
|
MAIN_COUNT = 534
|
|
|
|
|
|
def main() -> int:
|
|
names = [n.strip() for n in (NVN_DIR / "names.txt").read_text(encoding="utf-8").splitlines() if n.strip()]
|
|
extras = re.findall(r"^NVN_EXTRA\((\w+)", (NVN_DIR / "totk_nvn_ext.c").read_text(encoding="utf-8"), re.M)
|
|
if len(extras) != 13:
|
|
print(f"expected 13 NVN_EXTRA names, found {len(extras)}", file=sys.stderr)
|
|
return 1
|
|
main_names = [n for n in names if n not in NOT_LOADED] + extras
|
|
if len(main_names) != len(set(main_names)) or len(main_names) != MAIN_COUNT:
|
|
print(f"expected {MAIN_COUNT} distinct main names, found {len(main_names)} "
|
|
f"({len(set(main_names))} distinct)", file=sys.stderr)
|
|
return 1
|
|
# nvnDeviceGetProcAddress is in both lists; keep one row per name.
|
|
extra_sub = [n for n in SUBSDK0 if n not in main_names]
|
|
rows = sorted(main_names) + sorted(extra_sub)
|
|
text = ("// Generated by tools/gen_nvn_procs.py: the NVN proc names of TotK 1.2.1.\n"
|
|
+ "".join(f"NVN_PROC({n})\n" for n in rows))
|
|
OUT.write_text(text, encoding="utf-8", newline="\n")
|
|
print(f"{OUT.relative_to(ROOT)}: {len(main_names)} main names + {len(extra_sub)} subsdk0-only names "
|
|
f"({len(SUBSDK0)} asked by subsdk0), {len(rows)} rows")
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main())
|