| 95 | } |
| 96 | |
| 97 | std::optional<SignalInfo> SignalsUpdate::OnBinaryWait(VkSemaphore semaphore) { |
| 98 | // Signal can't be registered in both lists at the same time. |
| 99 | assert(!vvl::Contains(binary_signal_requests, semaphore) || !vvl::Contains(binary_unsignal_requests, semaphore)); |
| 100 | |
| 101 | if (vvl::Contains(binary_unsignal_requests, semaphore)) { |
| 102 | return {}; // [core validation check]: multi wait |
| 103 | } |
| 104 | |
| 105 | // Get resolving signal |
| 106 | std::optional<SignalInfo> resolving_signal; |
| 107 | if (auto it = binary_signal_requests.find(semaphore); it != binary_signal_requests.end()) { |
| 108 | resolving_signal.emplace(std::move(it->second)); |
| 109 | binary_signal_requests.erase(it); |
| 110 | } else if (auto* registry_signal = vvl::Find(sync_validator_.binary_signals_, semaphore)) { |
| 111 | resolving_signal.emplace(*registry_signal); |
| 112 | } else { |
| 113 | return {}; // [core validation check]: missing signal for binary wait |
| 114 | } |
| 115 | |
| 116 | // Register unsignal request |
| 117 | binary_unsignal_requests.emplace(semaphore); |
| 118 | return resolving_signal; |
| 119 | } |
| 120 | |
| 121 | std::optional<SignalInfo> SignalsUpdate::OnTimelineWait(VkSemaphore semaphore, uint64_t wait_value) { |
| 122 | std::optional<SignalInfo> resolving_signal; |