added vulkan device and queues creation

This commit is contained in:
Lorenzo Torres 2025-11-03 13:08:46 +01:00
parent 89edee7249
commit 6c31a3ce27
20 changed files with 253 additions and 18 deletions

View file

@ -1,3 +1,4 @@
// SPDX-License-Identifier: BSD-3-Clause
#include "instance.h"
#include "../core/log.h"
#define RGFW_VULKAN
@ -40,27 +41,19 @@ const char **vk_instance_extensions(usize *count)
*count = rgfw_extension_count + extension_count;
const char **instance_extensions = malloc(*count * sizeof(char *));
#ifdef DEBUG
log_info("Required Vulkan extensions: ");
#endif
for (usize i = 0; i < rgfw_extension_count; i++) {
#ifdef DEBUG
printf("%s ", rgfw_extensions[i]);
#endif
instance_extensions[i] = rgfw_extensions[i];
}
for (usize i = 0; i < extension_count; i++) {
#ifdef DEBUG
printf("%s ", extensions[i]);
#endif
instance_extensions[rgfw_extension_count + i] = extensions[i];
}
#ifdef DEBUG
printf("\n");
#endif
return instance_extensions;
}
@ -92,8 +85,10 @@ void vk_instance_init(struct renderer_context *context)
VkResult result = vkCreateInstance(&instance_info, NULL, &context->instance);
switch(result) {
case VK_ERROR_INCOMPATIBLE_DRIVER:
free(extension_names);
fatal("Incompatible driver.\n");
case VK_ERROR_LAYER_NOT_PRESENT:
free(extension_names);
fatal("Requested vulkan layers are not present.\n");
case VK_SUCCESS:
log_info("Vulkan instance created.\n");
@ -104,3 +99,8 @@ void vk_instance_init(struct renderer_context *context)
free(extension_names);
}
void vk_instance_deinit(struct renderer_context *context)
{
vkDestroyInstance(context->instance, NULL);
}