mirror of
https://github.com/boykopovar/AnyPS5.git
synced 2026-11-07 13:39:55 +00:00
A table column's stamp vouches that nothing wrote its memory after the stamp's generation and nothing was pending at the time. stampWrites asked for pending writes before it took the generation, and two GPU write paths stamped their blocks before they noted the write pending: a label or store kept behind completions, and a DMA copy. A capture on another queue worker that ran between those two steps saw no pending write and took a generation newer than the write's stamp, so once the batch was reaped the column vouched for the bytes from before the write. stampWrites now flushes, takes the layout and generation, and asks for pending writes last. The label path notes the completion before it stamps the store. The DMA copy still stamps first, so a newer copy's ring entry never meets an older one's generation, then notes the write pending and stamps again, and its ring entry carries the second generation. A store noted after the pending query is now always stamped after the generation the column keeps. The new two-thread test stamps a GPU write from another thread while the capture asks for pending writes; the next capture must compare the table instead of reusing it.