• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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