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