Mesa (master): vc4: Move FS inputs setup out to a helper function.

Eric Anholt anholt at kemper.freedesktop.org
Thu Aug 4 16:10:46 UTC 2016


Module: Mesa
Branch: master
Commit: d577dbc201a530cedac2f39f0a34b2d8d62f5f48
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=d577dbc201a530cedac2f39f0a34b2d8d62f5f48

Author: Eric Anholt <eric at anholt.net>
Date:   Wed Aug  3 11:39:59 2016 -0700

vc4: Move FS inputs setup out to a helper function.

It's a pretty big block, and I was about to make it bigger.

---

 src/gallium/drivers/vc4/vc4_program.c | 75 +++++++++++++++++++----------------
 1 file changed, 41 insertions(+), 34 deletions(-)

diff --git a/src/gallium/drivers/vc4/vc4_program.c b/src/gallium/drivers/vc4/vc4_program.c
index 28b3981..b85396d 100644
--- a/src/gallium/drivers/vc4/vc4_program.c
+++ b/src/gallium/drivers/vc4/vc4_program.c
@@ -2203,6 +2203,46 @@ copy_uniform_state_to_shader(struct vc4_compiled_shader *shader,
         vc4_set_shader_uniform_dirty_flags(shader);
 }
 
+static void
+vc4_setup_compiled_fs_inputs(struct vc4_context *vc4, struct vc4_compile *c,
+                             struct vc4_compiled_shader *shader)
+{
+        bool input_live[c->num_input_slots];
+
+        memset(input_live, 0, sizeof(input_live));
+        qir_for_each_inst_inorder(inst, c) {
+                for (int i = 0; i < qir_get_op_nsrc(inst->op); i++) {
+                        if (inst->src[i].file == QFILE_VARY)
+                                input_live[inst->src[i].index] = true;
+                }
+        }
+
+        shader->input_slots = ralloc_array(shader,
+                                           struct vc4_varying_slot,
+                                           c->num_input_slots);
+
+        for (int i = 0; i < c->num_input_slots; i++) {
+                struct vc4_varying_slot *slot = &c->input_slots[i];
+
+                if (!input_live[i])
+                        continue;
+
+                /* Skip non-VS-output inputs. */
+                if (slot->slot == (uint8_t)~0)
+                        continue;
+
+                if (slot->slot == VARYING_SLOT_COL0 ||
+                    slot->slot == VARYING_SLOT_COL1 ||
+                    slot->slot == VARYING_SLOT_BFC0 ||
+                    slot->slot == VARYING_SLOT_BFC1) {
+                        shader->color_inputs |= (1 << shader->num_inputs);
+                }
+
+                shader->input_slots[shader->num_inputs] = *slot;
+                shader->num_inputs++;
+        }
+}
+
 static struct vc4_compiled_shader *
 vc4_get_compiled_shader(struct vc4_context *vc4, enum qstage stage,
                         struct vc4_key *key)
@@ -2227,40 +2267,7 @@ vc4_get_compiled_shader(struct vc4_context *vc4, enum qstage stage,
 
         shader->program_id = vc4->next_compiled_program_id++;
         if (stage == QSTAGE_FRAG) {
-                bool input_live[c->num_input_slots];
-
-                memset(input_live, 0, sizeof(input_live));
-                qir_for_each_inst_inorder(inst, c) {
-                        for (int i = 0; i < qir_get_op_nsrc(inst->op); i++) {
-                                if (inst->src[i].file == QFILE_VARY)
-                                        input_live[inst->src[i].index] = true;
-                        }
-                }
-
-                shader->input_slots = ralloc_array(shader,
-                                                   struct vc4_varying_slot,
-                                                   c->num_input_slots);
-
-                for (int i = 0; i < c->num_input_slots; i++) {
-                        struct vc4_varying_slot *slot = &c->input_slots[i];
-
-                        if (!input_live[i])
-                                continue;
-
-                        /* Skip non-VS-output inputs. */
-                        if (slot->slot == (uint8_t)~0)
-                                continue;
-
-                        if (slot->slot == VARYING_SLOT_COL0 ||
-                            slot->slot == VARYING_SLOT_COL1 ||
-                            slot->slot == VARYING_SLOT_BFC0 ||
-                            slot->slot == VARYING_SLOT_BFC1) {
-                                shader->color_inputs |= (1 << shader->num_inputs);
-                        }
-
-                        shader->input_slots[shader->num_inputs] = *slot;
-                        shader->num_inputs++;
-                }
+                vc4_setup_compiled_fs_inputs(vc4, c, shader);
 
                 /* Note: the temporary clone in c->s has been freed. */
                 nir_shader *orig_shader = key->shader_state->base.ir.nir;




More information about the mesa-commit mailing list