#pragma once #include #include namespace engine { struct FormatRequirements { VkFormat format{}; VkFormatProperties properties{}; }; struct DeviceRequirements { std::vector requiredExtensions; VkPhysicalDeviceFeatures requiredFeatures; VkBool32 memoryPriorityFeature; std::vector formats{}; }; struct Device { VkDevice device = VK_NULL_HANDLE; VkPhysicalDevice physicalDevice = VK_NULL_HANDLE; VkPhysicalDeviceProperties properties{}; VkPhysicalDeviceFeatures features{}; struct DeviceQueues { VkQueue presentQueue = VK_NULL_HANDLE; std::vector drawQueues{}; std::vector transferQueues{}; uint32_t presentAndDrawQueueFamily = UINT32_MAX; uint32_t transferQueueFamily = UINT32_MAX; } queues{}; }; Device createDevice(VkInstance instance, const DeviceRequirements& requirements, VkSurfaceKHR surface); void destroyDevice(Device device); }