From: Timothy Arceri <timothy.arc...@collabora.com>

We already have the struct and paramlist we don't want to recreate
them as this is unnecessary and would mean we would need to remap
anything using the old paramlist to the addresses of the new one.
---
 src/compiler/glsl/linker.cpp           | 13 +++++++++----
 src/mesa/drivers/dri/i965/brw_link.cpp | 25 +++++++++++++------------
 src/mesa/main/mtypes.h                 |  2 ++
 3 files changed, 24 insertions(+), 16 deletions(-)

diff --git a/src/compiler/glsl/linker.cpp b/src/compiler/glsl/linker.cpp
index 9af7d8033a..306051f1f0 100644
--- a/src/compiler/glsl/linker.cpp
+++ b/src/compiler/glsl/linker.cpp
@@ -2260,10 +2260,15 @@ link_intrastage_shaders(void *mem_ctx,
    linked->Stage = shader_list[0]->Stage;
 
    /* Create program and attach it to the linked shader */
-   struct gl_program *gl_prog =
-      ctx->Driver.NewProgram(ctx,
-                             
_mesa_shader_stage_to_program(shader_list[0]->Stage),
-                             prog->Name, false);
+   struct gl_program *gl_prog;
+   if (!prog->data->cache_fallback) {
+      gl_prog = ctx->Driver.NewProgram(ctx,
+         _mesa_shader_stage_to_program(shader_list[0]->Stage), prog->Name,
+         false);
+   } else {
+      gl_prog = prog->cache_progs[shader_list[0]->Stage];
+   }
+
    if (!gl_prog) {
       prog->data->LinkStatus = linking_failure;
       _mesa_delete_linked_shader(ctx, linked);
diff --git a/src/mesa/drivers/dri/i965/brw_link.cpp 
b/src/mesa/drivers/dri/i965/brw_link.cpp
index f14b87fd56..8f46728e74 100644
--- a/src/mesa/drivers/dri/i965/brw_link.cpp
+++ b/src/mesa/drivers/dri/i965/brw_link.cpp
@@ -229,23 +229,24 @@ brw_link_shader(struct gl_context *ctx, struct 
gl_shader_program *shProg)
 
       if (!shProg->data->cache_fallback) {
          prog->Parameters = _mesa_new_parameter_list();
-      }
 
-      _mesa_copy_linked_program_data(shProg, shader);
+         _mesa_copy_linked_program_data(shProg, shader);
 
-      prog->ShadowSamplers = shader->shadow_samplers;
-      _mesa_update_shader_textures_used(shProg, prog);
+         prog->ShadowSamplers = shader->shadow_samplers;
+         _mesa_update_shader_textures_used(shProg, prog);
 
-      update_xfb_info(prog->sh.LinkedTransformFeedback);
+         update_xfb_info(prog->sh.LinkedTransformFeedback);
 
-      bool debug_enabled =
-         (INTEL_DEBUG & intel_debug_flag_for_shader_stage(shader->Stage));
+         bool debug_enabled =
+            (INTEL_DEBUG & intel_debug_flag_for_shader_stage(shader->Stage));
 
-      if (debug_enabled && shader->ir) {
-         fprintf(stderr, "GLSL IR for native %s shader %d:\n",
-                 _mesa_shader_stage_to_string(shader->Stage), shProg->Name);
-         _mesa_print_ir(stderr, shader->ir, NULL);
-         fprintf(stderr, "\n\n");
+         if (debug_enabled && shader->ir) {
+            fprintf(stderr, "GLSL IR for native %s shader %d:\n",
+                    _mesa_shader_stage_to_string(shader->Stage),
+                    shProg->Name);
+            _mesa_print_ir(stderr, shader->ir, NULL);
+            fprintf(stderr, "\n\n");
+         }
       }
 
       prog->nir = brw_create_nir(brw, shProg, prog, (gl_shader_stage) stage,
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index cb69d39d98..5e227e3dfb 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -3038,6 +3038,8 @@ struct gl_shader_program
     * #extension ARB_fragment_coord_conventions: enable
     */
    GLboolean ARB_fragment_coord_conventions_enable;
+
+   struct gl_program *cache_progs[MESA_SHADER_STAGES];
 };   
 
 
-- 
2.14.0

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

Reply via email to