static boolean ilo_get_query_result(struct pipe_context *pipe, struct pipe_query *query, boolean wait, union pipe_query_result *result) { struct ilo_context *ilo = ilo_context(pipe); struct ilo_query *q = ilo_query(query); if (q->active) return false; if (q->bo) { if (intel_bo_has_reloc(ilo->cp->bo, q->bo)) ilo_cp_flush(ilo->cp, "syncing for queries"); if (!wait && intel_bo_is_busy(q->bo)) return false; query_info[q->type].process(ilo, q); } if (result) serialize_query_data(q->type, &q->data, (void *) result); return true; }
static boolean ilo_fence_signalled(struct pipe_screen *screen, struct pipe_fence_handle *f) { struct ilo_fence *fence = ilo_fence(f); /* mark signalled if the bo is idle */ if (fence->bo && !intel_bo_is_busy(fence->bo)) { intel_bo_unreference(fence->bo); fence->bo = NULL; } return (fence->bo == NULL); }