Advertisement
GreatyBat

Untitled

Aug 17th, 2017
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.48 KB | None | 0 0
  1.  
  2.  
  3. #include "stdafx.h"
  4. #include"vulkan\vulkan.h"
  5. #include<iostream>
  6. #include <chrono>
  7. #include <thread>
  8.  
  9. #define ASSERT_VUKLAN(val) if(val != VK_SUCCESS){ __debugbreak();}
  10.  
  11. VkInstance instance;
  12.  
  13. void printStats(VkPhysicalDevice &device) {
  14.     VkPhysicalDeviceProperties properties;
  15.     vkGetPhysicalDeviceProperties(device, &properties);
  16.     std::cout << "Name: " << properties.deviceName << std::endl;
  17.     uint32_t apiVer = properties.apiVersion;
  18.     std::cout << "API Version: " << VK_VERSION_MAJOR(apiVer) << "." << VK_VERSION_MINOR(apiVer) << "." << VK_VERSION_PATCH(apiVer) << std::endl;
  19.     std::cout << "Driver Version: " << properties.driverVersion << std::endl;
  20.     std::cout << "Vendor ID:   " << properties.vendorID << std::endl;
  21.     std::cout << "Device ID:   " << properties.deviceID << std::endl;
  22.     std::cout << "Device Type: " << properties.deviceType << std::endl;
  23.  
  24.     VkPhysicalDeviceFeatures features;
  25.     vkGetPhysicalDeviceFeatures(device, &features);
  26.     std::cout << "Geometry Shader: " << features.geometryShader << std::endl;
  27.  
  28.     VkPhysicalDeviceMemoryProperties memProp;
  29.     vkGetPhysicalDeviceMemoryProperties(device, &memProp);
  30.  
  31.     uint32_t amountOfQueueFamilies = 0;
  32.     vkGetPhysicalDeviceQueueFamilyProperties(device, &amountOfQueueFamilies, NULL);
  33.     VkQueueFamilyProperties *familyProperties = new VkQueueFamilyProperties[amountOfQueueFamilies];
  34.     vkGetPhysicalDeviceQueueFamilyProperties(device, &amountOfQueueFamilies, familyProperties);
  35.  
  36.     std::cout << "Amount of Queue Families: " << amountOfQueueFamilies << std::endl;
  37.  
  38.     for (int i = 0; i < amountOfQueueFamilies; i++) {
  39.         std::cout << std::endl;
  40.         std::cout << "Queue Family #" << i << std::endl;
  41.         std::cout << "VK_QUEUE_GRAPHICS_BIT " << ((familyProperties[i].queueFlags & VK_QUEUE_GRAPHICS_BIT) != 0) << std::endl;
  42.         std::cout << "VK_QUEUE_GRAPHICS_BIT " << ((familyProperties[i].queueFlags & VK_QUEUE_COMPUTE_BIT) != 0) << std::endl;
  43.         std::cout << "VK_QUEUE_GRAPHICS_BIT " << ((familyProperties[i].queueFlags & VK_QUEUE_TRANSFER_BIT) != 0) << std::endl;
  44.         std::cout << "VK_QUEUE_GRAPHICS_BIT " << ((familyProperties[i].queueFlags & VK_QUEUE_SPARSE_BINDING_BIT) != 0) << std::endl;
  45.     }
  46.     std::this_thread::sleep_for(std::chrono::milliseconds(5000));
  47.     delete[] familyProperties;
  48. }
  49.  
  50. int main()
  51. {
  52.     VkApplicationInfo appInfo;
  53.     appInfo.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO;
  54.     appInfo.pNext = NULL;
  55.     appInfo.pApplicationName = "Vulkan App";
  56.     appInfo.applicationVersion = VK_MAKE_VERSION(1, 0, 0);
  57.     appInfo.pEngineName = "Vulkan Engine";
  58.     appInfo.engineVersion = VK_MAKE_VERSION(1, 0, 0);
  59.     appInfo.apiVersion = VK_API_VERSION_1_0;
  60.  
  61.     VkInstanceCreateInfo instanceInfo;
  62.     instanceInfo.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
  63.     instanceInfo.pNext = NULL;
  64.     instanceInfo.flags = 0;
  65.     instanceInfo.pApplicationInfo = &appInfo;
  66.     instanceInfo.enabledLayerCount = 0;
  67.     instanceInfo.ppEnabledLayerNames = NULL;
  68.     instanceInfo.enabledExtensionCount = 0;
  69.     instanceInfo.ppEnabledExtensionNames = NULL;
  70.  
  71.     VkResult result = vkCreateInstance(&instanceInfo,NULL,&instance);
  72.     ASSERT_VUKLAN(result);
  73.  
  74.     uint32_t amountOfPhysicalDevices = 0;
  75.     result = vkEnumeratePhysicalDevices(instance, &amountOfPhysicalDevices, NULL);
  76.     ASSERT_VUKLAN(result);
  77.  
  78.     VkPhysicalDevice* physicalDevices = new VkPhysicalDevice[amountOfPhysicalDevices];
  79.     result = vkEnumeratePhysicalDevices(instance, &amountOfPhysicalDevices, physicalDevices);
  80.     ASSERT_VUKLAN(result);
  81.    
  82.     for (int i = 0; i < amountOfPhysicalDevices; i++) {
  83.         printStats(physicalDevices[i]);
  84.     }
  85.  
  86.     return 0;
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement