diff options
author | Vadim Girlin <[email protected]> | 2012-09-01 01:02:24 +0400 |
---|---|---|
committer | Vadim Girlin <[email protected]> | 2012-09-01 01:02:24 +0400 |
commit | b05a1fc156c4776d97d6ff3dcce71e6e34bac21d (patch) | |
tree | 1990cf99d7ec010e574c1ed6ed55f3b4718980ee /src/mesa/main/syncobj.c | |
parent | b95d598323540ecb6dbbdcf00bbb5cf3fb22a78c (diff) |
mesa: don't wait in _mesa_ClientWaitSync if timeout is 0
From ARB_sync spec:
If the value of <timeout> is zero, then ClientWaitSync does not
block, but simply tests the current state of <sync>. TIMEOUT_EXPIRED
will be returned in this case if <sync> is not signaled, even though
no actual wait was performed.
Fixes random fails of the arb_sync-timeout-zero piglit test on r600g.
Signed-off-by: Vadim Girlin <[email protected]>
Reviewed-by: Eric Anholt <[email protected]>
Diffstat (limited to 'src/mesa/main/syncobj.c')
-rw-r--r-- | src/mesa/main/syncobj.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/mesa/main/syncobj.c b/src/mesa/main/syncobj.c index e1a5c6c0f92..9f5a27e6267 100644 --- a/src/mesa/main/syncobj.c +++ b/src/mesa/main/syncobj.c @@ -326,9 +326,13 @@ _mesa_ClientWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout) if (syncObj->StatusFlag) { ret = GL_ALREADY_SIGNALED; } else { - ctx->Driver.ClientWaitSync(ctx, syncObj, flags, timeout); + if (timeout == 0) { + ret = GL_TIMEOUT_EXPIRED; + } else { + ctx->Driver.ClientWaitSync(ctx, syncObj, flags, timeout); - ret = syncObj->StatusFlag ? GL_CONDITION_SATISFIED : GL_TIMEOUT_EXPIRED; + ret = syncObj->StatusFlag ? GL_CONDITION_SATISFIED : GL_TIMEOUT_EXPIRED; + } } _mesa_unref_sync_object(ctx, syncObj); |