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
}
27
28
void
VK_RasterizationPipeline::addResources
(
IPipelineResource
* resource)
29
{
30
if
(!resource)
31
return
;
32
switch
(resource->
getType
())
33
{
34
case
PipelineResourceType::BlendState
:
35
m_blendState
=
static_cast<
VK_BlendState
*
>
(resource);
36
m_blendState
->addRef();
37
break
;
38
case
PipelineResourceType::RasterizationState
:
39
m_rasterizationState
=
static_cast<
VK_RasterizationState
*
>
(resource);
40
m_rasterizationState
->addRef();
41
break
;
42
case
PipelineResourceType::ViewportState
:
43
m_viewportState
=
static_cast<
VK_ViewportState
*
>
(resource);
44
m_viewportState
->addRef();
45
break
;
46
case
PipelineResourceType::InputLayout
:
47
m_inputLayout
=
static_cast<
VK_InputLayout
*
>
(resource);
48
m_inputLayout
->addRef();
49
break
;
50
default
:
51
ferr
<<
"Unsupported pipeline resource type: "
<< (
unsigned
int)(resource->
getType
()) << std::endl;
52
break
;
53
}
54
}
55
56
void
VK_RasterizationPipeline::create
()
57
{
58
generateDefaultResources
();
59
60
//fill resource
61
std::vector<vk::DynamicState> dynamicStates = {
62
vk::DynamicState::eViewport,
63
vk::DynamicState::eScissor
64
};
65
m_dynamicState
= vk::PipelineDynamicStateCreateInfo();
66
m_dynamicState
.setDynamicStates(dynamicStates);
67
m_createInfo
.pDynamicState = &
m_dynamicState
;
68
m_createInfo
.renderPass =
static_cast<
VK_PassGroup
*
>
(
m_pass
->passGroup())->
getRenderPass
();
69
m_createInfo
.subpass =
m_pass
->index();
70
m_createInfo
.layout =
m_pipelineLayout
;
71
m_createInfo
.pVertexInputState =
m_inputLayout
->pInputStateInfo();
72
m_createInfo
.pRasterizationState = &
m_rasterizationState
->rasterizationStateCreateInfo();
73
m_createInfo
.pMultisampleState = &
m_rasterizationState
->multisampleStateCreateInfo();
74
m_inputAssemblyState
= vk::PipelineInputAssemblyStateCreateInfo{};
75
m_inputAssemblyState
.topology = vk::PrimitiveTopology::eTriangleList;
76
m_inputAssemblyState
.primitiveRestartEnable = VK_FALSE;
77
m_createInfo
.pInputAssemblyState = &
m_inputAssemblyState
;
78
m_createInfo
.pViewportState = &
m_viewportState
->viewportStateCreateInfo();
79
m_createInfo
.pDepthStencilState = &
m_depthStencilState
->getCreateInfo();
80
m_createInfo
.pColorBlendState = &
m_blendState
->colorBlendStateCreateInfo();
81
82
m_createInfo
.stageCount =
m_shaderStages
.size();
83
m_createInfo
.pStages =
m_shaderStages
.data();
84
m_pipeline
=
m_ctx
->getDevice().createGraphicsPipeline(
nullptr
,
m_createInfo
).value;
85
}
86
87
void
VK_RasterizationPipeline::bindPass
(
Pass
* pass)
88
{
89
m_pass
=
static_cast<
VK_Pass
*
>
(pass);
90
}
91
92
void
VK_RasterizationPipeline::generateDefaultResources
()
93
{
94
if
(!
m_blendState
)
95
{
96
m_blendState
=
new
VK_BlendState
(
m_ctx
);
97
if
(
m_pass
->renderTargets().size())
98
m_blendState
->targets(
m_pass
->renderTargets().rbegin()->first + 1);
99
m_blendState
->create();
100
}
101
if
(!
m_rasterizationState
)
102
{
103
m_rasterizationState
=
new
VK_RasterizationState
(
m_ctx
);
104
m_rasterizationState
->create();
105
}
106
if
(!
m_viewportState
)
107
{
108
m_viewportState
=
new
VK_ViewportState
(
m_ctx
);
109
m_viewportState
->create();
110
}
111
if
(!
m_inputLayout
)
112
{
113
m_inputLayout
=
new
VK_InputLayout
(
m_ctx
);
114
m_inputLayout
->create();
115
}
116
if
(!
m_depthStencilState
)
117
{
118
m_depthStencilState
=
new
VK_DepthStencilState
(
m_ctx
);
119
m_depthStencilState
->create();
120
}
121
}
122
}
123
124
125
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:27
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:92
FCT::RHI::VK_RasterizationPipeline::bindPass
void bindPass(Pass *pass) override
定义
VK_RasterizationPipeline.cpp:87
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:56
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:28
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