zengine/engine/modules/render/vulkan/src/backend.cpp

44 lines
1.6 KiB
C++
Raw Normal View History

2024-08-23 22:13:05 +08:00
#include "vkn/backend.h"
#include "vkn/wrapper/device.h"
#include "vkn/wrapper/device_create.h"
#include "vkn/wrapper/instance.h"
#include "vkn/wrapper/instance_create.h"
#include "vkn/wrapper/queue.h"
2024-08-27 20:21:32 +08:00
#include "vkn/thread/buffer_worker.h"
#include "vkn/thread/command_worker.h"
2024-10-27 22:37:35 +08:00
#include "vkn/wrapper/descriptorpool.h"
2024-08-23 22:13:05 +08:00
namespace vkn {
2024-08-27 20:21:32 +08:00
BufferWorker* Backend::TransferWorker;
2024-08-25 22:41:25 +08:00
CommandWorker* Backend::RenderWorker;
CommandWorker* Backend::PresentWorker;
2024-08-27 20:21:32 +08:00
template<typename Worker>
inline Worker* Backend::InitWorker(Name name, VkCommandPoolCreateFlags flag)
{
auto queue = mDevice->GetQueue(name);
return new Worker(name, *mDevice, *queue, flag);
}
Backend::Backend(string_view appName)
2024-08-23 22:13:05 +08:00
{
InstanceCreator instanceCreator{};
mInstance = new (GlobalPool()) Instance(instanceCreator);
DeviceCreator deviceCreator = DeviceCreator{ *mInstance };
deviceCreator.AddWindowExtension();
deviceCreator.AddQueue(Queue::RenderQueue, VkQueueFlagBits::VK_QUEUE_GRAPHICS_BIT, 1.0);
2024-10-30 15:15:25 +08:00
deviceCreator.AddQueue(Queue::TransferQueue, VkQueueFlagBits::VK_QUEUE_TRANSFER_BIT, 1.0);
2024-08-23 22:13:05 +08:00
mDevice = new (GlobalPool()) Device(deviceCreator);
2024-08-27 20:21:32 +08:00
Backend::TransferWorker = InitWorker<BufferWorker>(Queue::TransferQueue, VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT);
Backend::RenderWorker = InitWorker<CommandWorker>(Queue::RenderQueue, VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT);
Backend::TransferWorker->InitVmaAllocator(mInstance->Ptr());
2024-10-27 22:37:35 +08:00
auto poolSizes = DescriptorPool::DefaultDescriptorPoolSize();
mPool = new DescriptorPool(*mDevice, poolSizes, 1000);
2024-08-23 22:13:05 +08:00
}
Backend::~Backend()
{
mInstance->~Instance();
mDevice->~Device();
}
}