Class PipelineBuilder

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:

shaderShader 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:

descriptionsVertex 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_descriptionsVertex 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:

layoutPipeline 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

vk::raii::Pipeline build(const vk::raii::Device &device, const vk::raii::PipelineCache &pipeline_cache)

Builds the graphics pipeline.

Parameters:
  • device – Vulkan device

  • pipeline_cachePipeline cache for PSO reuse

Returns:

Created pipeline

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
StringId name