xref: /aosp_15_r20/external/skia/src/gpu/graphite/dawn/DawnAsyncWait.cpp (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Worker /*
2*c8dee2aaSAndroid Build Coastguard Worker  * Copyright 2022 Google LLC
3*c8dee2aaSAndroid Build Coastguard Worker  *
4*c8dee2aaSAndroid Build Coastguard Worker  * Use of this source code is governed by a BSD-style license that can be
5*c8dee2aaSAndroid Build Coastguard Worker  * found in the LICENSE file.
6*c8dee2aaSAndroid Build Coastguard Worker  */
7*c8dee2aaSAndroid Build Coastguard Worker 
8*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/graphite/dawn/DawnAsyncWait.h"
9*c8dee2aaSAndroid Build Coastguard Worker 
10*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/graphite/Caps.h"
11*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/graphite/dawn/DawnSharedContext.h"
12*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/graphite/dawn/DawnUtilsPriv.h"
13*c8dee2aaSAndroid Build Coastguard Worker 
14*c8dee2aaSAndroid Build Coastguard Worker namespace skgpu::graphite {
15*c8dee2aaSAndroid Build Coastguard Worker 
DawnAsyncWait(const DawnSharedContext * sharedContext)16*c8dee2aaSAndroid Build Coastguard Worker DawnAsyncWait::DawnAsyncWait(const DawnSharedContext* sharedContext)
17*c8dee2aaSAndroid Build Coastguard Worker         : fSharedContext(sharedContext)
18*c8dee2aaSAndroid Build Coastguard Worker         , fSignaled(false) {}
19*c8dee2aaSAndroid Build Coastguard Worker 
yieldAndCheck() const20*c8dee2aaSAndroid Build Coastguard Worker bool DawnAsyncWait::yieldAndCheck() const {
21*c8dee2aaSAndroid Build Coastguard Worker     if (fSharedContext->hasTick()) {
22*c8dee2aaSAndroid Build Coastguard Worker         if (fSignaled.load(std::memory_order_acquire)) {
23*c8dee2aaSAndroid Build Coastguard Worker             return true;
24*c8dee2aaSAndroid Build Coastguard Worker         }
25*c8dee2aaSAndroid Build Coastguard Worker 
26*c8dee2aaSAndroid Build Coastguard Worker         fSharedContext->tick();
27*c8dee2aaSAndroid Build Coastguard Worker     }
28*c8dee2aaSAndroid Build Coastguard Worker     return fSignaled.load(std::memory_order_acquire);
29*c8dee2aaSAndroid Build Coastguard Worker }
30*c8dee2aaSAndroid Build Coastguard Worker 
mayBusyWait() const31*c8dee2aaSAndroid Build Coastguard Worker bool DawnAsyncWait::mayBusyWait() const { return fSharedContext->caps()->allowCpuSync(); }
32*c8dee2aaSAndroid Build Coastguard Worker 
busyWait() const33*c8dee2aaSAndroid Build Coastguard Worker void DawnAsyncWait::busyWait() const {
34*c8dee2aaSAndroid Build Coastguard Worker     SkASSERT(fSharedContext->hasTick());
35*c8dee2aaSAndroid Build Coastguard Worker     while (!this->yieldAndCheck()) {}
36*c8dee2aaSAndroid Build Coastguard Worker }
37*c8dee2aaSAndroid Build Coastguard Worker 
38*c8dee2aaSAndroid Build Coastguard Worker }  // namespace skgpu::graphite
39