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 UINT STDMETHODCALLTYPE d3d10_query_GetDataSize(ID3D10Query *iface) { struct d3d_query *query = impl_from_ID3D10Query(iface); unsigned int data_size; TRACE("iface %p.\n", iface); wined3d_mutex_lock(); data_size = wined3d_query_get_data_size(query->wined3d_query); wined3d_mutex_unlock(); return data_size; }
static DWORD WINAPI IDirect3DQuery9Impl_GetDataSize(IDirect3DQuery9 *iface) { IDirect3DQuery9Impl *This = impl_from_IDirect3DQuery9(iface); DWORD ret; TRACE("iface %p.\n", iface); wined3d_mutex_lock(); ret = wined3d_query_get_data_size(This->wineD3DQuery); wined3d_mutex_unlock(); return ret; }
static UINT STDMETHODCALLTYPE d3d10_query_GetDataSize(ID3D10Query *iface) { struct d3d_query *query = impl_from_ID3D10Query(iface); unsigned int data_size; TRACE("iface %p.\n", iface); wined3d_mutex_lock(); data_size = wined3d_query_get_data_size(query->wined3d_query); wined3d_mutex_unlock(); if (query->desc.Query == D3D11_QUERY_PIPELINE_STATISTICS) data_size = sizeof(D3D10_QUERY_DATA_PIPELINE_STATISTICS); return data_size; }
static DWORD WINAPI d3d9_query_GetDataSize(IDirect3DQuery9 *iface) { struct d3d9_query *query = impl_from_IDirect3DQuery9(iface); enum wined3d_query_type type; DWORD ret; TRACE("iface %p.\n", iface); wined3d_mutex_lock(); type = wined3d_query_get_type(query->wined3d_query); if (type == WINED3D_QUERY_TYPE_TIMESTAMP_DISJOINT) ret = sizeof(BOOL); else ret = wined3d_query_get_data_size(query->wined3d_query); wined3d_mutex_unlock(); return ret; }
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; }