From 52eb47528659cc3a65a26f0c2b0401eeb780eb90 Mon Sep 17 00:00:00 2001
From: Mark Oliver Mints <mmints@uni-koblenz.de>
Date: Wed, 9 Jun 2021 11:17:41 +0200
Subject: [PATCH] [#65][Add] Create Compute Pipeline

---
 src/vkcv/PipelineManager.cpp | 23 ++++++++++++++++-------
 1 file changed, 16 insertions(+), 7 deletions(-)

diff --git a/src/vkcv/PipelineManager.cpp b/src/vkcv/PipelineManager.cpp
index ae1dc21d..76fb9776 100644
--- a/src/vkcv/PipelineManager.cpp
+++ b/src/vkcv/PipelineManager.cpp
@@ -333,26 +333,35 @@ namespace vkcv
         const size_t matrixPushConstantSize = shaderProgram.getPushConstantSize();
         const vk::PushConstantRange pushConstantRange(vk::ShaderStageFlagBits::eAll, 0, matrixPushConstantSize);
 
-        vk::PipelineLayoutCreateInfo pipelineLayoutCreateInfo(   // TODO: Check this. I'm not sure if this is correct
+        const vk::PipelineLayoutCreateInfo pipelineLayoutCreateInfo(   // TODO: Check this. I'm not sure if this is correct
                 {},
                 nullptr,
                 (pushConstantRange));
 
-        vk::PipelineLayout vkPipelineLayout{};
+        vk::PipelineLayout vkPipelineLayout;
         if (m_Device.createPipelineLayout(&pipelineLayoutCreateInfo, nullptr, &vkPipelineLayout) != vk::Result::eSuccess)
         {
             m_Device.destroy(computeModule);
             return PipelineHandle();
         }
 
-        // TODO: Create Compute Pipeline
-        vk::Pipeline vkPipeline{};
-        vk::ComputePipelineCreateInfo computePipelineCreateInfo; // TODO: Set params
+        vk::ComputePipelineCreateInfo computePipelineCreateInfo;
+        computePipelineCreateInfo.stage = pipelineComputeShaderStageInfo;
+        computePipelineCreateInfo.layout = vkPipelineLayout;
+
+        vk::Pipeline vkPipeline;
         if (m_Device.createComputePipelines(nullptr, 1, &computePipelineCreateInfo, nullptr, &vkPipeline)!= vk::Result::eSuccess)
         {
-            // TODO: Set Params
+            m_Device.destroy(computeModule);
+            return PipelineHandle();
         }
-        return PipelineHandle();
+
+        m_Device.destroy(computeModule);
+
+        const uint64_t id = m_Pipelines.size();
+        m_Pipelines.push_back({ vkPipeline, vkPipelineLayout });
+        
+        return PipelineHandle(id, [&](uint64_t id) { destroyPipelineById(id); });
     }
 
     // There is an issue for refactoring the Pipeline Manager.
-- 
GitLab