legit_paster

VkWin32SurfaceCreateInfoKHR not working

Aug 15th, 2020 (edited)
575
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.05 KB | None | 0 0
  1. #define GLFW_INCLUDE_VULKAN
  2. #include <GLFW/glfw3.h>
  3. #include <iostream>
  4. #include <vector>
  5. #include <map>
  6.  
  7. class app {
  8. public:
  9.     void run() {
  10.         loading();
  11.         running();
  12.         closing();
  13.     }
  14. private:
  15.     GLFWwindow* window;
  16.     VkInstance instance;
  17.     VkDevice device;
  18.     VkPhysicalDevice physicalDevice = VK_NULL_HANDLE;
  19.     VkQueue graphicsQueue;
  20.     VkSurfaceKHR surface;
  21.  
  22.     void loading() {
  23.         glfwInit();
  24.         glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API);
  25.         glfwWindowHint(GLFW_RESIZABLE, GLFW_FALSE);
  26.         window = glfwCreateWindow(640, 360, "Vulkan", nullptr, nullptr);
  27.  
  28.         uint32_t count;
  29.         VkInstanceCreateInfo createInfo{};
  30.  
  31.         createInfo.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
  32.         createInfo.ppEnabledExtensionNames = glfwGetRequiredInstanceExtensions(&count);
  33.         createInfo.enabledExtensionCount = count;
  34.         createInfo.enabledLayerCount = 0;
  35.         if (vkCreateInstance(&createInfo, nullptr, &instance) != VK_SUCCESS) {
  36.             throw std::runtime_error("Failed to initiate Vulkan Instance");
  37.         }
  38.  
  39.         vkEnumeratePhysicalDevices(instance, &count, nullptr);
  40.         if (count == 0) {
  41.             throw std::runtime_error("No supported graphics card found");
  42.         }
  43.         std::vector<VkPhysicalDevice> devices(count);
  44.         vkEnumeratePhysicalDevices(instance, &count, devices.data());
  45.         std::multimap<uint32_t, VkPhysicalDevice> candidates;
  46.         for (const VkPhysicalDevice& device : devices) {
  47.  
  48.             VkPhysicalDeviceProperties prop;
  49.             VkPhysicalDeviceFeatures feature;
  50.             vkGetPhysicalDeviceProperties(device, &prop);
  51.             vkGetPhysicalDeviceFeatures(device, &feature);
  52.             uint32_t score = 0;
  53.  
  54.             switch (prop.deviceType) {
  55.             case VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU:
  56.                 score += 3;
  57.                 break;
  58.             case VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU || VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU:
  59.                 score += 2;
  60.                 break;
  61.             default:
  62.                 score += 1;
  63.                 break;
  64.             }
  65.             candidates.insert(std::make_pair(score, device));
  66.         }
  67.         physicalDevice = candidates.rbegin()->second;
  68.  
  69.         vkGetPhysicalDeviceQueueFamilyProperties(physicalDevice, &count, nullptr);
  70.         std::vector<VkQueueFamilyProperties> families(count);
  71.         vkGetPhysicalDeviceQueueFamilyProperties(physicalDevice, &count, families.data());
  72.         std::map <int, int> QueueFamilies;
  73.         int i = 0;
  74.         for (const VkQueueFamilyProperties& family : families) {
  75.             QueueFamilies[i] = 0;
  76.             if (family.queueFlags & VK_QUEUE_GRAPHICS_BIT) {
  77.                 QueueFamilies[i] = QueueFamilies[i] | VK_QUEUE_GRAPHICS_BIT;
  78.             }
  79.             if (family.queueFlags & VK_QUEUE_COMPUTE_BIT) {
  80.                 QueueFamilies[i] = QueueFamilies[i] | VK_QUEUE_COMPUTE_BIT;
  81.             }
  82.             if (family.queueFlags & VK_QUEUE_TRANSFER_BIT) {
  83.                 QueueFamilies[i] = QueueFamilies[i] | VK_QUEUE_TRANSFER_BIT;
  84.             }
  85.             if (family.queueFlags & VK_QUEUE_SPARSE_BINDING_BIT) {
  86.                 QueueFamilies[i] = QueueFamilies[i] | VK_QUEUE_SPARSE_BINDING_BIT;
  87.             }
  88.             if (family.queueFlags & VK_QUEUE_PROTECTED_BIT) {
  89.                 QueueFamilies[i] = QueueFamilies[i] | VK_QUEUE_PROTECTED_BIT;
  90.             }
  91.             i++;
  92.         }
  93.  
  94.         VkDeviceQueueCreateInfo queueInfo{};
  95.         queueInfo.sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO;
  96.         queueInfo.queueFamilyIndex = 0;
  97.         queueInfo.queueCount = 1;
  98.         float queuePriority = 1.0f;
  99.         queueInfo.pQueuePriorities = &queuePriority;
  100.         VkPhysicalDeviceFeatures deviceFeatures{};
  101.         VkDeviceCreateInfo dcreateInfo{};
  102.         dcreateInfo.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO;
  103.         dcreateInfo.pQueueCreateInfos = &queueInfo;
  104.         dcreateInfo.queueCreateInfoCount = 1;
  105.         dcreateInfo.pEnabledFeatures = &deviceFeatures;
  106.         createInfo.ppEnabledLayerNames = {};
  107.         vkCreateDevice(physicalDevice, &dcreateInfo, nullptr, &device);
  108.         vkGetDeviceQueue(device, 0, 0, &graphicsQueue);
  109.  
  110.         VkWin32SurfaceCreateInfoKHR createInfo{};
  111.     }
  112.     void running() {
  113.         while (!glfwWindowShouldClose(window)) {
  114.             glfwPollEvents();
  115.         }
  116.     }
  117.     void closing() {
  118.         vkDestroyDevice(device, nullptr);
  119.         vkDestroyInstance(instance, nullptr);
  120.         glfwDestroyWindow(window);
  121.         glfwTerminate();
  122.     }
  123. };
  124.  
  125. int main() {
  126.     app a;
  127.     try
  128.     {
  129.         a.run();
  130.     }
  131.     catch (const std::exception& e)
  132.     {
  133.         std::cerr << e.what() << std::endl;
  134.         return EXIT_FAILURE;
  135.     }
  136.     return EXIT_SUCCESS;
  137. }
Add Comment
Please, Sign In to add comment