34 lines
969 B
C++
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);
|
|
}
|
|
};
|
|
} |