anv/pipeline: Do cross-stage linking optimizations
authorJason Ekstrand <jason.ekstrand@intel.com>
Sat, 28 Oct 2017 00:07:52 +0000 (17:07 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Thu, 2 Aug 2018 17:29:20 +0000 (10:29 -0700)
This appears to help the Aztec Ruins benchmark by about 2% on my Kaby
Lake gt2 laptop.

Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
src/intel/vulkan/anv_pipeline.c

index 6095c1fb068747987195dac0ce7159c0d13642fe..85f38da60ff05b3978f5a37ba92b19899ede508f 100644 (file)
@@ -559,6 +559,9 @@ anv_pipeline_link_vs(const struct brw_compiler *compiler,
                      struct anv_pipeline_stage *next_stage)
 {
    anv_fill_binding_table(&vs_stage->prog_data.vs.base.base, 0);
+
+   if (next_stage)
+      brw_nir_link_shaders(compiler, &vs_stage->nir, &next_stage->nir);
 }
 
 static const unsigned *
@@ -623,6 +626,8 @@ anv_pipeline_link_tcs(const struct brw_compiler *compiler,
 
    anv_fill_binding_table(&tcs_stage->prog_data.tcs.base.base, 0);
 
+   brw_nir_link_shaders(compiler, &tcs_stage->nir, &tes_stage->nir);
+
    nir_lower_patch_vertices(tes_stage->nir,
                             tcs_stage->nir->info.tess.tcs_vertices_out,
                             NULL);
@@ -671,6 +676,9 @@ anv_pipeline_link_tes(const struct brw_compiler *compiler,
                       struct anv_pipeline_stage *next_stage)
 {
    anv_fill_binding_table(&tes_stage->prog_data.tes.base.base, 0);
+
+   if (next_stage)
+      brw_nir_link_shaders(compiler, &tes_stage->nir, &next_stage->nir);
 }
 
 static const unsigned *
@@ -691,6 +699,9 @@ anv_pipeline_link_gs(const struct brw_compiler *compiler,
                      struct anv_pipeline_stage *next_stage)
 {
    anv_fill_binding_table(&gs_stage->prog_data.gs.base.base, 0);
+
+   if (next_stage)
+      brw_nir_link_shaders(compiler, &gs_stage->nir, &next_stage->nir);
 }
 
 static const unsigned *