| 247 | static QImage QImageFromRgbaFrame(const AVFrame* frame); |
| 248 | |
| 249 | static VulkanSummary QueryVulkanSummary() { |
| 250 | VulkanSummary summary; |
| 251 | auto enumerate_instance_version = |
| 252 | reinterpret_cast<PFN_vkEnumerateInstanceVersion>(vkGetInstanceProcAddr(nullptr, "vkEnumerateInstanceVersion")); |
| 253 | if (enumerate_instance_version) { |
| 254 | enumerate_instance_version(&summary.api_version); |
| 255 | } |
| 256 | |
| 257 | VkApplicationInfo app_info{}; |
| 258 | app_info.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO; |
| 259 | app_info.pApplicationName = "openshot-vulkan-benchmark"; |
| 260 | app_info.applicationVersion = VK_MAKE_VERSION(1, 0, 0); |
| 261 | app_info.pEngineName = "none"; |
| 262 | app_info.engineVersion = VK_MAKE_VERSION(1, 0, 0); |
| 263 | app_info.apiVersion = summary.api_version; |
| 264 | |
| 265 | VkInstanceCreateInfo create_info{}; |
| 266 | create_info.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO; |
| 267 | create_info.pApplicationInfo = &app_info; |
| 268 | |
| 269 | VkInstance instance = VK_NULL_HANDLE; |
| 270 | if (vkCreateInstance(&create_info, nullptr, &instance) != VK_SUCCESS) { |
| 271 | return summary; |
| 272 | } |
| 273 | |
| 274 | uint32_t count = 0; |
| 275 | if (vkEnumeratePhysicalDevices(instance, &count, nullptr) == VK_SUCCESS && count > 0) { |
| 276 | std::vector<VkPhysicalDevice> devices(count); |
| 277 | if (vkEnumeratePhysicalDevices(instance, &count, devices.data()) == VK_SUCCESS) { |
| 278 | for (VkPhysicalDevice device : devices) { |
| 279 | VkPhysicalDeviceProperties properties{}; |
| 280 | vkGetPhysicalDeviceProperties(device, &properties); |
| 281 | summary.device_names.emplace_back(properties.deviceName); |
| 282 | } |
| 283 | } |
| 284 | } |
| 285 | |
| 286 | vkDestroyInstance(instance, nullptr); |
| 287 | return summary; |
| 288 | } |
| 289 | |
| 290 | static void PrintVulkanSummary(const VulkanSummary& summary) { |
| 291 | std::cout << "Vulkan API version: " |