[Mesa-dev] [PATCH 5/5] util/indices: implement unfilled (tri->line) conversion for adjacency prims
Roland Scheidegger
sroland at vmware.com
Thu May 26 15:37:04 UTC 2016
Am 26.05.2016 um 16:06 schrieb Brian Paul:
> Tested with new piglit gl-3.2-adj-prims test.
> ---
> src/gallium/auxiliary/indices/u_unfilled_gen.py | 26 ++++++++++++++++++++--
> src/gallium/auxiliary/indices/u_unfilled_indices.c | 14 ++++++++++++
> 2 files changed, 38 insertions(+), 2 deletions(-)
>
> diff --git a/src/gallium/auxiliary/indices/u_unfilled_gen.py b/src/gallium/auxiliary/indices/u_unfilled_gen.py
> index 873e781..18d9968 100644
> --- a/src/gallium/auxiliary/indices/u_unfilled_gen.py
> +++ b/src/gallium/auxiliary/indices/u_unfilled_gen.py
> @@ -35,14 +35,18 @@ PRIMS=('tris',
> 'tristrip',
> 'quads',
> 'quadstrip',
> - 'polygon')
> + 'polygon',
> + 'tristripadj',
> + 'trisadj')
Maybe switch the order of tristripadj and trisadj (and just below too)
for consistency? No big deal though.
For the series:
Reviewed-by: Roland Scheidegger <sroland at vmware.com>
>
> LONGPRIMS=('PIPE_PRIM_TRIANGLES',
> 'PIPE_PRIM_TRIANGLE_FAN',
> 'PIPE_PRIM_TRIANGLE_STRIP',
> 'PIPE_PRIM_QUADS',
> 'PIPE_PRIM_QUAD_STRIP',
> - 'PIPE_PRIM_POLYGON')
> + 'PIPE_PRIM_POLYGON',
> + 'PIPE_PRIM_TRIANGLE_STRIP_ADJACENCY',
> + 'PIPE_PRIM_TRIANGLES_ADJACENCY')
>
> longprim = dict(zip(PRIMS, LONGPRIMS))
> intype_idx = dict(ubyte='IN_UBYTE', ushort='IN_USHORT', uint='IN_UINT')
> @@ -194,6 +198,22 @@ def quadstrip(intype, outtype):
> postamble()
>
>
> +def trisadj(intype, outtype):
> + preamble(intype, outtype, prim='trisadj')
> + print ' for (i = start, j = 0; j < out_nr; j+=6, i+=6) { '
> + do_tri( intype, outtype, 'out+j', 'i', 'i+2', 'i+4' );
> + print ' }'
> + postamble()
> +
> +
> +def tristripadj(intype, outtype):
> + preamble(intype, outtype, prim='tristripadj')
> + print ' for (i = start, j = 0; j < out_nr; j+=6, i+=2) { '
> + do_tri( intype, outtype, 'out+j', 'i', 'i+2', 'i+4' );
> + print ' }'
> + postamble()
> +
> +
> def emit_funcs():
> for intype in INTYPES:
> for outtype in OUTTYPES:
> @@ -203,6 +223,8 @@ def emit_funcs():
> quads(intype, outtype)
> quadstrip(intype, outtype)
> polygon(intype, outtype)
> + trisadj(intype, outtype)
> + tristripadj(intype, outtype)
>
> def init(intype, outtype, prim):
> if intype == GENERATE:
> diff --git a/src/gallium/auxiliary/indices/u_unfilled_indices.c b/src/gallium/auxiliary/indices/u_unfilled_indices.c
> index 49fff6b..8cb5192 100644
> --- a/src/gallium/auxiliary/indices/u_unfilled_indices.c
> +++ b/src/gallium/auxiliary/indices/u_unfilled_indices.c
> @@ -22,6 +22,12 @@
> * USE OR OTHER DEALINGS IN THE SOFTWARE.
> */
>
> +
> +/*
> + * NOTE: This file is not compiled by itself. It's actually #included
> + * by the generated u_unfilled_gen.c file!
> + */
> +
> #include "u_indices.h"
> #include "u_indices_priv.h"
> #include "util/u_prim.h"
> @@ -104,6 +110,14 @@ nr_lines(unsigned prim, unsigned nr)
> return (nr - 2) / 2 * 8;
> case PIPE_PRIM_POLYGON:
> return 2 * nr; /* a line (two verts) for each polygon edge */
> + /* Note: these cases can't really be handled since drawing lines instead
> + * of triangles would also require changing the GS. But if there's no GS,
> + * this should work.
> + */
> + case PIPE_PRIM_TRIANGLES_ADJACENCY:
> + return (nr / 6) * 6;
> + case PIPE_PRIM_TRIANGLE_STRIP_ADJACENCY:
> + return ((nr - 4) / 2) * 6;
> default:
> assert(0);
> return 0;
>
More information about the mesa-dev
mailing list