Files
seeddsanddigitalhivehub 67f1398c6c Tears of the Kingdom and Breath of the Wild: draws into BC textures and draws with no target (from PR #11)
Tears of the Kingdom's three remaining red lines, with the fixes PR #11 found:
- A BC4 texture written through an RGBA16UI view (BC4 encoded on the GPU; TOTK a 32x32x32 3D texture one depth
  plane per pass, BotW a 32x32 one) could not be attached, so its draws were lost. Such a pass now draws into an
  uncompressed shadow of blocks x blocks; the blocks are copied in through a buffer before the pass and back after it
  (nvn_mtl.m bcrt_attach / bcrt_flush). Shadows stay resident and are reused, and they are kept out of the
  load-skip / store-elision bookkeeping.
- An agl fragment shader that only stores to a buffer draws into a 1x1 viewport with no target set: the pass is now
  attachment-less at the viewport size (bare_dims) instead of skipped. The opening cave gets the ambient light it
  lacked.
- nvnDeviceRegisterFastClearDepth returns success; nvnCommandBufferSetAlphaRef is logged once.

Neither game has a PC version, so the translator declared every fragment output float and Metal refused the
encoders' integer targets. The profiles' shader_facts_manual.tsv declare them (TOTK 0544282c162305db and the
Ultrahand mask e3fb0bb58a691e10, BotW 8e2cc2671cae6020), which changes only those two chains (743f7a102a72,
f5259a6c6fb6; Mac and iOS libraries and c1_full.tsv rebuilt). A pipeline red line now prints the row to add when a
float output meets an integer attachment.

Mac: the 3D BC4 texture was all zeros before and holds encoded blocks in all 32 planes after (raw dump, frame 1500);
TOTK's three red lines are gone; BotW (two runs) and Mario Wonder show no new red lines.

Co-authored-by: digitalhivehub <141404180+digitalhivehub@users.noreply.github.com>
2026-10-20 13:49:26 +08:00

857 B

1# Hand-written translation facts, merged over the generated rows of shader_facts.tsv by dm/gfx/tools/shader_split.py: key <TAB> facts JSON (same format)
2# This game has no PC version, so the translator has no fragment output types and declares every output float; Metal refuses a pipeline whose float output meets an integer attachment
3# (the host's red line then prints the row to add here). Both rows were found by the PR #11 port (digitalhivehub).
4# 0544282c162305db (agl_common BAHS@0x6f840, pixel): the BC4 block encoder. It writes 8-byte blocks through an RGBA16UI view into a 32x32x32 BC4 3D texture (nvn_mtl.m bcrt_attach)
5# e3fb0bb58a691e10 (material bfsha BNSH@0xd64000 variation 28, pixel): the Ultrahand mask, an R8Uint target; without it the mask draws were dropped