19#include "common/multires_tree.hlsli"
47 std::vector<multires::MrBlock>
blocks;
48 std::vector<reaction::RxCell>
cells;
54 std::array<uint32_t, multires::MR_COUNTER_COUNT>
counters{};
65 std::vector<multires::MrRequestState>
states;
72 std::vector<std::array<uint32_t, 2>>
110 const auto bound = [](uint32_t value) {
111 return value == 0 ? UINT32_MAX : value;
113 constexpr uint32_t LINKS_PER_UNKNOWN = 12;
115 const uint32_t byLinks = limits.
links == 0 ? UINT32_MAX : limits.
links / LINKS_PER_UNKNOWN;
116 const uint32_t unknowns = bound(limits.
unknowns) < byLinks ? bound(limits.
unknowns) : byLinks;
117 const uint32_t cells = bound(limits.
cells) < bound(limits.
nodes) ? bound(limits.
cells) : bound(limits.
nodes);
119 return {.unknowns = unknowns, .cells = cells};
176 std::span<const reaction::RxCell> cells);
196 int64_t originZ, std::span<const reaction::RxCell> cells);
208 uint32_t levelCount);
222 void StepActive(MultiresNest& nest,
const BakedReactionTable& table, uint64_t worldSeed, uint64_t tick,
223 const MultiresStepOptions& options = {});
235 const multires::MrFoldTolerance& tolerance);
248 const multires::MrFoldTolerance& tolerance);
265 int32_t finestLevel);
void FoldQuietPages(MultiresNest &nest, uint64_t tick)
void PlaceMirrorBlock(MultiresNest &nest, uint32_t slot, int32_t level, int64_t originX, int64_t originY, int64_t originZ, std::span< const RxCell > cells)
std::array< uint64_t, 4 > Wide256
void PullBackShadowChain(MultiresNest &nest, const BakedReactionTable &table, uint32_t firstShadowSlot, uint32_t levelCount)
std::vector< uint32_t > SeedSlots(const MultiresNest &nest)
MrFoldStats CollectFoldStats(const MultiresNest &nest, const ReactionTableView &table, uint32_t slot)
void RemoveShadowChain(MultiresNest &nest, uint32_t firstSlot, uint32_t levelCount)
void SubmitQuietCoarsenRequests(MultiresNest &nest, uint64_t tick)
ConservedTotals ComputeConservedTotals(const MultiresNest &nest, const BakedReactionTable &table, int32_t finestLevel)
constexpr uint32_t MULTIRES_MAX_SUBCYCLE_GAP
MultiresNest MakeMultiresNest(const MultiresCapacity &capacity)
uint32_t UsedWorldPages(const MultiresNest &nest)
uint64_t HashWholeNest(const MultiresNest &nest)
uint64_t HashRealLeaves(const MultiresNest &nest)
constexpr MultiresImplicitBudget MakeMultiresImplicitBudget(const MultiresImplicitLimits &limits)
void SubmitRequests(MultiresNest &nest, std::span< const multires::MrRequest > requests)
void RefineShadowChain(MultiresNest &nest, uint32_t parentSlot, uint32_t firstChildSlot, uint32_t levelCount, const MultiresPoint &point)
void RebuildIndex(MultiresNest &nest)
RxCell LoadNestCell(const MultiresNest &nest, uint32_t slot, uint32_t index)
uint32_t LookupBlock(const MultiresNest &nest, int32_t level, int64_t originX, int64_t originY, int64_t originZ)
void ProcessRequests(MultiresNest &nest)
uint32_t PlaceRootBlock(MultiresNest &nest, int64_t originX, int64_t originY, int64_t originZ, std::span< const reaction::RxCell > cells)
void StepNest(MultiresNest &nest, const BakedReactionTable &table, uint64_t worldSeed, uint64_t tick, const MultiresStepOptions &options)
std::vector< uint32_t > WaitSeedSlots(const MultiresNest &nest, uint64_t tick)
void StepActive(MultiresNest &nest, const BakedReactionTable &table, uint64_t worldSeed, uint64_t tick, const MultiresStepOptions &options)
bool operator==(const ConservedTotals &) const =default
std::vector< Wide256 > elements
ImplicitCost implicitCost
std::vector< uint8_t > implicitFrozen
std::vector< uint8_t > seeds
std::vector< reaction::RxCell > cells
std::vector< uint32_t > index
std::shared_ptr< const MultiresNest > implicitNest
MultiresCapacity capacity
ImplicitGrid implicitGrid
std::vector< multires::MrRequestState > states
std::vector< multires::MrBlock > blocks
std::vector< uint32_t > claims
std::vector< multires::MrFraction > fractions
std::vector< uint32_t > freeFractions
std::vector< uint64_t > ledger
std::vector< multires::MrRequest > requests
std::vector< std::array< uint32_t, 2 > > implicitLevels
std::vector< uint32_t > freeBlocks
std::array< uint32_t, multires::MR_COUNTER_COUNT > counters
uint32_t implicitDeferredBlocks
uint32_t implicitMaxCycles
int32_t subcycleBaseLevel
MultiresImplicitLimits implicitLimits
ImplicitOverflow implicitOverflow