From 08e2e40c05f9446b9d9974b5f1f71e55be510969 Mon Sep 17 00:00:00 2001
From: Vanessa Karolek <vaka1997@uni-koblenz.de>
Date: Thu, 26 Aug 2021 15:54:57 +0200
Subject: [PATCH] [#92] add raytracing features to Context::create

---
 src/vkcv/Context.cpp | 26 +++++++++++++++++++++++++-
 1 file changed, 25 insertions(+), 1 deletion(-)

diff --git a/src/vkcv/Context.cpp b/src/vkcv/Context.cpp
index 2e30fb96..6543c50e 100644
--- a/src/vkcv/Context.cpp
+++ b/src/vkcv/Context.cpp
@@ -326,7 +326,31 @@ namespace vkcv
 		if (storage16bit) {
 			deviceShaderFloat16Int8Features.setPNext(&device16BitStorageFeatures);
 		}
-		
+
+		// add raytracing features, if available
+		const bool usingRTX = isPresentInCharPtrVector(deviceExtensions, VK_KHR_RAY_TRACING_PIPELINE_EXTENSION_NAME);
+		if (usingRTX) {
+		    vk::PhysicalDeviceFeatures2 raytracingFeatures2;    // INFO: vulkan says we can only use one PhysicalDeviceFeatures2 struct -> replace deviceFeatures2 by raytracingFeatures2
+		    vk::PhysicalDeviceVulkan12Features raytracingFeatures12;
+		    vk::PhysicalDeviceVulkan11Features raytracingFeatures11;
+		    vk::PhysicalDeviceAccelerationStructureFeaturesKHR raytracingAccelerationFeatures;
+		    vk::PhysicalDeviceRayTracingPipelineFeaturesKHR raytracingPipelineFeatures;
+
+		    raytracingFeatures2.setPNext(&raytracingFeatures12);
+		    raytracingFeatures12.setPNext(&raytracingFeatures11);
+		    raytracingFeatures11.setPNext(&raytracingAccelerationFeatures);
+		    raytracingAccelerationFeatures.setPNext(&raytracingPipelineFeatures);
+
+		    physicalDevice.getFeatures2(&raytracingFeatures2);  // query supported features
+
+		    // add raytracing features to deviceFeatures2
+		    deviceFeatures2.setFeatures(raytracingFeatures2.features);  // TODO: Ist das so korrekt? Haette sonst an dem letzten pNext Eintrag (leider ein void*) die anderen Features angekettet
+		    deviceFeatures2.features.fragmentStoresAndAtomics = true;   // TODO: Wir koennten hier auch die .features Zeilen von oben runternehmen zu nach den Klammern
+		    deviceFeatures2.features.geometryShader = true;
+		    deviceFeatures2.features.depthClamp = true;
+		    deviceFeatures2.features.shaderInt16 = true;
+		}
+
 		deviceCreateInfo.setPNext(&deviceFeatures2);
 
 		// Ablauf
-- 
GitLab