1 #ifndef SWAP_CHAIN_STATE_VK_H 2 #define SWAP_CHAIN_STATE_VK_H 3 4 #include <functional> 5 #include <memory> 6 #include <optional> 7 #include <unordered_set> 8 #include <vector> 9 10 #include "vulkan/cereal/common/goldfish_vk_dispatch.h" 11 12 class SwapChainStateVk { 13 public: 14 static std::vector<const char *> getRequiredInstanceExtensions(); 15 static std::vector<const char *> getRequiredDeviceExtensions(); 16 static bool validateQueueFamilyProperties( 17 const goldfish_vk::VulkanDispatch &, VkPhysicalDevice, VkSurfaceKHR, 18 uint32_t queueFamilyIndex); 19 using VkSwapchainCreateInfoKHRPtr = 20 std::unique_ptr<VkSwapchainCreateInfoKHR, 21 std::function<void(VkSwapchainCreateInfoKHR *)>>; 22 static VkSwapchainCreateInfoKHRPtr createSwapChainCi( 23 const goldfish_vk::VulkanDispatch &, VkSurfaceKHR, VkPhysicalDevice, 24 uint32_t width, uint32_t height, 25 const std::unordered_set<uint32_t> &queueFamilyIndices); 26 27 explicit SwapChainStateVk(const goldfish_vk::VulkanDispatch &, VkDevice, 28 const VkSwapchainCreateInfoKHR &); 29 ~SwapChainStateVk(); 30 VkFormat getFormat(); 31 const std::vector<VkImage>& getVkImages() const; 32 const std::vector<VkImageView>& getVkImageViews() const; 33 VkSwapchainKHR getSwapChain() const; 34 35 private: 36 const static VkFormat k_vkFormat = VK_FORMAT_B8G8R8A8_UNORM; 37 const static VkColorSpaceKHR k_vkColorSpace = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR; 38 39 const goldfish_vk::VulkanDispatch &m_vk; 40 VkDevice m_vkDevice; 41 VkSwapchainKHR m_vkSwapChain; 42 std::vector<VkImage> m_vkImages; 43 std::vector<VkImageView> m_vkImageViews; 44 }; 45 46 #endif