加所有权之前

This commit is contained in:
2026-08-28 12:14:15 +08:00
parent 81d3d50966
commit 0bc281b6b9
86 changed files with 12167 additions and 427 deletions
+29 -27
View File
@@ -139,41 +139,36 @@ int main() {
auto* resized_partition_frame = new Frame_2D(Frame_Identity{2, 0});
frame->request_taskflow_trace();
resized_partition_frame->request_taskflow_trace();
scene->set_frame_retired_callback(
[resized_partition_frame, second_frame_valid, trace_valid](
Frame_2D* retired) {
const auto trace = retired->take_taskflow_trace();
bool spectrum_hold{};
bool afterglow_reduce{};
bool afterglow_color_barrier{};
for (const auto& graph : trace.graphs)
for (const auto& node : graph.nodes) {
spectrum_hold = spectrum_hold ||
node.name == "prepare.hold.partition";
afterglow_reduce = afterglow_reduce ||
node.name == "prepare.normalize";
afterglow_color_barrier = afterglow_color_barrier ||
node.name == "prepare.color.complete";
}
if (!spectrum_hold || !afterglow_reduce ||
!afterglow_color_barrier)
trace_valid->store(false, std::memory_order_relaxed);
if (retired == resized_partition_frame)
std::_Exit(second_frame_valid->load(std::memory_order_relaxed) &&
trace_valid->load(std::memory_order_relaxed)
? 0
: 1);
});
const auto validate_trace = [trace_valid](Frame_2D* completed) {
const auto trace = completed->take_taskflow_trace();
bool spectrum_hold{};
bool afterglow_reduce{};
bool afterglow_color_barrier{};
for (const auto& graph : trace.graphs)
for (const auto& node : graph.nodes) {
spectrum_hold = spectrum_hold ||
node.name == "prepare.hold.partition";
afterglow_reduce = afterglow_reduce ||
node.name == "prepare.normalize";
afterglow_color_barrier = afterglow_color_barrier ||
node.name == "prepare.color.complete";
}
if (!spectrum_hold || !afterglow_reduce ||
!afterglow_color_barrier)
trace_valid->store(false, std::memory_order_relaxed);
};
scene->set_frame_callback(
[scene, spectrum, waterfall, afterglow, constellation, frame,
resized_partition_frame, spectrum_painted,
topology_valid, second_frame_valid](Frame_2D* completed) {
topology_valid, second_frame_valid, trace_valid,
validate_trace](Frame_2D* completed) {
const bool valid = completed == frame &&
spectrum->read_state<Spectrum::Base_Tag>().sample_count ==
512 &&
topology_valid->load(std::memory_order_relaxed) &&
contains_color(completed->image());
if (!valid) std::_Exit(1);
validate_trace(completed);
spectrum->set<&Spectrum::Prop::partition_count>(2u);
waterfall->set<&Waterfall::Prop::partition_grid>(
@@ -188,13 +183,20 @@ int main() {
spectrum_painted->store(false, std::memory_order_relaxed);
scene->set_frame_callback(
[resized_partition_frame, second_frame_valid,
topology_valid](Frame_2D* next) {
topology_valid, trace_valid,
validate_trace](Frame_2D* next) {
const bool resized_valid =
next == resized_partition_frame &&
topology_valid->load(std::memory_order_relaxed) &&
contains_color(next->image());
second_frame_valid->store(resized_valid,
std::memory_order_relaxed);
validate_trace(next);
std::_Exit(
second_frame_valid->load(std::memory_order_relaxed) &&
trace_valid->load(std::memory_order_relaxed)
? 0
: 1);
});
if (!scene->render(resized_partition_frame)) std::_Exit(2);
});