On Mon, Feb 6, 2017 at 7:42 PM, Timothy Arceri <tarc...@itsqueeze.com> wrote: > For the on-disk shader cache we want to be able to differentiate > between a program that was linked and one that was loaded from cache. > --- > src/compiler/glsl/linker.cpp | 6 +++--- > src/compiler/glsl/standalone.cpp | 2 +- > src/mesa/drivers/dri/i965/brw_cs.c | 4 ++-- > src/mesa/drivers/dri/i965/brw_tcs.c | 2 +- > src/mesa/drivers/dri/i965/brw_tes.c | 2 +- > src/mesa/drivers/dri/i965/brw_vs.c | 2 +- > src/mesa/drivers/dri/i965/brw_wm.c | 2 +- > src/mesa/main/mtypes.h | 13 ++++++++++++- > src/mesa/main/program_resource.c | 2 +- > src/mesa/main/shaderapi.c | 8 ++++---- > src/mesa/main/uniforms.c | 2 +- > src/mesa/program/ir_to_mesa.cpp | 4 ++-- > src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 2 +- > 13 files changed, 31 insertions(+), 20 deletions(-) > > diff --git a/src/compiler/glsl/linker.cpp b/src/compiler/glsl/linker.cpp > index b768a6e..720c22b 100644 > --- a/src/compiler/glsl/linker.cpp > +++ b/src/compiler/glsl/linker.cpp > @@ -421,7 +421,7 @@ linker_error(gl_shader_program *prog, const char *fmt, > ...) > ralloc_vasprintf_append(&prog->data->InfoLog, fmt, ap); > va_end(ap); > > - prog->data->LinkStatus = false; > + prog->data->LinkStatus = linking_failure; > } > > > @@ -2190,7 +2190,7 @@ link_intrastage_shaders(void *mem_ctx, > > _mesa_shader_stage_to_program(shader_list[0]->Stage), > prog->Name, false); > if (!gl_prog) { > - prog->data->LinkStatus = false; > + prog->data->LinkStatus = linking_failure; > _mesa_delete_linked_shader(ctx, linked); > return NULL; > } > @@ -4629,7 +4629,7 @@ linker_optimisation_loop(struct gl_context *ctx, > exec_list *ir, > void > link_shaders(struct gl_context *ctx, struct gl_shader_program *prog) > { > - prog->data->LinkStatus = true; /* All error paths will set this to false > */ > + prog->data->LinkStatus = linking_success; /* All error paths will set > this to false */ > prog->data->Validated = false; > > /* Section 7.3 (Program Objects) of the OpenGL 4.5 Core Profile spec says: > diff --git a/src/compiler/glsl/standalone.cpp > b/src/compiler/glsl/standalone.cpp > index 44f2c0f..7a2d3d2 100644 > --- a/src/compiler/glsl/standalone.cpp > +++ b/src/compiler/glsl/standalone.cpp > @@ -509,7 +509,7 @@ standalone_compile_shader(const struct standalone_options > *_options, > } else { > const gl_shader_stage stage = whole_program->Shaders[0]->Stage; > > - whole_program->data->LinkStatus = GL_TRUE; > + whole_program->data->LinkStatus = linking_success; > whole_program->_LinkedShaders[stage] = > link_intrastage_shaders(whole_program /* mem_ctx */, > ctx, > diff --git a/src/mesa/drivers/dri/i965/brw_cs.c > b/src/mesa/drivers/dri/i965/brw_cs.c > index 0f8d4eb..16b7945 100644 > --- a/src/mesa/drivers/dri/i965/brw_cs.c > +++ b/src/mesa/drivers/dri/i965/brw_cs.c > @@ -66,7 +66,7 @@ brw_codegen_cs_prog(struct brw_context *brw, > memset(&prog_data, 0, sizeof(prog_data)); > > if (cp->program.info.cs.shared_size > 64 * 1024) { > - cp->program.sh.data->LinkStatus = false; > + cp->program.sh.data->LinkStatus = linking_failure; > const char *error_str = > "Compute shader used more than 64KB of shared variables"; > ralloc_strcat(&cp->program.sh.data->InfoLog, error_str); > @@ -119,7 +119,7 @@ brw_codegen_cs_prog(struct brw_context *brw, > &prog_data, cp->program.nir, st_index, > &program_size, &error_str); > if (program == NULL) { > - cp->program.sh.data->LinkStatus = false; > + cp->program.sh.data->LinkStatus = linking_failure; > ralloc_strcat(&cp->program.sh.data->InfoLog, error_str); > _mesa_problem(NULL, "Failed to compile compute shader: %s\n", > error_str); > > diff --git a/src/mesa/drivers/dri/i965/brw_tcs.c > b/src/mesa/drivers/dri/i965/brw_tcs.c > index 858ecf9..64bfc40 100644 > --- a/src/mesa/drivers/dri/i965/brw_tcs.c > +++ b/src/mesa/drivers/dri/i965/brw_tcs.c > @@ -249,7 +249,7 @@ brw_codegen_tcs_prog(struct brw_context *brw, struct > brw_program *tcp, > &program_size, &error_str); > if (program == NULL) { > if (tep) { > - tep->program.sh.data->LinkStatus = false; > + tep->program.sh.data->LinkStatus = linking_failure; > ralloc_strcat(&tep->program.sh.data->InfoLog, error_str); > } > > diff --git a/src/mesa/drivers/dri/i965/brw_tes.c > b/src/mesa/drivers/dri/i965/brw_tes.c > index cb12b9c..3da5357 100644 > --- a/src/mesa/drivers/dri/i965/brw_tes.c > +++ b/src/mesa/drivers/dri/i965/brw_tes.c > @@ -124,7 +124,7 @@ brw_codegen_tes_prog(struct brw_context *brw, > brw_compile_tes(compiler, brw, mem_ctx, key, &input_vue_map, > &prog_data, > nir, &tep->program, st_index, &program_size, > &error_str); > if (program == NULL) { > - tep->program.sh.data->LinkStatus = false; > + tep->program.sh.data->LinkStatus = linking_failure; > ralloc_strcat(&tep->program.sh.data->InfoLog, error_str); > > _mesa_problem(NULL, "Failed to compile tessellation evaluation shader: > " > diff --git a/src/mesa/drivers/dri/i965/brw_vs.c > b/src/mesa/drivers/dri/i965/brw_vs.c > index a822580..3f11a76 100644 > --- a/src/mesa/drivers/dri/i965/brw_vs.c > +++ b/src/mesa/drivers/dri/i965/brw_vs.c > @@ -226,7 +226,7 @@ brw_codegen_vs_prog(struct brw_context *brw, > st_index, &program_size, &error_str); > if (program == NULL) { > if (!vp->program.is_arb_asm) { > - vp->program.sh.data->LinkStatus = false; > + vp->program.sh.data->LinkStatus = linking_failure; > ralloc_strcat(&vp->program.sh.data->InfoLog, error_str); > } > > diff --git a/src/mesa/drivers/dri/i965/brw_wm.c > b/src/mesa/drivers/dri/i965/brw_wm.c > index a774720..4a07c14 100644 > --- a/src/mesa/drivers/dri/i965/brw_wm.c > +++ b/src/mesa/drivers/dri/i965/brw_wm.c > @@ -194,7 +194,7 @@ brw_codegen_wm_prog(struct brw_context *brw, > > if (program == NULL) { > if (!fp->program.is_arb_asm) { > - fp->program.sh.data->LinkStatus = false; > + fp->program.sh.data->LinkStatus = linking_failure; > ralloc_strcat(&fp->program.sh.data->InfoLog, error_str); > } > > diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h > index a2280e2..a845a39 100644 > --- a/src/mesa/main/mtypes.h > +++ b/src/mesa/main/mtypes.h > @@ -2647,6 +2647,17 @@ struct gl_program_resource > }; > > /** > + * Link status enum. linking_skipped is used to indicate linking > + * was skipped due to the shader being loaded from the on-disk cache. > + */ > +enum gl_link_status > +{ > + linking_failure = 0, > + linking_success, > + linking_skipped > +}; > + > +/** > * A data structure to be shared by gl_shader_program and gl_program. > */ > struct gl_shader_program_data > @@ -2677,7 +2688,7 @@ struct gl_shader_program_data > struct gl_program_resource *ProgramResourceList; > unsigned NumProgramResourceList; > > - GLboolean LinkStatus; /**< GL_LINK_STATUS */ > + enum gl_link_status LinkStatus; /**< GL_LINK_STATUS */ > GLboolean Validated; > GLchar *InfoLog; > > diff --git a/src/mesa/main/program_resource.c > b/src/mesa/main/program_resource.c > index 4b5be6f..4eacdfb 100644 > --- a/src/mesa/main/program_resource.c > +++ b/src/mesa/main/program_resource.c > @@ -76,7 +76,7 @@ lookup_linked_program(GLuint program, const char *caller) > if (!prog) > return NULL; > > - if (prog->data->LinkStatus == GL_FALSE) { > + if (prog->data->LinkStatus == linking_failure) { > _mesa_error(ctx, GL_INVALID_OPERATION, "%s(program not linked)", > caller); > return NULL; > diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c > index 4667866..da450f2 100644 > --- a/src/mesa/main/shaderapi.c > +++ b/src/mesa/main/shaderapi.c > @@ -815,7 +815,7 @@ get_programiv(struct gl_context *ctx, GLuint program, > GLenum pname, > } > case GL_PROGRAM_SEPARABLE: > /* If the program has not been linked, return initial value 0. */ > - *params = (shProg->data->LinkStatus == GL_FALSE) ? 0 : > shProg->SeparateShader; > + *params = (shProg->data->LinkStatus == linking_failure) ? 0 : > shProg->SeparateShader; > return; > > /* ARB_tessellation_shader */ > @@ -1160,7 +1160,7 @@ _mesa_link_program(struct gl_context *ctx, struct > gl_shader_program *shProg) > ralloc_free(filename); > } > > - if (shProg->data->LinkStatus == GL_FALSE && > + if (shProg->data->LinkStatus == linking_failure && > (ctx->_Shader->Flags & GLSL_REPORT_ERRORS)) { > _mesa_debug(ctx, "Error linking program %u:\n%s\n", > shProg->Name, shProg->data->InfoLog); > @@ -2095,7 +2095,7 @@ _mesa_ProgramBinary(GLuint program, GLenum binaryFormat, > * Since any value of binaryFormat passed "is not one of those specified > as > * allowable for [this] command, an INVALID_ENUM error is generated." > */ > - shProg->data->LinkStatus = GL_FALSE; > + shProg->data->LinkStatus = linking_failure; > _mesa_error(ctx, GL_INVALID_ENUM, "glProgramBinary"); > } > > @@ -2270,7 +2270,7 @@ _mesa_CreateShaderProgramv(GLenum type, GLsizei count, > /* Possibly... */ > if (active-user-defined-varyings-in-linked-program) { > append-error-to-info-log; > - shProg->data->LinkStatus = GL_FALSE; > + shProg->data->LinkStatus = linking_failure; > } > #endif > } > diff --git a/src/mesa/main/uniforms.c b/src/mesa/main/uniforms.c > index a954055..8376a95 100644 > --- a/src/mesa/main/uniforms.c > +++ b/src/mesa/main/uniforms.c > @@ -941,7 +941,7 @@ _mesa_GetUniformLocation(GLuint programObj, const > GLcharARB *name) > * "If program has not been successfully linked, the error > * INVALID_OPERATION is generated." > */ > - if (shProg->data->LinkStatus == GL_FALSE) { > + if (shProg->data->LinkStatus == linking_failure) { > _mesa_error(ctx, GL_INVALID_OPERATION, > "glGetUniformLocation(program not linked)"); > return -1; > diff --git a/src/mesa/program/ir_to_mesa.cpp b/src/mesa/program/ir_to_mesa.cpp > index dc5f801..ce58fbb 100644 > --- a/src/mesa/program/ir_to_mesa.cpp > +++ b/src/mesa/program/ir_to_mesa.cpp > @@ -3096,7 +3096,7 @@ _mesa_glsl_link_shader(struct gl_context *ctx, struct > gl_shader_program *prog) > > _mesa_clear_shader_program_data(ctx, prog); > > - prog->data->LinkStatus = GL_TRUE; > + prog->data->LinkStatus = linking_success; > > for (i = 0; i < prog->NumShaders; i++) { > if (!prog->Shaders[i]->CompileStatus) { > @@ -3110,7 +3110,7 @@ _mesa_glsl_link_shader(struct gl_context *ctx, struct > gl_shader_program *prog) > > if (prog->data->LinkStatus) { > if (!ctx->Driver.LinkShader(ctx, prog)) { > - prog->data->LinkStatus = GL_FALSE; > + prog->data->LinkStatus = linking_failure; > } > } > > diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp > b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp > index 77a51d5..5a65f32 100644 > --- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp > +++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp > @@ -588,7 +588,7 @@ fail_link(struct gl_shader_program *prog, const char > *fmt, ...) > ralloc_vasprintf_append(&prog->data->InfoLog, fmt, args); > va_end(args); > > - prog->data->LinkStatus = GL_FALSE; > + prog->data->LinkStatus = linking_failure; > } > > static int > -- > 2.9.3 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev
Patches 1-4 are: Reviewed-by: Anuj Phogat <anuj.pho...@gmail.com> _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev