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

54 lines
1.9 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"
namespace vkn {
2024-08-25 22:41:25 +08:00
CommandWorker* Backend::TransferWorker;
CommandWorker* Backend::RenderWorker;
CommandWorker* Backend::PresentWorker;
2024-08-23 22:13:05 +08:00
Backend::Backend(string_view appName) : mWorkerMap(GlobalPool())
{
InstanceCreator instanceCreator{};
mInstance = new (GlobalPool()) Instance(instanceCreator);
DeviceCreator deviceCreator = DeviceCreator{ *mInstance };
deviceCreator.AddWindowExtension();
deviceCreator.AddQueue(Queue::TransferQueue,VkQueueFlagBits::VK_QUEUE_GRAPHICS_BIT, 1.0);
deviceCreator.AddQueue(Queue::RenderQueue, VkQueueFlagBits::VK_QUEUE_GRAPHICS_BIT, 1.0);
deviceCreator.AddQueue(Queue::ComputeQueue, VkQueueFlagBits::VK_QUEUE_GRAPHICS_BIT, 1.0);
deviceCreator.AddQueue(Queue::PresentQueue, VkQueueFlagBits::VK_QUEUE_GRAPHICS_BIT, 1.0);
mDevice = new (GlobalPool()) Device(deviceCreator);
InitWorker(Queue::TransferQueue, VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT);
InitWorker(Queue::RenderQueue, VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT);
InitWorker(Queue::ComputeQueue, VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT);
InitWorker(Queue::PresentQueue, VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT);
Backend::TransferWorker = GetWorker(Queue::TransferQueue);
Backend::RenderWorker = GetWorker(Queue::RenderQueue);
}
Backend::~Backend()
{
mInstance->~Instance();
mDevice->~Device();
}
void Backend::InitWorker(Name name, VkCommandPoolCreateFlags flag)
{
auto queue = mDevice->GetQueue(name);
if (queue) {
auto worker = new CommandWorker(name, *mDevice, *queue, flag);
mWorkerMap.emplace(name, worker);
}
}
CommandWorker* Backend::GetWorker(Name name)
{
auto it = mWorkerMap.find(name);
if (it != mWorkerMap.end()) {
return it->second;
}
return nullptr;
}
}