summaryrefslogtreecommitdiffstats
path: root/src/gallium/auxiliary/tgsi/tgsi_build.c
diff options
context:
space:
mode:
authorZack Rusin <zackr@vmware.com>2010-06-18 09:39:16 -0400
committerZack Rusin <zackr@vmware.com>2010-06-18 13:46:44 -0400
commit2b221e11da7a8bf759e3c359f22ba6f49d5f0997 (patch)
tree30693516a8adaff9d347c5756ca2dadb57204bb7 /src/gallium/auxiliary/tgsi/tgsi_build.c
parentd7f4250333f3649d170d71bfdc5f2faba4e8c5f8 (diff)
downloadexternal_mesa3d-2b221e11da7a8bf759e3c359f22ba6f49d5f0997.zip
external_mesa3d-2b221e11da7a8bf759e3c359f22ba6f49d5f0997.tar.gz
external_mesa3d-2b221e11da7a8bf759e3c359f22ba6f49d5f0997.tar.bz2
gallium: add a new register file - immediate array
allows one to specify a safe (bound checked) array filled with immediates. it works just like a const array and declares much like our current immediates.
Diffstat (limited to 'src/gallium/auxiliary/tgsi/tgsi_build.c')
-rw-r--r--src/gallium/auxiliary/tgsi/tgsi_build.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/src/gallium/auxiliary/tgsi/tgsi_build.c b/src/gallium/auxiliary/tgsi/tgsi_build.c
index 0890078..89e020a 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_build.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_build.c
@@ -164,6 +164,7 @@ tgsi_default_full_declaration( void )
full_declaration.Declaration = tgsi_default_declaration();
full_declaration.Range = tgsi_default_declaration_range();
full_declaration.Semantic = tgsi_default_declaration_semantic();
+ full_declaration.ImmediateData.u = NULL;
return full_declaration;
}
@@ -180,7 +181,7 @@ tgsi_build_full_declaration(
struct tgsi_declaration_range *dr;
if( maxsize <= size )
- return 0;
+ return 0;
declaration = (struct tgsi_declaration *) &tokens[size];
size++;
@@ -235,6 +236,24 @@ tgsi_build_full_declaration(
header );
}
+ if (full_decl->Declaration.File == TGSI_FILE_IMMEDIATE_ARRAY) {
+ unsigned i, j;
+ union tgsi_immediate_data *data;
+
+ for (i = 0; i <= dr->Last; ++i) {
+ for (j = 0; j < 4; ++j) {
+ unsigned idx = i*4 + j;
+ if (maxsize <= size)
+ return 0;
+ data = (union tgsi_immediate_data *) &tokens[size];
+ ++size;
+
+ *data = full_decl->ImmediateData.u[idx];
+ declaration_grow( declaration, header );
+ }
+ }
+ }
+
return size;
}