48 fuchsia::sysmem2::AllocatorSyncPtr& sysmem_allocator,
49 fuchsia::ui::composition::AllocatorPtr& flatland_allocator,
50 sk_sp<GrDirectContext> context,
65 SkISize
GetSize()
const override;
70 const std::function<
void(
void)>& on_writes_committed)
override;
82 fuchsia::ui::composition::BufferCollectionImportToken
100 return acquire_semaphore_;
105 if (!command_buffer_)
106 command_buffer_ = std::make_unique<vulkan::VulkanCommandBuffer>(
107 vulkan_provider_.
vk(), vulkan_provider_.
vk_device(), pool);
108 return command_buffer_.get();
112 return command_buffer_fence_;
126 return std::equal(size_history_.begin() + 1, size_history_.end(),
127 size_history_.begin());
131 static constexpr int kSizeHistorySize = 4;
133 void OnHandleReady(async_dispatcher_t* dispatcher,
134 async::WaitBase* wait,
136 const zx_packet_signal_t* signal);
138 bool AllocateDeviceMemory(
139 fuchsia::sysmem2::AllocatorSyncPtr& sysmem_allocator,
140 fuchsia::ui::composition::AllocatorPtr& flatland_allocator,
141 sk_sp<GrDirectContext> context,
142 const SkISize& size);
148 bool SetupSkiaSurface(sk_sp<GrDirectContext> context,
151 const VkImageCreateInfo& image_create_info,
152 const VkMemoryRequirements& memory_reqs);
159 const zx::event& event)
const;
164 VkMemoryAllocateInfo vk_memory_info_;
166 sk_sp<SkSurface> sk_surface_;
167 fuchsia::ui::composition::BufferCollectionImportToken import_token_;
168 uint32_t image_id_ = 0;
170 zx::event acquire_event_;
172 std::unique_ptr<vulkan::VulkanCommandBuffer> command_buffer_;
173 zx::event release_event_;
174 async::WaitMethod<VulkanSurface, &VulkanSurface::OnHandleReady> wait_;
175 std::function<void()> pending_on_writes_committed_;
176 std::array<SkISize, kSizeHistorySize> size_history_;
177 int size_history_index_ = 0;