basic rendering for both opengl and vulkan
This commit is contained in:
parent
4b18afa040
commit
dadd2edaf1
29 changed files with 1140 additions and 38 deletions
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue