Flutter Impeller
impeller::KHRFrameSynchronizerVK Struct Reference

Public Member Functions

 KHRFrameSynchronizerVK (const vk::Device &device)
 
 ~KHRFrameSynchronizerVK ()=default
 
bool WaitForFence (const vk::Device &device)
 

Public Attributes

vk::UniqueFence acquire
 
bool acquire_fence_pending = false
 
vk::UniqueSemaphore render_ready
 
std::shared_ptr< CommandBufferfinal_cmd_buffer
 
bool is_valid = false
 
bool has_onscreen = false
 

Detailed Description

Definition at line 23 of file khr_swapchain_impl_vk.cc.

Constructor & Destructor Documentation

◆ KHRFrameSynchronizerVK()

impeller::KHRFrameSynchronizerVK::KHRFrameSynchronizerVK ( const vk::Device &  device)
inlineexplicit

Definition at line 32 of file khr_swapchain_impl_vk.cc.

32  {
33  auto acquire_res = device.createFenceUnique({});
34  auto render_res = device.createSemaphoreUnique({});
35  if (acquire_res.result != vk::Result::eSuccess ||
36  render_res.result != vk::Result::eSuccess) {
37  VALIDATION_LOG << "Could not create synchronizer.";
38  return;
39  }
40  acquire = std::move(acquire_res.value);
41  render_ready = std::move(render_res.value);
42  is_valid = true;
43  }
#define VALIDATION_LOG
Definition: validation.h:91

References acquire, is_valid, render_ready, and VALIDATION_LOG.

◆ ~KHRFrameSynchronizerVK()

impeller::KHRFrameSynchronizerVK::~KHRFrameSynchronizerVK ( )
default

Member Function Documentation

◆ WaitForFence()

bool impeller::KHRFrameSynchronizerVK::WaitForFence ( const vk::Device &  device)
inline

Definition at line 47 of file khr_swapchain_impl_vk.cc.

47  {
48  if (!acquire_fence_pending) {
49  return true;
50  }
51  if (auto result = device.waitForFences(
52  *acquire, // fence
53  true, // wait all
54  std::numeric_limits<uint64_t>::max() // timeout (ns)
55  );
56  result != vk::Result::eSuccess) {
57  VALIDATION_LOG << "Fence wait failed: " << vk::to_string(result);
58  return false;
59  }
60  acquire_fence_pending = false;
61  if (auto result = device.resetFences(*acquire);
62  result != vk::Result::eSuccess) {
63  VALIDATION_LOG << "Could not reset fence: " << vk::to_string(result);
64  return false;
65  }
66  return true;
67  }

References acquire, acquire_fence_pending, and VALIDATION_LOG.

Member Data Documentation

◆ acquire

vk::UniqueFence impeller::KHRFrameSynchronizerVK::acquire

Definition at line 24 of file khr_swapchain_impl_vk.cc.

Referenced by KHRFrameSynchronizerVK(), and WaitForFence().

◆ acquire_fence_pending

bool impeller::KHRFrameSynchronizerVK::acquire_fence_pending = false

Definition at line 25 of file khr_swapchain_impl_vk.cc.

Referenced by WaitForFence().

◆ final_cmd_buffer

std::shared_ptr<CommandBuffer> impeller::KHRFrameSynchronizerVK::final_cmd_buffer

Definition at line 27 of file khr_swapchain_impl_vk.cc.

◆ has_onscreen

bool impeller::KHRFrameSynchronizerVK::has_onscreen = false

Definition at line 30 of file khr_swapchain_impl_vk.cc.

◆ is_valid

bool impeller::KHRFrameSynchronizerVK::is_valid = false

Definition at line 28 of file khr_swapchain_impl_vk.cc.

Referenced by KHRFrameSynchronizerVK().

◆ render_ready

vk::UniqueSemaphore impeller::KHRFrameSynchronizerVK::render_ready

Definition at line 26 of file khr_swapchain_impl_vk.cc.

Referenced by KHRFrameSynchronizerVK().


The documentation for this struct was generated from the following file: