// Copyright (C) 2020 Jérôme Leclercq // This file is part of the "Nazara Engine - Renderer module" // For conditions of distribution and use, see copyright notice in Config.hpp #pragma once #ifndef NAZARA_VULKANRENDERER_VULKANRENDERPIPELINE_HPP #define NAZARA_VULKANRENDERER_VULKANRENDERPIPELINE_HPP #include #include #include #include #include #include #include #include namespace Nz { class NAZARA_VULKANRENDERER_API VulkanRenderPipeline : public RenderPipeline { public: struct CreateInfo; VulkanRenderPipeline(Vk::Device& device, RenderPipelineInfo pipelineInfo); ~VulkanRenderPipeline() = default; VkPipeline Get(const Vk::RenderPass& renderPass); static std::vector BuildColorBlendAttachmentStateList(const RenderPipelineInfo& pipelineInfo); static VkPipelineColorBlendStateCreateInfo BuildColorBlendInfo(const RenderPipelineInfo& pipelineInfo, const std::vector& attachmentState); static VkPipelineDepthStencilStateCreateInfo BuildDepthStencilInfo(const RenderPipelineInfo& pipelineInfo); static VkPipelineDynamicStateCreateInfo BuildDynamicStateInfo(const RenderPipelineInfo& pipelineInfo, const std::vector& dynamicStates); static std::vector BuildDynamicStateList(const RenderPipelineInfo& pipelineInfo); static VkPipelineInputAssemblyStateCreateInfo BuildInputAssemblyInfo(const RenderPipelineInfo& pipelineInfo); static VkPipelineMultisampleStateCreateInfo BuildMultisampleInfo(const RenderPipelineInfo& pipelineInfo); static VkPipelineRasterizationStateCreateInfo BuildRasterizationInfo(const RenderPipelineInfo& pipelineInfo); static VkPipelineViewportStateCreateInfo BuildViewportInfo(const RenderPipelineInfo& pipelineInfo); static VkStencilOpState BuildStencilOp(const RenderPipelineInfo& pipelineInfo, bool front); static std::vector BuildShaderStageInfo(const RenderPipelineInfo& pipelineInfo); static std::vector BuildVertexAttributeDescription(const RenderPipelineInfo& pipelineInfo); static std::vector BuildVertexBindingDescription(const RenderPipelineInfo& pipelineInfo); static VkPipelineVertexInputStateCreateInfo BuildVertexInputInfo(const RenderPipelineInfo& pipelineInfo, const std::vector& vertexAttributes, const std::vector& bindingDescription); static CreateInfo BuildCreateInfo(const RenderPipelineInfo& pipelineInfo); struct CreateInfo { struct StateData { VkPipelineColorBlendStateCreateInfo colorBlendState; VkPipelineDepthStencilStateCreateInfo depthStencilState; VkPipelineDynamicStateCreateInfo dynamicState; VkPipelineMultisampleStateCreateInfo multiSampleState; VkPipelineInputAssemblyStateCreateInfo inputAssemblyState; VkPipelineRasterizationStateCreateInfo rasterizationState; VkPipelineVertexInputStateCreateInfo vertexInputState; VkPipelineViewportStateCreateInfo viewportState; }; std::vector colorBlendAttachmentState; std::vector dynamicStates; std::vector shaderStages; std::vector vertexAttributesDescription; std::vector vertexBindingDescription; std::unique_ptr stateData; VkGraphicsPipelineCreateInfo pipelineInfo; }; private: std::unordered_map m_pipelines; MovablePtr m_device; CreateInfo m_pipelineCreateInfo; RenderPipelineInfo m_pipelineInfo; }; } #include #endif // NAZARA_VULKANRENDERER_VULKANRENDERPIPELINE_HPP