From bb8d8acbc81ebe48405f9c9184a4aa3ac7d26c68 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Susanne=20D=C3=B6tsch?= <susannedoetsch@uni-koblenz.de>
Date: Mon, 13 Sep 2021 20:54:31 +0200
Subject: [PATCH] [#92] Fixed Dispatcher error, got new DescriptorSet Errors

---
 modules/rtx/src/vkcv/rtx/RTX.cpp              |  2 +-
 projects/rtx/resources/shaders/raytrace.rgen  | 18 ++++++++++--------
 projects/rtx/resources/shaders/raytrace.rmiss |  2 +-
 src/vkcv/Core.cpp                             | 14 ++++++++++----
 4 files changed, 22 insertions(+), 14 deletions(-)

diff --git a/modules/rtx/src/vkcv/rtx/RTX.cpp b/modules/rtx/src/vkcv/rtx/RTX.cpp
index 309a7155..56178d1b 100644
--- a/modules/rtx/src/vkcv/rtx/RTX.cpp
+++ b/modules/rtx/src/vkcv/rtx/RTX.cpp
@@ -80,7 +80,7 @@ namespace vkcv::rtx {
         vk::WriteDescriptorSet tlasWrite2;
         tlasWrite2.setPNext(&AccelerationDescriptor);
         tlasWrite2.setDstSet(m_core->getDescriptorSet(descriptorSetHandles[2]).vulkanHandle);
-        tlasWrite2.setDstBinding(1);
+        tlasWrite2.setDstBinding(5);
         tlasWrite2.setDstArrayElement(0);
         tlasWrite2.setDescriptorCount(1);
         tlasWrite2.setDescriptorType(vk::DescriptorType::eAccelerationStructureKHR);
diff --git a/projects/rtx/resources/shaders/raytrace.rgen b/projects/rtx/resources/shaders/raytrace.rgen
index f1ccbfc4..f2dfc052 100644
--- a/projects/rtx/resources/shaders/raytrace.rgen
+++ b/projects/rtx/resources/shaders/raytrace.rgen
@@ -5,10 +5,10 @@
 // A location for a ray payload (we can have multiple of these)
 //layout(location = 0) rayPayloadEXT RayPayload pay;
 
-layout(binding = 0, set = 0, rgba32f) uniform image2D outImg;           // the output image -> maybe use 16 bit values?
+layout(binding = 0, set = 0, rgba16) uniform image2D outImg;           // the output image -> maybe use 16 bit values?
 layout(binding = 1, set = 0) uniform accelerationStructureEXT tlas;     // top level acceleration structure (for the noobs here (you!))
-/*
-layout( push_constant ) uniform constants {     // TODO: add push_constants in main.cpp!
+
+layout( push_constant ) uniform constants {
     vec4 camera_position;   // as origin for ray generation
     vec4 camera_right;      // for computing ray direction
     vec4 camera_up;         // for computing ray direction
@@ -16,9 +16,11 @@ layout( push_constant ) uniform constants {     // TODO: add push_constants in m
 
     uint frameCount;        // what is this? the actual frame?
 };
-*/
 
-void main() {
-    // TODO
-    int a = 42;
-}
\ No newline at end of file
+void main(){
+    int i = 42;
+
+    vec3 color = vec3(1,0,0);
+    ivec2 coord = ivec2(1,1);
+    imageStore(outImg, coord, vec4(color, 1));
+}
diff --git a/projects/rtx/resources/shaders/raytrace.rmiss b/projects/rtx/resources/shaders/raytrace.rmiss
index 02bffd44..c4848df9 100644
--- a/projects/rtx/resources/shaders/raytrace.rmiss
+++ b/projects/rtx/resources/shaders/raytrace.rmiss
@@ -1,7 +1,7 @@
 #version 460
 #extension GL_EXT_ray_tracing : require
 
-layout(binding = 1, set = 0) uniform accelerationStructureEXT tlas; 
+layout(binding = 5, set = 0) uniform accelerationStructureEXT tlas; 
 
 void main() {
     int c = 42;
diff --git a/src/vkcv/Core.cpp b/src/vkcv/Core.cpp
index 7e071bd1..7db67a0c 100644
--- a/src/vkcv/Core.cpp
+++ b/src/vkcv/Core.cpp
@@ -441,24 +441,30 @@ namespace vkcv
 			vk::DeviceSize closestHitOffset = 2 * shaderGroupBaseAlignment;
 			vk::DeviceSize shaderBindingTableSize = shaderGroupBaseAlignment * 3; //3 hardcoded to rtx-shader count
 
+			auto m_rtxDispatcher = vk::DispatchLoaderDynamic((PFN_vkGetInstanceProcAddr)m_Context.getInstance().getProcAddr("vkGetInstanceProcAddr"));
+			m_rtxDispatcher.init(m_Context.getInstance());
+
 			vk::StridedDeviceAddressRegionKHR rgenRegion;
 			vk::BufferDeviceAddressInfoKHR shaderBindingTableAddressInfo(shaderBindingTable);
-			rgenRegion.deviceAddress = m_Context.getDevice().getBufferAddressKHR(shaderBindingTableAddressInfo) + rayGenOffset;
+			rgenRegion.deviceAddress = m_Context.getDevice().getBufferAddressKHR(shaderBindingTableAddressInfo, m_rtxDispatcher) + rayGenOffset;
 			rgenRegion.setStride(shaderBindingTableSize);
 			rgenRegion.setSize(shaderBindingTableSize);
 			vk::StridedDeviceAddressRegionKHR rmissRegion;
-			rmissRegion.deviceAddress = m_Context.getDevice().getBufferAddressKHR(shaderBindingTableAddressInfo) + missOffset;
+			rmissRegion.deviceAddress = m_Context.getDevice().getBufferAddressKHR(shaderBindingTableAddressInfo, m_rtxDispatcher) + missOffset;
 			rmissRegion.setStride(shaderBindingTableSize);
 			rmissRegion.setSize(shaderBindingTableSize);
 			vk::StridedDeviceAddressRegionKHR rchitRegion;
-			rchitRegion.deviceAddress = m_Context.getDevice().getBufferAddressKHR(shaderBindingTableAddressInfo) + closestHitOffset;
+			rchitRegion.deviceAddress = m_Context.getDevice().getBufferAddressKHR(shaderBindingTableAddressInfo, m_rtxDispatcher) + closestHitOffset;
 			rchitRegion.setStride(shaderBindingTableSize);
 			rchitRegion.setSize(shaderBindingTableSize);
 			vk::StridedDeviceAddressRegionKHR rcallRegion = {};
 
+
 			cmdBuffer.traceRaysKHR(&rgenRegion,&rmissRegion,&rchitRegion,&rcallRegion,
-									getWindow(windowHandle).getWidth(), getWindow(windowHandle).getHeight(),1);
+									getWindow(windowHandle).getWidth(), getWindow(windowHandle).getHeight(),1, m_rtxDispatcher);
+
 		};
+		recordCommandsToStream(cmdStreamHandle, submitFunction, nullptr);
     }
 
 	void Core::recordComputeDispatchToCmdStream(
-- 
GitLab