Program Listing for File PathTracing.hpp
↰ Return to documentation for file (Src/GraphicsEngineVulkan/renderer/PathTracing.hpp
)
#pragma once
#include <vulkan/vulkan.h>
#include "renderer/pushConstants/PushConstantPathTracing.hpp"
#include "vulkan_base/VulkanDevice.hpp"
#include "vulkan_base/VulkanSwapChain.hpp"
namespace Kataglyphis::VulkanRendererInternals {
class PathTracing
{
public:
PathTracing();
void init(VulkanDevice *device, const std::vector<VkDescriptorSetLayout> &descriptorSetLayouts);
void shaderHotReload(const std::vector<VkDescriptorSetLayout> &descriptor_set_layouts);
void recordCommands(VkCommandBuffer &commandBuffer,
uint32_t image_index,
VulkanImage &vulkanImage,
VulkanSwapChain *vulkanSwapChain,
const std::vector<VkDescriptorSet> &descriptorSets);
void cleanUp();
~PathTracing();
private:
VulkanDevice *device{ VK_NULL_HANDLE };
VkPipelineLayout pipeline_layout{ VK_NULL_HANDLE };
VkPipeline pipeline{ VK_NULL_HANDLE };
VkPushConstantRange pc_range{ VK_SHADER_STAGE_FLAG_BITS_MAX_ENUM, 0, 0 };
PushConstantPathTracing push_constant{ glm::vec4(0.f), 0, 0 };
float timeStampPeriod{ 0 };
uint64_t pathTracingTiming{ static_cast<uint64_t>(-1.f) };
uint32_t query_count{ 2 };
std::vector<uint64_t> queryResults;
VkQueryPool queryPool{ VK_NULL_HANDLE };
struct
{
uint32_t maxComputeWorkGroupCount[3] = { static_cast<uint32_t>(-1),
static_cast<uint32_t>(-1),
static_cast<uint32_t>(-1) };
uint32_t maxComputeWorkGroupInvocations = -1;
uint32_t maxComputeWorkGroupSize[3] = { static_cast<uint32_t>(-1),
static_cast<uint32_t>(-1),
static_cast<uint32_t>(-1) };
} computeLimits;
struct SpecializationData
{
// standard values
uint32_t specWorkGroupSizeX = 16;
uint32_t specWorkGroupSizeY = 8;
uint32_t specWorkGroupSizeZ = 0;
};
SpecializationData specializationData;
void createQueryPool();
void createPipeline(const std::vector<VkDescriptorSetLayout> &descriptorSetLayouts);
};
}// namespace Kataglyphis::VulkanRendererInternals