Skip to content
Snippets Groups Projects
Commit eb28d851 authored by Mark Oliver Mints's avatar Mark Oliver Mints
Browse files

[#71] Rafactor: code formation

parent ca4aa5dd
Branches
Tags
1 merge request!83Resolve "Refactor Pipeline Config and Manager"
Pipeline #26678 passed
...@@ -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;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment