From 81204d0e9cb52d05352df1b416e4e661701296e6 Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Mon, 12 Aug 2013 17:34:27 +1000 Subject: [PATCH] tgsi: finish declaration parsing for arrays. I previously fixed this partly in 9e8400f4c95bde1f955c7977066583b507159a10, however I didn't go far enough in testing it, now when I parse a TGSI shader with arrays in it my iterator can see the ArrayID set to the proper value. Reviewed-by: Brian Paul Signed-off-by: Dave Airlie --- src/gallium/auxiliary/tgsi/tgsi_build.c | 32 ++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/src/gallium/auxiliary/tgsi/tgsi_build.c b/src/gallium/auxiliary/tgsi/tgsi_build.c index 523430b3ca7..fa18462bed4 100644 --- a/src/gallium/auxiliary/tgsi/tgsi_build.c +++ b/src/gallium/auxiliary/tgsi/tgsi_build.c @@ -124,6 +124,7 @@ tgsi_build_declaration( unsigned semantic, unsigned invariant, unsigned local, + unsigned array, struct tgsi_header *header ) { struct tgsi_declaration declaration; @@ -139,7 +140,7 @@ tgsi_build_declaration( declaration.Semantic = semantic; declaration.Invariant = invariant; declaration.Local = local; - + declaration.Array = array; header_bodysize_grow( header ); return declaration; @@ -339,6 +340,21 @@ tgsi_default_declaration_array( void ) return a; } +static struct tgsi_declaration_array +tgsi_build_declaration_array(unsigned arrayid, + struct tgsi_declaration *declaration, + struct tgsi_header *header) +{ + struct tgsi_declaration_array da; + + da = tgsi_default_declaration_array(); + da.ArrayID = arrayid; + + declaration_grow(declaration, header); + + return da; +} + struct tgsi_full_declaration tgsi_default_full_declaration( void ) { @@ -379,6 +395,7 @@ tgsi_build_full_declaration( full_decl->Declaration.Semantic, full_decl->Declaration.Invariant, full_decl->Declaration.Local, + full_decl->Declaration.Array, header ); if (maxsize <= size) @@ -472,6 +489,19 @@ tgsi_build_full_declaration( header); } + if (full_decl->Declaration.Array) { + struct tgsi_declaration_array *da; + + if (maxsize <= size) { + return 0; + } + da = (struct tgsi_declaration_array *)&tokens[size]; + size++; + *da = tgsi_build_declaration_array( + full_decl->Array.ArrayID, + declaration, + header); + } return size; } -- 2.30.2