MayaFlux 0.5.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ initialize_pipeline()

void MayaFlux::Buffers::ComputeProcessor::initialize_pipeline ( const std::shared_ptr< VKBuffer > &  buffer)
overrideprotectedvirtual

Implements MayaFlux::Buffers::ShaderProcessor.

Definition at line 24 of file ComputeProcessor.cpp.

25{
28 "Cannot create pipeline without shader");
29 return;
30 }
31
32 auto& compute_press = Portal::Graphics::get_compute_press();
33
34 std::map<std::pair<uint32_t, uint32_t>, Portal::Graphics::DescriptorBindingInfo> unified_bindings;
35
36 const auto& descriptor_bindings = buffer->get_pipeline_context().descriptor_buffer_bindings;
37 for (const auto& binding : descriptor_bindings) {
38 unified_bindings[{ binding.set, binding.binding }] = binding;
39 }
40
41 for (const auto& [name, binding] : m_config.bindings) {
42 auto key = std::make_pair(binding.set, binding.binding);
43 if (unified_bindings.find(key) == unified_bindings.end()) {
44 unified_bindings[key] = Portal::Graphics::DescriptorBindingInfo {
45 .set = binding.set,
46 .binding = binding.binding,
47 .type = binding.type,
48 .buffer_info = {},
49 .name = name
50 };
51 }
52 }
53
54 std::map<uint32_t, std::vector<Portal::Graphics::DescriptorBindingInfo>> bindings_by_set;
55 for (const auto& [key, binding] : unified_bindings) {
56 bindings_by_set[binding.set].push_back(binding);
57 }
58
59 std::vector<std::vector<Portal::Graphics::DescriptorBindingInfo>> descriptor_sets;
60
61 descriptor_sets.reserve(bindings_by_set.size());
62 for (const auto& [set_index, set_bindings] : bindings_by_set) {
63 descriptor_sets.push_back(set_bindings);
64 }
65
66 m_pipeline_id = compute_press.create_pipeline(
68 descriptor_sets,
70
73 "Failed to create compute pipeline");
74 return;
75 }
76
78
80 "Compute pipeline created (ID: {}, {} descriptor sets, {} bytes push constants)",
81 m_pipeline_id, descriptor_sets.size(), m_config.push_constant_size);
82}
#define MF_INFO(comp, ctx,...)
#define MF_ERROR(comp, ctx,...)
Portal::Graphics::ComputePipelineID m_pipeline_id
Portal::Graphics::ShaderID m_shader_id
size_t resolve_push_constant_size(const std::shared_ptr< VKBuffer > &buffer) const
Byte width of this processor's push constant block, extended to cover any fragment staged on the buff...
virtual void on_pipeline_created(Portal::Graphics::ComputePipelineID pipeline_id)
Called after pipeline is created.
@ BufferProcessing
Buffer processing (Buffers::BufferManager, processing chains)
@ Buffers
Buffers, Managers, processors and processing chains.
constexpr ShaderID INVALID_SHADER
constexpr ComputePipelineID INVALID_COMPUTE_PIPELINE
MAYAFLUX_API ComputePress & get_compute_press()

References MayaFlux::Buffers::ShaderConfig::bindings, MayaFlux::Journal::BufferProcessing, MayaFlux::Journal::Buffers, MayaFlux::Portal::Graphics::get_compute_press(), MayaFlux::Portal::Graphics::INVALID_COMPUTE_PIPELINE, MayaFlux::Portal::Graphics::INVALID_SHADER, MayaFlux::Buffers::ShaderProcessor::m_config, m_pipeline_id, MayaFlux::Buffers::ShaderProcessor::m_shader_id, MF_ERROR, MF_INFO, MayaFlux::Buffers::ShaderProcessor::on_pipeline_created(), MayaFlux::Buffers::ShaderConfig::push_constant_size, MayaFlux::Buffers::ShaderProcessor::resolve_push_constant_size(), and MayaFlux::Portal::Graphics::DescriptorBindingInfo::set.

+ Here is the call graph for this function: