diff --git a/modules/rtx/src/vkcv/rtx/RTX.cpp b/modules/rtx/src/vkcv/rtx/RTX.cpp index 309a7155d226f9081e3c086b5eec08b76dd14881..56178d1b6efff4a3ecb2fcf0c34ff3a5820c4945 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 f1ccbfc429c410e833c7e7aa5c764ee4f1901753..f2dfc052fdb0741c5a7d3db71c0a466c23b4c73d 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 02bffd442417ea025d9086b6d1503ee2d4e10f73..c4848df9e119c6c399649e9c9519600d327ebf23 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 7e071bd14fa931e482279f71e50df4f34241d52c..7db67a0c1ec50699e73872a6e7c07459200e5aea 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(