radeonsi: get tgsi_shader_info only once before compilation
[mesa.git] / src / gallium / auxiliary / indices / u_indices_gen.py
index 397eea306b21c2abeb9246f3e3b52c916af995b6..2714df87cfbad2a899a3753e3c16dae73b35cba5 100644 (file)
@@ -72,7 +72,7 @@ def prolog():
 #include "indices/u_indices.h"
 #include "indices/u_indices_priv.h"
 #include "pipe/p_compiler.h"
-#include "pipe/p_debug.h"
+#include "util/u_debug.h"
 #include "pipe/p_defines.h"
 #include "util/u_memory.h"
 
@@ -139,6 +139,9 @@ def do_tri( intype, outtype, ptr, v0, v1, v2, inpv, outpv ):
         else:
             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 );
 
 def name(intype, outtype, inpv, outpv, prim):
     if intype == GENERATE:
@@ -150,11 +153,12 @@ def preamble(intype, outtype, inpv, outpv, prim):
     print 'static void ' + name( intype, outtype, inpv, outpv, prim ) + '('
     if intype != GENERATE:
         print '    const void * _in,'
+    print '    unsigned start,'
     print '    unsigned nr,'
     print '    void *_out )'
     print '{'
     if intype != GENERATE:
-        print '  const ' + intype + '*in = (const ' + intype + '*)in;'
+        print '  const ' + intype + '*in = (const ' + intype + '*)_in;'
     print '  ' + outtype + ' *out = (' + outtype + '*)_out;'
     print '  unsigned i, j;'
     print '  (void)j;'
@@ -165,28 +169,28 @@ def postamble():
 
 def points(intype, outtype, inpv, outpv):
     preamble(intype, outtype, inpv, outpv, prim='points')
-    print '  for (i = 0; i < nr; i++) { '
+    print '  for (i = start; i < (nr+start); i++) { '
     do_point( intype, outtype, 'out+i',  'i' );
     print '   }'
     postamble()
 
 def lines(intype, outtype, inpv, outpv):
     preamble(intype, outtype, inpv, outpv, prim='lines')
-    print '  for (i = 0; i < nr; i+=2) { '
+    print '  for (i = start; i < (nr+start); i+=2) { '
     do_line( intype, outtype, 'out+i',  'i', 'i+1', inpv, outpv );
     print '   }'
     postamble()
 
 def linestrip(intype, outtype, inpv, outpv):
     preamble(intype, outtype, inpv, outpv, prim='linestrip')
-    print '  for (j = i = 0; j < nr; j+=2, i++) { '
+    print '  for (i = start, j = 0; j < nr; j+=2, i++) { '
     do_line( intype, outtype, 'out+j',  'i', 'i+1', inpv, outpv );
     print '   }'
     postamble()
 
 def lineloop(intype, outtype, inpv, outpv):
     preamble(intype, outtype, inpv, outpv, prim='lineloop')
-    print '  for (j = i = 0; j < nr - 2; j+=2, i++) { '
+    print '  for (i = start, j = 0; j < nr - 2; j+=2, i++) { '
     do_line( intype, outtype, 'out+j',  'i', 'i+1', inpv, outpv );
     print '   }'
     do_line( intype, outtype, 'out+j',  'i', '0', inpv, outpv );
@@ -194,7 +198,7 @@ def lineloop(intype, outtype, inpv, outpv):
 
 def tris(intype, outtype, inpv, outpv):
     preamble(intype, outtype, inpv, outpv, prim='tris')
-    print '  for (i = 0; i < nr; i+=3) { '
+    print '  for (i = start; i < (nr+start); i+=3) { '
     do_tri( intype, outtype, 'out+i',  'i', 'i+1', 'i+2', inpv, outpv );
     print '   }'
     postamble()
@@ -202,7 +206,7 @@ def tris(intype, outtype, inpv, outpv):
 
 def tristrip(intype, outtype, inpv, outpv):
     preamble(intype, outtype, inpv, outpv, prim='tristrip')
-    print '  for (j = i = 0; j < nr; j+=3, i++) { '
+    print '  for (i = start, j = 0; j < nr; j+=3, i++) { '
     if inpv == FIRST:
         do_tri( intype, outtype, 'out+j',  'i', 'i+1+(i&1)', 'i+2-(i&1)', inpv, outpv );
     else:
@@ -213,7 +217,7 @@ def tristrip(intype, outtype, inpv, outpv):
 
 def trifan(intype, outtype, inpv, outpv):
     preamble(intype, outtype, inpv, outpv, prim='trifan')
-    print '  for (j = i = 0; j < nr; j+=3, i++) { '
+    print '  for (i = start, j = 0; j < nr; j+=3, i++) { '
     do_tri( intype, outtype, 'out+j',  '0', 'i+1', 'i+2', inpv, outpv );
     print '   }'
     postamble()
@@ -222,7 +226,7 @@ def trifan(intype, outtype, inpv, outpv):
 
 def polygon(intype, outtype, inpv, outpv):
     preamble(intype, outtype, inpv, outpv, prim='polygon')
-    print '  for (j = i = 0; j < nr; j+=3, i++) { '
+    print '  for (i = start, j = 0; j < nr; j+=3, i++) { '
     if inpv == FIRST:
         do_tri( intype, outtype, 'out+j',  '0', 'i+1', 'i+2', inpv, outpv );
     else:
@@ -233,18 +237,16 @@ def polygon(intype, outtype, inpv, outpv):
 
 def quads(intype, outtype, inpv, outpv):
     preamble(intype, outtype, inpv, outpv, prim='quads')
-    print '  for (j = i = 0; j < nr; j+=6, i+=4) { '
-    do_tri( intype, outtype, 'out+j+0',  'i+0', 'i+1', 'i+3', inpv, outpv );
-    do_tri( intype, outtype, 'out+j+3',  'i+1', 'i+2', 'i+3', inpv, outpv );
+    print '  for (i = start, j = 0; j < nr; j+=6, i+=4) { '
+    do_quad( intype, outtype, 'out+j', 'i+0', 'i+1', 'i+2', 'i+3', inpv, outpv );
     print '   }'
     postamble()
 
 
 def quadstrip(intype, outtype, inpv, outpv):
     preamble(intype, outtype, inpv, outpv, prim='quadstrip')
-    print '  for (j = i = 0; j < nr; j+=6, i+=2) { '
-    do_tri( intype, outtype, 'out+j+0',  'i+0', 'i+1', 'i+3', inpv, outpv );
-    do_tri( intype, outtype, 'out+j+3',  'i+1', 'i+2', 'i+3', inpv, outpv );
+    print '  for (i = start, j = 0; j < nr; j+=6, i+=2) { '
+    do_quad( intype, outtype, 'out+j', 'i+2', 'i+0', 'i+1', 'i+3', inpv, outpv );
     print '   }'
     postamble()