Module: wine Branch: master Commit: 78a945e7bf9216610ec60b381e8ba91c08d56e20 URL: http://source.winehq.org/git/wine.git/?a=commit;h=78a945e7bf9216610ec60b381e...
Author: Józef Kucia jkucia@codeweavers.com Date: Fri Feb 3 14:08:48 2017 +0100
d3d9: Store query data size in "d3d9_query".
Signed-off-by: Józef Kucia jkucia@codeweavers.com Signed-off-by: Henri Verbeet hverbeet@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/d3d9/d3d9_private.h | 1 + dlls/d3d9/query.c | 30 ++++++++++++------------------ 2 files changed, 13 insertions(+), 18 deletions(-)
diff --git a/dlls/d3d9/d3d9_private.h b/dlls/d3d9/d3d9_private.h index fef0133..c8558e7 100644 --- a/dlls/d3d9/d3d9_private.h +++ b/dlls/d3d9/d3d9_private.h @@ -341,6 +341,7 @@ struct d3d9_query LONG refcount; struct wined3d_query *wined3d_query; IDirect3DDevice9Ex *parent_device; + DWORD data_size; };
HRESULT query_init(struct d3d9_query *query, struct d3d9_device *device, D3DQUERYTYPE type) DECLSPEC_HIDDEN; diff --git a/dlls/d3d9/query.c b/dlls/d3d9/query.c index e4f84c3..9179260 100644 --- a/dlls/d3d9/query.c +++ b/dlls/d3d9/query.c @@ -108,22 +108,10 @@ static D3DQUERYTYPE WINAPI d3d9_query_GetType(IDirect3DQuery9 *iface) 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_OCCLUSION) - ret = sizeof(DWORD); - else 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; + return query->data_size; }
static HRESULT WINAPI d3d9_query_Issue(IDirect3DQuery9 *iface, DWORD flags) @@ -172,9 +160,8 @@ static HRESULT WINAPI d3d9_query_GetData(IDirect3DQuery9 *iface, void *data, DWO { if (data) { - DWORD data_size = d3d9_query_GetDataSize(iface); memset(data, 0, size); - memset(data, 0xdd, min(size, data_size)); + memset(data, 0xdd, min(size, query->data_size)); } return S_OK; } @@ -202,14 +189,21 @@ HRESULT query_init(struct d3d9_query *query, struct d3d9_device *device, D3DQUER query->refcount = 1;
wined3d_mutex_lock(); - hr = wined3d_query_create(device->wined3d_device, type, query, &query->wined3d_query); - wined3d_mutex_unlock(); - if (FAILED(hr)) + if (FAILED(hr = wined3d_query_create(device->wined3d_device, type, query, &query->wined3d_query))) { + wined3d_mutex_unlock(); WARN("Failed to create wined3d query, hr %#x.\n", hr); return hr; }
+ if (type == D3DQUERYTYPE_OCCLUSION) + query->data_size = sizeof(DWORD); + else if (type == D3DQUERYTYPE_TIMESTAMPDISJOINT) + query->data_size = sizeof(BOOL); + else + query->data_size = wined3d_query_get_data_size(query->wined3d_query); + wined3d_mutex_unlock(); + query->parent_device = &device->IDirect3DDevice9Ex_iface; IDirect3DDevice9Ex_AddRef(query->parent_device);