Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
VkCV Framework
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Model registry
Operate
Terraform modules
Monitor
Service Desk
Analyze
Contributor analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Vulkan2021
VkCV Framework
Commits
eb28d851
Commit
eb28d851
authored
3 years ago
by
Mark Oliver Mints
Browse files
Options
Downloads
Patches
Plain Diff
[
#71
] Rafactor: code formation
parent
ca4aa5dd
Branches
Branches containing commit
Tags
Tags containing commit
1 merge request
!83
Resolve "Refactor Pipeline Config and Manager"
Pipeline
#26678
passed
3 years ago
Stage: build
Stage: deploy
Changes
1
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
src/vkcv/PipelineManager.cpp
+44
-50
44 additions, 50 deletions
src/vkcv/PipelineManager.cpp
with
44 additions
and
50 deletions
src/vkcv/PipelineManager.cpp
+
44
−
50
View file @
eb28d851
...
@@ -59,26 +59,26 @@ namespace vkcv
...
@@ -59,26 +59,26 @@ namespace vkcv
case
(
DepthTest
::
Greater
):
return
vk
::
CompareOp
::
eGreater
;
case
(
DepthTest
::
Greater
):
return
vk
::
CompareOp
::
eGreater
;
case
(
DepthTest
::
GreatherEqual
):
return
vk
::
CompareOp
::
eGreaterOrEqual
;
case
(
DepthTest
::
GreatherEqual
):
return
vk
::
CompareOp
::
eGreaterOrEqual
;
case
(
DepthTest
::
Equal
):
return
vk
::
CompareOp
::
eEqual
;
case
(
DepthTest
::
Equal
):
return
vk
::
CompareOp
::
eEqual
;
default:
vkcv_log
(
vkcv
::
LogLevel
::
ERROR
,
"Unknown depth test enum"
);
return
vk
::
CompareOp
::
eAlways
;
default:
vkcv_log
(
LogLevel
::
ERROR
,
"Unknown depth test enum"
);
return
vk
::
CompareOp
::
eAlways
;
}
}
}
}
vk
::
ShaderStageFlagBits
shaderStageToVkShaderStage
(
vkcv
::
ShaderStage
stage
)
{
vk
::
ShaderStageFlagBits
shaderStageToVkShaderStage
(
ShaderStage
stage
)
{
switch
(
stage
)
{
switch
(
stage
)
{
case
vkcv
::
ShaderStage
::
VERTEX
:
return
vk
::
ShaderStageFlagBits
::
eVertex
;
case
ShaderStage
::
VERTEX
:
return
vk
::
ShaderStageFlagBits
::
eVertex
;
case
vkcv
::
ShaderStage
::
FRAGMENT
:
return
vk
::
ShaderStageFlagBits
::
eFragment
;
case
ShaderStage
::
FRAGMENT
:
return
vk
::
ShaderStageFlagBits
::
eFragment
;
case
vkcv
::
ShaderStage
::
GEOMETRY
:
return
vk
::
ShaderStageFlagBits
::
eGeometry
;
case
ShaderStage
::
GEOMETRY
:
return
vk
::
ShaderStageFlagBits
::
eGeometry
;
case
vkcv
::
ShaderStage
::
TESS_CONTROL
:
return
vk
::
ShaderStageFlagBits
::
eTessellationControl
;
case
ShaderStage
::
TESS_CONTROL
:
return
vk
::
ShaderStageFlagBits
::
eTessellationControl
;
case
vkcv
::
ShaderStage
::
TESS_EVAL
:
return
vk
::
ShaderStageFlagBits
::
eTessellationEvaluation
;
case
ShaderStage
::
TESS_EVAL
:
return
vk
::
ShaderStageFlagBits
::
eTessellationEvaluation
;
case
vkcv
::
ShaderStage
::
COMPUTE
:
return
vk
::
ShaderStageFlagBits
::
eCompute
;
case
ShaderStage
::
COMPUTE
:
return
vk
::
ShaderStageFlagBits
::
eCompute
;
case
vkcv
::
ShaderStage
::
TASK
:
return
vk
::
ShaderStageFlagBits
::
eTaskNV
;
case
ShaderStage
::
TASK
:
return
vk
::
ShaderStageFlagBits
::
eTaskNV
;
case
vkcv
::
ShaderStage
::
MESH
:
return
vk
::
ShaderStageFlagBits
::
eMeshNV
;
case
ShaderStage
::
MESH
:
return
vk
::
ShaderStageFlagBits
::
eMeshNV
;
default:
vkcv_log
(
vkcv
::
LogLevel
::
ERROR
,
"Unknown shader stage"
);
return
vk
::
ShaderStageFlagBits
::
eAll
;
default:
vkcv_log
(
LogLevel
::
ERROR
,
"Unknown shader stage"
);
return
vk
::
ShaderStageFlagBits
::
eAll
;
}
}
}
}
bool
createPipelineShaderStageCreateInfo
(
bool
createPipelineShaderStageCreateInfo
(
const
vkcv
::
ShaderProgram
&
shaderProgram
,
const
ShaderProgram
&
shaderProgram
,
ShaderStage
stage
,
ShaderStage
stage
,
vk
::
Device
device
,
vk
::
Device
device
,
vk
::
PipelineShaderStageCreateInfo
*
outCreateInfo
)
{
vk
::
PipelineShaderStageCreateInfo
*
outCreateInfo
)
{
...
@@ -101,23 +101,22 @@ namespace vkcv
...
@@ -101,23 +101,22 @@ namespace vkcv
return
true
;
return
true
;
}
}
PipelineHandle
PipelineManager
::
createPipeline
(
const
PipelineConfig
&
config
,
PassManager
&
passManager
)
PipelineHandle
PipelineManager
::
createPipeline
(
const
PipelineConfig
&
config
,
PassManager
&
passManager
)
{
{
const
vk
::
RenderPass
&
pass
=
passManager
.
getVkPass
(
config
.
m_PassHandle
);
const
vk
::
RenderPass
&
pass
=
passManager
.
getVkPass
(
config
.
m_PassHandle
);
const
bool
existsTaskShader
=
config
.
m_ShaderProgram
.
existsShader
(
ShaderStage
::
TASK
);
const
bool
existsTaskShader
=
config
.
m_ShaderProgram
.
existsShader
(
ShaderStage
::
TASK
);
const
bool
existsMeshShader
=
config
.
m_ShaderProgram
.
existsShader
(
ShaderStage
::
MESH
);
const
bool
existsMeshShader
=
config
.
m_ShaderProgram
.
existsShader
(
ShaderStage
::
MESH
);
const
bool
existsVertexShader
=
config
.
m_ShaderProgram
.
existsShader
(
ShaderStage
::
VERTEX
);
const
bool
existsVertexShader
=
config
.
m_ShaderProgram
.
existsShader
(
ShaderStage
::
VERTEX
);
const
bool
validGeometryStages
=
existsVertexShader
||
(
existsTaskShader
&&
existsMeshShader
);
const
bool
existsFragmentShader
=
config
.
m_ShaderProgram
.
existsShader
(
ShaderStage
::
FRAGMENT
);
const
bool
existsFragmentShader
=
config
.
m_ShaderProgram
.
existsShader
(
ShaderStage
::
FRAGMENT
);
const
bool
existsGeometryShader
=
config
.
m_ShaderProgram
.
existsShader
(
ShaderStage
::
GEOMETRY
);
const
bool
validGeometryStages
=
existsVertexShader
||
(
existsTaskShader
&&
existsMeshShader
);
if
(
!
validGeometryStages
)
if
(
!
validGeometryStages
)
{
{
vkcv_log
(
LogLevel
::
ERROR
,
"Requires vertex or task and mesh shader"
);
vkcv_log
(
LogLevel
::
ERROR
,
"Requires vertex or task and mesh shader"
);
return
PipelineHandle
();
return
PipelineHandle
();
}
}
if
(
!
existsFragmentShader
)
{
if
(
!
existsFragmentShader
)
{
vkcv_log
(
LogLevel
::
ERROR
,
"Requires fragment shader code"
);
vkcv_log
(
LogLevel
::
ERROR
,
"Requires fragment shader code"
);
return
PipelineHandle
();
return
PipelineHandle
();
...
@@ -135,7 +134,7 @@ namespace vkcv
...
@@ -135,7 +134,7 @@ namespace vkcv
vk
::
PipelineShaderStageCreateInfo
createInfo
;
vk
::
PipelineShaderStageCreateInfo
createInfo
;
const
bool
success
=
createPipelineShaderStageCreateInfo
(
const
bool
success
=
createPipelineShaderStageCreateInfo
(
config
.
m_ShaderProgram
,
config
.
m_ShaderProgram
,
vkcv
::
ShaderStage
::
VERTEX
,
ShaderStage
::
VERTEX
,
m_Device
,
m_Device
,
&
createInfo
);
&
createInfo
);
...
@@ -152,7 +151,7 @@ namespace vkcv
...
@@ -152,7 +151,7 @@ namespace vkcv
vk
::
PipelineShaderStageCreateInfo
createInfo
;
vk
::
PipelineShaderStageCreateInfo
createInfo
;
const
bool
success
=
createPipelineShaderStageCreateInfo
(
const
bool
success
=
createPipelineShaderStageCreateInfo
(
config
.
m_ShaderProgram
,
config
.
m_ShaderProgram
,
vkcv
::
ShaderStage
::
TASK
,
ShaderStage
::
TASK
,
m_Device
,
m_Device
,
&
createInfo
);
&
createInfo
);
...
@@ -169,7 +168,7 @@ namespace vkcv
...
@@ -169,7 +168,7 @@ namespace vkcv
vk
::
PipelineShaderStageCreateInfo
createInfo
;
vk
::
PipelineShaderStageCreateInfo
createInfo
;
const
bool
success
=
createPipelineShaderStageCreateInfo
(
const
bool
success
=
createPipelineShaderStageCreateInfo
(
config
.
m_ShaderProgram
,
config
.
m_ShaderProgram
,
vkcv
::
ShaderStage
::
MESH
,
ShaderStage
::
MESH
,
m_Device
,
m_Device
,
&
createInfo
);
&
createInfo
);
...
@@ -182,12 +181,28 @@ namespace vkcv
...
@@ -182,12 +181,28 @@ namespace vkcv
}
}
}
}
// fragment shader stage
{
{
vk
::
PipelineShaderStageCreateInfo
createInfo
;
vk
::
PipelineShaderStageCreateInfo
createInfo
;
const
bool
success
=
createPipelineShaderStageCreateInfo
(
const
bool
success
=
createPipelineShaderStageCreateInfo
(
config
.
m_ShaderProgram
,
config
.
m_ShaderProgram
,
vkcv
::
ShaderStage
::
FRAGMENT
,
ShaderStage
::
FRAGMENT
,
m_Device
,
&
createInfo
);
if
(
success
)
{
shaderStages
.
push_back
(
createInfo
);
}
else
{
destroyShaderModules
();
return
PipelineHandle
();
}
}
if
(
existsGeometryShader
)
{
vk
::
PipelineShaderStageCreateInfo
createInfo
;
const
bool
success
=
createPipelineShaderStageCreateInfo
(
config
.
m_ShaderProgram
,
ShaderStage
::
GEOMETRY
,
m_Device
,
m_Device
,
&
createInfo
);
&
createInfo
);
...
@@ -223,10 +238,8 @@ namespace vkcv
...
@@ -223,10 +238,8 @@ namespace vkcv
vertexBinding
.
bindingLocation
,
vertexBinding
.
bindingLocation
,
vertexFormatToVulkanFormat
(
vertexAttachment
.
format
),
vertexFormatToVulkanFormat
(
vertexAttachment
.
format
),
vertexAttachment
.
offset
%
vertexBinding
.
stride
);
vertexAttachment
.
offset
%
vertexBinding
.
stride
);
}
}
}
}
}
}
// Handover Containers to PipelineVertexInputStateCreateIngo Struct
// Handover Containers to PipelineVertexInputStateCreateIngo Struct
...
@@ -255,7 +268,7 @@ namespace vkcv
...
@@ -255,7 +268,7 @@ namespace vkcv
case
CullMode
::
None
:
cullMode
=
vk
::
CullModeFlagBits
::
eNone
;
break
;
case
CullMode
::
None
:
cullMode
=
vk
::
CullModeFlagBits
::
eNone
;
break
;
case
CullMode
::
Front
:
cullMode
=
vk
::
CullModeFlagBits
::
eFront
;
break
;
case
CullMode
::
Front
:
cullMode
=
vk
::
CullModeFlagBits
::
eFront
;
break
;
case
CullMode
::
Back
:
cullMode
=
vk
::
CullModeFlagBits
::
eBack
;
break
;
case
CullMode
::
Back
:
cullMode
=
vk
::
CullModeFlagBits
::
eBack
;
break
;
default:
vkcv_log
(
vkcv
::
LogLevel
::
ERROR
,
"Unknown CullMode"
);
cullMode
=
vk
::
CullModeFlagBits
::
eNone
;
default:
vkcv_log
(
LogLevel
::
ERROR
,
"Unknown CullMode"
);
cullMode
=
vk
::
CullModeFlagBits
::
eNone
;
}
}
// rasterization state
// rasterization state
...
@@ -272,6 +285,7 @@ namespace vkcv
...
@@ -272,6 +285,7 @@ namespace vkcv
0.
f
,
0.
f
,
1.
f
1.
f
);
);
vk
::
PipelineRasterizationConservativeStateCreateInfoEXT
conservativeRasterization
;
vk
::
PipelineRasterizationConservativeStateCreateInfoEXT
conservativeRasterization
;
if
(
config
.
m_UseConservativeRasterization
)
{
if
(
config
.
m_UseConservativeRasterization
)
{
conservativeRasterization
=
vk
::
PipelineRasterizationConservativeStateCreateInfoEXT
(
conservativeRasterization
=
vk
::
PipelineRasterizationConservativeStateCreateInfoEXT
(
...
@@ -310,6 +324,7 @@ namespace vkcv
...
@@ -310,6 +324,7 @@ namespace vkcv
vk
::
BlendOp
::
eAdd
,
vk
::
BlendOp
::
eAdd
,
colorWriteMask
colorWriteMask
);
);
vk
::
PipelineColorBlendStateCreateInfo
pipelineColorBlendStateCreateInfo
(
vk
::
PipelineColorBlendStateCreateInfo
pipelineColorBlendStateCreateInfo
(
{},
{},
false
,
false
,
...
@@ -331,7 +346,6 @@ namespace vkcv
...
@@ -331,7 +346,6 @@ namespace vkcv
pipelineLayoutCreateInfo
.
pushConstantRangeCount
=
0
;
pipelineLayoutCreateInfo
.
pushConstantRangeCount
=
0
;
}
}
vk
::
PipelineLayout
vkPipelineLayout
{};
vk
::
PipelineLayout
vkPipelineLayout
{};
if
(
m_Device
.
createPipelineLayout
(
&
pipelineLayoutCreateInfo
,
nullptr
,
&
vkPipelineLayout
)
!=
vk
::
Result
::
eSuccess
)
if
(
m_Device
.
createPipelineLayout
(
&
pipelineLayoutCreateInfo
,
nullptr
,
&
vkPipelineLayout
)
!=
vk
::
Result
::
eSuccess
)
{
{
...
@@ -353,7 +367,6 @@ namespace vkcv
...
@@ -353,7 +367,6 @@ namespace vkcv
);
);
const
vk
::
PipelineDepthStencilStateCreateInfo
*
p_depthStencilCreateInfo
=
nullptr
;
const
vk
::
PipelineDepthStencilStateCreateInfo
*
p_depthStencilCreateInfo
=
nullptr
;
const
PassConfig
&
passConfig
=
passManager
.
getPassConfig
(
config
.
m_PassHandle
);
const
PassConfig
&
passConfig
=
passManager
.
getPassConfig
(
config
.
m_PassHandle
);
for
(
const
auto
&
attachment
:
passConfig
.
attachments
)
{
for
(
const
auto
&
attachment
:
passConfig
.
attachments
)
{
...
@@ -375,24 +388,6 @@ namespace vkcv
...
@@ -375,24 +388,6 @@ namespace vkcv
static_cast
<
uint32_t
>
(
dynamicStates
.
size
()),
static_cast
<
uint32_t
>
(
dynamicStates
.
size
()),
dynamicStates
.
data
());
dynamicStates
.
data
());
const
bool
existsGeometryShader
=
config
.
m_ShaderProgram
.
existsShader
(
vkcv
::
ShaderStage
::
GEOMETRY
);
if
(
existsGeometryShader
)
{
vk
::
PipelineShaderStageCreateInfo
createInfo
;
const
bool
success
=
createPipelineShaderStageCreateInfo
(
config
.
m_ShaderProgram
,
vkcv
::
ShaderStage
::
GEOMETRY
,
m_Device
,
&
createInfo
);
if
(
success
)
{
shaderStages
.
push_back
(
createInfo
);
}
else
{
destroyShaderModules
();
return
PipelineHandle
();
}
}
const
vk
::
GraphicsPipelineCreateInfo
graphicsPipelineCreateInfo
(
const
vk
::
GraphicsPipelineCreateInfo
graphicsPipelineCreateInfo
(
{},
{},
static_cast
<
uint32_t
>
(
shaderStages
.
size
()),
static_cast
<
uint32_t
>
(
shaderStages
.
size
()),
...
@@ -538,7 +533,6 @@ namespace vkcv
...
@@ -538,7 +533,6 @@ namespace vkcv
// There is an issue for refactoring the Pipeline Manager.
// There is an issue for refactoring the Pipeline Manager.
// While including Compute Pipeline Creation, some private helper functions where introduced:
// While including Compute Pipeline Creation, some private helper functions where introduced:
vk
::
Result
PipelineManager
::
createShaderModule
(
vk
::
ShaderModule
&
module
,
const
ShaderProgram
&
shaderProgram
,
const
ShaderStage
stage
)
vk
::
Result
PipelineManager
::
createShaderModule
(
vk
::
ShaderModule
&
module
,
const
ShaderProgram
&
shaderProgram
,
const
ShaderStage
stage
)
{
{
std
::
vector
<
char
>
code
=
shaderProgram
.
getShader
(
stage
).
shaderCode
;
std
::
vector
<
char
>
code
=
shaderProgram
.
getShader
(
stage
).
shaderCode
;
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment