From f9450a8f7619916b27021299003f296d998ee973 Mon Sep 17 00:00:00 2001 From: Vanessa Karolek <vaka1997@uni-koblenz.de> Date: Wed, 18 Aug 2021 10:54:58 +0200 Subject: [PATCH] [#92] add RTXModule, init RTX in main --- modules/rtx/CMakeLists.txt | 6 ++-- modules/rtx/include/vkcv/rtx/RTX.hpp | 48 +++++++++++++++++++++++++++ modules/rtx/include/vkcv/rtx/Test.hpp | 1 - modules/rtx/src/vkcv/rtx/RTX.cpp | 46 +++++++++++++++++++++++++ modules/rtx/src/vkcv/rtx/Test.cpp | 1 - projects/rtx/src/main.cpp | 29 +++++++--------- 6 files changed, 109 insertions(+), 22 deletions(-) create mode 100644 modules/rtx/include/vkcv/rtx/RTX.hpp delete mode 100644 modules/rtx/include/vkcv/rtx/Test.hpp create mode 100644 modules/rtx/src/vkcv/rtx/RTX.cpp delete mode 100644 modules/rtx/src/vkcv/rtx/Test.cpp diff --git a/modules/rtx/CMakeLists.txt b/modules/rtx/CMakeLists.txt index 7ee75e39..061687c4 100644 --- a/modules/rtx/CMakeLists.txt +++ b/modules/rtx/CMakeLists.txt @@ -9,12 +9,12 @@ set(vkcv_rtx_source ${PROJECT_SOURCE_DIR}/src) set(vkcv_rtx_include ${PROJECT_SOURCE_DIR}/include) set(vkcv_rtx_sources - ${vkcv_rtx_include}/vkcv/rtx/Test.hpp # todo: remove - ${vkcv_rtx_source}/vkcv/rtx/Test.cpp # todo: remove + ${vkcv_rtx_include}/vkcv/rtx/RTX.hpp + ${vkcv_rtx_source}/vkcv/rtx/RTX.cpp ) # adding source files to the project add_library(vkcv_rtx STATIC ${vkcv_rtx_sources}) # add the own include directory for public headers -target_include_directories(vkcv_rtx BEFORE PUBLIC ${vkcv_rtx_include}) \ No newline at end of file +target_include_directories(vkcv_rtx BEFORE PUBLIC ${vkcv_rtx_include} ${Vulkan_INCLUDE_DIR} ${Vulkan_LIBRARIES}) \ No newline at end of file diff --git a/modules/rtx/include/vkcv/rtx/RTX.hpp b/modules/rtx/include/vkcv/rtx/RTX.hpp new file mode 100644 index 00000000..d7c2e766 --- /dev/null +++ b/modules/rtx/include/vkcv/rtx/RTX.hpp @@ -0,0 +1,48 @@ +#pragma once + +#include <vector> +#include "vulkan/vulkan.hpp" + +namespace vkcv::rtx { + + class RTXModule { + private: + + std::vector<const char*> m_instanceExtensions; + std::vector<const char*> m_deviceExtensions; + vk::PhysicalDevice m_physicalDevice; + vk::PhysicalDeviceRayTracingPipelinePropertiesKHR m_rtProperties{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_PROPERTIES_KHR}; + + public: + + /** + * @brief TODO + */ + RTXModule(); + + /** + * @brief TODO + */ + ~RTXModule() {}; + + /** + * @brief Returns the raytracing instance extensions. + * @return The raytracing instance extensions. + */ + std::vector<const char*> getInstanceExtensions(); + + /** + * @brief Returns the raytracing device extensions. + * @return The raytracing device extensions. + */ + std::vector<const char*> getDeviceExtensions(); + + /** + * @brief TODO + * @param physicalDevice + */ + void init(vk::PhysicalDevice &physicalDevice); + + }; + +} diff --git a/modules/rtx/include/vkcv/rtx/Test.hpp b/modules/rtx/include/vkcv/rtx/Test.hpp deleted file mode 100644 index dffb5c9c..00000000 --- a/modules/rtx/include/vkcv/rtx/Test.hpp +++ /dev/null @@ -1 +0,0 @@ -// todo: remove \ No newline at end of file diff --git a/modules/rtx/src/vkcv/rtx/RTX.cpp b/modules/rtx/src/vkcv/rtx/RTX.cpp new file mode 100644 index 00000000..48e8a05f --- /dev/null +++ b/modules/rtx/src/vkcv/rtx/RTX.cpp @@ -0,0 +1,46 @@ +#include "vkcv/rtx/RTX.hpp" + +namespace vkcv::rtx { + + RTXModule::RTXModule() { + + // prepare needed raytracing extensions + m_instanceExtensions = { + "VK_KHR_get_physical_device_properties2" + }; + m_deviceExtensions = { + "VK_KHR_maintenance3", + "VK_EXT_descriptor_indexing", + "VK_KHR_buffer_device_address", + "VK_KHR_deferred_host_operations", + "VK_KHR_acceleration_structure", + "VK_KHR_spirv_1_4", + "VK_KHR_ray_tracing_pipeline", + "VK_KHR_ray_query", + "VK_KHR_pipeline_library" + }; + + // enable raytracing features! + vk::PhysicalDeviceAccelerationStructureFeaturesKHR accelerationFeature(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR); + vk::PhysicalDeviceRayTracingPipelineFeaturesKHR raytracingPipelineFeature(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR); + } + + void RTXModule::init(vk::PhysicalDevice &physicalDevice) { + m_physicalDevice = physicalDevice; + + // Requesting ray tracing properties + vk::PhysicalDeviceProperties2 prop2{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2}; + prop2.pNext = &m_rtProperties; + m_physicalDevice.getProperties2(&prop2); + } + + std::vector<const char*> RTXModule::getInstanceExtensions() { + return m_instanceExtensions; + } + + std::vector<const char*> RTXModule::getDeviceExtensions() { + return m_deviceExtensions; + } + + +} \ No newline at end of file diff --git a/modules/rtx/src/vkcv/rtx/Test.cpp b/modules/rtx/src/vkcv/rtx/Test.cpp deleted file mode 100644 index dffb5c9c..00000000 --- a/modules/rtx/src/vkcv/rtx/Test.cpp +++ /dev/null @@ -1 +0,0 @@ -// todo: remove \ No newline at end of file diff --git a/projects/rtx/src/main.cpp b/projects/rtx/src/main.cpp index 3cfbbf03..92e1c0e8 100644 --- a/projects/rtx/src/main.cpp +++ b/projects/rtx/src/main.cpp @@ -6,6 +6,7 @@ #include <vkcv/asset/asset_loader.hpp> #include <vkcv/shader/GLSLCompiler.hpp> #include <vkcv/scene/Scene.hpp> +#include <vkcv/rtx/RTX.hpp> int main(int argc, const char** argv) { const char* applicationName = "First Scene"; @@ -30,28 +31,18 @@ int main(int argc, const char** argv) { cameraManager.getCamera(camIndex1).setNearFar(0.1f, 30.0f); // prepare raytracing extensions. IMPORTANT: configure compiler to build in 64 bit mode - std::vector<const char*> raytracingInstanceExtensions = { - "VK_KHR_get_physical_device_properties2" - }; - std::vector<const char*> raytracingDeviceExtensions = { - "VK_KHR_maintenance3", - "VK_EXT_descriptor_indexing", - "VK_KHR_buffer_device_address", - "VK_KHR_deferred_host_operations", - "VK_KHR_acceleration_structure", - "VK_KHR_spirv_1_4", - "VK_KHR_ray_tracing_pipeline", - "VK_KHR_ray_query", - "VK_KHR_pipeline_library" - }; + vkcv::rtx::RTXModule rtxModule; + std::vector<const char*> raytracingInstanceExtensions = rtxModule.getInstanceExtensions(); + std::vector<const char*> raytracingDeviceExtensions = rtxModule.getDeviceExtensions(); - std::vector<const char*> instanceExtensions = {}; - instanceExtensions.insert(instanceExtensions.end(), raytracingInstanceExtensions.begin(), raytracingInstanceExtensions.end()); + std::vector<const char*> instanceExtensions = {}; // add some more instance extensions, if needed + instanceExtensions.insert(instanceExtensions.end(), raytracingInstanceExtensions.begin(), raytracingInstanceExtensions.end()); // merge together all instance extensions std::vector<const char*> deviceExtensions = { "VK_KHR_swapchain" }; - deviceExtensions.insert(deviceExtensions.end(), raytracingDeviceExtensions.begin(), raytracingDeviceExtensions.end()); + deviceExtensions.insert(deviceExtensions.end(), raytracingDeviceExtensions.begin(), raytracingDeviceExtensions.end()); // merge together all device extensions + vkcv::Core core = vkcv::Core::create( window, @@ -62,6 +53,10 @@ int main(int argc, const char** argv) { deviceExtensions ); + // init RTXModule + vk::PhysicalDevice physicalDevice = core.getContext().getPhysicalDevice(); + rtxModule.init(physicalDevice); + vkcv::scene::Scene scene = vkcv::scene::Scene::load(core, std::filesystem::path( argc > 1 ? argv[1] : "resources/Sponza/Sponza.gltf" )); -- GitLab