Skip to content

Commit f76342a

Browse files
committed
layers: Workaround thread sanitizer
1 parent a574384 commit f76342a

2 files changed

Lines changed: 7 additions & 4 deletions

File tree

layers/state_tracker/queue_state.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -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.

layers/state_tracker/queue_state.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,10 @@ class Queue : public StateObject, public SubStateManager<QueueSubState> {
205205
private:
206206
DeviceState& device_state_;
207207
const VkQueueFamilyProperties queue_family_properties_;
208-
uint32_t timeline_wait_count_ = 0;
208+
209+
// TODO: made this atomic to workaround thread sanitizer.
210+
// Likely not a proper solution, need to investigate how this count should be used
211+
std::atomic_uint32_t timeline_wait_count_ = 0;
209212

210213
void ThreadFunc();
211214
QueueSubmission *NextSubmission();

0 commit comments

Comments
 (0)