diff options
author | Iago Toral Quiroga <[email protected]> | 2019-08-01 11:56:29 +0200 |
---|---|---|
committer | Iago Toral Quiroga <[email protected]> | 2019-08-08 08:36:52 +0200 |
commit | cf8986bce058e2724e01c68fcc64e34e59869a06 (patch) | |
tree | 7eab50add0b2bbe3e59967c99f4cf88e92b8bdca /src/gallium/auxiliary | |
parent | 9eb8699e0f53577f203dc63b01fe18b6a2f61734 (diff) |
gallium/util: add a helper to compute vertex count from primitive count
v2:
- Only compute vertex counts for base primitives.
- Add a unit test (Eric)
Reviewed-by: Eric Anholt <[email protected]>
Diffstat (limited to 'src/gallium/auxiliary')
-rw-r--r-- | src/gallium/auxiliary/util/u_prim.h | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/gallium/auxiliary/util/u_prim.h b/src/gallium/auxiliary/util/u_prim.h index fb9290d62ca..ae05788702c 100644 --- a/src/gallium/auxiliary/util/u_prim.h +++ b/src/gallium/auxiliary/util/u_prim.h @@ -283,6 +283,50 @@ u_reduced_prims_for_vertices(enum pipe_prim_type primitive, int vertices) } } +static inline enum pipe_prim_type +u_base_prim_type(enum pipe_prim_type prim_type) +{ + switch(prim_type) { + case PIPE_PRIM_POINTS: + return PIPE_PRIM_POINTS; + case PIPE_PRIM_LINES: + case PIPE_PRIM_LINE_LOOP: + case PIPE_PRIM_LINE_STRIP: + case PIPE_PRIM_LINES_ADJACENCY: + case PIPE_PRIM_LINE_STRIP_ADJACENCY: + return PIPE_PRIM_LINES; + case PIPE_PRIM_TRIANGLES: + case PIPE_PRIM_TRIANGLE_STRIP: + case PIPE_PRIM_TRIANGLE_FAN: + case PIPE_PRIM_TRIANGLES_ADJACENCY: + case PIPE_PRIM_TRIANGLE_STRIP_ADJACENCY: + return PIPE_PRIM_TRIANGLES; + case PIPE_PRIM_QUADS: + case PIPE_PRIM_QUAD_STRIP: + return PIPE_PRIM_QUADS; + default: + return prim_type; + } +} + +static inline unsigned +u_vertices_for_prims(enum pipe_prim_type prim_type, int count) +{ + if (count <= 0) + return 0; + + /* We can only figure out the number of vertices from a number of primitives + * if we are using basic primitives (so no loops, strips, fans, etc). + */ + assert(prim_type == u_base_prim_type(prim_type) && + prim_type != PIPE_PRIM_PATCHES && prim_type != PIPE_PRIM_POLYGON); + + const struct u_prim_vertex_count *info = u_prim_vertex_count(prim_type); + assert(info); + + return info->min + (count - 1) * info->incr; +} + const char *u_prim_name(enum pipe_prim_type pipe_prim); |