37 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			37 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
#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<typename value_type, typename Worker>
 | 
						|
	class ThreadWorker : public zstd::ThreadWorker<value_type, Worker> {
 | 
						|
	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<value_type, Worker>(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);
 | 
						|
		}
 | 
						|
	};
 | 
						|
} |