Almost got the present family queue working (check todo)
This commit is contained in:
parent
4a40ed5d90
commit
7f9a0d91a2
1 changed files with 29 additions and 13 deletions
42
src/main.c
42
src/main.c
|
|
@ -35,10 +35,11 @@ typedef struct Application {
|
|||
GLFWwindow *window;
|
||||
VkInstance instance;
|
||||
VkDebugUtilsMessengerEXT debugMessenger;
|
||||
VkSurfaceKHR surface;
|
||||
VkPhysicalDevice physicalDevice;
|
||||
VkDevice device;
|
||||
VkQueue graphicsQueue;
|
||||
VkSurfaceKHR surface;
|
||||
VkQueue presentQueue;
|
||||
} Application;
|
||||
|
||||
bool checkValidationLayerSupport() {
|
||||
|
|
@ -242,8 +243,7 @@ QueueFamilyIndices findQueueFamilies(VkPhysicalDevice device,
|
|||
VkQueueFamilyProperties queueFamilies[queueFamilyCount];
|
||||
vkGetPhysicalDeviceQueueFamilyProperties(device, &queueFamilyCount,
|
||||
queueFamilies);
|
||||
uint32_t i;
|
||||
for (i = 0; i < queueFamilyCount; i++) {
|
||||
for (uint32_t i = 0; i < queueFamilyCount; i++) {
|
||||
// Graphics support
|
||||
if (queueFamilies[i].queueFlags & VK_QUEUE_GRAPHICS_BIT) {
|
||||
indices.graphicsFamily = i;
|
||||
|
|
@ -253,12 +253,14 @@ QueueFamilyIndices findQueueFamilies(VkPhysicalDevice device,
|
|||
VkBool32 presentSupport = false;
|
||||
vkGetPhysicalDeviceSurfaceSupportKHR(device, i, *surface, &presentSupport);
|
||||
if (presentSupport) {
|
||||
indices.presentFamilyExists = true;
|
||||
indices.presentFamily = i;
|
||||
indices.presentFamilyExists = true;
|
||||
}
|
||||
|
||||
// Early break if we've found everything
|
||||
if (indices.presentFamilyExists && indices.graphicsFamilyExists) {
|
||||
fprintf(stderr, "yay? %d %d\n", indices.presentFamilyExists,
|
||||
indices.graphicsFamilyExists);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -278,6 +280,7 @@ void pickPhysicalDevice(Application *app) {
|
|||
uint32_t physicalDeviceCount;
|
||||
vkEnumeratePhysicalDevices(app->instance, &physicalDeviceCount, NULL);
|
||||
if (physicalDeviceCount == 0) {
|
||||
fprintf(stderr, "Failed to find GPU with vulkan support!\n");
|
||||
fprintf(stderr, "Failed to find GPU with vulkan support!\n");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
|
@ -303,13 +306,26 @@ void pickPhysicalDevice(Application *app) {
|
|||
|
||||
void createLogicalDevice(Application *app) {
|
||||
// Specify Queues
|
||||
QueueFamilyIndices indeces = findQueueFamilies(app->physicalDevice, &app->surface);
|
||||
VkDeviceQueueCreateInfo queueCreateInfo = {};
|
||||
queueCreateInfo.sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO;
|
||||
queueCreateInfo.queueFamilyIndex = indeces.graphicsFamily;
|
||||
queueCreateInfo.queueCount = 1;
|
||||
float queuePriority = 1.0f;
|
||||
queueCreateInfo.pQueuePriorities = &queuePriority;
|
||||
|
||||
QueueFamilyIndices indeces =
|
||||
findQueueFamilies(app->physicalDevice, &app->surface);
|
||||
|
||||
//TODO: stop duplicate queue indeces occurring in this array (A set would be so handy rn)
|
||||
uint32_t uniqueQueueFamilies[] = {indeces.graphicsFamily,
|
||||
indeces.presentFamily};
|
||||
size_t numQueues = sizeof(uniqueQueueFamilies) / sizeof(uint32_t);
|
||||
VkDeviceQueueCreateInfo queueCreateInfos[numQueues];
|
||||
|
||||
for (uint i = 0; i < numQueues; i++) {
|
||||
VkDeviceQueueCreateInfo queueCreateInfo = {};
|
||||
queueCreateInfo.sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO;
|
||||
queueCreateInfo.queueFamilyIndex = uniqueQueueFamilies[i];
|
||||
queueCreateInfo.queueCount = 1;
|
||||
float queuePriority = 1.0f;
|
||||
queueCreateInfo.pQueuePriorities = &queuePriority;
|
||||
|
||||
queueCreateInfos[i] = queueCreateInfo;
|
||||
}
|
||||
|
||||
// Specify device features
|
||||
VkPhysicalDeviceFeatures deviceFeatures = {VK_FALSE};
|
||||
|
|
@ -317,9 +333,9 @@ void createLogicalDevice(Application *app) {
|
|||
// Specify logical device
|
||||
VkDeviceCreateInfo createInfo = {};
|
||||
createInfo.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO;
|
||||
createInfo.pQueueCreateInfos = &queueCreateInfo;
|
||||
createInfo.pQueueCreateInfos = queueCreateInfos;
|
||||
createInfo.queueCreateInfoCount = numQueues;
|
||||
createInfo.pEnabledFeatures = &deviceFeatures;
|
||||
createInfo.queueCreateInfoCount = 1;
|
||||
|
||||
// Old Vulkan specify layers
|
||||
createInfo.enabledLayerCount = 0;
|
||||
|
|
|
|||
Loading…
Reference in a new issue