static HRESULT WINAPI d3d9_query_GetData(IDirect3DQuery9 *iface, void *data, DWORD size, DWORD flags) { struct d3d9_query *query = impl_from_IDirect3DQuery9(iface); enum wined3d_query_type type; HRESULT hr; TRACE("iface %p, data %p, size %u, flags %#x.\n", iface, data, size, flags); wined3d_mutex_lock(); type = wined3d_query_get_type(query->wined3d_query); if (type == WINED3D_QUERY_TYPE_TIMESTAMP_DISJOINT && data) { struct wined3d_query_data_timestamp_disjoint data_disjoint; if (size > sizeof(data_disjoint.disjoint)) size = sizeof(data_disjoint.disjoint); hr = wined3d_query_get_data(query->wined3d_query, &data_disjoint, sizeof(data_disjoint), flags); memcpy(data, &data_disjoint.disjoint, size); } else { hr = wined3d_query_get_data(query->wined3d_query, data, size, flags); } wined3d_mutex_unlock(); return hr; }
static HRESULT STDMETHODCALLTYPE d3d10_query_GetData(ID3D10Query *iface, void *data, UINT data_size, UINT flags) { struct d3d_query *query = impl_from_ID3D10Query(iface); unsigned int wined3d_flags; HRESULT hr; TRACE("iface %p, data %p, data_size %u, flags %#x.\n", iface, data, data_size, flags); if (!data && data_size) return E_INVALIDARG; wined3d_flags = wined3d_getdata_flags_from_d3d11_async_getdata_flags(flags); wined3d_mutex_lock(); if (!data_size || wined3d_query_get_data_size(query->wined3d_query) == data_size) { hr = wined3d_query_get_data(query->wined3d_query, data, data_size, wined3d_flags); if (hr == WINED3DERR_INVALIDCALL) hr = DXGI_ERROR_INVALID_CALL; } else { WARN("Invalid data size %u.\n", data_size); hr = E_INVALIDARG; } wined3d_mutex_unlock(); return hr; }
static HRESULT WINAPI IDirect3DQuery9Impl_GetData(IDirect3DQuery9 *iface, void *pData, DWORD dwSize, DWORD dwGetDataFlags) { IDirect3DQuery9Impl *This = impl_from_IDirect3DQuery9(iface); HRESULT hr; TRACE("iface %p, data %p, size %u, flags %#x.\n", iface, pData, dwSize, dwGetDataFlags); wined3d_mutex_lock(); hr = wined3d_query_get_data(This->wineD3DQuery, pData, dwSize, dwGetDataFlags); wined3d_mutex_unlock(); return hr; }
static HRESULT STDMETHODCALLTYPE d3d10_query_GetData(ID3D10Query *iface, void *data, UINT data_size, UINT flags) { struct d3d_query *query = impl_from_ID3D10Query(iface); D3D11_QUERY_DATA_PIPELINE_STATISTICS d3d11_data; void *d3d10_data_pointer = NULL; unsigned int wined3d_flags; HRESULT hr; TRACE("iface %p, data %p, data_size %u, flags %#x.\n", iface, data, data_size, flags); if (!data && data_size) return E_INVALIDARG; if (query->desc.Query == D3D11_QUERY_PIPELINE_STATISTICS && data_size == sizeof(D3D10_QUERY_DATA_PIPELINE_STATISTICS)) { data_size = sizeof(D3D11_QUERY_DATA_PIPELINE_STATISTICS); d3d10_data_pointer = data; data = &d3d11_data; } wined3d_flags = wined3d_getdata_flags_from_d3d11_async_getdata_flags(flags); wined3d_mutex_lock(); if (!data_size || wined3d_query_get_data_size(query->wined3d_query) == data_size) { hr = wined3d_query_get_data(query->wined3d_query, data, data_size, wined3d_flags); if (hr == WINED3DERR_INVALIDCALL) hr = DXGI_ERROR_INVALID_CALL; } else { WARN("Invalid data size %u.\n", data_size); hr = E_INVALIDARG; } wined3d_mutex_unlock(); if (d3d10_data_pointer && hr == S_OK) memcpy(d3d10_data_pointer, data, sizeof(D3D10_QUERY_DATA_PIPELINE_STATISTICS)); return hr; }