diff options
| author | Takoroka <137927095+Takoroka@users.noreply.github.com> | 2026-10-30 13:41:36 -0400 |
|---|---|---|
| committer | Takoroka <137927095+Takoroka@users.noreply.github.com> | 2026-10-30 13:41:49 -0400 |
| commit | ddd367a8152f1c37bfc972475b40afece2da31ac (patch) | |
| tree | 062c859069aead4a429c2ecb2d836bab4812fb05 /src/common/stream.cpp | |
| parent | ea33ad1865970ee731e5f74dbcc26ca472798afe (diff) | |
core: end device page runs where pages are unmapped or mapped again
WalkBlock copies a run of physically contiguous device pages at once, using
each page's continuity_tracker. Unmap left the counts as they were, Map
without tracking did not touch them, and the pages before a changed range
kept counting into it. A read starting on such a page then copied the host
memory that followed the old mapping, or, starting on an unmapped page,
zero-filled the whole old run, mapped pages after it included.
Splatoon Raiders lost its dialogue text this way: the glyph vertex shader
reads its corner table from constant buffer 1 (the program's constants, at
device 0x5617d700), and the buffer cache uploaded the range from 0x5617c000,
an unmapped page still counted as the start of a long run, so the table
reached the GPU as zeros and every glyph sampled one empty texel.
Unmap and Map now reset the counts of their pages (Map recounts them when
tracking) and cut the runs of the pages before them at the range start.
Diffstat (limited to 'src/common/stream.cpp')
0 files changed, 0 insertions, 0 deletions
