zengine/engine/modules/render/vulkan/include/vkn/thread/worker.h
2024-09-22 20:26:49 +08:00

34 lines
969 B
C++

#pragma once
#include "std/thread.h"
#include "vkn/wrapper/commandpool.h"
#include "vkn/wrapper/queue.h"
namespace vkn {
using zstd::channel;
template<typename value_type, typename Worker>
class ThreadWorker : public zstd::ThreadWorker<value_type, Worker> {
protected:
Name mName;
Device& mDevice;
Queue& mQueue;
CommandPool mCommandPool;
CommandBuffer mImmediateExeCmd;
public:
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))
{}
CommandPool& GetCommandPool() {
return mCommandPool;
}
Queue& GetQueue() {
return mQueue;
}
VkCommandBuffer AllocateBuffer(VkCommandBufferLevel level) {
return mCommandPool.AllocateBuffer(level);
}
};
}