CwGraphics-LogicalDevices.cpp
1 #include <Clockworks/CwGraphics.hpp> 2 3 void CwGraphics::LogicalDevice() { 4 std::vector<VkDeviceQueueCreateInfo> Infos; 5 std::set<uint32_t> unique = {FamIndices.GraphicsFam.value(), FamIndices.PresentFam.value()}; 6 for (uint32_t queueFamily : unique) { 7 VkDeviceQueueCreateInfo QCreateInfo{}; 8 QCreateInfo.sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO; 9 QCreateInfo.queueFamilyIndex = queueFamily; 10 QCreateInfo.queueCount = 1; 11 float const QuPriorities = 1.0f; 12 QCreateInfo.pQueuePriorities = &QuPriorities; 13 Infos.push_back(QCreateInfo); 14 } 15 16 VkPhysicalDeviceFeatures Features{}; 17 18 VkDeviceCreateInfo CInfo{}; 19 CInfo.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO; 20 CInfo.pQueueCreateInfos = Infos.data(); 21 22 CInfo.queueCreateInfoCount = static_cast<uint32_t>(Infos.size()); 23 CInfo.pEnabledFeatures = &Features; 24 CInfo.enabledExtensionCount = 0; 25 26 if (EnableValLayers) { 27 CInfo.enabledLayerCount = static_cast<uint32_t>(validationLayers.size()); 28 CInfo.ppEnabledLayerNames = validationLayers.data(); 29 } else { 30 CInfo.enabledLayerCount = 0; 31 } 32 33 CInfo.enabledExtensionCount = static_cast<uint32_t>(RequiredExt.size()); 34 CInfo.ppEnabledExtensionNames = RequiredExt.data(); 35 36 if (vkCreateDevice(PhysicalDev, &CInfo, nullptr, &Dev)) { 37 throw std::runtime_error("CW-ERROR: Logical Device Creation Failed :("); 38 } 39 vkGetDeviceQueue(Dev, FamIndices.GraphicsFam.value(), 0, &GraphicsQueue); 40 41 vkGetDeviceQueue(Dev, FamIndices.PresentFam.value(), 0, &PresentQueue); 42 }