26 u32 internal_cell_count;
27 bool one_cell_mode =
false;
29 std::unique_ptr<sycl::buffer<u32>> buf_lchild_id;
30 std::unique_ptr<sycl::buffer<u32>> buf_rchild_id;
31 std::unique_ptr<sycl::buffer<u8>> buf_lchild_flag;
32 std::unique_ptr<sycl::buffer<u8>> buf_rchild_flag;
33 std::unique_ptr<sycl::buffer<u32>> buf_endrange;
36 return bool(buf_lchild_id) && bool(buf_rchild_id) && bool(buf_lchild_flag)
37 && bool(buf_rchild_flag) && bool(buf_endrange);
41 sycl::queue &queue,
u32 _internal_cell_count, sycl::buffer<u_morton> &morton_buf);
43 void build_one_cell_mode();
45 [[nodiscard]]
inline u64 memsize()
const {
47 sum +=
sizeof(internal_cell_count);
48 sum +=
sizeof(one_cell_mode);
50 auto add_ptr = [&](
auto &a) {
52 sum += a->byte_size();
56 add_ptr(buf_lchild_id);
57 add_ptr(buf_rchild_id);
58 add_ptr(buf_lchild_flag);
59 add_ptr(buf_rchild_flag);
60 add_ptr(buf_endrange);
72 internal_cell_count = std::move(other.internal_cell_count);
73 one_cell_mode = std::move(other.one_cell_mode);
74 buf_lchild_id = std::move(other.buf_lchild_id);
75 buf_rchild_id = std::move(other.buf_rchild_id);
76 buf_lchild_flag = std::move(other.buf_lchild_flag);
77 buf_rchild_flag = std::move(other.buf_rchild_flag);
78 buf_endrange = std::move(other.buf_endrange);
84 u32 internal_cell_count,
86 std::unique_ptr<sycl::buffer<u32>> &&buf_lchild_id,
87 std::unique_ptr<sycl::buffer<u32>> &&buf_rchild_id,
88 std::unique_ptr<sycl::buffer<u8>> &&buf_lchild_flag,
89 std::unique_ptr<sycl::buffer<u8>> &&buf_rchild_flag,
90 std::unique_ptr<sycl::buffer<u32>> &&buf_endrange)
91 : internal_cell_count(internal_cell_count), one_cell_mode(one_cell_mode),
92 buf_lchild_id(std::move(buf_lchild_id)), buf_rchild_id(std::move(buf_rchild_id)),
93 buf_lchild_flag(std::move(buf_lchild_flag)),
94 buf_rchild_flag(std::move(buf_rchild_flag)), buf_endrange(std::move(buf_endrange)) {}
98 serializer.write(internal_cell_count);
99 serializer.write((one_cell_mode) ? 1_u32 : 0_u32);
100 serializer.write_buf(*buf_lchild_id, internal_cell_count);
101 serializer.write_buf(*buf_rchild_id, internal_cell_count);
102 serializer.write_buf(*buf_lchild_flag, internal_cell_count);
103 serializer.write_buf(*buf_rchild_flag, internal_cell_count);
104 serializer.write_buf(*buf_endrange, internal_cell_count);
111 return H::serialize_byte_size<u32>() + H::serialize_byte_size<u32>()
112 + H::serialize_byte_size<u32>(internal_cell_count)
113 + H::serialize_byte_size<u32>(internal_cell_count)
114 + H::serialize_byte_size<u8>(internal_cell_count)
115 + H::serialize_byte_size<u8>(internal_cell_count)
116 + H::serialize_byte_size<u32>(internal_cell_count);
123 serializer.load(strc.internal_cell_count);
126 serializer.load(one_cell);
127 strc.one_cell_mode = (one_cell == 1);
129 strc.buf_lchild_id = std::make_unique<sycl::buffer<u32>>(strc.internal_cell_count);
130 strc.buf_rchild_id = std::make_unique<sycl::buffer<u32>>(strc.internal_cell_count);
131 strc.buf_lchild_flag = std::make_unique<sycl::buffer<u8>>(strc.internal_cell_count);
132 strc.buf_rchild_flag = std::make_unique<sycl::buffer<u8>>(strc.internal_cell_count);
133 strc.buf_endrange = std::make_unique<sycl::buffer<u32>>(strc.internal_cell_count);
135 serializer.load_buf(*strc.buf_lchild_id, strc.internal_cell_count);
136 serializer.load_buf(*strc.buf_rchild_id, strc.internal_cell_count);
137 serializer.load_buf(*strc.buf_lchild_flag, strc.internal_cell_count);
138 serializer.load_buf(*strc.buf_rchild_flag, strc.internal_cell_count);
139 serializer.load_buf(*strc.buf_endrange, strc.internal_cell_count);