Files
QuaternionEngine/src/core/descriptor/manager.cpp

45 lines
1.5 KiB
C++

#include "manager.h"
#include "core/device/device.h"
#include "descriptors.h"
void DescriptorManager::init(DeviceManager *deviceManager)
{
_deviceManager = deviceManager;
{
DescriptorLayoutBuilder builder;
builder.add_binding(0, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER);
_singleImageDescriptorLayout = builder.build(
_deviceManager->device(), VK_SHADER_STAGE_FRAGMENT_BIT,
nullptr, VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT);
} {
DescriptorLayoutBuilder builder;
builder.add_binding(0, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER);
if (_deviceManager->supportsAccelerationStructure())
{
// TLAS for ray query (set=0,binding=1)
builder.add_binding(1, VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR);
}
_gpuSceneDataDescriptorLayout = builder.build(
_deviceManager->device(), VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT,
nullptr, VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT);
}
}
void DescriptorManager::cleanup()
{
if (!_deviceManager) return;
if (_singleImageDescriptorLayout)
{
vkDestroyDescriptorSetLayout(_deviceManager->device(), _singleImageDescriptorLayout, nullptr);
_singleImageDescriptorLayout = VK_NULL_HANDLE;
}
if (_gpuSceneDataDescriptorLayout)
{
vkDestroyDescriptorSetLayout(_deviceManager->device(), _gpuSceneDataDescriptorLayout, nullptr);
_gpuSceneDataDescriptorLayout = VK_NULL_HANDLE;
}
}