Program Listing for File Raytracing.ixx

Program Listing for File Raytracing.ixx#

Return to documentation for file (Src/GraphicsEngineVulkan/renderer/Raytracing.ixx)

module;

#include "renderer/pushConstants/PushConstantRayTracing.hpp"
#include <glm/glm.hpp>
#include <vector>
#include <vulkan/vulkan.hpp>

export module kataglyphis.vulkan.raytracing;

import kataglyphis.vulkan.device;
import kataglyphis.vulkan.buffer;
import kataglyphis.vulkan.image;
import kataglyphis.vulkan.swapchain;

export namespace Kataglyphis::VulkanRendererInternals {
class Raytracing
{
  public:
    Raytracing();

    void init(VulkanDevice *in_device, const std::vector<vk::DescriptorSetLayout> &descriptorSetLayouts);

    void shaderHotReload(const std::vector<vk::DescriptorSetLayout> &descriptor_set_layouts);

    void recordCommands(vk::CommandBuffer &commandBuffer,
      VulkanImage &renderImage,
      VulkanSwapChain *vulkanSwapChain,
      const std::vector<vk::DescriptorSet> &descriptorSets);

    void cleanUp();

    ~Raytracing();

  private:
    VulkanDevice *device{ nullptr };
    [[maybe_unused]] VulkanSwapChain *vulkanSwapChain{ nullptr };

    vk::Pipeline graphicsPipeline{};
    vk::PipelineLayout pipeline_layout{};
    PushConstantRaytracing pc{ glm::vec4(0.f) };
    vk::PushConstantRange pc_ranges{ vk::ShaderStageFlagBits::eAll, 0, 0 };

    std::vector<vk::RayTracingShaderGroupCreateInfoKHR> shader_groups;
    VulkanBuffer shaderBindingTableBuffer;
    VulkanBuffer raygenShaderBindingTableBuffer;
    VulkanBuffer missShaderBindingTableBuffer;
    VulkanBuffer hitShaderBindingTableBuffer;

    vk::StridedDeviceAddressRegionKHR rgen_region{};
    vk::StridedDeviceAddressRegionKHR miss_region{};
    vk::StridedDeviceAddressRegionKHR hit_region{};
    vk::StridedDeviceAddressRegionKHR call_region{};

    vk::PhysicalDeviceRayTracingPipelinePropertiesKHR raytracing_properties{};

    void createPCRange();
    void createGraphicsPipeline(const std::vector<vk::DescriptorSetLayout> &descriptorSetLayouts);
    void createSBT();
};
}// namespace Kataglyphis::VulkanRendererInternals