diff --git a/projects/rtx/src/main.cpp b/projects/rtx/src/main.cpp index 527eba8c3a1e020e14d92f5d305e2ddced936333..fbfa6c766b915792ae62af43721144f6d1f1167d 100644 --- a/projects/rtx/src/main.cpp +++ b/projects/rtx/src/main.cpp @@ -29,14 +29,45 @@ 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 = { + // vulkan raytracing extensions (according to https://www.khronos.org/blog/ray-tracing-in-vulkan) + "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", + + // turing raytracing extensions (rtx) (according to https://developer.nvidia.com/vulkan-turing) + "VK_KHR_get_memory_requirements2", + "VK_NV_ray_tracing" + }; + + std::vector<const char*> instanceExtensions = {}; + instanceExtensions.insert(instanceExtensions.end(), raytracingInstanceExtensions.begin(), raytracingInstanceExtensions.end()); + + std::vector<const char*> deviceExtensions = { + "VK_KHR_swapchain" + }; + deviceExtensions.insert(deviceExtensions.end(), raytracingDeviceExtensions.begin(), raytracingDeviceExtensions.end()); + vkcv::Core core = vkcv::Core::create( window, applicationName, VK_MAKE_VERSION(0, 0, 1), { vk::QueueFlagBits::eGraphics ,vk::QueueFlagBits::eCompute , vk::QueueFlagBits::eTransfer }, - {}, - { "VK_KHR_swapchain" } + instanceExtensions, + deviceExtensions ); + + vk::RayTracingPipelineCreateInfoNV rtnv; vkcv::scene::Scene scene = vkcv::scene::Scene::load(core, std::filesystem::path( argc > 1 ? argv[1] : "resources/Sponza/Sponza.gltf"