Fixed validation error

main
noah metz 2024-01-16 15:44:06 -07:00
parent 7f8b4e449b
commit 81e04e8e1f
1 changed files with 51 additions and 12 deletions

@ -579,19 +579,57 @@ VkResult create_logical_device(VkPhysicalDevice physical_device, VkSurfaceKHR su
return VK_ERROR_INITIALIZATION_FAILED; return VK_ERROR_INITIALIZATION_FAILED;
} }
uint32_t family_indices[] = {
transfer_queue->family,
graphics_queue->family,
present_queue->family,
};
VkDeviceQueueCreateInfo queue_create_info[3] = {}; VkDeviceQueueCreateInfo queue_create_info[3] = {};
uint32_t queue_count = 0;
float default_queue_priority = 1.0f; float default_queue_priority = 1.0f;
for(uint32_t i = 0; i < 3; i++) { if(graphics_queue->family == present_queue->family && graphics_queue->family == transfer_queue->family) {
queue_create_info[i].sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO; queue_count = 1;
queue_create_info[i].queueFamilyIndex = family_indices[i];
queue_create_info[i].queueCount = 1; queue_create_info[0].sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO;
queue_create_info[i].pQueuePriorities = &default_queue_priority; queue_create_info[0].queueFamilyIndex = graphics_queue->family;
queue_create_info[0].queueCount = 2;
queue_create_info[0].pQueuePriorities = &default_queue_priority;
} else if (graphics_queue->family == present_queue->family) {
queue_count = 2;
queue_create_info[0].sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO;
queue_create_info[0].queueFamilyIndex = graphics_queue->family;
queue_create_info[0].queueCount = 1;
queue_create_info[0].pQueuePriorities = &default_queue_priority;
queue_create_info[1].sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO;
queue_create_info[1].queueFamilyIndex = transfer_queue->family;
queue_create_info[1].queueCount = 1;
queue_create_info[1].pQueuePriorities = &default_queue_priority;
} else if (graphics_queue->family == transfer_queue->family) {
queue_count = 2;
queue_create_info[0].sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO;
queue_create_info[0].queueFamilyIndex = graphics_queue->family;
queue_create_info[0].queueCount = 2;
queue_create_info[0].pQueuePriorities = &default_queue_priority;
queue_create_info[1].sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO;
queue_create_info[1].queueFamilyIndex = present_queue->family;
queue_create_info[1].queueCount = 1;
queue_create_info[1].pQueuePriorities = &default_queue_priority;
} else {
queue_count = 3;
queue_create_info[0].sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO;
queue_create_info[0].queueFamilyIndex = graphics_queue->family;
queue_create_info[0].queueCount = 1;
queue_create_info[0].pQueuePriorities = &default_queue_priority;
queue_create_info[1].sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO;
queue_create_info[1].queueFamilyIndex = present_queue->family;
queue_create_info[1].queueCount = 1;
queue_create_info[1].pQueuePriorities = &default_queue_priority;
queue_create_info[1].sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO;
queue_create_info[1].queueFamilyIndex = transfer_queue->family;
queue_create_info[1].queueCount = 1;
queue_create_info[1].pQueuePriorities = &default_queue_priority;
} }
VkPhysicalDeviceVulkan12Features features_12 = { VkPhysicalDeviceVulkan12Features features_12 = {
@ -612,7 +650,7 @@ VkResult create_logical_device(VkPhysicalDevice physical_device, VkSurfaceKHR su
VkDeviceCreateInfo device_create_info = { VkDeviceCreateInfo device_create_info = {
.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, .sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO,
.pQueueCreateInfos = queue_create_info, .pQueueCreateInfos = queue_create_info,
.queueCreateInfoCount = 3, .queueCreateInfoCount = queue_count,
.pEnabledFeatures = &device_features, .pEnabledFeatures = &device_features,
.enabledExtensionCount = device_extension_count, .enabledExtensionCount = device_extension_count,
.ppEnabledExtensionNames = device_extensions, .ppEnabledExtensionNames = device_extensions,
@ -1460,6 +1498,7 @@ Object create_renderable(Mesh* mesh, GraphicsPipeline* pipeline) {
return object; return object;
} }
// Structure representing a descriptor set for an array of VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER
typedef struct TextureSetStruct { typedef struct TextureSetStruct {
uint32_t max_images; uint32_t max_images;
Texture** textures; Texture** textures;