intel/compiler: Add id parameter to shader_perf_log callback
There are two problems with the current architecture. In OpenGL, the id is supposed to be a unique identifier for a particular log source. This is done so that applications can (theoretically) filter particular log messages. The debug callback infrastructure in Mesa assigns a uniqe value when a value of 0 is passed in. This causes the id to get set once to a unique value for each message. By passing a stack variable that is initialized to 0 on every call, every time the same message is logged, it will have a different id. This isn't great, but it's also not catastrophic. When threaded shader compiles are used, the id *pointer* is saved and dereferenced at a possibly much later time on a possibly different thread. This causes one thread to access the stack from a different thread... and that stack frame might not be valid any more. :( I have not observed any crashes related to this particular issue. Reviewed-by: Matt Turner <mattst88@gmail.com> Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12136>
This commit is contained in:
@@ -1069,10 +1069,10 @@ iris_debug_recompile(struct iris_screen *screen,
|
||||
const struct brw_compiler *c = screen->compiler;
|
||||
const struct shader_info *info = &ish->nir->info;
|
||||
|
||||
c->shader_perf_log(dbg, "Recompiling %s shader for program %s: %s\n",
|
||||
_mesa_shader_stage_to_string(info->stage),
|
||||
info->name ? info->name : "(no identifier)",
|
||||
info->label ? info->label : "");
|
||||
brw_shader_perf_log(c, dbg, "Recompiling %s shader for program %s: %s\n",
|
||||
_mesa_shader_stage_to_string(info->stage),
|
||||
info->name ? info->name : "(no identifier)",
|
||||
info->label ? info->label : "");
|
||||
|
||||
struct iris_compiled_shader *shader =
|
||||
list_first_entry(&ish->variants, struct iris_compiled_shader, link);
|
||||
|
Reference in New Issue
Block a user