indices: fix provoking vertex for quads/quadstrips
authorIlia Mirkin <imirkin@alum.mit.edu>
Tue, 7 Apr 2015 05:42:05 +0000 (01:42 -0400)
committerIlia Mirkin <imirkin@alum.mit.edu>
Sat, 18 Apr 2015 22:27:22 +0000 (18:27 -0400)
This allows drivers to provide consistent flat shading for quads.
Otherwise a driver that only supported tris would have to force last
provoking vertex when drawing quads (and would have to say that quads
don't follow the provoking vertex convention).

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Rob Clark <robclark@freedesktop.org>
src/gallium/auxiliary/indices/u_indices_gen.py

index 687a717db9a43a8add8c5f31934bcb6b668df5b4..97c8e0d946909b893a9958d65a3bd03eb1052b64 100644 (file)
@@ -142,8 +142,12 @@ def do_tri( intype, outtype, ptr, v0, v1, v2, inpv, outpv ):
             tri( intype, outtype, ptr, v2, v0, v1 )
 
 def do_quad( intype, outtype, ptr, v0, v1, v2, v3, inpv, outpv ):
-    do_tri( intype, outtype, ptr+'+0',  v0, v1, v3, inpv, outpv );
-    do_tri( intype, outtype, ptr+'+3',  v1, v2, v3, inpv, outpv );
+    if inpv == LAST:
+        do_tri( intype, outtype, ptr+'+0',  v0, v1, v3, inpv, outpv );
+        do_tri( intype, outtype, ptr+'+3',  v1, v2, v3, inpv, outpv );
+    else:
+        do_tri( intype, outtype, ptr+'+0',  v0, v1, v2, inpv, outpv );
+        do_tri( intype, outtype, ptr+'+3',  v0, v2, v3, inpv, outpv );
 
 def name(intype, outtype, inpv, outpv, pr, prim):
     if intype == GENERATE:
@@ -331,7 +335,10 @@ def quadstrip(intype, outtype, inpv, outpv, pr):
         print '         i += 4;'
         print '         goto restart;'
         print '      }'
-    do_quad( intype, outtype, 'out+j', 'i+2', 'i+0', 'i+1', 'i+3', inpv, outpv );
+    if inpv == LAST:
+        do_quad( intype, outtype, 'out+j', 'i+2', 'i+0', 'i+1', 'i+3', inpv, outpv );
+    else:
+        do_quad( intype, outtype, 'out+j', 'i+0', 'i+1', 'i+3', 'i+2', inpv, outpv );
     print '   }'
     postamble()