radeonsi: separate out VS prolog key generation
authorMarek Olšák <marek.olsak@amd.com>
Thu, 6 Apr 2017 20:55:06 +0000 (22:55 +0200)
committerMarek Olšák <marek.olsak@amd.com>
Fri, 28 Apr 2017 19:47:35 +0000 (21:47 +0200)
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
src/gallium/drivers/radeonsi/si_state_shaders.c

index 06ea99c05c3afad7574b545a103cafc7f2a476f2..0be8252af5f35473b3926b9afbb3aac75009826d 100644 (file)
@@ -965,6 +965,24 @@ static unsigned si_get_alpha_test_func(struct si_context *sctx)
        return PIPE_FUNC_ALWAYS;
 }
 
+static void si_shader_selector_key_vs(struct si_context *sctx,
+                                     struct si_shader_selector *vs,
+                                     struct si_shader_key *key,
+                                     struct si_vs_prolog_bits *prolog_key)
+{
+       if (!sctx->vertex_elements)
+               return;
+
+       unsigned count = MIN2(vs->info.num_inputs,
+                             sctx->vertex_elements->count);
+       for (unsigned i = 0; i < count; ++i) {
+               prolog_key->instance_divisors[i] =
+                       sctx->vertex_elements->elements[i].instance_divisor;
+       }
+
+       memcpy(key->mono.vs_fix_fetch, sctx->vertex_elements->fix_fetch, count);
+}
+
 static void si_shader_selector_key_hw_vs(struct si_context *sctx,
                                         struct si_shader_selector *vs,
                                         struct si_shader_key *key)
@@ -1023,22 +1041,13 @@ static inline void si_shader_selector_key(struct pipe_context *ctx,
                                          struct si_shader_key *key)
 {
        struct si_context *sctx = (struct si_context *)ctx;
-       unsigned i;
 
        memset(key, 0, sizeof(*key));
 
        switch (sel->type) {
        case PIPE_SHADER_VERTEX:
-               if (sctx->vertex_elements) {
-                       unsigned count = MIN2(sel->info.num_inputs,
-                                             sctx->vertex_elements->count);
-                       for (i = 0; i < count; ++i)
-                               key->part.vs.prolog.instance_divisors[i] =
-                                       sctx->vertex_elements->elements[i].instance_divisor;
-
-                       memcpy(key->mono.vs_fix_fetch,
-                              sctx->vertex_elements->fix_fetch, count);
-               }
+               si_shader_selector_key_vs(sctx, sel, key, &key->part.vs.prolog);
+
                if (sctx->tes_shader.cso)
                        key->as_ls = 1;
                else if (sctx->gs_shader.cso)