From: Marek Olšák <marek.ol...@amd.com>

---
 src/gallium/drivers/radeonsi/si_shader.c | 17 ++++++++++++++---
 1 file changed, 14 insertions(+), 3 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_shader.c 
b/src/gallium/drivers/radeonsi/si_shader.c
index 392f85d..aa19e16 100644
--- a/src/gallium/drivers/radeonsi/si_shader.c
+++ b/src/gallium/drivers/radeonsi/si_shader.c
@@ -8765,34 +8765,45 @@ static bool si_shader_select_tcs_parts(struct si_screen 
*sscreen,
 }
 
 /**
  * Select and compile (or reuse) GS parts (prolog).
  */
 static bool si_shader_select_gs_parts(struct si_screen *sscreen,
                                      LLVMTargetMachineRef tm,
                                      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;
 }
 
 /**
  * Build the pixel shader prolog function. This handles:
  * - two-side color selection and interpolation
  * - overriding interpolation parameters for the API PS
  * - polygon stippling
  *
  * All preloaded SGPRs and VGPRs are passed through unmodified unless they are
  * overriden by other states. (e.g. per-sample interpolation)
-- 
2.7.4

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to