summaryrefslogtreecommitdiffstats
path: root/src/gallium/auxiliary/draw/draw_context.c
diff options
context:
space:
mode:
authorZack Rusin <[email protected]>2013-06-06 08:49:09 -0400
committerZack Rusin <[email protected]>2013-06-10 22:04:28 -0400
commit0a3779d95537343505200ad096acf135dcd81b80 (patch)
treefffde02ddbdc14609680b5783c6617469c8308a9 /src/gallium/auxiliary/draw/draw_context.c
parent2b2e7bb13361fa93c49c4872cc5070a66a7b1746 (diff)
draw: fix clipper invocation statistics
We need to figure out the number of invocations of the clipper before the emit, because in the emit we are after clipping where the number of primitives will be equal to number of clipper invocations minus the clipped primitives. So our computations were always off by the number of clipped primitives. Signed-off-by: Zack Rusin <[email protected]> Reviewed-by: Jose Fonseca <[email protected]> Reviewed-by: Brian Paul <[email protected]> Reviewed-by: Roland Scheidegger <[email protected]>
Diffstat (limited to 'src/gallium/auxiliary/draw/draw_context.c')
-rw-r--r--src/gallium/auxiliary/draw/draw_context.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/gallium/auxiliary/draw/draw_context.c b/src/gallium/auxiliary/draw/draw_context.c
index e8480f6ba73..81b3068553d 100644
--- a/src/gallium/auxiliary/draw/draw_context.c
+++ b/src/gallium/auxiliary/draw/draw_context.c
@@ -37,6 +37,7 @@
#include "util/u_cpu_detect.h"
#include "util/u_inlines.h"
#include "util/u_helpers.h"
+#include "util/u_prim.h"
#include "draw_context.h"
#include "draw_vs.h"
#include "draw_gs.h"
@@ -925,3 +926,27 @@ draw_collect_pipeline_statistics(struct draw_context *draw,
{
draw->collect_statistics = enable;
}
+
+/**
+ * Computes clipper invocation statistics.
+ *
+ * Figures out how many primitives would have been
+ * sent to the clipper given the specified
+ * prim info data.
+ */
+void
+draw_stats_clipper_primitives(struct draw_context *draw,
+ const struct draw_prim_info *prim_info)
+{
+ if (draw->collect_statistics) {
+ unsigned start, i;
+ for (start = i = 0;
+ i < prim_info->primitive_count;
+ start += prim_info->primitive_lengths[i], i++)
+ {
+ draw->statistics.c_invocations +=
+ u_decomposed_prims_for_vertices(prim_info->prim,
+ prim_info->primitive_lengths[i]);
+ }
+ }
+}