91 std::shared_ptr<Nodes::Network::GpuFieldOperator> field_operator);
103 void set_vertex_range(uint32_t first_vertex, uint32_t vertex_count);
108 void clear_vertex_range();
113 [[nodiscard]] std::shared_ptr<Nodes::Network::GpuFieldOperator>
120 void on_attach(
const std::shared_ptr<Buffer>& buffer)
override;
127 bool on_before_execute(
129 const std::shared_ptr<VKBuffer>& buffer)
override;
136 std::array<uint32_t, 3> calculate_dispatch_size(
137 const std::shared_ptr<VKBuffer>& buffer)
override;
150 void on_descriptors_created()
override;
158 uint32_t first_vertex {};
159 uint32_t vertex_count {};
160 uint32_t stride_words {};
164 std::shared_ptr<Nodes::Network::GpuFieldOperator>
m_operator;
167 uint32_t m_explicit_first {};
168 uint32_t m_explicit_count {};
171 uint64_t m_built_revision {};
173 std::chrono::steady_clock::time_point m_epoch { std::chrono::steady_clock::now() };
176 bool m_needs_cluster_id {};
181 [[nodiscard]] uint32_t buffer_capacity(
const std::shared_ptr<VKBuffer>& buffer)
const;
186 [[nodiscard]]
float elapsed()
const;
192 bool sync_revision();
209 bool ensure_cluster_binding();