Program Listing for File VkScopedPipeline.h¶
↰ Return to documentation for file (Source\Azura\RenderSystem\Inc\Vulkan\VkScopedPipeline.h
)
#pragma once
#include <vulkan/vulkan_core.h>
#include <map>
#include "Containers/Vector.h"
#include "Generic/GenericTypes.h"
#include "Vulkan/VkScopedSwapChain.h"
#include "Vulkan/VkScopedRenderPass.h"
#include "Log/Log.h"
namespace Azura {
namespace Vulkan {
class VkScopedPipeline {
public:
VkScopedPipeline(VkPipeline pipeline);
VkPipeline Real() const;
void CleanUp(VkDevice device) const;
private:
VkPipeline m_pipeline;
};
class VkPipelineFactory {
public:
VkPipelineFactory(VkDevice device, Memory::Allocator& allocator, Log logger);
VkPipelineFactory& AddBindingDescription(U32 stride, VertexSlot slot, U32 binding);
VkPipelineFactory& BulkAddAttributeDescription(const VertexSlot& vertexSlot, U32 binding);
VkPipelineFactory& SetInputAssemblyStage(PrimitiveTopology topology);
VkPipelineFactory& SetViewportStage(ViewportDimensions viewportDimensions, const VkScopedSwapChain& swapChain);
VkPipelineFactory& SetRasterizerStage(CullMode cullMode, FrontFace faceOrder);
VkPipelineFactory& SetMultisampleStage();
VkPipelineFactory& SetPipelineLayout(VkPipelineLayout layout);
VkPipelineFactory& AddShaderStage(const VkPipelineShaderStageCreateInfo& shaderStageCreateInfo);
void Submit(Containers::Vector<std::reference_wrapper<VkScopedRenderPass>> renderPasses, Containers::Vector<VkScopedPipeline>& result) const;
private:
struct BindingInfo {
U32 m_offset{0};
};
const VkDevice m_device;
// TODO(vasumahesh1): Make our own map
std::map<U32, BindingInfo> m_bindingMap;
Containers::Vector<VkVertexInputBindingDescription> m_bindingInfo;
Containers::Vector<VkVertexInputAttributeDescription> m_attributeDescription;
Containers::Vector<VkPipelineShaderStageCreateInfo> m_stages;
VkPipelineInputAssemblyStateCreateInfo m_inputAssemblyStage{};
VkPipelineViewportStateCreateInfo m_viewportStage{};
VkPipelineRasterizationStateCreateInfo m_rasterizerStage{};
VkPipelineMultisampleStateCreateInfo m_multisampleStage{};
VkPipelineLayout m_layout{};
VkViewport m_viewport{};
VkRect2D m_scissors{};
U32 m_currentLocation{0};
const Log log_VulkanRenderSystem;
};
} // namespace Vulkan
} // namespace Azura