aboutsummaryrefslogtreecommitdiff
path: root/src/video_core/memory_manager.cpp
diff options
context:
space:
mode:
authorTakoroka <137927095+Takoroka@users.noreply.github.com>2026-10-30 14:58:27 -0400
committerTakoroka <137927095+Takoroka@users.noreply.github.com>2026-10-30 15:39:20 -0400
commit2ad0830d2f044bc536155ae666f4477ba6d1f65f (patch)
tree2ea161623a2ca1cb1e30d098f7aaa486161b220c /src/video_core/memory_manager.cpp
parentd2ac2275247a9ecb3e1404606f7026c6402533b8 (diff)
video_core: draw deferred instances before the state after their loop
A draw of N instances arrives as Begin(First)/End and N-1 Begin(Subsequent)/ End pairs. The draw manager draws the first at once and the rest together at DrawDeferred, which ran at the next Begin(First) or when the macro returned. NVN's draw macros reset the base instance register and its copy in c[0][0x644] right after the loop, before returning, so the deferred instances were drawn with base instance 0 and read the first records of the instance buffer instead of their own. In Mario Kart World every tree mesh is drawn this way, from one shared instance buffer: each mesh got other meshes' transforms, which showed as low-detail, inflated or scattered trees. Any write other than the loop's own methods (draw begin/end, vertex and index counts, inline indices) now draws the waiting instances first.
Diffstat (limited to 'src/video_core/memory_manager.cpp')
0 files changed, 0 insertions, 0 deletions