From 74aea536f3c3dc5aabba61d4b54cc864a2b2a320 Mon Sep 17 00:00:00 2001
From: Tobias Frisch <tfrisch@uni-koblenz.de>
Date: Mon, 10 Oct 2022 13:26:49 +0200
Subject: [PATCH] Add fix for binding usage in multiple stages

Signed-off-by: Tobias Frisch <tfrisch@uni-koblenz.de>
---
 src/vkcv/ShaderProgram.cpp | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/src/vkcv/ShaderProgram.cpp b/src/vkcv/ShaderProgram.cpp
index 6925d40c..508f4de5 100644
--- a/src/vkcv/ShaderProgram.cpp
+++ b/src/vkcv/ShaderProgram.cpp
@@ -1,5 +1,5 @@
 /**
- * @authors Simeon Hermann, Leonie Franken
+ * @authors Simeon Hermann, Leonie Franken, Tobias Frisch
  * @file src/vkcv/ShaderProgram.cpp
  * @brief ShaderProgram class to handle and prepare the shader stages for a graphics pipeline
  */
@@ -165,6 +165,8 @@ namespace vkcv {
 			auto insertionResult =
 				m_DescriptorSets [setID].insert(std::make_pair(bindingID, binding));
 			if (!insertionResult.second) {
+				insertionResult.first->second.shaderStages |= shaderStage;
+				
 				vkcv_log(LogLevel::WARNING,
 						 "Attempting to overwrite already existing binding %u at set ID %u.",
 						 bindingID, setID);
@@ -197,6 +199,8 @@ namespace vkcv {
 			auto insertionResult =
 				m_DescriptorSets [setID].insert(std::make_pair(bindingID, binding));
 			if (!insertionResult.second) {
+				insertionResult.first->second.shaderStages |= shaderStage;
+				
 				vkcv_log(LogLevel::WARNING,
 						 "Attempting to overwrite already existing binding %u at set ID %u.",
 						 bindingID, setID);
@@ -228,6 +232,8 @@ namespace vkcv {
 			auto insertionResult =
 				m_DescriptorSets [setID].insert(std::make_pair(bindingID, binding));
 			if (!insertionResult.second) {
+				insertionResult.first->second.shaderStages |= shaderStage;
+				
 				vkcv_log(LogLevel::WARNING,
 						 "Attempting to overwrite already existing binding %u at set ID %u.",
 						 bindingID, setID);
@@ -260,6 +266,8 @@ namespace vkcv {
 			auto insertionResult =
 				m_DescriptorSets [setID].insert(std::make_pair(bindingID, binding));
 			if (!insertionResult.second) {
+				insertionResult.first->second.shaderStages |= shaderStage;
+				
 				vkcv_log(LogLevel::WARNING,
 						 "Attempting to overwrite already existing binding %u at set ID %u.",
 						 bindingID, setID);
@@ -292,6 +300,8 @@ namespace vkcv {
 			auto insertionResult =
 				m_DescriptorSets [setID].insert(std::make_pair(bindingID, binding));
 			if (!insertionResult.second) {
+				insertionResult.first->second.shaderStages |= shaderStage;
+				
 				vkcv_log(LogLevel::WARNING,
 						 "Attempting to overwrite already existing binding %u at set ID %u.",
 						 bindingID, setID);
@@ -315,6 +325,8 @@ namespace vkcv {
 			auto insertionResult =
 				m_DescriptorSets [setID].insert(std::make_pair(bindingID, binding));
 			if (!insertionResult.second) {
+				insertionResult.first->second.shaderStages |= shaderStage;
+				
 				vkcv_log(LogLevel::WARNING,
 						 "Attempting to overwrite already existing binding %u at set ID %u.",
 						 bindingID, setID);
@@ -343,3 +355,4 @@ namespace vkcv {
 		return m_pushConstantsSize;
 	}
 } // namespace vkcv
+
-- 
GitLab