From 2ebaeebb47a6709b2a2d0948b29e9f300714dcf6 Mon Sep 17 00:00:00 2001
From: Mark Oliver Mints <mmints@uni-koblenz.de>
Date: Wed, 9 Jun 2021 10:01:38 +0200
Subject: [PATCH] [#65][Add] Pipeline Layout for Compute Shadetr

---
 src/vkcv/PipelineManager.cpp | 16 ++++++++++++++--
 src/vkcv/PipelineManager.hpp |  1 -
 2 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/src/vkcv/PipelineManager.cpp b/src/vkcv/PipelineManager.cpp
index 6a103457..ae1dc21d 100644
--- a/src/vkcv/PipelineManager.cpp
+++ b/src/vkcv/PipelineManager.cpp
@@ -330,8 +330,20 @@ namespace vkcv
                 nullptr
         );
 
-        // TODO: Set Compute Pipeline Layout
-        vk::PipelineLayout vkPipelineLayout{}; // TODO: Set params
+        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
+                {},
+                nullptr,
+                (pushConstantRange));
+
+        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{};
diff --git a/src/vkcv/PipelineManager.hpp b/src/vkcv/PipelineManager.hpp
index 6d9b47be..568a8d5b 100644
--- a/src/vkcv/PipelineManager.hpp
+++ b/src/vkcv/PipelineManager.hpp
@@ -24,7 +24,6 @@ namespace vkcv
 
         vk::Result createShaderModule(vk::ShaderModule &module, const ShaderProgram &shaderProgram, ShaderStage stage);
 
-
     public:
         PipelineManager() = delete; // no default ctor
         explicit PipelineManager(vk::Device device) noexcept; // ctor
-- 
GitLab