Class PipelineBuilder¶
Defined in File pipeline_builder.h
Class Documentation¶
-
class PipelineBuilder¶
Builder for creating Vulkan graphics pipelines with dynamic rendering.
Provides method chaining API for configuring all pipeline state (shaders, vertex input, rasterization, depth/stencil, blending, etc.). Uses VK_KHR_dynamic_rendering instead of render passes, specifying color/depth formats at pipeline creation time.
Default state:
Viewport/scissor: Dynamic
Topology: Triangle list
Polygon mode: Fill
Cull mode: Back-face culling (counter-clockwise front)
Line width: 1.0
Multisampling: Disabled
Usage:
auto pipeline = PipelineBuilder() .add_shader(vertex_shader) .add_shader(fragment_shader) .set_vertex_bindings(bindings) .set_vertex_attributes(attributes) .enable_depth_stencil(true, DepthCompareOperator::Less) .set_color_attachment_formats(formats) .set_layout(pipeline_layout) .build(device.get_handle(), pipeline_cache);
Public Functions
-
PipelineBuilder &add_shader(const VulkanShaderVariant &shader)¶
Adds shader stage to pipeline.
- Parameters:
shader – Shader variant (vertex, fragment, compute, etc.)
- Returns:
Reference to this builder
-
PipelineBuilder &set_vertex_bindings(const std::vector<vk::VertexInputBindingDescription> &descriptions)¶
Sets vertex input bindings.
- Parameters:
descriptions – Vertex binding descriptions (stride, input rate)
- Returns:
Reference to this builder
-
PipelineBuilder &set_vertex_attributes(const std::vector<vk::VertexInputAttributeDescription> &attribute_descriptions)¶
Sets vertex input attributes.
- Parameters:
attribute_descriptions – Vertex attribute descriptions (location, binding, format, offset)
- Returns:
Reference to this builder
-
PipelineBuilder &set_input_topology(vk::PrimitiveTopology topology)¶
Sets input topology.
- Parameters:
topology – Primitive topology (eTriangleList, eLineStrip, ePointList, etc.)
- Returns:
Reference to this builder
-
PipelineBuilder &set_polygon_mode(vk::PolygonMode mode)¶
Sets polygon mode.
- Parameters:
mode – Polygon mode (eFill, eLine, ePoint)
- Returns:
Reference to this builder
-
PipelineBuilder &set_cull_mode(vk::CullModeFlags cull_mode, vk::FrontFace front_face)¶
Sets culling mode and front face winding.
- Parameters:
cull_mode – Cull mode flags (eNone, eFront, eBack, eFrontAndBack)
front_face – Front face winding (eCounterClockwise or eClockwise)
- Returns:
Reference to this builder
-
PipelineBuilder &set_line_width(float line_width)¶
Sets line width for line primitives.
- Parameters:
line_width – Line width (default 1.0)
- Returns:
Reference to this builder
-
PipelineBuilder &disable_multisampling()¶
Disables multisampling (sample count = 1)
- Returns:
Reference to this builder
-
PipelineBuilder &enable_depth_stencil(bool depth_write_enable, DepthCompareOperator depth_compare_op)¶
Enables depth/stencil testing.
- Parameters:
depth_write_enable – Whether depth writes are enabled
depth_compare_op – Depth comparison operator (Less, Greater, etc.)
- Returns:
Reference to this builder
-
PipelineBuilder &disable_depth_stencil()¶
Disables depth/stencil testing.
- Returns:
Reference to this builder
-
PipelineBuilder &set_color_attachment_number(size_t number)¶
Sets number of color attachments.
- Parameters:
number – Number of color attachments
- Returns:
Reference to this builder
-
PipelineBuilder &set_blending_additive(size_t index)¶
Sets additive blending for color attachment.
- Parameters:
index – Color attachment index
- Returns:
Reference to this builder
-
PipelineBuilder &set_blending_alpha(size_t index)¶
Sets alpha blending for color attachment.
- Parameters:
index – Color attachment index
- Returns:
Reference to this builder
-
PipelineBuilder &set_blend(size_t index, bool enable, BlendMode blend_mode)¶
Sets blending mode for color attachment.
- Parameters:
index – Color attachment index
enable – Whether blending is enabled
blend_mode – Blend mode
- Returns:
Reference to this builder
-
PipelineBuilder &disable_color_blending(int index = -1)¶
Disables color blending for attachment(s)
- Parameters:
index – Attachment index (-1 for all attachments)
- Returns:
Reference to this builder
-
PipelineBuilder &set_color_attachment_formats(std::vector<ImageFormat> &formats)¶
Sets color attachment formats for dynamic rendering.
- Parameters:
formats – Vector of color attachment formats
- Returns:
Reference to this builder
-
PipelineBuilder &set_depth_format(ImageFormat depth_format)¶
Sets depth attachment format for dynamic rendering.
- Parameters:
depth_format – Depth format
- Returns:
Reference to this builder
-
PipelineBuilder &set_layout(vk::raii::PipelineLayout &layout)¶
Sets pipeline layout.
- Parameters:
layout – Pipeline layout (descriptor set layouts, push constants)
- Returns:
Reference to this builder
-
PipelineBuilder &set_name(const StringId &debug_name)¶
Sets pipeline debug name.
- Parameters:
debug_name – Debug name for GPU debuggers
- Returns:
Reference to this builder
Protected Attributes
-
std::vector<vk::PipelineShaderStageCreateInfo> shader_stages = {}¶
-
std::vector<vk::DynamicState> dynamic_states = {vk::DynamicState::eViewport, vk::DynamicState::eScissor}¶
-
vk::PipelineVertexInputStateCreateInfo vertex_input_state = {}¶
- vk::PipelineInputAssemblyStateCreateInfo input_assembly {.topology = vk::PrimitiveTopology::eTriangleList,.primitiveRestartEnable = vk::False}
- vk::PipelineRasterizationStateCreateInfo rasterization {.depthClampEnable = vk::False,.rasterizerDiscardEnable = vk::False,.polygonMode = vk::PolygonMode::eFill,.cullMode = vk::CullModeFlagBits::eBack,.frontFace = vk::FrontFace::eCounterClockwise,.depthBiasEnable = vk::False,.depthBiasSlopeFactor = 1.0f,.lineWidth = 1.0f}
-
vk::PipelineMultisampleStateCreateInfo multisampling = {}¶
-
vk::PipelineDepthStencilStateCreateInfo depth_stencil = {}¶
-
std::vector<vk::PipelineColorBlendAttachmentState> color_blend_attachments¶
-
vk::PipelineColorBlendStateCreateInfo color_blending = {}¶
-
vk::PipelineRenderingCreateInfo pipeline_rendering_create_info = {}¶
-
vk::raii::PipelineLayout *pipeline_layout = nullptr¶
-
std::vector<vk::Format> color_formats¶