From 2ed9636cd66fc5a6718ac6acbd022ceacd6d788c Mon Sep 17 00:00:00 2001 From: Alexander Gauggel <agauggel@uni-koblenz.de> Date: Thu, 24 Jun 2021 01:42:05 +0200 Subject: [PATCH] [#82] GPUs are expensive at the moment - lets save some performance by culling --- include/vkcv/PipelineConfig.hpp | 2 ++ projects/voxelization/src/main.cpp | 4 ++-- src/vkcv/PipelineManager.cpp | 10 +++++++++- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/include/vkcv/PipelineConfig.hpp b/include/vkcv/PipelineConfig.hpp index 70ef1633..c17f04ee 100644 --- a/include/vkcv/PipelineConfig.hpp +++ b/include/vkcv/PipelineConfig.hpp @@ -15,6 +15,7 @@ namespace vkcv { enum class PrimitiveTopology{PointList, LineList, TriangleList }; + enum class CullMode{ None, Front, Back }; struct PipelineConfig { ShaderProgram m_ShaderProgram; @@ -28,6 +29,7 @@ namespace vkcv { PrimitiveTopology m_PrimitiveTopology = PrimitiveTopology::TriangleList; bool m_EnableDepthClamping = false; Multisampling m_multisampling = Multisampling::None; + CullMode m_culling = CullMode::None; }; } \ No newline at end of file diff --git a/projects/voxelization/src/main.cpp b/projects/voxelization/src/main.cpp index a9c899f3..59b2d9fb 100644 --- a/projects/voxelization/src/main.cpp +++ b/projects/voxelization/src/main.cpp @@ -232,8 +232,8 @@ int main(int argc, const char** argv) { core.getDescriptorSet(perMeshDescriptorSets[0]).layout }, true }; - - forwardPipelineConfig.m_multisampling = msaa; + forwardPipelineConfig.m_culling = vkcv::CullMode::Back; + forwardPipelineConfig.m_multisampling = msaa; vkcv::PipelineHandle forwardPipeline = core.createGraphicsPipeline(forwardPipelineConfig); diff --git a/src/vkcv/PipelineManager.cpp b/src/vkcv/PipelineManager.cpp index b1b08272..621abb0a 100644 --- a/src/vkcv/PipelineManager.cpp +++ b/src/vkcv/PipelineManager.cpp @@ -143,13 +143,21 @@ namespace vkcv vk::Rect2D scissor({ 0,0 }, { config.m_Width, config.m_Height }); vk::PipelineViewportStateCreateInfo pipelineViewportStateCreateInfo({}, 1, &viewport, 1, &scissor); + vk::CullModeFlags cullMode; + switch (config.m_culling) { + case CullMode::None: cullMode = vk::CullModeFlagBits::eNone; break; + case CullMode::Front: cullMode = vk::CullModeFlagBits::eFront; break; + case CullMode::Back: cullMode = vk::CullModeFlagBits::eBack; break; + default: throw("Lets tilt Tobi LOLOLOL"); // I hope you review the code well + } + // rasterization state vk::PipelineRasterizationStateCreateInfo pipelineRasterizationStateCreateInfo( {}, config.m_EnableDepthClamping, false, vk::PolygonMode::eFill, - vk::CullModeFlagBits::eNone, + cullMode, vk::FrontFace::eCounterClockwise, false, 0.f, -- GitLab