Skip to content
Snippets Groups Projects
Commit f9450a8f authored by Vanessa Karolek's avatar Vanessa Karolek
Browse files

[#92] add RTXModule, init RTX in main

parent 63561930
No related branches found
No related tags found
1 merge request!75Resolve "RTX-Module"
Pipeline #26816 passed
......@@ -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
#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);
};
}
// todo: remove
\ No newline at end of file
#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
// todo: remove
\ No newline at end of file
......@@ -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"
));
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment