radeonsi/gfx9: select shader parts for non-monolithic ES-GS
authorMarek Olšák <marek.olsak@amd.com>
Wed, 19 Apr 2017 01:37:14 +0000 (03:37 +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_shader.c

index 21287ae3ed4f956edc7b8384bd7ead480eae3d56..18a3cf15251c8630777f153c62c5dbf7858d8bfc 100644 (file)
@@ -8636,20 +8636,31 @@ static bool si_shader_select_gs_parts(struct si_screen *sscreen,
                                      struct si_shader *shader,
                                      struct pipe_debug_callback *debug)
 {
-       union si_shader_part_key prolog_key;
+       if (sscreen->b.chip_class >= GFX9) {
+               struct si_shader *es_main_part =
+                       shader->key.part.gs.es->main_shader_part_es;
+
+               if (shader->key.part.gs.es->type == PIPE_SHADER_VERTEX &&
+                   !si_get_vs_prolog(sscreen, tm, shader, debug, es_main_part,
+                                     &shader->key.part.gs.vs_prolog))
+                       return false;
+
+               shader->previous_stage = es_main_part;
+       }
 
        if (!shader->key.part.gs.prolog.tri_strip_adj_fix)
                return true;
 
+       union si_shader_part_key prolog_key;
        memset(&prolog_key, 0, sizeof(prolog_key));
        prolog_key.gs_prolog.states = shader->key.part.gs.prolog;
 
-       shader->prolog = si_get_shader_part(sscreen, &sscreen->gs_prologs,
+       shader->prolog2 = si_get_shader_part(sscreen, &sscreen->gs_prologs,
                                            PIPE_SHADER_GEOMETRY, true,
                                            &prolog_key, tm, debug,
                                            si_build_gs_prolog_function,
                                            "Geometry Shader Prolog");
-       return shader->prolog != NULL;
+       return shader->prolog2 != NULL;
 }
 
 /**