[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