FCT
载入中...
搜索中...
未找到
VK_RasterizationPipeline.cpp
浏览该文件的文档.
1
//
2
// Created by Administrator on 2025/3/24.
3
//
4
#include "
./VK_Pass.h
"
5
#include "
./VK_PassGroup.h
"
6
#include "
./VK_RasterizationPipeline.h
"
7
8
namespace
FCT::RHI
9
{
10
VK_RasterizationPipeline::VK_RasterizationPipeline
(
VK_Context
* ctx) :
m_createInfo
{}
11
{
12
m_ctx
= ctx;
13
m_blendState
=
nullptr
;
14
m_rasterizationState
=
nullptr
;
15
m_viewportState
=
nullptr
;
16
m_inputLayout
=
nullptr
;
17
m_depthStencilState
=
nullptr
;
18
}
19
20
VK_RasterizationPipeline::~VK_RasterizationPipeline
()
21
{
22
FCT_SAFE_RELEASE
(
m_blendState
);
23
FCT_SAFE_RELEASE
(
m_rasterizationState
);
24
FCT_SAFE_RELEASE
(
m_viewportState
);
25
FCT_SAFE_RELEASE
(
m_inputLayout
);
26
FCT_SAFE_RELEASE
(
m_depthStencilState
);
27
}
28
29
void
VK_RasterizationPipeline::addResources
(
IPipelineResource
* resource)
30
{
31
if
(!resource)
32
return
;
33
switch
(resource->
getType
())
34
{
35
case
PipelineResourceType::BlendState
:
36
m_blendState
=
static_cast<
VK_BlendState
*
>
(resource);
37
m_blendState
->addRef();
38
break
;
39
case
PipelineResourceType::RasterizationState
:
40
m_rasterizationState
=
static_cast<
VK_RasterizationState
*
>
(resource);
41
m_rasterizationState
->addRef();
42
break
;
43
case
PipelineResourceType::ViewportState
:
44
m_viewportState
=
static_cast<
VK_ViewportState
*
>
(resource);
45
m_viewportState
->addRef();
46
break
;
47
case
PipelineResourceType::InputLayout
:
48
m_inputLayout
=
static_cast<
VK_InputLayout
*
>
(resource);
49
m_inputLayout
->addRef();
50
break
;
51
default
:
52
ferr
<<
"Unsupported pipeline resource type: "
<< (
unsigned
int)(resource->
getType
()) << std::endl;
53
break
;
54
}
55
}
56
57
void
VK_RasterizationPipeline::create
()
58
{
59
generateDefaultResources
();
60
61
//fill resource
62
std::vector<vk::DynamicState> dynamicStates = {
63
vk::DynamicState::eViewport,
64
vk::DynamicState::eScissor
65
};
66
m_dynamicState
= vk::PipelineDynamicStateCreateInfo();
67
m_dynamicState
.setDynamicStates(dynamicStates);
68
m_createInfo
.pDynamicState = &
m_dynamicState
;
69
m_createInfo
.renderPass =
static_cast<
VK_PassGroup
*
>
(
m_pass
->passGroup())->
getRenderPass
();
70
m_createInfo
.subpass =
m_pass
->index();
71
m_createInfo
.layout =
m_pipelineLayout
;
72
m_createInfo
.pVertexInputState =
m_inputLayout
->pInputStateInfo();
73
m_createInfo
.pRasterizationState = &
m_rasterizationState
->rasterizationStateCreateInfo();
74
m_createInfo
.pMultisampleState = &
m_rasterizationState
->multisampleStateCreateInfo();
75
m_inputAssemblyState
= vk::PipelineInputAssemblyStateCreateInfo{};
76
m_inputAssemblyState
.topology = vk::PrimitiveTopology::eTriangleList;
77
m_inputAssemblyState
.primitiveRestartEnable = VK_FALSE;
78
m_createInfo
.pInputAssemblyState = &
m_inputAssemblyState
;
79
m_createInfo
.pViewportState = &
m_viewportState
->viewportStateCreateInfo();
80
m_createInfo
.pDepthStencilState = &
m_depthStencilState
->getCreateInfo();
81
m_createInfo
.pColorBlendState = &
m_blendState
->colorBlendStateCreateInfo();
82
83
m_createInfo
.stageCount =
m_shaderStages
.size();
84
m_createInfo
.pStages =
m_shaderStages
.data();
85
m_pipeline
=
m_ctx
->getDevice().createGraphicsPipeline(
nullptr
,
m_createInfo
).value;
86
}
87
88
void
VK_RasterizationPipeline::bindPass
(
Pass
* pass)
89
{
90
m_pass
=
static_cast<
VK_Pass
*
>
(pass);
91
}
92
93
void
VK_RasterizationPipeline::generateDefaultResources
()
94
{
95
if
(!
m_blendState
)
96
{
97
m_blendState
=
new
VK_BlendState
(
m_ctx
);
98
if
(
m_pass
->renderTargets().size())
99
m_blendState
->targets(
m_pass
->renderTargets().rbegin()->first + 1);
100
m_blendState
->create();
101
}
102
if
(!
m_rasterizationState
)
103
{
104
m_rasterizationState
=
new
VK_RasterizationState
(
m_ctx
);
105
m_rasterizationState
->create();
106
}
107
if
(!
m_viewportState
)
108
{
109
m_viewportState
=
new
VK_ViewportState
(
m_ctx
);
110
m_viewportState
->create();
111
}
112
if
(!
m_inputLayout
)
113
{
114
m_inputLayout
=
new
VK_InputLayout
(
m_ctx
);
115
m_inputLayout
->create();
116
}
117
if
(!
m_depthStencilState
)
118
{
119
m_depthStencilState
=
new
VK_DepthStencilState
(
m_ctx
);
120
m_depthStencilState
->create();
121
}
122
}
123
}
124
125
126
FCT_SAFE_RELEASE
#define FCT_SAFE_RELEASE(obj)
定义
RefCount.h:91
VK_Pass.h
VK_PassGroup.h
VK_RasterizationPipeline.h
FCT::IPipelineResource
定义
IPipelineResource.h:22
FCT::IPipelineResource::getType
virtual PipelineResourceType getType() const =0
FCT::RHI::Pass
定义
Pass.h:22
FCT::RHI::VK_DepthStencilState
定义
VK_DepthStencilState.h:14
FCT::RHI::VK_InputLayout
定义
VK_InputLayout.h:26
FCT::RHI::VK_PassGroup
定义
VK_PassGroup.h:22
FCT::RHI::VK_PassGroup::getRenderPass
vk::RenderPass getRenderPass() const
定义
VK_PassGroup.h:28
FCT::RHI::VK_Pass
定义
VK_Pass.h:15
FCT::RHI::VK_RasterizationPipeline::m_pipelineLayout
vk::PipelineLayout m_pipelineLayout
定义
VK_RasterizationPipeline.h:58
FCT::RHI::VK_RasterizationPipeline::m_createInfo
vk::GraphicsPipelineCreateInfo m_createInfo
定义
VK_RasterizationPipeline.h:50
FCT::RHI::VK_RasterizationPipeline::m_rasterizationState
VK_RasterizationState * m_rasterizationState
定义
VK_RasterizationPipeline.h:48
FCT::RHI::VK_RasterizationPipeline::m_ctx
VK_Context * m_ctx
定义
VK_RasterizationPipeline.h:44
FCT::RHI::VK_RasterizationPipeline::m_dynamicState
vk::PipelineDynamicStateCreateInfo m_dynamicState
定义
VK_RasterizationPipeline.h:53
FCT::RHI::VK_RasterizationPipeline::m_depthStencilState
VK_DepthStencilState * m_depthStencilState
定义
VK_RasterizationPipeline.h:49
FCT::RHI::VK_RasterizationPipeline::m_inputLayout
VK_InputLayout * m_inputLayout
定义
VK_RasterizationPipeline.h:46
FCT::RHI::VK_RasterizationPipeline::VK_RasterizationPipeline
VK_RasterizationPipeline(VK_Context *ctx)
定义
VK_RasterizationPipeline.cpp:10
FCT::RHI::VK_RasterizationPipeline::generateDefaultResources
void generateDefaultResources()
定义
VK_RasterizationPipeline.cpp:93
FCT::RHI::VK_RasterizationPipeline::bindPass
void bindPass(Pass *pass) override
定义
VK_RasterizationPipeline.cpp:88
FCT::RHI::VK_RasterizationPipeline::m_pipeline
vk::Pipeline m_pipeline
定义
VK_RasterizationPipeline.h:52
FCT::RHI::VK_RasterizationPipeline::m_blendState
VK_BlendState * m_blendState
定义
VK_RasterizationPipeline.h:45
FCT::RHI::VK_RasterizationPipeline::m_shaderStages
std::vector< vk::PipelineShaderStageCreateInfo > m_shaderStages
定义
VK_RasterizationPipeline.h:43
FCT::RHI::VK_RasterizationPipeline::create
void create() override
定义
VK_RasterizationPipeline.cpp:57
FCT::RHI::VK_RasterizationPipeline::m_inputAssemblyState
vk::PipelineInputAssemblyStateCreateInfo m_inputAssemblyState
定义
VK_RasterizationPipeline.h:55
FCT::RHI::VK_RasterizationPipeline::m_viewportState
VK_ViewportState * m_viewportState
定义
VK_RasterizationPipeline.h:47
FCT::RHI::VK_RasterizationPipeline::~VK_RasterizationPipeline
virtual ~VK_RasterizationPipeline()
定义
VK_RasterizationPipeline.cpp:20
FCT::RHI::VK_RasterizationPipeline::m_pass
VK_Pass * m_pass
定义
VK_RasterizationPipeline.h:51
FCT::RHI::VK_RasterizationPipeline::addResources
virtual void addResources(IPipelineResource *resource)
定义
VK_RasterizationPipeline.cpp:29
FCT::VK_BlendState
定义
VK_BlendState.h:12
FCT::VK_Context
定义
VK_Context.h:11
FCT::VK_RasterizationState
定义
VK_RasterizationState.h:11
FCT::VK_ViewportState
定义
VK_ViewportState.h:12
FCT::RHI
定义
CommandBufferGraph.h:14
FCT::PipelineResourceType::ViewportState
@ ViewportState
定义
IPipelineResource.h:20
FCT::PipelineResourceType::RasterizationState
@ RasterizationState
定义
IPipelineResource.h:13
FCT::PipelineResourceType::InputLayout
@ InputLayout
定义
IPipelineResource.h:10
FCT::PipelineResourceType::BlendState
@ BlendState
定义
IPipelineResource.h:14
FCT::ferr
std::ostream & ferr
定义
OutStream.cpp:9
src
RHI
VK_RasterizationPipeline.cpp
制作者
1.14.0