From: Tom Stellard <thomas.stell...@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 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev