Program Listing for File ASManager.hpp
↰ Return to documentation for file (Src/GraphicsEngineVulkan/renderer/accelerationStructures/ASManager.hpp
)
#pragma once
#include <vulkan/vulkan.h>
#include "BottomLevelAccelerationStructure.hpp"
#include "TopLevelAccelerationStructure.hpp"
#include "renderer/CommandBufferManager.hpp"
#include "scene/Scene.hpp"
#include "vulkan_base/VulkanDevice.hpp"
namespace Kataglyphis::VulkanRendererInternals {
struct BuildAccelerationStructure
{
VkAccelerationStructureBuildGeometryInfoKHR build_info;
VkAccelerationStructureBuildSizesInfoKHR size_info;
const VkAccelerationStructureBuildRangeInfoKHR *range_info;
BottomLevelAccelerationStructure single_blas;
};
struct BlasInput
{
std::vector<VkAccelerationStructureGeometryKHR> as_geometry;
std::vector<VkAccelerationStructureBuildRangeInfoKHR> as_build_offset_info;
};
class ASManager
{
public:
ASManager();
VkAccelerationStructureKHR &getTLAS() { return tlas.vulkanAS; };
void createASForScene(VulkanDevice *device, VkCommandPool commandPool, Scene *scene);
void createBLAS(VulkanDevice *device, VkCommandPool commandPool, Scene *scene);
void createTLAS(VulkanDevice *device, VkCommandPool commandPool, Scene *scene);
void cleanUp();
~ASManager();
private:
VulkanDevice *vulkanDevice{ VK_NULL_HANDLE };
Kataglyphis::VulkanRendererInternals::CommandBufferManager commandBufferManager;
VulkanBufferManager vulkanBufferManager;
std::vector<BottomLevelAccelerationStructure> blas;
TopLevelAccelerationStructure tlas;
void createSingleBlas(VulkanDevice *device,
VkCommandBuffer command_buffer,
BuildAccelerationStructure &build_as_structure,
VkDeviceAddress scratch_device_or_host_address);
void createAccelerationStructureInfosBLAS(VulkanDevice *device,
BuildAccelerationStructure &build_as_structure,
BlasInput &blas_input,
VkDeviceSize ¤t_scretch_size,
VkDeviceSize ¤t_size);
void objectToVkGeometryKHR(VulkanDevice *device,
Mesh *mesh,
VkAccelerationStructureGeometryKHR &acceleration_structure_geometry,
VkAccelerationStructureBuildRangeInfoKHR &acceleration_structure_build_range_info);
};
}// namespace Kataglyphis::VulkanRendererInternals