summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAlyssa Rosenzweig <[email protected]>2019-08-08 14:27:41 -0700
committerAlyssa Rosenzweig <[email protected]>2019-08-12 12:22:54 -0700
commite881aa8c12c1447423c4acee4bbaaf503b19b057 (patch)
tree63891d50de2750d692508277b148f023ba4530b8 /src
parent8ce4f9bbc3bfda6542a2c5a320f14f968c03bbbc (diff)
gallium/util: Add u_stream_outputs_for_vertices helper
This u_prim.h helper determines the number of outputs for stream output, given a particular primitive type and a vertex count. This is useful for statically calculating sizes of stream output buffers (i.e. when there is no geometry/tessellation shader in use). This helper will be used in Panfrost's transform feedback implementation, as you can probably guess since why else would I be submitting it.... See also dEQP's getTransformFeedbackOutputCount routine. v2: Simplify definition using new helpers, which also extends to non-ES2 primitive types (Eric). Signed-off-by: Alyssa Rosenzweig <[email protected]> Reviewed-by: Eric Anholt <[email protected]>
Diffstat (limited to 'src')
-rw-r--r--src/gallium/auxiliary/util/u_prim.h19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/gallium/auxiliary/util/u_prim.h b/src/gallium/auxiliary/util/u_prim.h
index ae05788702c..d80e235ffd9 100644
--- a/src/gallium/auxiliary/util/u_prim.h
+++ b/src/gallium/auxiliary/util/u_prim.h
@@ -327,6 +327,25 @@ u_vertices_for_prims(enum pipe_prim_type prim_type, int count)
return info->min + (count - 1) * info->incr;
}
+/**
+ * Returns the number of stream out outputs for a given number of vertices and
+ * primitive type.
+ */
+
+static inline unsigned
+u_stream_outputs_for_vertices(enum pipe_prim_type primitive, unsigned nr)
+{
+ /* Extraneous vertices don't contribute to stream outputs */
+ u_trim_pipe_prim(primitive, &nr);
+
+ /* Consider how many primitives are actually generated */
+ unsigned prims = u_decomposed_prims_for_vertices(primitive, nr);
+
+ /* One output per vertex after decomposition */
+ enum pipe_prim_type base = u_base_prim_type(primitive);
+ return u_vertices_for_prims(base, prims);
+}
+
const char *u_prim_name(enum pipe_prim_type pipe_prim);