-
Notifications
You must be signed in to change notification settings - Fork 15
/
Copy pathVK_PipelineImpl.h
113 lines (91 loc) · 4.51 KB
/
VK_PipelineImpl.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#ifndef VK_PIPLELINEIMPL_H
#define VK_PIPLELINEIMPL_H
#include <list>
#include <memory>
#include <functional>
#include <VK_Pipeline.h>
#include "VK_PushDescriptor.h"
#include "VK_DescriptorSets.h"
#include "VK_DescriptorSetLayout.h"
#include "VK_DescriptorPool.h"
#include "VK_PipelineLayout.h"
#include "VK_PushDescriptor.h"
#include "VK_SecondaryCommandBufferCallback.h"
class VK_ContextImpl;
class VK_DynamicStateImpl;
class VK_PipelineImpl : public VK_Pipeline
{
friend class VK_PipelineDeriveImpl;
public:
VK_PipelineImpl() = delete;
VK_PipelineImpl(VK_ContextImpl *context, VK_ShaderSet *shaderSet,
VK_PipelineImpl *inputParent = nullptr);
virtual ~VK_PipelineImpl();
public:
VK_ShaderSet *getShaderSet()const;
void setVertexInputStateCreateInfo(const VkPipelineVertexInputStateCreateInfo &createInfo)override;
VkPipelineVertexInputStateCreateInfo getVertexInputStateCreateInfo()const override;
void setInputAssemblyStateCreateInfo(const VkPipelineInputAssemblyStateCreateInfo &createInfo)
override;
VkPipelineInputAssemblyStateCreateInfo getInputAssemblyStateCreateInfo()const override;
void setRasterizationStateCreateInfo(const VkPipelineRasterizationStateCreateInfo &createInfo)
override;
VkPipelineRasterizationStateCreateInfo getRasterizationStateCreateInfo()const override;
VkPipelineDepthStencilStateCreateInfo getDepthStencilStateCreateInfo()const override;
void setDepthStencilStateCreateInfo(const VkPipelineDepthStencilStateCreateInfo &createInfo)
override;
void setTessellationStateCreateInfo(const VkPipelineTessellationStateCreateInfo &createInfo)
override;
VkPipelineTessellationStateCreateInfo getTessellationStateCreateInfo()override;
void setMultisampleStateCreateInfo(const VkPipelineMultisampleStateCreateInfo &createInfo)override;
VkPipelineMultisampleStateCreateInfo getMultisampleStateCreateInfo()const override;
void setColorBlendStateCreateInfo(const VkPipelineColorBlendStateCreateInfo &createInfo)override;
VkPipelineColorBlendStateCreateInfo getColorBlendStateCreateInfo()const override;
VK_DynamicState *getDynamicState()const override;
public:
void prepare();
void addPushConstant(const VkPushConstantRange &constantRange, const char *data) override;
void addPushDescriptor(const VkWriteDescriptorSet &descriptor)override;
virtual bool create() override;
void addRenderBuffer(VK_Buffer *buffer)override;
VK_Pipeline *fork(VK_ShaderSet *shaderSet) override;
bool needRecreate()const override;
void setNeedRecreate();
void render(VkCommandBuffer buffer, uint32_t index);
void render(VkCommandBuffer buffer, uint32_t index,
std::shared_ptr<VK_SecondaryCommandBufferCallback> caller,
uint32_t current, uint32_t total);
void release()override;
protected:
void initVertexInputStateCreateInfo(VK_ShaderSet *shaderSet);
void initMultisampleStateCreateInfo(VkSampleCountFlagBits sampleCount);
void initColorBlendStateCreateInfo();
void initInputAssemblyStateCreateInfo();
void initRasterizationStateCreateInfo();
void initDepthStencilStateCreateInfo();
void initColorBlendAttachmentState();
bool createPipeline(VkPipelineCreateFlagBits flag);
protected:
VK_ContextImpl *context = nullptr;
VK_ShaderSet *shaderSet = nullptr;
VK_PipelineImpl *parent = nullptr;
VK_DescriptorSetLayout *descriptorSetLayout = nullptr;
std::shared_ptr<VK_PipelineLayout> pipelineLayout;
VK_DescriptorPool *descriptorPool = nullptr;
std::shared_ptr<VK_DescriptorSets> descriptorSets;
VkPipeline pipeline = nullptr;
std::shared_ptr<VK_PushDescriptor> pushDescriptor;
std::optional<VkPipelineVertexInputStateCreateInfo> vertexInputStateCreateInfo;
std::optional<VkPipelineInputAssemblyStateCreateInfo> inputAssemblyStateCreateInfo;
std::optional<VkPipelineRasterizationStateCreateInfo> rasterizationStateCreateInfo;
std::optional<VkPipelineDepthStencilStateCreateInfo> depthStencilStateCreateInfo;
std::optional<VkPipelineMultisampleStateCreateInfo> multiSampleStateCreateInfo;
VkPipelineColorBlendAttachmentState colorBlendAttachment{};
std::optional<VkPipelineColorBlendStateCreateInfo> colorBlendStateCreateInfo;
std::optional<VkPipelineTessellationStateCreateInfo> tessellationStateCreateInfo;
VK_DynamicStateImpl *vkDynamicState = nullptr;
VkGraphicsPipelineCreateInfo pipelineCreateInfo = {};
bool needUpdate = true;
std::list<VK_Buffer *> buffers;
};
#endif // VK_PIPLELINEIMPL_H