zengine/engine/modules/render/vulkan/include/vkn/thread/worker.h

34 lines
969 B
C
Raw Normal View History

2024-08-23 22:13:05 +08:00
#pragma once
2024-08-27 20:21:32 +08:00
#include "std/thread.h"
2024-08-23 22:13:05 +08:00
#include "vkn/wrapper/commandpool.h"
2024-08-27 20:21:32 +08:00
#include "vkn/wrapper/queue.h"
2024-08-23 22:13:05 +08:00
namespace vkn {
2024-08-27 20:21:32 +08:00
using zstd::channel;
template<typename value_type, typename Worker>
class ThreadWorker : public zstd::ThreadWorker<value_type, Worker> {
2024-08-23 22:13:05 +08:00
protected:
2024-08-27 20:21:32 +08:00
Name mName;
2024-08-23 22:13:05 +08:00
Device& mDevice;
Queue& mQueue;
CommandPool mCommandPool;
CommandBuffer mImmediateExeCmd;
public:
2024-08-27 20:21:32 +08:00
ThreadWorker(Name name, Device& device, Queue& queue, VkCommandPoolCreateFlags queueFlags)
: zstd::ThreadWorker<value_type, Worker>(64)
, mName(name)
, mDevice(device)
, mQueue(queue)
, mCommandPool(device, queueFlags, queue.QueueFamilyIndex())
, mImmediateExeCmd(mCommandPool.AllocateBuffer(VK_COMMAND_BUFFER_LEVEL_PRIMARY))
{}
2024-08-23 22:13:05 +08:00
CommandPool& GetCommandPool() {
return mCommandPool;
}
Queue& GetQueue() {
return mQueue;
}
2024-09-22 20:26:49 +08:00
VkCommandBuffer AllocateBuffer(VkCommandBufferLevel level) {
return mCommandPool.AllocateBuffer(level);
}
2024-08-23 22:13:05 +08:00
};
2024-08-27 20:21:32 +08:00
}