static BOOL wined3d_event_query_ops_poll(struct wined3d_query *query) { struct wined3d_event_query *event_query = query->extendedData; enum wined3d_event_query_result ret; ret = wined3d_event_query_test(event_query, query->device); switch(ret) { case WINED3D_EVENT_QUERY_OK: case WINED3D_EVENT_QUERY_NOT_STARTED: return TRUE; case WINED3D_EVENT_QUERY_WAITING: return FALSE; case WINED3D_EVENT_QUERY_WRONG_THREAD: FIXME("(%p) Wrong thread, reporting GPU idle.\n", query); return TRUE; case WINED3D_EVENT_QUERY_ERROR: ERR("The GL event query failed, returning D3DERR_INVALIDCALL\n"); return TRUE; default: ERR("Unexpected wined3d_event_query_test result %u\n", ret); return TRUE; } }
static HRESULT wined3d_event_query_ops_get_data(struct wined3d_query *query, void *data, DWORD size, DWORD flags) { struct wined3d_event_query *event_query = query->extendedData; BOOL signaled; enum wined3d_event_query_result ret; TRACE("query %p, data %p, size %#x, flags %#x.\n", query, data, size, flags); if (!data || !size) return S_OK; if (!event_query) { WARN("Event query not supported by GL, reporting GPU idle.\n"); signaled = TRUE; fill_query_data(data, size, &signaled, sizeof(signaled)); return S_OK; } ret = wined3d_event_query_test(event_query, query->device); switch(ret) { case WINED3D_EVENT_QUERY_OK: case WINED3D_EVENT_QUERY_NOT_STARTED: signaled = TRUE; fill_query_data(data, size, &signaled, sizeof(signaled)); break; case WINED3D_EVENT_QUERY_WAITING: signaled = FALSE; fill_query_data(data, size, &signaled, sizeof(signaled)); break; case WINED3D_EVENT_QUERY_WRONG_THREAD: FIXME("(%p) Wrong thread, reporting GPU idle.\n", query); signaled = TRUE; fill_query_data(data, size, &signaled, sizeof(signaled)); break; case WINED3D_EVENT_QUERY_ERROR: ERR("The GL event query failed, returning D3DERR_INVALIDCALL\n"); return WINED3DERR_INVALIDCALL; } return S_OK; }
static HRESULT WINAPI IWineD3DEventQueryImpl_GetData(IWineD3DQuery* iface, void* pData, DWORD dwSize, DWORD dwGetDataFlags) { IWineD3DQueryImpl *This = (IWineD3DQueryImpl *) iface; struct wined3d_event_query *query = This->extendedData; BOOL *data = pData; enum wined3d_event_query_result ret; TRACE("(%p) : type D3DQUERY_EVENT, pData %p, dwSize %#x, dwGetDataFlags %#x\n", This, pData, dwSize, dwGetDataFlags); if (!pData || !dwSize) return S_OK; if (!query) { WARN("(%p): Event query not supported by GL, reporting GPU idle\n", This); *data = TRUE; return S_OK; } ret = wined3d_event_query_test(query, This->device); switch(ret) { case WINED3D_EVENT_QUERY_OK: case WINED3D_EVENT_QUERY_NOT_STARTED: *data = TRUE; break; case WINED3D_EVENT_QUERY_WAITING: *data = FALSE; break; case WINED3D_EVENT_QUERY_WRONG_THREAD: FIXME("(%p) Wrong thread, reporting GPU idle.\n", This); *data = TRUE; break; case WINED3D_EVENT_QUERY_ERROR: ERR("The GL event query failed, returning D3DERR_INVALIDCALL\n"); return WINED3DERR_INVALIDCALL; } return S_OK; }