Files
seedds 56b806155f One NVN driver layout for every game; shader sources read from the game files
The NVN driver's constant segments have the same layout in every game, so the
nvn_* profile keys are gone. Combined textures are at c2 0x20 + 8 r (a slot past
31 shares the image table; Hades II binds 34), images at 0x120, separate textures
at 0x168 (now always the host's slots 128 + n, as Monster Hunter Rise had them),
samplers at 0x568, and the storage buffer tables at c0 0x110 / 0x310 / 0x510.
dmsh_build.py decodes with that layout, the replay fills both texture tables,
and the translator numbers slots the same way (rebuilt; its SPIR-V and
reflection are byte-identical on 1,491 sample shaders, lock updated).

The shader_* switches and graphics are gone too; the build reads them from the
files (profile_guess.py shader_sources):
- Vulkan when main imports Vulkan and not NVN; its capture when the RomFS has
  no SPIR-V.
- A GLSLC capture when main holds GLSL sources and imports glslcCompile.
- An Oodle decode for Unreal paks, and the tool-mode decoder for Trinity packs.
- GLSLC outputs from every main.
- A cover pairing for each single-stage vertex shader (GLSLC, Unreal).
build_ipa.sh takes GFXAPI from the NSP script.

Also removed: the last D2R pieces (the embedded-shader path in dmsh_build.py,
dmsh_facts.py --freeze / --check, maxwell_refs.py, ref/hle_hid_d2r.c).

Chain: every profile's dmsh_chain.h is regenerated. The c1_full lists are
carried over: the change touches no c1 read, and the rebuilt Octopath
Traveler 0, Hades II, Unicorn Overlord and Rhythm Heaven Groove gave the same
lists, identical tables and the same reflection apart from separate texture
slots + 128.

Still to do:
- Run the chain procedure for the other NVN profiles.
- Engage's and Three Houses' shader tables need a new split: Engage gains
  Unity's 11 GLSLC shaders in main, and Three Houses' 17 BNSH vertex shaders
  lose their cover pairs.
- Ace Attorney's new tables are in, but its libraries are not rebuilt.
2026-10-21 07:23:10 +08:00

2.2 KiB

1# Game profile of Rhythm Heaven Groove (Switch, base game v0 = 1.0.0). In bring-up: on the Mac it plays from boot through the setup and its TV latency calibration into the first rhythm game (Hoop Trundling), with sound; handheld with Boost (no TV calibration)
2# Format: see dm/games/README.md
3# Nintendo's own engine, SDK 21.4.0 (the newest so far), NVN; no packaged textures: each texture file (graph/**/*.tex, raw BC7 or linear R8 with its description in the .spr beside it)
4# is read into memory and gets a memory pool the CPU cannot access (tex_init_fill in nvn_mtl.m). Audio is the SDK's AudioRenderer (sound/sm/**/*.cwv), whose SDK 21 command list hle_audren.c reads.
5# The shaders are one BNSH, shader/shader_NX.bnsh (2 vertex and 33 pixel shaders, all 2D)
6# ---- Identity ----
7title_id0100D9F01D474000
8program_id0100D9F01D474000
9# ---- App ----
10# Game name: only a label for profile listings and the Mac window title; the iOS app name is the game name in the base NSP, and the bundle ID comes from the base game title ID (build_ipa.sh / NSP script)
11nameRhythm Heaven Groove
12ipaRhythmHeavenGroove.ipa
13app_categorypublic.app-category.games
14# Handheld with Boost: docked means a TV to the game, which then runs a latency calibration (press A on every fourth beat) until one passes; a phone is its own screen.
15# Boost keeps the 1920x1080 draw size (handheld Normal draws 1280x720); the game takes it from the performance mode alone (hle_oe.c)
16op_modehandheld
17perf_modeboost
18# ---- Versions ----
19buildv01.0.0main=03ff4a3bec96bde3a2e37ce3aa4caa0csdk=cff2680fe74cb7d8d13b525730d1a7fd
20packagev0
21shader_versionsv0
22# ---- Files ----
23# every module main imports from
24modulesmain sdk
25romfs_markersound/sm/showtime/n_virus_very_hard.cwv
26zip_store.cwv:.tex:.vtdb2:.zs:.metallib
27# ---- Memory ----
28# main sets a heap of at most the pool − 64 MB: a 3328 MB heap region (the game has no virtual address memory, so the NSP script's heap check does not run)
29mem_reserve0x100000000
30mem_alias0x10000000
31mem_stack0x10000000
32app_pool0xCD500000
33# ---- Graphics ----
34# ---- Shader split (shader_split.py) ----
35shader_groups/mesg/=mesg /graph/=graph /sound/=sound /wavmark/=wavmark /voicetext/=voicetext /shader/=shader
36shader_noteRhythm Heaven Groove shaders