MCPcopy Create free account
hub / github.com/DeepRec-AI/DeepRec / GlActiveSyncWait

Function GlActiveSyncWait

tensorflow/lite/delegates/gpu/gl/gl_sync.cc:49–79  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

47}
48
49Status GlActiveSyncWait() {
50 GlSync sync;
51 RETURN_IF_ERROR(GlSync::NewSync(&sync));
52 // Since creating a Sync object is itself a GL command it *must* be flushed.
53 // Otherwise glGetSynciv may never succeed. Perform a flush with
54 // glClientWaitSync call.
55 GLenum status = glClientWaitSync(sync.sync(), GL_SYNC_FLUSH_COMMANDS_BIT,
56 /* timeout ns = */ 0);
57 switch (status) {
58 case GL_TIMEOUT_EXPIRED:
59 break;
60 case GL_CONDITION_SATISFIED:
61 case GL_ALREADY_SIGNALED:
62 return OkStatus();
63 case GL_WAIT_FAILED:
64 return GetOpenGlErrors();
65 }
66
67 // Start active loop.
68 GLint result = GL_UNSIGNALED;
69 while (true) {
70 glGetSynciv(sync.sync(), GL_SYNC_STATUS, sizeof(GLint), nullptr, &result);
71 if (result == GL_SIGNALED) {
72 return OkStatus();
73 }
74#ifdef __ARM_ACLE
75 // Try to save CPU power by yielding CPU to another thread.
76 __yield();
77#endif
78 }
79}
80
81Status GlShaderSync::NewSync(GlShaderSync* gl_sync) {
82 GlShaderSync sync;

Callers 2

WaitForCompletionMethod · 0.85
StartMethod · 0.85

Calls 3

OkStatusFunction · 0.85
GetOpenGlErrorsFunction · 0.85
syncMethod · 0.45

Tested by

no test coverage detected