[Mesa-dev] [PATCH 21/21] anv/pipeline: Do cross-stage linking optimizations

Jason Ekstrand jason at jlekstrand.net
Sat Oct 28 18:36:29 UTC 2017


This appears to help the Aztec Ruins benchmark by about 2% on my Kaby
Lake gt2 laptop.
---
 src/intel/vulkan/anv_pipeline.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/src/intel/vulkan/anv_pipeline.c b/src/intel/vulkan/anv_pipeline.c
index b9b08f2..5f66c3a 100644
--- a/src/intel/vulkan/anv_pipeline.c
+++ b/src/intel/vulkan/anv_pipeline.c
@@ -547,6 +547,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 *
@@ -612,6 +615,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_tes_patch_vertices(tes_stage->nir,
                                 tcs_stage->nir->info.tess.tcs_vertices_out);
 
@@ -654,6 +659,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 *
@@ -674,6 +682,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 *
-- 
2.5.0.400.gff86faf



More information about the mesa-dev mailing list