st/nine: Queries: allow app to call GetData without Issuing first

Nine was allowing that behaviour, but was not filling the result.

Tested-by: David Heidelberg <david@ixit.cz>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
Signed-off-by: Axel Davy <axel.davy@ens.fr>
This commit is contained in:
Axel Davy 2014-12-02 21:56:51 +01:00
parent eac0b9b68a
commit 225d7f8e0e

View file

@ -199,7 +199,7 @@ NineQuery9_GetData( struct NineQuery9 *This,
DWORD dwGetDataFlags )
{
struct pipe_context *pipe = This->base.device->pipe;
boolean ok;
boolean ok, wait_query_result = FALSE;
unsigned i;
union pipe_query_result presult;
union nine_query_result nresult;
@ -215,13 +215,18 @@ NineQuery9_GetData( struct NineQuery9 *This,
user_assert(dwGetDataFlags == 0 ||
dwGetDataFlags == D3DGETDATA_FLUSH, D3DERR_INVALIDCALL);
if (This->state == NINE_QUERY_STATE_FRESH)
return S_OK;
if (This->state == NINE_QUERY_STATE_FRESH) {
/* App forgot calling Issue. call it for it.
* However Wine states that return value should
* be S_OK, so wait for the result to return S_OK. */
NineQuery9_Issue(This, D3DISSUE_END);
wait_query_result = TRUE;
}
/* Note: We ignore dwGetDataFlags, because get_query_result will
* flush automatically if needed */
ok = pipe->get_query_result(pipe, This->pq, FALSE, &presult);
ok = pipe->get_query_result(pipe, This->pq, wait_query_result, &presult);
if (!ok) return S_FALSE;