1 // Copyright 2013 The Flutter Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef FLUTTER_VULKAN_VULKAN_APPLICATION_H_ 6 #define FLUTTER_VULKAN_VULKAN_APPLICATION_H_ 7 8 #include <memory> 9 #include <string> 10 #include <vector> 11 #include "flutter/fml/macros.h" 12 #include "flutter/vulkan/vulkan_debug_report.h" 13 #include "flutter/vulkan/vulkan_handle.h" 14 15 namespace vulkan { 16 17 static const int kGrCacheMaxCount = 8192; 18 static const size_t kGrCacheMaxByteSize = 512 * (1 << 20); 19 20 class VulkanDevice; 21 class VulkanProcTable; 22 23 /// Applications using Vulkan acquire a VulkanApplication that attempts to 24 /// create a VkInstance (with debug reporting optionally enabled). 25 class VulkanApplication { 26 public: 27 VulkanApplication(VulkanProcTable& vk, 28 const std::string& application_name, 29 std::vector<std::string> enabled_extensions, 30 uint32_t application_version = VK_MAKE_VERSION(1, 0, 0), 31 uint32_t api_version = VK_MAKE_VERSION(1, 0, 0)); 32 33 ~VulkanApplication(); 34 35 bool IsValid() const; 36 37 uint32_t GetAPIVersion() const; 38 39 const VulkanHandle<VkInstance>& GetInstance() const; 40 41 void ReleaseInstanceOwnership(); 42 43 std::unique_ptr<VulkanDevice> AcquireFirstCompatibleLogicalDevice() const; 44 45 private: 46 VulkanProcTable& vk; 47 VulkanHandle<VkInstance> instance_; 48 uint32_t api_version_; 49 std::unique_ptr<VulkanDebugReport> debug_report_; 50 bool valid_; 51 52 std::vector<VkPhysicalDevice> GetPhysicalDevices() const; 53 std::vector<VkExtensionProperties> GetSupportedInstanceExtensions( 54 const VulkanProcTable& vk) const; 55 bool ExtensionSupported( 56 const std::vector<VkExtensionProperties>& supported_extensions, 57 std::string extension_name); 58 59 FML_DISALLOW_COPY_AND_ASSIGN(VulkanApplication); 60 }; 61 62 } // namespace vulkan 63 64 #endif // FLUTTER_VULKAN_VULKAN_APPLICATION_H_ 65