|
Nameless Engine
|
#include <PipelineManager.h>
Classes | |
| struct | ComputePipelines |
Public Member Functions | |
| PipelineManager (Renderer *pRenderer) | |
| virtual | ~PipelineManager () |
| PipelineManager (const PipelineManager &)=delete | |
| PipelineManager & | operator= (const PipelineManager &)=delete |
| std::optional< Error > | bindBuffersToAllVulkanPipelinesIfUsed (const std::array< GpuResource *, FrameResourceManager::getFrameResourceCount()> &vResources, const std::string &sShaderResourceName, VkDescriptorType descriptorType) |
| std::optional< Error > | bindImageToAllVulkanPipelinesIfUsed (GpuResource *pImageResourceToBind, const std::string &sShaderResourceName, VkDescriptorType descriptorType, VkImageLayout imageLayout, VkSampler pSampler) |
| std::optional< Error > | recreateGraphicsPipelinesResources () |
| std::variant< PipelineSharedPtr, Error > | getGraphicsPipelineForMaterial (std::unique_ptr< PipelineConfiguration > pPipelineConfiguration, Material *pMaterial) |
| std::pair< std::recursive_mutex *, QueuedForExecutionComputeShaders * > | getComputeShadersForGraphicsQueueExecution () |
| std::pair< std::recursive_mutex, GraphicsPipelineRegistry > * | getGraphicsPipelines () |
| size_t | getCurrentGraphicsPipelineCount () |
| size_t | getCurrentComputePipelineCount () |
| Renderer * | getRenderer () const |
Private Member Functions | |
| std::variant< PipelineSharedPtr, Error > | createGraphicsPipelineForMaterial (std::unordered_map< std::string, ShaderPipelines > &pipelines, const std::string &sShaderNames, const std::set< ShaderMacro > ¯osToUse, std::unique_ptr< PipelineConfiguration > pPipelineConfiguration, Material *pMaterial) |
| void | onPipelineNoLongerUsedByMaterial (const std::string &sPipelineIdentifier) |
| void | onPipelineNoLongerUsedByComputeShaderInterface (const std::string &sComputeShaderName, ComputeShaderInterface *pComputeShaderInterface) |
| std::variant< PipelineSharedPtr, Error > | findOrCreatePipeline (std::unordered_map< std::string, ShaderPipelines > &pipelines, const std::string &sKeyToLookFor, const std::set< ShaderMacro > ¯osToLookFor, std::unique_ptr< PipelineConfiguration > pPipelineConfiguration, Material *pMaterial) |
Private Attributes | |
| std::pair< std::recursive_mutex, GraphicsPipelineRegistry > | mtxGraphicsPipelines |
| ComputePipelines | computePipelines |
| Renderer *const | pRenderer = nullptr |
Friends | |
| class | Pipeline |
| class | DelayedPipelineResourcesCreation |
| class | ComputeShaderInterface |
Base class for managing render specific pipelines.
| ne::PipelineManager::PipelineManager | ( | Renderer * | pRenderer | ) |
Creates a new pipeline manager.
| pRenderer | Renderer that owns this pipeline manager. |
|
virtual |
Checks that there are no existing pipelines left.
| std::optional< Error > ne::PipelineManager::bindBuffersToAllVulkanPipelinesIfUsed | ( | const std::array< GpuResource *, FrameResourceManager::getFrameResourceCount()> & | vResources, |
| const std::string & | sShaderResourceName, | ||
| VkDescriptorType | descriptorType | ||
| ) |
Binds the specified GPU resources (buffers, not images) to all Vulkan pipelines that use the specified shader resource.
| vResources | Resources to bind. |
| sShaderResourceName | Name of the shader resource (name from shader code) to bind to. |
| descriptorType | Type of the descriptor to bind. |
| std::optional< Error > ne::PipelineManager::bindImageToAllVulkanPipelinesIfUsed | ( | GpuResource * | pImageResourceToBind, |
| const std::string & | sShaderResourceName, | ||
| VkDescriptorType | descriptorType, | ||
| VkImageLayout | imageLayout, | ||
| VkSampler | pSampler | ||
| ) |
Binds the specified GPU image (not buffer) to all Vulkan pipelines that use the specified shader resource.
| pImageResourceToBind | Image to bind. |
| sShaderResourceName | Name of the shader resource (name from shader code) to bind to. |
| descriptorType | Type of the descriptor to bind. |
| imageLayout | Layout of the image. |
| pSampler | Sampler to use for the image. |
|
private |
Assigns vertex and pixel shaders to create a render specific graphics pipeline (for usual rendering).
| pipelines | Pipelines of specific type to look in. |
| sShaderNames | Shader or shaders (map key value) for target pipeline. |
| macrosToUse | Macros that are set (can be only vertex or combined). |
| pPipelineConfiguration | Settings that determine pipeline usage and usage details. |
| pMaterial | Material that requests the pipeline. |
|
private |
Looks for a pipeline and returns it if found, otherwise creates and return it.
| pipelines | Pipelines of specific type to look in. |
| sKeyToLookFor | Shader or shaders (map key value) for target pipeline. |
| macrosToLookFor | Macros that are set (can be only vertex or combined). |
| pPipelineConfiguration | Settings that determine pipeline usage and usage details. |
| pMaterial | Material that requests the pipeline. |
|
inline |
Returns all compute shaders and their pipelines to be executed on the graphics queue.
| size_t ne::PipelineManager::getCurrentComputePipelineCount | ( | ) |
Returns the total number of currently existing compute pipelines.
| size_t ne::PipelineManager::getCurrentGraphicsPipelineCount | ( | ) |
Returns the total number of currently existing graphics pipelines.
| std::variant< PipelineSharedPtr, Error > ne::PipelineManager::getGraphicsPipelineForMaterial | ( | std::unique_ptr< PipelineConfiguration > | pPipelineConfiguration, |
| Material * | pMaterial | ||
| ) |
Look for already created pipeline that uses the specified shaders and settings and returns it, otherwise creates a new pipeline.
| pPipelineConfiguration | Settings that determine pipeline usage and usage details. |
| pMaterial | Material that requests the pipeline. |
|
inline |
Returns all vertex/pixel shaders and their graphics pipelines.
| Renderer * ne::PipelineManager::getRenderer | ( | ) | const |
Returns renderer that owns this pipeline manager.
|
private |
Called from a pipeline when a compute shader interface is no longer using a pipeline.
| sComputeShaderName | Name of the compute shader that the pipeline uses. |
| pComputeShaderInterface | Compute shader interface that stopped using the pipeline. |
|
private |
Called from a pipeline when a material is no longer using a pipeline (for ex. because changing shaders).
| sPipelineIdentifier | Pipeline identifier. |
| std::optional< Error > ne::PipelineManager::recreateGraphicsPipelinesResources | ( | ) |
Releases all internal resources from all graphics graphics pipelines and then recreates them to reference new resources/parameters from the renderer.
|
private |
Stores all compute pipelines.
|
private |
Groups all graphics pipelines.
|
private |
Do not delete (free) this pointer. Renderer that owns this pipeline manager.