/ Core / Clockworks / CwGraphics-LogicalDevices.cpp
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  }