44 lines
1.6 KiB
C++
44 lines
1.6 KiB
C++
#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"
|
|
#include "vkn/thread/buffer_worker.h"
|
|
#include "vkn/thread/command_worker.h"
|
|
#include "vkn/wrapper/descriptorpool.h"
|
|
namespace vkn {
|
|
BufferWorker* Backend::TransferWorker;
|
|
CommandWorker* Backend::RenderWorker;
|
|
CommandWorker* Backend::PresentWorker;
|
|
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)
|
|
{
|
|
InstanceCreator instanceCreator{};
|
|
mInstance = new (GlobalPool()) Instance(instanceCreator);
|
|
|
|
DeviceCreator deviceCreator = DeviceCreator{ *mInstance };
|
|
deviceCreator.AddWindowExtension();
|
|
deviceCreator.AddQueue(Queue::RenderQueue, VkQueueFlagBits::VK_QUEUE_GRAPHICS_BIT, 1.0);
|
|
deviceCreator.AddQueue(Queue::TransferQueue, VkQueueFlagBits::VK_QUEUE_TRANSFER_BIT, 1.0);
|
|
mDevice = new (GlobalPool()) Device(deviceCreator);
|
|
|
|
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());
|
|
|
|
auto poolSizes = DescriptorPool::DefaultDescriptorPoolSize();
|
|
mPool = new DescriptorPool(*mDevice, poolSizes, 1000);
|
|
}
|
|
Backend::~Backend()
|
|
{
|
|
mInstance->~Instance();
|
|
mDevice->~Device();
|
|
}
|
|
}
|