9 #include "flutter/fml/concurrent_message_loop.h"
10 #include "flutter/fml/macros.h"
11 #include "flutter/fml/mapping.h"
12 #include "flutter/fml/unique_fd.h"
28 class CommandEncoderFactoryVK;
29 class CommandEncoderVK;
30 class CommandPoolRecyclerVK;
33 class ResourceManagerVK;
34 class SurfaceContextVK;
38 public std::enable_shared_from_this<ContextVK> {
53 uint64_t
GetHash()
const {
return hash_; }
83 const std::shared_ptr<const Capabilities>&
GetCapabilities()
const override;
100 template <
typename T>
103 std::string_view label) {
109 auto c_handle =
static_cast<typename T::CType
>(handle);
111 vk::DebugUtilsObjectNameInfoEXT info;
112 info.objectType = T::objectType;
113 info.pObjectName = label.data();
114 info.objectHandle =
reinterpret_cast<decltype(info.objectHandle)
>(c_handle);
116 if (device.setDebugUtilsObjectNameEXT(info) != vk::Result::eSuccess) {
125 return device_holder_;
132 const std::shared_ptr<fml::ConcurrentTaskRunner>
150 const vk::Device&
GetDevice()
const override {
return device.get(); }
153 return physical_device;
156 vk::UniqueInstance instance;
157 vk::PhysicalDevice physical_device;
158 vk::UniqueDevice device;
161 std::shared_ptr<DeviceHolderImpl> device_holder_;
162 std::unique_ptr<DebugReportVK> debug_report_;
163 std::shared_ptr<Allocator> allocator_;
164 std::shared_ptr<ShaderLibraryVK> shader_library_;
165 std::shared_ptr<SamplerLibraryVK> sampler_library_;
166 std::shared_ptr<PipelineLibraryVK> pipeline_library_;
168 std::shared_ptr<const Capabilities> device_capabilities_;
169 std::shared_ptr<FenceWaiterVK> fence_waiter_;
170 std::shared_ptr<ResourceManagerVK> resource_manager_;
171 std::shared_ptr<CommandPoolRecyclerVK> command_pool_recycler_;
172 std::string device_name_;
173 std::shared_ptr<fml::ConcurrentMessageLoop> raster_message_loop_;
174 bool sync_presentation_ =
false;
175 const uint64_t hash_;
177 bool is_valid_ =
false;
181 void Setup(Settings settings);
183 std::unique_ptr<CommandEncoderFactoryVK> CreateGraphicsCommandEncoderFactory()
186 FML_DISALLOW_COPY_AND_ASSIGN(ContextVK);