#pragma once #include "vkn/type.h" namespace vkn { class DeviceCreator; class Queue; class Device { friend class DeviceCreator; protected: VkDevice mPtr{ NULL }; VkPhysicalDevice mPhysical{ NULL }; table mQueueMap; pmr::vector mFencePool; std::mutex mFenceMutex; public: VkDevice& Ptr() { return mPtr; } VkPhysicalDevice GetPhysical() { return mPhysical; } public: Device(DeviceCreator& Creator); ~Device(); VkFence CreateFence(VkFenceCreateFlags flags); Queue* GetQueue(Name name); VkFence PopFence(); void PushWaitFence(VkFence fence); VkSemaphore CreateSemaphore(); VkShaderModule CreateShaderModule(pmr::vector code); VkShaderModule CreateShaderModule(pmr::vector code); }; };