diff --git a/CMakeLists.txt b/CMakeLists.txt index 3844a3c..5b7ac87 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,6 +3,8 @@ project(Graph) list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake) +set(CMAKE_CXX_STANDARD 14) + find_package(SDL2 REQUIRED) find_package(Vulkan REQUIRED) diff --git a/renderer.cpp b/renderer.cpp index d605511..8ad7d39 100644 --- a/renderer.cpp +++ b/renderer.cpp @@ -1,5 +1,8 @@ #include "renderer.h" +#include +#include + Renderer::Renderer() { createInstance(); createLogicalDevice(); @@ -28,12 +31,43 @@ void Renderer::createLogicalDevice() { for(uint32_t i = 0; i < physicalDeviceCount; i++) { VkPhysicalDeviceProperties properties = {}; vkGetPhysicalDeviceProperties(physicalDevices[i], &properties); - + physicalDevice = physicalDevices[i]; } + uint32_t queueFamilyPropertiesCount = 0; + vkGetPhysicalDeviceQueueFamilyProperties(physicalDevice, &queueFamilyPropertiesCount, nullptr); + + VkQueueFamilyProperties* queueFamilyProperties = new VkQueueFamilyProperties[queueFamilyPropertiesCount]; + vkGetPhysicalDeviceQueueFamilyProperties(physicalDevice, &queueFamilyPropertiesCount, queueFamilyProperties); + + uint32_t graphicsFamilyIndex = 0; + + for(uint32_t i = 0; i < queueFamilyPropertiesCount; i++) { + if(queueFamilyProperties[i].queueFlags & VK_QUEUE_GRAPHICS_BIT) + graphicsFamilyIndex = i; + } + + const std::set queueFamilyIndices = {graphicsFamilyIndex}; + std::vector deviceQueueCreateInfos; + for(auto queueFamilyIndex : queueFamilyIndices) { + const float priority = 1.0f; + + VkDeviceQueueCreateInfo queueCreateInfo = {}; + queueCreateInfo.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO; + queueCreateInfo.queueFamilyIndex = queueFamilyIndex; + queueCreateInfo.queueCount = 1; + queueCreateInfo.pQueuePriorities = &priority; + + deviceQueueCreateInfos.push_back(queueCreateInfo); + } + VkDeviceCreateInfo deviceCreateInfo = {}; deviceCreateInfo.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO; + deviceCreateInfo.queueCreateInfoCount = deviceQueueCreateInfos.size(); + deviceCreateInfo.pQueueCreateInfos = deviceQueueCreateInfos.data(); vkCreateDevice(physicalDevice, &deviceCreateInfo, nullptr, &device_); + + vkGetDeviceQueue(device_, graphicsFamilyIndex, 0, &graphicsQueue_); } diff --git a/renderer.h b/renderer.h index d3928f9..3295b25 100644 --- a/renderer.h +++ b/renderer.h @@ -14,4 +14,5 @@ private: VkInstance instance_ = nullptr; VkDevice device_ = nullptr; + VkQueue graphicsQueue_ = nullptr; };