gallium/radeon: subclass and handle threaded_query
authorMarek Olšák <marek.olsak@amd.com>
Sun, 12 Mar 2017 20:44:07 +0000 (21:44 +0100)
committerMarek Olšák <marek.olsak@amd.com>
Mon, 15 May 2017 11:01:33 +0000 (13:01 +0200)
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
Tested-by: Dieter Nützel <Dieter@nuetzel-hh.de>
src/gallium/drivers/radeon/r600_query.c
src/gallium/drivers/radeon/r600_query.h

index cbf4bbac3e4779d933789ad905ea2eecb8376e4f..dac9b9cbc6285670387299020c5f3b54fceaf0fb 100644 (file)
@@ -354,7 +354,9 @@ static bool r600_query_sw_get_result(struct r600_common_context *rctx,
                return true;
        case PIPE_QUERY_GPU_FINISHED: {
                struct pipe_screen *screen = rctx->b.screen;
-               result->b = screen->fence_finish(screen, &rctx->b, query->fence,
+               struct pipe_context *ctx = rquery->b.flushed ? NULL : &rctx->b;
+
+               result->b = screen->fence_finish(screen, ctx, query->fence,
                                                 wait ? PIPE_TIMEOUT_INFINITE : 0);
                return result->b;
        }
@@ -1212,12 +1214,16 @@ bool r600_query_hw_get_result(struct r600_common_context *rctx,
        query->ops->clear_result(query, result);
 
        for (qbuf = &query->buffer; qbuf; qbuf = qbuf->previous) {
+               unsigned usage = PIPE_TRANSFER_READ |
+                                (wait ? 0 : PIPE_TRANSFER_DONTBLOCK);
                unsigned results_base = 0;
                void *map;
 
-               map = r600_buffer_map_sync_with_rings(rctx, qbuf->buf,
-                                                     PIPE_TRANSFER_READ |
-                                                     (wait ? 0 : PIPE_TRANSFER_DONTBLOCK));
+               if (rquery->b.flushed)
+                       map = rctx->ws->buffer_map(qbuf->buf->buf, NULL, usage);
+               else
+                       map = r600_buffer_map_sync_with_rings(rctx, qbuf->buf, usage);
+
                if (!map)
                        return false;
 
index 05aceb72839e799257f49e455b1d68656b229dd3..485bb61b70073d0e86798fd94a89e1dca52404af 100644 (file)
@@ -28,9 +28,7 @@
 #ifndef R600_QUERY_H
 #define R600_QUERY_H
 
-#include "pipe/p_defines.h"
-#include "pipe/p_state.h"
-#include "util/list.h"
+#include "util/u_threaded_context.h"
 
 struct pipe_context;
 struct pipe_query;
@@ -129,6 +127,7 @@ struct r600_query_ops {
 };
 
 struct r600_query {
+       struct threaded_query b;
        struct r600_query_ops *ops;
 
        /* The type of query */