mirror of
https://github.com/boykopovar/AnyPS5.git
synced 2026-11-05 13:20:11 +00:00
Sampling a depth array, cube or R16_UINT view of depth surfaces went through DepthPlaneCopy::Refresh on every use. Each use copied every slice a depth surface holds into the staging buffer and the whole staging buffer into the copy image, with three ALL_COMMANDS barriers, although nothing had written the slices since the previous use. Each depth surface now carries a write serial, bumped when a draw binds it as its depth target and when a pending fast clear is applied. The copy keeps the image and serial of every slice it copied. A use copies only the slices whose surface or serial changed and the guest layers that changed (as before), and records nothing when none did. A slice whose surface is the depth target of the latest depth draw is copied at every use until another depth target is bound, since that draw may still be recorded after the copy. Test: agc_driver_depth_plane_guest_layers counts the recorded slice copies and copy fills; a second use with nothing written records none (it records one of each without this change), a draw to a slice's surface or a CPU write to a guest layer copies only that layer.