struct st_sync_object *so = (struct st_sync_object*)obj;
screen->fence_reference(screen, &so->fence, NULL);
- FREE(so);
+ free(so->b.Label);
+ free(so);
}
static void st_fence_sync(struct gl_context *ctx, struct gl_sync_object *obj,
assert(condition == GL_SYNC_GPU_COMMANDS_COMPLETE && flags == 0);
assert(so->fence == NULL);
- pipe->flush(pipe, 0, &so->fence);
+ pipe->flush(pipe, &so->fence, 0);
}
static void st_check_sync(struct gl_context *ctx, struct gl_sync_object *obj)
struct pipe_screen *screen = st_context(ctx)->pipe->screen;
struct st_sync_object *so = (struct st_sync_object*)obj;
- if (so->fence && screen->fence_signalled(screen, so->fence, 0) == 0) {
+ if (so->fence && screen->fence_signalled(screen, so->fence)) {
screen->fence_reference(screen, &so->fence, NULL);
so->b.StatusFlag = GL_TRUE;
}
/* We don't care about GL_SYNC_FLUSH_COMMANDS_BIT, because flush is
* already called when creating a fence. */
- if (so->fence) {
- screen->fence_finish(screen, so->fence, 0);
+ if (so->fence &&
+ screen->fence_finish(screen, so->fence, timeout)) {
screen->fence_reference(screen, &so->fence, NULL);
so->b.StatusFlag = GL_TRUE;
}