Commit Graph

3 Commits

Author SHA1 Message Date
tim doerries
f373171022 Fix for SparseVolumeTexture upload shader reading past the 2^27 maximum element limit of certain (typed) buffers and reading zero. Fixed by splitting uploads into smaller chunks.
#rb Sebastien.Hillaire
#rnx

[CL 26571742 by tim doerries in ue5-main branch]
2023-07-25 09:43:44 -04:00
tim doerries
a75ad3b7fb Implemented occupancy bit based compression for cooked on-disk tile data of SparseVolumeTextures. This reduces the memory footprint by 30%-50%, which also greatly benefits streaming performance. This optimization is only for the on-disk representation of derived/cooked data; the runtime GPU memory is unaffected, as is the size of uncooked assets.
Prior versions accidentally always serialized the derived data, even when not cooking. This causes problems when changing the format of derived data. This is now no longer the case, but unfortunately this breaks old assets because the size of the old serialized derived data is unknown and can't be accounted for even if we know that the asset is using an older version.

#rb Sebastien.Hillaire
#rnx

[CL 25974989 by tim doerries in ue5-main branch]
2023-06-14 08:40:14 -04:00
tim doerries
838de94380 New streaming system for SparseVolumeTextures. It is based on the Nanite FStreamingManager design and supports streaming both from disk and from DDC. This first version uses a single logical tile data texture for all frames of a single UStreamableSparseVolumeTexture and starts streaming out tiles of older mip levels once it runs out of space. The highest mip level (lowest resolution) is always resident in the tile data texture, so there is always something available for rendering. Each frame's page table texture is currently always fully resident. There is now also a buffer storing the lowest resident mip level index for each frame.
In a future version, additional logical tile data textures may be allocated to handle cases where more mip levels are being requested than can physically fit into a single texture. In addition, page table textures should also be resized so that streamed out frames take up less GPU memory. It might also be necessary to implement a blocking streaming option for MRQ and similar use cases. This feature probably depends on being able to spill to additional physical page table textures.

Also moved all of the SVT runtime classes into a shared namespace (UE::SVT), which is why this CL ended up touching almost all SVT related files.

#rb Sebastien.Hillaire, Rune.Stubbe, Devon.Penney, Patrick.Kelly
#rnx
#preflight 64772ef20d55081f54759f0b

[CL 25699866 by tim doerries in ue5-main branch]
2023-05-31 08:14:22 -04:00