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 #ifndef RS_ENABLE_VK 12 #include "flutter/fml/macros.h" 13 #endif 14 #include "flutter/vulkan/vulkan_debug_report.h" 15 #include "flutter/vulkan/vulkan_handle.h" 16 17 namespace vulkan { 18 19 static const int kGrCacheMaxCount = 8192; 20 static const size_t kGrCacheMaxByteSize = 512 * (1 << 20); 21 22 class VulkanDevice; 23 class VulkanProcTable; 24 25 /// Applications using Vulkan acquire a VulkanApplication that attempts to 26 /// create a VkInstance (with debug reporting optionally enabled). 27 class VulkanApplication { 28 public: 29 VulkanApplication(VulkanProcTable& vk, 30 const std::string& application_name, 31 std::vector<std::string> enabled_extensions, 32 uint32_t application_version = VK_MAKE_VERSION(1, 0, 0), 33 uint32_t api_version = VK_MAKE_VERSION(1, 0, 0)); 34 35 ~VulkanApplication(); 36 37 bool IsValid() const; 38 39 uint32_t GetAPIVersion() const; 40 41 const VulkanHandle<VkInstance>& GetInstance() const; 42 43 void ReleaseInstanceOwnership(); 44 45 std::unique_ptr<VulkanDevice> AcquireFirstCompatibleLogicalDevice() const; 46 47 private: 48 VulkanProcTable& vk; 49 VulkanHandle<VkInstance> instance_; 50 uint32_t api_version_; 51 std::unique_ptr<VulkanDebugReport> debug_report_; 52 bool valid_; 53 54 std::vector<VkPhysicalDevice> GetPhysicalDevices() const; 55 std::vector<VkExtensionProperties> GetSupportedInstanceExtensions( 56 const VulkanProcTable& vk) const; 57 bool ExtensionSupported( 58 const std::vector<VkExtensionProperties>& supported_extensions, 59 std::string extension_name); 60 61 #ifndef RS_ENABLE_VK 62 FML_DISALLOW_COPY_AND_ASSIGN(VulkanApplication); 63 #endif 64 }; 65 66 } // namespace vulkan 67 68 #endif // FLUTTER_VULKAN_VULKAN_APPLICATION_H_ 69