19{
22 "Cannot create pipeline without shader");
23 return;
24 }
25
27
28 std::map<std::pair<uint32_t, uint32_t>, Portal::Graphics::DescriptorBindingInfo> unified_bindings;
29
30 const auto& descriptor_bindings = buffer->get_pipeline_context().descriptor_buffer_bindings;
31 for (const auto& binding : descriptor_bindings) {
32 unified_bindings[{ binding.set, binding.binding }] = binding;
33 }
34
35 for (
const auto& [name, binding] :
m_config.bindings) {
36 auto key = std::make_pair(binding.set, binding.binding);
37 if (unified_bindings.find(key) == unified_bindings.end()) {
38 unified_bindings[key] = Portal::Graphics::DescriptorBindingInfo {
39 .set = binding.set,
40 .binding = binding.binding,
41 .type = binding.type,
42 .buffer_info = {},
43 .name = name
44 };
45 }
46 }
47
48 std::map<uint32_t, std::vector<Portal::Graphics::DescriptorBindingInfo>> bindings_by_set;
49 for (const auto& [key, binding] : unified_bindings) {
50 bindings_by_set[binding.set].push_back(binding);
51 }
52
53 std::vector<std::vector<Portal::Graphics::DescriptorBindingInfo>> descriptor_sets;
54
55 descriptor_sets.reserve(bindings_by_set.size());
56 for (const auto& [set_index, set_bindings] : bindings_by_set) {
57 descriptor_sets.push_back(set_bindings);
58 }
59
60 const auto& staging = buffer->get_pipeline_context().push_constant_staging;
61 size_t push_constant_size = 0;
62
63 if (!staging.empty()) {
64 push_constant_size = staging.size();
65 } else {
67 }
68
71 descriptor_sets,
72 push_constant_size);
73
76 "Failed to create compute pipeline");
77 return;
78 }
79
81
83 "Compute pipeline created (ID: {}, {} descriptor sets, {} bytes push constants)",
85}
#define MF_INFO(comp, ctx,...)
#define MF_ERROR(comp, ctx,...)
Portal::Graphics::ComputePipelineID m_pipeline_id
Portal::Graphics::ShaderID m_shader_id
std::vector< uint8_t > m_push_constant_data
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()
size_t push_constant_size