From: Marek Olšák <marek.ol...@amd.com>

---
 src/gallium/drivers/radeon/r600_perfcounter.c |  2 +-
 src/gallium/drivers/radeon/r600_query.c       | 13 +++++++------
 src/gallium/drivers/radeon/r600_query.h       |  2 +-
 3 files changed, 9 insertions(+), 8 deletions(-)

diff --git a/src/gallium/drivers/radeon/r600_perfcounter.c 
b/src/gallium/drivers/radeon/r600_perfcounter.c
index bf24aab..48f609b 100644
--- a/src/gallium/drivers/radeon/r600_perfcounter.c
+++ b/src/gallium/drivers/radeon/r600_perfcounter.c
@@ -189,21 +189,21 @@ static void r600_pc_query_emit_stop(struct 
r600_common_context *ctx,
 }
 
 static void r600_pc_query_clear_result(struct r600_query_hw *hwquery,
                                       union pipe_query_result *result)
 {
        struct r600_query_pc *query = (struct r600_query_pc *)hwquery;
 
        memset(result, 0, sizeof(result->batch[0]) * query->num_counters);
 }
 
-static void r600_pc_query_add_result(struct r600_common_context *ctx,
+static void r600_pc_query_add_result(struct r600_common_screen *rscreen,
                                     struct r600_query_hw *hwquery,
                                     void *buffer,
                                     union pipe_query_result *result)
 {
        struct r600_query_pc *query = (struct r600_query_pc *)hwquery;
        uint64_t *results = buffer;
        unsigned i, j;
 
        for (i = 0; i < query->num_counters; ++i) {
                struct r600_pc_counter *counter = &query->counters[i];
diff --git a/src/gallium/drivers/radeon/r600_query.c 
b/src/gallium/drivers/radeon/r600_query.c
index e269c39..b4e36c8 100644
--- a/src/gallium/drivers/radeon/r600_query.c
+++ b/src/gallium/drivers/radeon/r600_query.c
@@ -508,21 +508,21 @@ static struct r600_query_ops query_hw_ops = {
 };
 
 static void r600_query_hw_do_emit_start(struct r600_common_context *ctx,
                                        struct r600_query_hw *query,
                                        struct r600_resource *buffer,
                                        uint64_t va);
 static void r600_query_hw_do_emit_stop(struct r600_common_context *ctx,
                                       struct r600_query_hw *query,
                                       struct r600_resource *buffer,
                                       uint64_t va);
-static void r600_query_hw_add_result(struct r600_common_context *ctx,
+static void r600_query_hw_add_result(struct r600_common_screen *rscreen,
                                     struct r600_query_hw *, void *buffer,
                                     union pipe_query_result *result);
 static void r600_query_hw_clear_result(struct r600_query_hw *,
                                       union pipe_query_result *);
 
 static struct r600_query_hw_ops query_hw_default_hw_ops = {
        .prepare_buffer = r600_query_hw_prepare_buffer,
        .emit_start = r600_query_hw_do_emit_start,
        .emit_stop = r600_query_hw_do_emit_stop,
        .clear_result = r600_query_hw_clear_result,
@@ -1030,26 +1030,26 @@ static unsigned r600_query_read_result(void *map, 
unsigned start_index, unsigned
        end = (uint64_t)current_result[end_index] |
              (uint64_t)current_result[end_index+1] << 32;
 
        if (!test_status_bit ||
            ((start & 0x8000000000000000UL) && (end & 0x8000000000000000UL))) {
                return end - start;
        }
        return 0;
 }
 
-static void r600_query_hw_add_result(struct r600_common_context *ctx,
+static void r600_query_hw_add_result(struct r600_common_screen *rscreen,
                                     struct r600_query_hw *query,
                                     void *buffer,
                                     union pipe_query_result *result)
 {
-       unsigned max_rbs = ctx->screen->info.num_render_backends;
+       unsigned max_rbs = rscreen->info.num_render_backends;
 
        switch (query->b.type) {
        case PIPE_QUERY_OCCLUSION_COUNTER: {
                for (unsigned i = 0; i < max_rbs; ++i) {
                        unsigned results_base = i * 16;
                        result->u64 +=
                                r600_query_read_result(buffer + results_base, 
0, 2, true);
                }
                break;
        }
@@ -1085,21 +1085,21 @@ static void r600_query_hw_add_result(struct 
r600_common_context *ctx,
                        r600_query_read_result(buffer, 2, 6, true);
                result->so_statistics.primitives_storage_needed +=
                        r600_query_read_result(buffer, 0, 4, true);
                break;
        case PIPE_QUERY_SO_OVERFLOW_PREDICATE:
                result->b = result->b ||
                        r600_query_read_result(buffer, 2, 6, true) !=
                        r600_query_read_result(buffer, 0, 4, true);
                break;
        case PIPE_QUERY_PIPELINE_STATISTICS:
-               if (ctx->chip_class >= EVERGREEN) {
+               if (rscreen->chip_class >= EVERGREEN) {
                        result->pipeline_statistics.ps_invocations +=
                                r600_query_read_result(buffer, 0, 22, false);
                        result->pipeline_statistics.c_primitives +=
                                r600_query_read_result(buffer, 2, 24, false);
                        result->pipeline_statistics.c_invocations +=
                                r600_query_read_result(buffer, 4, 26, false);
                        result->pipeline_statistics.vs_invocations +=
                                r600_query_read_result(buffer, 6, 28, false);
                        result->pipeline_statistics.gs_invocations +=
                                r600_query_read_result(buffer, 8, 30, false);
@@ -1183,46 +1183,47 @@ static void r600_get_query_result_resource(struct 
pipe_context *ctx,
 static void r600_query_hw_clear_result(struct r600_query_hw *query,
                                       union pipe_query_result *result)
 {
        util_query_clear_result(result, query->b.type);
 }
 
 bool r600_query_hw_get_result(struct r600_common_context *rctx,
                              struct r600_query *rquery,
                              bool wait, union pipe_query_result *result)
 {
+       struct r600_common_screen *rscreen = rctx->screen;
        struct r600_query_hw *query = (struct r600_query_hw *)rquery;
        struct r600_query_buffer *qbuf;
 
        query->ops->clear_result(query, result);
 
        for (qbuf = &query->buffer; qbuf; qbuf = qbuf->previous) {
                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 (!map)
                        return false;
 
                while (results_base != qbuf->results_end) {
-                       query->ops->add_result(rctx, query, map + results_base,
+                       query->ops->add_result(rscreen, query, map + 
results_base,
                                               result);
                        results_base += query->result_size;
                }
        }
 
        /* Convert the time to expected units. */
        if (rquery->type == PIPE_QUERY_TIME_ELAPSED ||
            rquery->type == PIPE_QUERY_TIMESTAMP) {
-               result->u64 = (1000000 * result->u64) / 
rctx->screen->info.clock_crystal_freq;
+               result->u64 = (1000000 * result->u64) / 
rscreen->info.clock_crystal_freq;
        }
        return true;
 }
 
 /* Create the compute shader that is used to collect the results.
  *
  * One compute grid with a single thread is launched for every query result
  * buffer. The thread (optionally) reads a previous summary buffer, then
  * accumulates data from the query result buffer, and writes the result either
  * to a summary buffer to be consumed by the next grid invocation or to the
diff --git a/src/gallium/drivers/radeon/r600_query.h 
b/src/gallium/drivers/radeon/r600_query.h
index d39663a..b9ab44c 100644
--- a/src/gallium/drivers/radeon/r600_query.h
+++ b/src/gallium/drivers/radeon/r600_query.h
@@ -145,21 +145,21 @@ struct r600_query_hw_ops {
        bool (*prepare_buffer)(struct r600_common_screen *,
                               struct r600_query_hw *,
                               struct r600_resource *);
        void (*emit_start)(struct r600_common_context *,
                           struct r600_query_hw *,
                           struct r600_resource *buffer, uint64_t va);
        void (*emit_stop)(struct r600_common_context *,
                          struct r600_query_hw *,
                          struct r600_resource *buffer, uint64_t va);
        void (*clear_result)(struct r600_query_hw *, union pipe_query_result *);
-       void (*add_result)(struct r600_common_context *ctx,
+       void (*add_result)(struct r600_common_screen *screen,
                           struct r600_query_hw *, void *buffer,
                           union pipe_query_result *result);
 };
 
 struct r600_query_buffer {
        /* The buffer where query results are stored. */
        struct r600_resource            *buf;
        /* Offset of the next free result after current query data */
        unsigned                        results_end;
        /* If a query buffer is full, a new buffer is created and the old one
-- 
2.7.4

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to