This allows up to skip certain linking tasks such as building the resource list when we are falling back to a full compile after a cache miss. --- src/mesa/drivers/dri/i965/brw_link.cpp | 3 ++- src/mesa/drivers/dri/i965/brw_shader.h | 4 +++- src/mesa/main/dd.h | 3 ++- src/mesa/program/ir_to_mesa.cpp | 5 +++-- src/mesa/program/ir_to_mesa.h | 4 +++- src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 3 ++- src/mesa/state_tracker/st_glsl_to_tgsi.h | 4 +++- 7 files changed, 18 insertions(+), 8 deletions(-)
diff --git a/src/mesa/drivers/dri/i965/brw_link.cpp b/src/mesa/drivers/dri/i965/brw_link.cpp index 7809b4c..97bee3b 100644 --- a/src/mesa/drivers/dri/i965/brw_link.cpp +++ b/src/mesa/drivers/dri/i965/brw_link.cpp @@ -186,7 +186,8 @@ process_glsl_ir(gl_shader_stage stage, } extern "C" GLboolean -brw_link_shader(struct gl_context *ctx, struct gl_shader_program *shProg) +brw_link_shader(struct gl_context *ctx, struct gl_shader_program *shProg, + bool is_cache_fallback) { struct brw_context *brw = brw_context(ctx); const struct brw_compiler *compiler = brw->intelScreen->compiler; diff --git a/src/mesa/drivers/dri/i965/brw_shader.h b/src/mesa/drivers/dri/i965/brw_shader.h index fc228f6..e7d062e 100644 --- a/src/mesa/drivers/dri/i965/brw_shader.h +++ b/src/mesa/drivers/dri/i965/brw_shader.h @@ -285,7 +285,9 @@ bool brw_cs_precompile(struct gl_context *ctx, struct gl_shader_program *shader_prog, struct gl_program *prog); -GLboolean brw_link_shader(struct gl_context *ctx, struct gl_shader_program *prog); +GLboolean +brw_link_shader(struct gl_context *ctx, struct gl_shader_program *prog, + bool is_cache_fallback); struct gl_shader *brw_new_shader(struct gl_context *ctx, GLuint name, GLuint type); int type_size_scalar(const struct glsl_type *type); diff --git a/src/mesa/main/dd.h b/src/mesa/main/dd.h index d62fee6..625f898 100644 --- a/src/mesa/main/dd.h +++ b/src/mesa/main/dd.h @@ -513,7 +513,8 @@ struct dd_function_table { * own transformations on it for the purposes of code generation. */ GLboolean (*LinkShader)(struct gl_context *ctx, - struct gl_shader_program *shader); + struct gl_shader_program *shader, + bool is_cache_fallback); /*@}*/ /** diff --git a/src/mesa/program/ir_to_mesa.cpp b/src/mesa/program/ir_to_mesa.cpp index 4f4cbaf..62d647f 100644 --- a/src/mesa/program/ir_to_mesa.cpp +++ b/src/mesa/program/ir_to_mesa.cpp @@ -2900,7 +2900,8 @@ extern "C" { * code lowering and other optimizations. */ GLboolean -_mesa_ir_link_shader(struct gl_context *ctx, struct gl_shader_program *prog) +_mesa_ir_link_shader(struct gl_context *ctx, struct gl_shader_program *prog, + bool is_cache_fallback) { assert(prog->LinkStatus); @@ -3015,7 +3016,7 @@ _mesa_glsl_link_shader(struct gl_context *ctx, struct gl_shader_program *prog, return; if (prog->LinkStatus) { - if (!ctx->Driver.LinkShader(ctx, prog)) { + if (!ctx->Driver.LinkShader(ctx, prog, skip_cache)) { prog->LinkStatus = GL_FALSE; } } diff --git a/src/mesa/program/ir_to_mesa.h b/src/mesa/program/ir_to_mesa.h index abc628a..6584bee 100644 --- a/src/mesa/program/ir_to_mesa.h +++ b/src/mesa/program/ir_to_mesa.h @@ -36,7 +36,9 @@ struct gl_shader_program; void _mesa_glsl_link_shader(struct gl_context *ctx, struct gl_shader_program *prog, bool skip_cache); -GLboolean _mesa_ir_link_shader(struct gl_context *ctx, struct gl_shader_program *prog); +GLboolean +_mesa_ir_link_shader(struct gl_context *ctx, struct gl_shader_program *prog, + bool is_cache_fallback); void _mesa_generate_parameters_list_for_uniforms(struct gl_shader_program diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp index ad818a8..cb71da6 100644 --- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp +++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp @@ -6738,7 +6738,8 @@ st_dump_program_for_shader_db(struct gl_context *ctx, * with code lowering and other optimizations. */ GLboolean -st_link_shader(struct gl_context *ctx, struct gl_shader_program *prog) +st_link_shader(struct gl_context *ctx, struct gl_shader_program *prog, + bool is_cache_fallback) { struct pipe_screen *pscreen = ctx->st->pipe->screen; assert(prog->LinkStatus); diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.h b/src/mesa/state_tracker/st_glsl_to_tgsi.h index 774588a..17ba6cf 100644 --- a/src/mesa/state_tracker/st_glsl_to_tgsi.h +++ b/src/mesa/state_tracker/st_glsl_to_tgsi.h @@ -56,7 +56,9 @@ enum pipe_error st_translate_program( void free_glsl_to_tgsi_visitor(struct glsl_to_tgsi_visitor *v); -GLboolean st_link_shader(struct gl_context *ctx, struct gl_shader_program *prog); +GLboolean +st_link_shader(struct gl_context *ctx, struct gl_shader_program *prog, + bool is_cache_fallback); void st_translate_stream_output_info(struct glsl_to_tgsi_visitor *glsl_to_tgsi, -- 2.5.5 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev