Add proper queue init and fetch functionality to RenderDriver

This commit is contained in:
2025-05-04 02:54:06 +10:00
parent 7039fdf93e
commit 49a0a4b78a
4 changed files with 99 additions and 18 deletions

View File

@@ -11,6 +11,7 @@
#include <nova/render/render_driver.h>
#include <vulkan/vulkan.h>
#include <unordered_map>
#include <vector>
namespace Nova {
@@ -30,7 +31,10 @@ namespace Nova {
};
struct Queue {
VkQueue handle = VK_NULL_HANDLE;
u32 family_index;
u32 queue_index;
u32 usage_count = 0;
};
struct RenderPass {
@@ -76,7 +80,9 @@ namespace Nova {
[[nodiscard]] bool get_device_supports_surface(u32 index, SurfaceID surface) const override;
void select_device(u32 index) override;
[[nodiscard]] QueueID get_queue() override;
[[nodiscard]] u32 choose_queue_family(QueueType type, SurfaceID surface) override;
[[nodiscard]] QueueID get_queue(u32 queue_family) override;
void free_queue(QueueID queue) override;
[[nodiscard]] SurfaceID create_surface(WindowID window) override;
void destroy_surface(SurfaceID surface) override;
@@ -117,6 +123,8 @@ namespace Nova {
std::vector<const char*> m_layers;
std::vector<const char*> m_device_extensions;
std::vector<RenderDevice> m_devices;
std::vector<Queue> m_queues;
std::unordered_map<u32, VkQueueFlags> m_queue_families;
void _check_version() const;
void _check_extensions();
@@ -127,7 +135,7 @@ namespace Nova {
void _check_device_extensions();
void _check_device_features();
void _check_device_capabilities();
void _init_queues(std::vector<VkDeviceQueueCreateInfo>& queues) const;
void _init_queues(std::vector<VkDeviceQueueCreateInfo>& queues);
void _init_device(const std::vector<VkDeviceQueueCreateInfo>& queues);
};
} // namespace Nova