basic rendering for both opengl and vulkan

This commit is contained in:
Lorenzo Torres 2026-01-07 02:43:00 +01:00
parent 4b18afa040
commit dadd2edaf1
29 changed files with 1140 additions and 38 deletions

View file

@ -9,6 +9,8 @@
void vk_device_init(struct renderer_context *context)
{
struct vector *device_extensions = vector_init(0, sizeof(char *));
vector_push(device_extensions, char *, VK_KHR_SWAPCHAIN_EXTENSION_NAME);
struct vector *physical_device_extensions = vk_physical_device_get_extensions(context);
for (usize i = 0; i < physical_device_extensions->length; i++) {
if (strcmp(((char **)physical_device_extensions->data)[i], "VK_KHR_portability_subset") == 0) {
@ -24,27 +26,32 @@ void vk_device_init(struct renderer_context *context)
}
f32 priority = 0.0;
VkDeviceQueueCreateInfo graphics_queue_create_info[2];
graphics_queue_create_info[0] = (VkDeviceQueueCreateInfo){
VkDeviceQueueCreateInfo queue_create_info[2];
u32 queue_create_info_count = 0;
queue_create_info[queue_create_info_count++] = (VkDeviceQueueCreateInfo){
.sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO,
.queueFamilyIndex = context->queue_indices.graphics,
.queueCount = 1,
.pQueuePriorities = &priority
};
graphics_queue_create_info[1] = (VkDeviceQueueCreateInfo){
.sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO,
.queueFamilyIndex = context->queue_indices.present,
.queueCount = 1,
.pQueuePriorities = &priority
};
/* Only add a second queue create info if present uses a different family */
if (context->queue_indices.present != context->queue_indices.graphics) {
queue_create_info[queue_create_info_count++] = (VkDeviceQueueCreateInfo){
.sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO,
.queueFamilyIndex = context->queue_indices.present,
.queueCount = 1,
.pQueuePriorities = &priority
};
}
VkDeviceCreateInfo device_create_info = {
.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO,
.pNext = NULL,
.flags = 0,
.queueCreateInfoCount = 2,
.pQueueCreateInfos = graphics_queue_create_info,
.queueCreateInfoCount = queue_create_info_count,
.pQueueCreateInfos = queue_create_info,
.enabledLayerCount = 0,
.ppEnabledLayerNames = NULL,
.enabledExtensionCount = device_extensions->length,
@ -58,8 +65,8 @@ void vk_device_init(struct renderer_context *context)
fatal("Can't create Vulkan device.\n");
}
vkGetDeviceQueue(context->device, graphics_queue_create_info[0].queueFamilyIndex, 0, &context->graphics_queue);
vkGetDeviceQueue(context->device, graphics_queue_create_info[1].queueFamilyIndex, 0, &context->present_queue);
vkGetDeviceQueue(context->device, context->queue_indices.graphics, 0, &context->graphics_queue);
vkGetDeviceQueue(context->device, context->queue_indices.present, 0, &context->present_queue);
vector_deinit(physical_device_extensions);
vector_deinit(device_extensions);