#include "imports.h"
#include "context.h"
#include "macros.h"
+#include "mfeatures.h"
#include "get.h"
#include "dispatch.h"
+#include "mtypes.h"
-#if FEATURE_ARB_sync
#include "syncobj.h"
static struct gl_sync_object *
}
if ((flags & ~GL_SYNC_FLUSH_COMMANDS_BIT) != 0) {
- _mesa_error(ctx, GL_INVALID_ENUM, "glClientWaitSync(flags=0x%x)", flags);
+ _mesa_error(ctx, GL_INVALID_VALUE, "glClientWaitSync(flags=0x%x)", flags);
return GL_WAIT_FAILED;
}
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);
}
if (flags != 0) {
- _mesa_error(ctx, GL_INVALID_ENUM, "glWaitSync(flags=0x%x)", flags);
+ _mesa_error(ctx, GL_INVALID_VALUE, "glWaitSync(flags=0x%x)", flags);
return;
}
- /* From the GL_ARB_sync spec:
- *
- * If the value of <timeout> is zero, then WaitSync does nothing.
- */
- if (timeout == 0) {
+ if (timeout != GL_TIMEOUT_IGNORED) {
+ _mesa_error(ctx, GL_INVALID_VALUE, "glWaitSync(timeout=0x%lx)", timeout);
return;
}
*length = size;
}
}
-
-#endif /* FEATURE_ARB_sync */