From 873c6cb97fd55f816fc4b92376a82b04fc333ec4 Mon Sep 17 00:00:00 2001
From: Artur Wasmut <awasmut@uni-koblenz.de>
Date: Tue, 7 Sep 2021 13:14:57 +0200
Subject: [PATCH] [#105] set descriptor count properly.

---
 include/vkcv/DescriptorConfig.hpp       |  8 ----
 projects/bindless_textures/src/main.cpp |  8 +++-
 src/vkcv/DescriptorConfig.cpp           | 12 ------
 src/vkcv/ShaderProgram.cpp              | 56 ++++++++++++-------------
 4 files changed, 32 insertions(+), 52 deletions(-)

diff --git a/include/vkcv/DescriptorConfig.hpp b/include/vkcv/DescriptorConfig.hpp
index 12d57ea3..905ff679 100644
--- a/include/vkcv/DescriptorConfig.hpp
+++ b/include/vkcv/DescriptorConfig.hpp
@@ -58,14 +58,6 @@ namespace vkcv
     */
     struct DescriptorBinding
     {
-        DescriptorBinding(
-            uint32_t bindingID,
-            DescriptorType descriptorType,
-            uint32_t descriptorCount,
-            ShaderStage shaderStages,
-            bool variableCount = false
-        ) noexcept;
-
         uint32_t        bindingID;
         DescriptorType  descriptorType;
         uint32_t        descriptorCount;
diff --git a/projects/bindless_textures/src/main.cpp b/projects/bindless_textures/src/main.cpp
index b340cba8..789557bf 100644
--- a/projects/bindless_textures/src/main.cpp
+++ b/projects/bindless_textures/src/main.cpp
@@ -154,8 +154,12 @@ int main(int argc, const char** argv) {
 	
 	const vkcv::VertexLayout firstMeshLayout (bindings);
 
-	std::unordered_map<uint32_t, vkcv::DescriptorBinding> descriptorBindings = firstMeshProgram.getReflectedDescriptors().at(0);
-	vkcv::DescriptorSetLayoutHandle descriptorSetLayout = core.createDescriptorSetLayout(descriptorBindings);
+	const std::unordered_map<uint32_t, vkcv::DescriptorBinding> &descriptorBindings = firstMeshProgram.getReflectedDescriptors().at(0);
+
+    std::unordered_map<uint32_t, vkcv::DescriptorBinding> adjustedBindings = descriptorBindings;
+    adjustedBindings[1].descriptorCount = 5;
+
+    vkcv::DescriptorSetLayoutHandle descriptorSetLayout = core.createDescriptorSetLayout(adjustedBindings);
 	vkcv::DescriptorSetHandle descriptorSet = core.createDescriptorSet(descriptorSetLayout);
 
 	const vkcv::PipelineConfig firstMeshPipelineConfig {
diff --git a/src/vkcv/DescriptorConfig.cpp b/src/vkcv/DescriptorConfig.cpp
index 78a08ed1..15bb05fd 100644
--- a/src/vkcv/DescriptorConfig.cpp
+++ b/src/vkcv/DescriptorConfig.cpp
@@ -2,18 +2,6 @@
 
 namespace vkcv
 {
-	DescriptorBinding::DescriptorBinding(
-		uint32_t bindingID,
-		DescriptorType descriptorType,
-		uint32_t descriptorCount,
-		ShaderStage shaderStages,
-		bool variableCount) noexcept:
-		bindingID(bindingID),
-		descriptorType(descriptorType),
-		descriptorCount(descriptorCount),
-		shaderStages(shaderStages),
-		variableCount(variableCount){}
-
     bool DescriptorBinding::operator==(const DescriptorBinding &other) const
     {
 	    return (this->bindingID == other.bindingID) &&
diff --git a/src/vkcv/ShaderProgram.cpp b/src/vkcv/ShaderProgram.cpp
index 3c019a2b..f99bd3c6 100644
--- a/src/vkcv/ShaderProgram.cpp
+++ b/src/vkcv/ShaderProgram.cpp
@@ -161,12 +161,11 @@ namespace vkcv {
                     variableCount = true;
             }
 
-            auto binding = DescriptorBinding(
-                    bindingID,
-                    DescriptorType::UNIFORM_BUFFER,
-                    descriptorCount,
-                    shaderStage,
-                    variableCount);
+            DescriptorBinding binding{bindingID,
+                                      DescriptorType::UNIFORM_BUFFER,
+                                      descriptorCount,
+                                      shaderStage,
+                                      variableCount};
 
             auto insertionResult = m_DescriptorSets[setID].insert(std::make_pair(bindingID, binding));
             if(!insertionResult.second)
@@ -197,12 +196,12 @@ namespace vkcv {
                     variableCount = true;
             }
 
-            auto binding = DescriptorBinding(
-                    bindingID,
-                    DescriptorType::STORAGE_BUFFER,
-                    descriptorCount,
-                    shaderStage,
-                    variableCount);
+            DescriptorBinding binding{bindingID,
+                                      DescriptorType::STORAGE_BUFFER,
+                                      descriptorCount,
+                                      shaderStage,
+                                      variableCount};
+
 
             auto insertionResult = m_DescriptorSets[setID].insert(std::make_pair(bindingID, binding));
             if(!insertionResult.second)
@@ -232,12 +231,11 @@ namespace vkcv {
                     variableCount = true;
             }
 
-            auto binding = DescriptorBinding(
-                    bindingID,
-                    DescriptorType::SAMPLER,
-                    descriptorCount,
-                    shaderStage,
-                    variableCount);
+            DescriptorBinding binding {bindingID,
+                                       DescriptorType::SAMPLER,
+                                       descriptorCount,
+                                       shaderStage,
+                                       variableCount};
 
             auto insertionResult = m_DescriptorSets[setID].insert(std::make_pair(bindingID, binding));
             if(!insertionResult.second)
@@ -267,12 +265,11 @@ namespace vkcv {
                     variableCount = true;
             }
 
-            auto binding = DescriptorBinding(
-                    bindingID,
-                    DescriptorType::IMAGE_SAMPLED,
-                    descriptorCount,
-                    shaderStage,
-                    variableCount);
+            DescriptorBinding binding {bindingID,
+                                       DescriptorType::IMAGE_SAMPLED,
+                                       descriptorCount,
+                                       shaderStage,
+                                       variableCount};
 
             auto insertionResult = m_DescriptorSets[setID].insert(std::make_pair(bindingID, binding));
             if(!insertionResult.second)
@@ -302,12 +299,11 @@ namespace vkcv {
                     variableCount = true;
             }
 
-            auto binding = DescriptorBinding(
-                    bindingID,
-                    DescriptorType::IMAGE_STORAGE,
-                    descriptorCount,
-                    shaderStage,
-                    variableCount);
+            DescriptorBinding binding {bindingID,
+                                       DescriptorType::IMAGE_STORAGE,
+                                       descriptorCount,
+                                       shaderStage,
+                                       variableCount};
 
             auto insertionResult = m_DescriptorSets[setID].insert(std::make_pair(bindingID, binding));
             if(!insertionResult.second)
-- 
GitLab