[Mesa-dev] [PATCH] tgsi: finish declaration parsing for arrays.

Dave Airlie airlied at gmail.com
Mon Aug 12 00:38:19 PDT 2013


From: Dave Airlie <airlied at redhat.com>

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.

Signed-off-by: Dave Airlie <airlied at redhat.com>
---
 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 523430b..fa18462 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;
 }
 
-- 
1.8.3.1



More information about the mesa-dev mailing list