Skip to content

File vk_physical_driver.hpp

File List > atlas > drivers > vulkan-cpp > vk_physical_driver.hpp

Go to the documentation of this file

#pragma once
#include <vulkan/vulkan.h>
#include <vector>

namespace atlas::vk {

    struct surface_properties {
        VkSurfaceCapabilitiesKHR surface_capabilities;
        VkSurfaceFormatKHR surface_format;
    };

    class vk_physical_driver {
        struct queue_family_indices {
            uint32_t graphics = -1;
            uint32_t compute = -1;
            uint32_t transfer = -1;
        };

    public:
        vk_physical_driver() = default;
        vk_physical_driver(const VkInstance& p_instance);
        ~vk_physical_driver();

        [[nodiscard]] queue_family_indices read_queue_family_indices() const {
            return m_queue_indices;
        }

        [[nodiscard]] uint32_t read_presentation_index(
          const VkSurfaceKHR& p_surface);

        [[nodiscard]] surface_properties get_surface_properties(
          const VkSurfaceKHR& p_surface);

        operator VkPhysicalDevice() { return m_physical_driver; }

        operator VkPhysicalDevice() const { return m_physical_driver; }

    private:
        queue_family_indices select_queue_family_indices();

    private:
        static vk_physical_driver* s_instance;
        VkPhysicalDevice m_physical_driver = nullptr;
        queue_family_indices m_queue_indices{};
        std::vector<VkQueueFamilyProperties> m_queue_family_properties{};
        surface_properties m_surface_properties{};
    };
};