187{
190 "Cannot dispatch without pipeline and descriptors");
191 return;
192 }
193
196 "Descriptor sets not initialized");
197 return;
198 }
199
202
204
207
209
210 auto& descriptor_bindings = buffer->get_pipeline_context().descriptor_buffer_bindings;
211 if (!descriptor_bindings.empty()) {
212 for (const auto& binding : descriptor_bindings) {
215 "Descriptor set index {} out of range", binding.set);
216 continue;
217 }
218
219 foundry.update_descriptor_buffer(
221 binding.binding,
222 binding.type,
223 binding.buffer_info.buffer,
224 binding.buffer_info.offset,
225 binding.buffer_info.range);
226 }
227 }
228
231 }
232
233 const auto& staging = buffer->get_pipeline_context();
234 if (!staging.push_constant_staging.empty()) {
235 compute_press.push_constants(
236 cmd_id,
238 staging.push_constant_staging.data(),
239 staging.push_constant_staging.size());
241 compute_press.push_constants(
242 cmd_id,
246 }
247
249
251 compute_press.dispatch(cmd_id, dispatch_size[0], dispatch_size[1], dispatch_size[2]);
252
254
255 foundry.buffer_barrier(
256 cmd_id,
257 buffer->get_buffer(),
258 vk::AccessFlagBits::eShaderWrite,
259 vk::AccessFlagBits::eShaderRead | vk::AccessFlagBits::eTransferRead,
260 vk::PipelineStageFlagBits::eComputeShader,
261 vk::PipelineStageFlagBits::eComputeShader | vk::PipelineStageFlagBits::eTransfer);
262
263 foundry.submit_and_wait(cmd_id);
264}
#define MF_ERROR(comp, ctx,...)
#define MF_RT_ERROR(comp, ctx,...)
Portal::Graphics::ComputePipelineID m_pipeline_id
virtual std::array< uint32_t, 3 > calculate_dispatch_size(const std::shared_ptr< VKBuffer > &buffer)
Calculate dispatch size from buffer.
Portal::Graphics::CommandBufferID m_last_command_buffer
std::vector< uint8_t > m_push_constant_data
virtual void on_after_execute(Portal::Graphics::CommandBufferID cmd_id, const std::shared_ptr< VKBuffer > &buffer)
Called after each process callback.
virtual bool on_before_execute(Portal::Graphics::CommandBufferID cmd_id, const std::shared_ptr< VKBuffer > &buffer)
Called before each process callback.
std::shared_ptr< VKBuffer > m_last_processed_buffer
std::vector< Portal::Graphics::DescriptorSetID > m_descriptor_set_ids
@ BufferProcessing
Buffer processing (Buffers::BufferManager, processing chains)
@ Buffers
Buffers, Managers, processors and processing chains.
MAYAFLUX_API ShaderFoundry & get_shader_foundry()
Get the global shader compiler instance.
constexpr ComputePipelineID INVALID_COMPUTE_PIPELINE
MAYAFLUX_API ComputePress & get_compute_press()