st/nine: Improve D3DQUERYTYPE_TIMESTAMP
authorXavier Bouchoux <xavierb@gmail.com>
Sat, 21 Feb 2015 18:56:40 +0000 (19:56 +0100)
committerAxel Davy <axel.davy@ens.fr>
Wed, 29 Apr 2015 06:28:10 +0000 (08:28 +0200)
Avoid blocking when retrieving D3DQUERYTYPE_TIMESTAMP result with
NineQuery9_GetData(), when D3DGETDATA_FLUSH is not specified.
This mimics Win behaviour and gives slightly better performance
for some games.

Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Axel Davy <axel.davy@ens.fr>
Signed-off-by: Xavier Bouchoux <xavierb@gmail.com>
src/gallium/state_trackers/nine/query9.c

index df49340..04f4aad 100644 (file)
@@ -227,8 +227,13 @@ NineQuery9_GetData( struct NineQuery9 *This,
         wait_query_result = TRUE;
     }
 
-    /* Wine tests: D3DQUERYTYPE_TIMESTAMP always succeeds */
-    wait_query_result |= This->type == D3DQUERYTYPE_TIMESTAMP;
+    /* The documention mentions no special case for D3DQUERYTYPE_TIMESTAMP.
+     * However Windows tests show that the query always succeeds when
+     * D3DGETDATA_FLUSH is specified. */
+    if (This->type == D3DQUERYTYPE_TIMESTAMP &&
+        (dwGetDataFlags & D3DGETDATA_FLUSH))
+        wait_query_result = TRUE;
+
 
     /* Note: We ignore dwGetDataFlags, because get_query_result will
      * flush automatically if needed */