• 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 #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