• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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