freedreno: fix prims-emitted query
authorRob Clark <robclark@freedesktop.org>
Tue, 12 Apr 2016 00:53:13 +0000 (20:53 -0400)
committerRob Clark <robclark@freedesktop.org>
Wed, 13 Apr 2016 18:15:47 +0000 (14:15 -0400)
This should only count when TF is not paused.

Signed-off-by: Rob Clark <robclark@freedesktop.org>
src/gallium/drivers/freedreno/freedreno_context.h
src/gallium/drivers/freedreno/freedreno_draw.c
src/gallium/drivers/freedreno/freedreno_query_sw.c

index 85ce97c16b79c377c64e3d5b3396364155c28b20..86992960960d49c7fe9331d686d405d0b29ee851 100644 (file)
@@ -241,6 +241,7 @@ struct fd_context {
         */
        struct {
                uint64_t prims_emitted;
+               uint64_t prims_generated;
                uint64_t draw_calls;
                uint64_t batch_total, batch_sysmem, batch_gmem, batch_restore;
        } stats;
index bf803cc77bc6137ec109530a8fcadc2ef2285a0c..11d9f64958bd8faa691ad7bfebede45eb28ac9e3 100644 (file)
@@ -174,7 +174,16 @@ fd_draw_vbo(struct pipe_context *pctx, const struct pipe_draw_info *info)
        prims = u_reduced_prims_for_vertices(info->mode, info->count);
 
        ctx->stats.draw_calls++;
-       ctx->stats.prims_emitted += prims;
+
+       /* TODO prims_emitted should be clipped when the stream-out buffer is
+        * not large enough.  See max_tf_vtx().. probably need to move that
+        * into common code.  Although a bit more annoying since a2xx doesn't
+        * use ir3 so no common way to get at the pipe_stream_output_info
+        * which is needed for this calculation.
+        */
+       if (ctx->streamout.num_targets > 0)
+               ctx->stats.prims_emitted += prims;
+       ctx->stats.prims_generated += prims;
 
        /* any buffers that haven't been cleared yet, we need to restore: */
        ctx->restore |= buffers & (FD_BUFFER_ALL & ~ctx->cleared);
index 514df145fa88c9b449da425602e929bd6f4e2640..4af6a125e03c496e97cb87f7740157d7557cc6bd 100644 (file)
@@ -54,7 +54,7 @@ read_counter(struct fd_context *ctx, int type)
 {
        switch (type) {
        case PIPE_QUERY_PRIMITIVES_GENERATED:
-               /* for now same thing as _PRIMITIVES_EMITTED */
+               return ctx->stats.prims_generated;
        case PIPE_QUERY_PRIMITIVES_EMITTED:
                return ctx->stats.prims_emitted;
        case FD_QUERY_DRAW_CALLS: