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