vc4: Move the output semantics setup to a helper.
authorEric Anholt <eric@anholt.net>
Wed, 15 Oct 2014 15:39:54 +0000 (16:39 +0100)
committerEric Anholt <eric@anholt.net>
Wed, 15 Oct 2014 17:11:46 +0000 (18:11 +0100)
I want to reuse it elsewhere to set up outputs that aren't in the TGSI.

src/gallium/drivers/vc4/vc4_program.c

index c6034257e422d7991fc9b1dfab96b2e7024e75db..a79e354fd81f9878eda5e2e63e8d4358e5492498 100644 (file)
@@ -1020,6 +1020,29 @@ emit_face_input(struct vc4_compile *c, int attr)
         c->inputs[attr * 4 + 3] = qir_uniform_f(c, 1.0);
 }
 
+static void
+add_output(struct vc4_compile *c,
+           uint32_t decl_offset,
+           uint8_t semantic_name,
+           uint8_t semantic_index,
+           uint8_t semantic_swizzle)
+{
+        uint32_t old_array_size = c->outputs_array_size;
+        resize_qreg_array(c, &c->outputs, &c->outputs_array_size,
+                          decl_offset + 1);
+
+        if (old_array_size != c->outputs_array_size) {
+                c->output_semantics = reralloc(c,
+                                               c->output_semantics,
+                                               struct vc4_varying_semantic,
+                                               c->outputs_array_size);
+        }
+
+        c->output_semantics[decl_offset].semantic = semantic_name;
+        c->output_semantics[decl_offset].index = semantic_index;
+        c->output_semantics[decl_offset].swizzle = semantic_swizzle;
+}
+
 static void
 emit_tgsi_declaration(struct vc4_compile *c,
                       struct tgsi_full_declaration *decl)
@@ -1062,23 +1085,12 @@ emit_tgsi_declaration(struct vc4_compile *c,
                 break;
 
         case TGSI_FILE_OUTPUT: {
-                uint32_t old_array_size = c->outputs_array_size;
-                resize_qreg_array(c, &c->outputs, &c->outputs_array_size,
-                                  (decl->Range.Last + 1) * 4);
-
-                if (old_array_size != c->outputs_array_size) {
-                        c->output_semantics = reralloc(c,
-                                                       c->output_semantics,
-                                                       struct vc4_varying_semantic,
-                                                       c->outputs_array_size);
-                }
-
-                struct vc4_varying_semantic *sem =
-                        &c->output_semantics[decl->Range.First * 4];
                 for (int i = 0; i < 4; i++) {
-                        sem[i].semantic = decl->Semantic.Name;
-                        sem[i].index = decl->Semantic.Index;
-                        sem[i].swizzle = i;
+                        add_output(c,
+                                   decl->Range.First * 4 + i,
+                                   decl->Semantic.Name,
+                                   decl->Semantic.Index,
+                                   i);
                 }
 
                 switch (decl->Semantic.Name) {