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 <vadimgirlin@gmail.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
This commit is contained in:
Vadim Girlin 2012-09-01 01:02:24 +04:00
parent b95d598323
commit b05a1fc156

View file

@ -325,11 +325,15 @@ _mesa_ClientWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout)
ctx->Driver.CheckSync(ctx, syncObj);
if (syncObj->StatusFlag) {
ret = GL_ALREADY_SIGNALED;
} else {
if (timeout == 0) {
ret = GL_TIMEOUT_EXPIRED;
} else {
ctx->Driver.ClientWaitSync(ctx, syncObj, flags, timeout);
ret = syncObj->StatusFlag ? GL_CONDITION_SATISFIED : GL_TIMEOUT_EXPIRED;
}
}
_mesa_unref_sync_object(ctx, syncObj);
return ret;