# Gate-4b slice: the Model pipeline -- load, rebase, VRAM upload, bone walk,
# material bind, display-list submit -- on top of slices 2/3a/3b and the
# gate-4a pump. MMIO-touching files build via hostgen (see CMakeLists);
# everything here compiles as-is.

# Model
src/engine/model/Model.cpp
src/_ZN5Model8LoadFileER13SharedFilePtr.cpp
src/_ZN5Model17UpdateFileOffsetsER8BMD_File.cpp
src/_ZN5Model23AddToCommonModelDataArrER8BMD_File.cpp
src/_ZN5Model13LoadTexAndPalER8BMD_File.cpp
src/_ZN5Model17LoadTextureToVramEPcj.cpp
src/_ZN5Model27LoadCompressedTextureToVramEPcjS0_.cpp
src/_ZN5Model13GetVramOffsetEj.cpp
src/_ZN5Model12SetPolygonIDEi.cpp
# ModelComponents::Render: HOST copy in port/unmatched -- the matched TU
# passes the material index by leaving it in r1 (see the file header there).
port/unmatched/ModelComponents_Render.cpp
src/_ZN15ModelComponents21UpdateVertsUsingBonesEv.cpp

# GX upload path (no textual MMIO; VRAM windows come from HAL globals)
src/engine/gx/GX.cpp

# render walk + math. func_02044534/func_0204488c/NormalizeVec3 are in the
# HOSTGEN list instead: they touch MMIO textually (geometry ports, the
# hardware divider) and an untransformed build latches those writes
# silently -- the exact failure hostgen exists to prevent.
src/func_020462d0.c
src/func_02046564.c
src/MulMat4x3Mat4x3.c
src/func_020458a8.c
src/func_02016b24.c
src/func_02045074.c
src/func_02045178.c
src/func_02048234.c
src/func_02046008.c
src/MulMat3x3Mat3x3.c
src/_ZN9ModelBaseC2Ev.cpp
src/DMASyncWordTransfer.c
src/func_02059fd0.c
src/func_0203cc0c.c
src/func_0204605c.c

# gate 4c additions: the animation path (UpdateBones recursion)
src/_ZN15ModelComponents11UpdateBonesEP8BCA_Filei.cpp
src/func_020453c0.c
src/func_0204547c.c
src/func_020457f0.c
src/func_020456a0.c
# src/_ZN4cstd3absEi.cpp moved to slice_gate2.txt: the allocator layer needs it
# too, and every target that links this slice links gate 2 as well, so listing it
# in both would be a duplicate definition.
src/_ZN15dExtFrameCtrl_c8LoadFileER13SharedFilePtr.cpp
src/_ZN15dExtFrameCtrl_c17UpdateFileOffsetsER8BCA_File.cpp

# Whole-class slice. Once a constructor is a real C++ constructor its TU
# becomes the vtable's key function on MSVC as well, and the host emits the
# vtable there -- which needs EVERY virtual defined, not the subset a gate
# happens to exercise. A migrated class can no longer be sliced method by
# method; it comes across whole. src/engine/model/Model.cpp (above) is that
# TU for this class.
src/func_0203cbc0.c
