@@ -85,7 +85,7 @@ uint64_t vvl::Queue::PreSubmit(std::vector<vvl::QueueSubmission>&& submissions)
8585 submission.BeginUse ();
8686 for (SemaphoreInfo& wait : submission.wait_semaphores ) {
8787 wait.semaphore ->EnqueueWait (SubmissionReference (this , submission.seq ), wait.payload );
88- timeline_wait_count_ += ( wait.semaphore ->type == VK_SEMAPHORE_TYPE_TIMELINE) ? 1 : 0 ;
88+ timeline_wait_count_. fetch_add (( wait.semaphore ->type == VK_SEMAPHORE_TYPE_TIMELINE) ? 1 : 0 ) ;
8989 }
9090
9191 for (SemaphoreInfo& signal : submission.signal_semaphores ) {
@@ -173,7 +173,7 @@ std::optional<vvl::SemaphoreInfo> vvl::Queue::FindTimelineWaitWithoutResolvingSi
173173 small_vector<SemaphoreInfo, 8 > timeline_waits;
174174 {
175175 auto guard = Lock ();
176- for (auto it = submissions_.rbegin (); it != submissions_.rend () && processed_waits < timeline_wait_count_; ++it) {
176+ for (auto it = submissions_.rbegin (); it != submissions_.rend () && processed_waits < timeline_wait_count_. load () ; ++it) {
177177 const vvl::QueueSubmission& submission = *it;
178178 if (submission.seq <= until_seq) {
179179 for (const auto & wait_info : submission.wait_semaphores ) {
@@ -299,7 +299,7 @@ void vvl::Queue::Retire(QueueSubmission& submission) {
299299 submission.EndUse ();
300300 for (auto & wait : submission.wait_semaphores ) {
301301 wait.semaphore ->RetireWait (this , wait.payload , submission.loc .Get (), true );
302- timeline_wait_count_ -= ( wait.semaphore ->type == VK_SEMAPHORE_TYPE_TIMELINE) ? 1 : 0 ;
302+ timeline_wait_count_. fetch_sub (( wait.semaphore ->type == VK_SEMAPHORE_TYPE_TIMELINE) ? 1 : 0 ) ;
303303 }
304304
305305 // When device is lost skip updating substates which might access destroyed/garbage objects.
0 commit comments