95 explicit ComputeProcessor(
const std::string& shader_path, uint32_t workgroup_x = 256);
118 void set_workgroup_size(uint32_t x, uint32_t y = 1, uint32_t z = 1);
132 void set_manual_dispatch(uint32_t x, uint32_t y = 1, uint32_t z = 1);
138 void set_custom_dispatch(std::function<std::array<uint32_t, 3>(
const std::shared_ptr<VKBuffer>&)> calculator);
149 void set_iteration_count(uint32_t
count);
162 bool is_pipeline_ready()
const {
return m_pipeline_id != Portal::Graphics::INVALID_COMPUTE_PIPELINE; }
173 virtual std::array<uint32_t, 3> calculate_dispatch_size(
const std::shared_ptr<VKBuffer>& buffer);
186 virtual bool on_iteration(
188 const std::shared_ptr<VKBuffer>& buffer,
201 virtual void on_iteration_barrier(
203 const std::shared_ptr<VKBuffer>& buffer,
206 void initialize_pipeline(
const std::shared_ptr<VKBuffer>& buffer)
override;
208 void initialize_descriptors(
const std::shared_ptr<VKBuffer>& buffer)
override;
210 void cleanup()
override;
217 void execute_shader(
const std::shared_ptr<VKBuffer>& buffer)
override;