#pragma once #include "std/thread.h" #include "vkn/wrapper/commandpool.h" #include "vkn/wrapper/queue.h" #include "vkn/wrapper/device.h" namespace vkn { using zstd::channel; template class ThreadWorker : public zstd::ThreadWorker { protected: Name mName; Device& mDevice; Queue& mQueue; CommandPool mCommandPool; CommandBuffer mImmediateExeCmd; VkFence mImmediateFence; public: ThreadWorker(Name name, Device& device, Queue& queue, VkCommandPoolCreateFlags queueFlags) : zstd::ThreadWorker(64) , mName(name) , mDevice(device) , mQueue(queue) , mCommandPool(device, queueFlags, queue.QueueFamilyIndex()) , mImmediateExeCmd(mCommandPool.AllocateBuffer(VK_COMMAND_BUFFER_LEVEL_PRIMARY)) , mImmediateFence(device.CreateFence(VK_FENCE_CREATE_SIGNALED_BIT)) {} CommandPool& GetCommandPool() { return mCommandPool; } Queue& GetQueue() { return mQueue; } VkCommandBuffer AllocateBuffer(VkCommandBufferLevel level) { return mCommandPool.AllocateBuffer(level); } }; }