From: Alyssa Rosenzweig Date: Thu, 8 Aug 2019 21:27:41 +0000 (-0700) Subject: gallium/util: Add u_stream_outputs_for_vertices helper X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=e881aa8c12c1447423c4acee4bbaaf503b19b057;p=mesa.git 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 Reviewed-by: Eric Anholt --- 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);