Bicameral Engine
GPU-resident engine for a magic-research open-world game
Loading...
Searching...
No Matches
trace_capture.h
Go to the documentation of this file.
1// trace_capture.h — 伝導の連鎖のトレースを 1 回ぶん集めて、刻みごとの木のファイルに書く(T-0087 の --trace・T-0088 の窓のキー)。
2//
3// データの流れ: フレームのループが範囲を ProbeSim::SetTraceFilter で GPU に渡し、同じ範囲でこれを作る
4// → 読み戻したフレームごとに Add(記録・落とした数)→ 範囲の最後の刻みの状態のハッシュを読んだら IsComplete
5// → Write(sim::WriteProbeTraceFile。並べて木にする)。
6// GPU への範囲の受け渡しは持たない(フレームのループの仕事)。ここは CPU の View の側の入れ物。
7#pragma once
8
9#include <cstdint>
10#include <expected>
11#include <span>
12#include <string>
13#include <vector>
14
15#include "core/aliases.h"
16#include "gpu/graph_trace.h"
17
18namespace bicameral::frame {
19
21 public:
22 static constexpr size_t MAX_RECORDS = size_t{1} << 22; // 集める記録の上限(1 件 24 バイト。約 100 MB)
23
24 // path: 書くファイル。filter: 集める範囲(ファイルの見出しと、終わったかどうかの判定に使う)
25 TraceCapture(fs::path path, const gpu::GraphTraceFilter& filter) : m_path(std::move(path)), m_filter(filter) {}
26
27 // 読み戻した 1 フレームぶん。上限を越えた分は落とした数に数える
28 void Add(std::span<const gpu::GraphTraceRecord> records, uint32_t droppedCount);
29
30 // 範囲の刻みを全部読み戻したか。latestStateTick = 最後に読み戻したハッシュの状態 S(t) の t(刻み t − 1 まで終わった)。
31 // 範囲の終わりが無限なら終わらない(終わるときに書く)
32 [[nodiscard]] bool IsComplete(uint64_t latestStateTick) const;
33
34 // 刻みごとの木にしてファイルへ書き(フォルダが無ければ作る)、ログに場所と件数を出す。集めた記録は手放す
35 [[nodiscard]] std::expected<void, std::string> Write();
36
37 [[nodiscard]] const fs::path& Path() const { return m_path; }
38 [[nodiscard]] const gpu::GraphTraceFilter& Filter() const { return m_filter; }
39
40 private:
41 fs::path m_path;
43 std::vector<gpu::GraphTraceRecord> m_records; // 順不同(atomic の順)
44 uint64_t m_droppedCount = 0; // GPU の容量・ここの上限で落とした数
45 };
46
47} // namespace bicameral::frame
gpu::GraphTraceFilter m_filter
std::vector< gpu::GraphTraceRecord > m_records
void Add(std::span< const gpu::GraphTraceRecord > records, uint32_t droppedCount)
const gpu::GraphTraceFilter & Filter() const
std::expected< void, std::string > Write()
TraceCapture(fs::path path, const gpu::GraphTraceFilter &filter)
static constexpr size_t MAX_RECORDS
const fs::path & Path() const
bool IsComplete(uint64_t latestStateTick) const