Create pipeline layout from configuration.
148{
149 std::vector<vk::PushConstantRange> vk_push_constants;
150 vk_push_constants.reserve(config.push_constants.size());
151
153 vk::PushConstantRange
range;
154 range.stageFlags = pc.stage_flags;
155 range.offset = pc.offset;
156 range.size = pc.size;
157 vk_push_constants.push_back(range);
158 }
159
160 vk::PipelineLayoutCreateInfo layout_info;
161 layout_info.setLayoutCount = static_cast<uint32_t>(config.set_layouts.size());
162 layout_info.pSetLayouts = config.set_layouts.empty() ? nullptr : config.set_layouts.data();
163 layout_info.pushConstantRangeCount = static_cast<uint32_t>(vk_push_constants.size());
164 layout_info.pPushConstantRanges = vk_push_constants.empty() ? nullptr : vk_push_constants.data();
165
166 vk::PipelineLayout layout;
167 try {
168 layout =
device.createPipelineLayout(layout_info);
169 } catch (const vk::SystemError& e) {
171 "Failed to create pipeline layout: {}", e.what());
172 return nullptr;
173 }
174
176 "Pipeline layout created ({} sets, {} push constant ranges)",
177 config.set_layouts.size(), config.push_constants.size());
178
179 return layout;
180}
#define MF_ERROR(comp, ctx,...)
#define MF_DEBUG(comp, ctx,...)
vk::PhysicalDevice device
void push_constants(vk::CommandBuffer cmd, vk::ShaderStageFlags stage_flags, uint32_t offset, uint32_t size, const void *data) const
Update push constants.
@ GraphicsBackend
Graphics/visual rendering backend (Vulkan, OpenGL)
@ Core
Core engine, backend, subsystems.
std::vector< double > range(std::span< const double > data, size_t n_windows, uint32_t hop_size, uint32_t window_size)
Value range (max - min) per window.