[Mesa-dev] [PATCH 1/4] tgsi: Add support to ureg for TGSI_FILE_TEMPORARAY_ARRAY

Tom Stellard tom at stellard.net
Mon Nov 5 12:14:26 PST 2012


From: Tom Stellard <thomas.stellard at amd.com>

---
 src/gallium/auxiliary/tgsi/tgsi_ureg.c | 12 ++++++++++++
 src/gallium/auxiliary/tgsi/tgsi_ureg.h |  3 +++
 2 files changed, 15 insertions(+)

diff --git a/src/gallium/auxiliary/tgsi/tgsi_ureg.c b/src/gallium/auxiliary/tgsi/tgsi_ureg.c
index 3c2a923..154f4f5 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_ureg.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_ureg.c
@@ -154,6 +154,7 @@ struct ureg_program
    struct util_bitmask *free_temps;
    struct util_bitmask *local_temps;
    unsigned nr_temps;
+   unsigned nr_array_temps;
 
    struct const_decl const_decls;
    struct const_decl const_decls2D[PIPE_MAX_CONSTANT_BUFFERS];
@@ -568,6 +569,13 @@ struct ureg_dst ureg_DECL_local_temporary( struct ureg_program *ureg )
    return alloc_temporary(ureg, TRUE);
 }
 
+struct ureg_dst ureg_DECL_temporary_array( struct ureg_program *ureg,
+                                           unsigned index)
+{
+   ureg->nr_array_temps = MAX2(index + 1, ureg->nr_array_temps);
+   return ureg_dst_register( TGSI_FILE_TEMPORARY_ARRAY, index );
+}
+
 void ureg_release_temporary( struct ureg_program *ureg,
                              struct ureg_dst tmp )
 {
@@ -1548,6 +1556,10 @@ static void emit_decls( struct ureg_program *ureg )
       }
    }
 
+   for (i = 0; i < ureg->nr_array_temps; i++) {
+            emit_decl( ureg, TGSI_FILE_TEMPORARY_ARRAY, i, false);
+   }
+
    if (ureg->nr_addrs) {
       emit_decl_range( ureg,
                        TGSI_FILE_ADDRESS,
diff --git a/src/gallium/auxiliary/tgsi/tgsi_ureg.h b/src/gallium/auxiliary/tgsi/tgsi_ureg.h
index e6131f2..b54c369 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_ureg.h
+++ b/src/gallium/auxiliary/tgsi/tgsi_ureg.h
@@ -280,6 +280,9 @@ ureg_DECL_temporary( struct ureg_program * );
 struct ureg_dst
 ureg_DECL_local_temporary( struct ureg_program * );
 
+struct ureg_dst
+ureg_DECL_temporary_array( struct ureg_program *, unsigned );
+
 void 
 ureg_release_temporary( struct ureg_program *ureg,
                         struct ureg_dst tmp );
-- 
1.7.11.4



More information about the mesa-dev mailing list