[Mesa-dev] [PATCH 5/5] util/indices: implement unfilled (tri->line) conversion for adjacency prims
Brian Paul
brianp at vmware.com
Thu May 26 14:06:14 UTC 2016
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')
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;
--
1.9.1
More information about the mesa-dev
mailing list