SDEngine
Game Engine
Loading...
Searching...
No Matches
sd::PipelineFactory Class Reference

Creates and owns graphics pipelines. Handles cleanup on destruction. More...

#include <PipelineFactory.hpp>

+ Collaboration diagram for sd::PipelineFactory:

Classes

struct  Handle
 
struct  PipelineDesc
 
struct  PipelineEntry
 

Public Member Functions

 PipelineFactory (VkDevice device, ShaderLibrary &shaders)
 
 ~PipelineFactory ()
 
Handle create_graphics_pipeline (const PipelineDesc &desc, VkPipelineLayout layout)
 
VkPipeline get_pipeline (Handle handle) const
 
bool is_valid (Handle handle) const
 Check if a handle is valid (exists and generation matches).
 
void destroy_pipeline (Handle handle)
 
VkPipelineLayout create_push_constant_layout (VkShaderStageFlags stages, u32 size)
 
std::vector< std::pair< std::string, std::string > > recreate_all_pipelines ()
 
 PipelineFactory (const PipelineFactory &)=delete
 
PipelineFactoryoperator= (const PipelineFactory &)=delete
 

Static Public Attributes

static constexpr Handle null_handle {0, 0}
 

Private Member Functions

VkResult create_pipeline_instance (const PipelineDesc &desc, vk::PipelineLayout layout, vk::UniquePipeline *pipeline)
 

Private Attributes

vk::Device m_device
 
ShaderLibrarym_shaders
 
vk::UniquePipelineCache m_pipeline_cache
 
std::vector< PipelineEntrym_tracked_pipelines
 
std::vector< uint32_tm_free_slots
 
std::vector< vk::UniquePipelineLayout > m_created_layouts
 

Detailed Description

Creates and owns graphics pipelines. Handles cleanup on destruction.

Constructor & Destructor Documentation

◆ PipelineFactory() [1/2]

sd::PipelineFactory::PipelineFactory ( VkDevice  device,
ShaderLibrary shaders 
)
explicit

◆ ~PipelineFactory()

sd::PipelineFactory::~PipelineFactory ( )
default

◆ PipelineFactory() [2/2]

sd::PipelineFactory::PipelineFactory ( const PipelineFactory )
delete

Member Function Documentation

◆ create_graphics_pipeline()

PipelineFactory::Handle sd::PipelineFactory::create_graphics_pipeline ( const PipelineDesc desc,
VkPipelineLayout  layout 
)

Create a graphics pipeline and return a stable handle. The handle remains valid even after RecreateAllPipelines() is called.

◆ create_pipeline_instance()

VkResult sd::PipelineFactory::create_pipeline_instance ( const PipelineDesc desc,
vk::PipelineLayout  layout,
vk::UniquePipeline *  pipeline 
)
private

◆ create_push_constant_layout()

VkPipelineLayout sd::PipelineFactory::create_push_constant_layout ( VkShaderStageFlags  stages,
u32  size 
)

◆ destroy_pipeline()

void sd::PipelineFactory::destroy_pipeline ( Handle  handle)

Destroy a pipeline and invalidate its handle. Subsequent GetPipeline() calls will return VK_NULL_HANDLE.

◆ get_pipeline()

VkPipeline sd::PipelineFactory::get_pipeline ( Handle  handle) const

Get the current VkPipeline for a handle. Returns VK_NULL_HANDLE if handle is invalid or pipeline was destroyed.

◆ is_valid()

bool sd::PipelineFactory::is_valid ( Handle  handle) const

Check if a handle is valid (exists and generation matches).

◆ operator=()

PipelineFactory & sd::PipelineFactory::operator= ( const PipelineFactory )
delete

◆ recreate_all_pipelines()

std::vector< std::pair< std::string, std::string > > sd::PipelineFactory::recreate_all_pipelines ( )

Recreates all tracked pipelines. Usually called after clearing ShaderLibrary cache. Handles remain valid - they resolve to the new pipeline instances.

Returns
Vector of failed shader path pairs (vert, frag) for any pipelines that failed to recreate.

Member Data Documentation

◆ m_created_layouts

std::vector<vk::UniquePipelineLayout> sd::PipelineFactory::m_created_layouts
private

◆ m_device

vk::Device sd::PipelineFactory::m_device
private

◆ m_free_slots

std::vector<uint32_t> sd::PipelineFactory::m_free_slots
private

◆ m_pipeline_cache

vk::UniquePipelineCache sd::PipelineFactory::m_pipeline_cache
private

◆ m_shaders

ShaderLibrary& sd::PipelineFactory::m_shaders
private

◆ m_tracked_pipelines

std::vector<PipelineEntry> sd::PipelineFactory::m_tracked_pipelines
private

◆ null_handle

constexpr Handle sd::PipelineFactory::null_handle {0, 0}
staticconstexpr

The documentation for this class was generated from the following files: