Files
nxnative-easy/dm/third_party/README.md
T
seedds 787f9a178e Hades runs on the Mac through a new Vulkan-on-Metal layer
Hades (0100535012974000, update 1.0.38233, SDK 9) renders with Vulkan through The Forge, not NVN.
The host now implements its 100 vk* imports on Metal in dm/gfx/vk/hle_vk.m, and the Vulkan loader
(subsdk0) and NVIDIA's driver (subsdk1) are not loaded. The title menu, the intro and Tartarus gameplay
run at 60 fps on the Mac, and a Metal validation run is clean. The iPhone build is untested.

- dm/gfx/vk/hle_vk.m: one Tegra X1-shaped device. Memory is a lazily made shared MTLBuffer; images are
  private MTLTextures. Command buffers are recorded on the host and replayed at vkQueueSubmit on the
  layer's own queue, which signals an MTLSharedEvent. Descriptor sets, update templates, render passes
  and pipelines are supported. The swapchain presents through the NVN layer's present path.
  vkGet*ProcAddr look names up in the HLE table, also trying a name without its KHR suffix.
- dm/gfx/tools/vk_shaders.py: SPIR-V to one metallib plus a slot table. It renumbers bindings per kind,
  flips vertex y, and lists only the resources the Metal entry point takes.
- nvn_mtl.m/h: mtl_device, mtl_ext_tex and mtl_present_ext for external producers. Their present
  waits on the producer's event.
- hle_nvn.c: dm_gfx_enter/leave and dm_vk_drain, so the background suspend also covers Vulkan submits.
- hle_oe.c: GetNotificationMessageEvent returns a host-owned auto-clear SystemEvent. The SDK's version
  returned an event the no-op oe::Initialize never created.
- patch_nso.py: the byte-table jump search looks 16 instructions back, not 8 (Hades main+0x1135d0).
  The output for every other module is byte-identical.
- Profile key `graphics vulkan`: build_ipa.sh ships $MSL_IOS/vk instead of the NVN chain libraries.
- dm/third_party/vulkan-headers: Vulkan-Headers 1.4.363, unmodified.
- dm/.gitignore: per-game host binaries (dm/host/dmhost_*).
2026-10-18 10:29:06 +08:00

3.3 KiB

dm/third_party: third-party code

This is code written by others, shipped with the repository so there is nothing to download. Each component keeps its original license, and the license file sits in its own directory.

Directory What it is Version and changes Where it is used License file
bcdec/ Decompression of BC-compressed textures, a single header bcdec.h 0.985 (upstream commit 80859ed), unmodified Graphics layer: decompresses textures on the CPU when the GPU does not support BC formats (dm/gfx/tex/nvn_bcdec.c) bcdec/LICENSE (MIT or Unlicense, your choice)
flip/ NVIDIA FLIP, an image difference metric that models human viewing. FLIP.h plus the source of the command-line tool in tool/ Not recorded in the directory Verification: the image quality measurements in dm/verify/gfxq/; build flip first with make -C dm/third_party/flip flip/LICENSE (BSD 3-Clause)
libdeflate/ Decompression library Upstream commit 92e6a0d, unmodified Host: zlib decoding of the game's resource blocks (dm/host/hle_tact.c). Only the five decompression-related source files are built; they are listed in dm/host/Makefile libdeflate/COPYING (MIT)
libvpx/ The VP9 decoder from libvpx: the 71 source files a VP9-decoder-only build compiles, their headers, and the generated configuration in config/ v1.17.0 (upstream commit 6df3ec3), unmodified Host: decodes the games' VP9 movies (dm/host/hle_movie.c). dm/host/Makefile builds it into gen/vpx/libvpx.a; the iOS build compiles the same files libvpx/LICENSE (BSD 3-Clause), with the patent grant in libvpx/PATENTS
stb_vorbis/ Ogg Vorbis decoder, a single file stb_vorbis.c 1.22 (upstream commit 1ee679c), unmodified Host: decodes the Vorbis sound tracks of the games' WebM movies (dm/host/hle_movie.c, which includes the file with its push-data API only) stb_vorbis/LICENSE (MIT or public domain, your choice; the same text ends stb_vorbis.c)
ryujinx/ The shader translation library from Ryujinx, three projects: Ryujinx.Graphics.Shader, Ryujinx.Common, Spv.Generator Ryujinx 1.3.2, unmodified Referenced by the shader translation tool dm/gfx/tools/dmsh_xlate, which translates the original Switch shaders to SPIR-V ryujinx/LICENSE.txt (MIT); ryujinx/src/Spv.Generator/LICENSE is that subproject's own license text
vulkan-headers/ The Vulkan C headers: vulkan_core.h, vk_platform.h, vulkan_vi.h and the vk_video/ headers they include Vulkan-Headers 1.4.363, unmodified Host: the Vulkan layer on Metal (dm/gfx/vk/hle_vk.m) that runs Hades vulkan-headers/LICENSE.md (Apache-2.0 or MIT, your choice)

A few more notes:

  • flip/tool/ also carries three single-header libraries used by the FLIP command-line tool: stb_image.h (2.23), stb_image_write.h (1.13) and tinyexr.h. Their license notices are in the files themselves.
  • bcdec/README.md, libdeflate/VERSION.md, libvpx/README.md, stb_vorbis/README.md, ryujinx/README.md and vulkan-headers/README.md record where each came from and what it is used for.
  • Two pieces of third-party code live outside this directory: dm/gfx/nvn/include/nvn.h (MIT, author named in the file header) and the layout size algorithm in dm/gfx/nvn/nvn_tex.c, ported from deko3d (zlib license).